From 79fb16437615df98b6c6298fe8d98643a0e7140b Mon Sep 17 00:00:00 2001 From: JohnBraham Date: Mon, 2 Nov 2026 16:28:55 +0000 Subject: [PATCH 1/2] Continue Power Advantage as basePower for 1.10.2 Keep released Cyano worlds usable under the new name, including machine contents, oil ownership and OreSpawn settings across restarts. Retain the legacy API and compatibility facades. Include the fluid-input repair, regression rig, qualification notes, project logo and updated installation guidance. Keep local agent files, generated worlds and test output out of the commit. Publication remains separately guarded. --- .github/workflows/ci.yml | 32 +- .github/workflows/release-on-tag.yml | 11 +- .gitignore | 8 + CHANGELOG.txt | 17 +- README.md | 48 +- build.gradle | 115 ++- docs/1.10/README.md | 1 + docs/1.10/base-migration.md | 42 ++ docs/1.10/base-qualification.md | 131 ++++ docs/1.10/possible-legacy-bugs.md | 13 + docs/1.10/recipe-progression-checks.md | 70 ++ docs/branding/README.md | 21 + docs/branding/basepower-logo.png | Bin 0 -> 1208470 bytes docs/curseforge-description.md | 55 ++ gradle.properties | 10 +- make-it.PS1 | 59 +- settings.gradle | 2 +- .../conduitnetwork/ConduitRegistry.java | 8 +- .../mcmoddev/poweradvantage/init/Fluids.java | 2 +- .../poweradvantage/math/Integer2D.java | 2 +- .../poweradvantage/api/ConduitBlock.java | 2 +- .../cyano/poweradvantage/api/ConduitType.java | 2 +- .../poweradvantage/api/PoweredEntity.java | 2 +- .../api/fluid/FluidConduitBlock.java | 2 +- .../api/fluid/FluidNetworkApi.java | 4 +- .../api/fluid/FluidPoweredEntity.java | 4 +- .../modsupport/LightWeightPowerRegistry.java | 2 +- .../api/modsupport/package-info.java | 4 +- .../modsupport/rf/TileEntityRFConverter.java | 2 +- .../techreborn/TileEntityTRConverter.java | 2 +- .../api/simple/BlockSimpleFluidConduit.java | 2 +- .../api/simple/BlockSimpleFluidMachine.java | 4 +- .../api/simple/BlockSimplePowerConduit.java | 2 +- .../api/simple/BlockSimplePowerMachine.java | 4 +- .../api/simple/SimpleMachineGUI.java | 4 +- .../simple/TileEntitySimpleFluidMachine.java | 9 +- .../simple/TileEntitySimplePowerMachine.java | 2 +- .../PowerAdvantage.java | 102 ++- .../RecipeMode.java | 2 +- .../blocks/BlockFrame.java | 2 +- .../blocks/BlockPowerSwitch.java | 4 +- .../blocks}/package-info.java | 4 +- .../compat/BaseMetalsCompat.java | 6 +- .../mc/basepower/compat/LegacyIdentity.java | 156 ++++ .../mc/basepower/compat/LegacyLevelData.java | 120 ++++ .../compat/LegacyWorldgenIdentity.java | 620 ++++++++++++++++ .../conduitnetwork/ConduitNetworkManager.java | 6 +- .../conduitnetwork/ConduitRegistry.java | 6 +- .../conduitnetwork/package-info.java | 2 +- .../graphics/package-info.java | 2 +- .../gui/FilteredFluidTankGUI.java | 4 +- .../gui/FluidTankGUI.java | 4 +- .../gui/FunctionalCreativeTab.java | 2 +- .../gui/StillGUI.java | 6 +- .../items => basepower/gui}/package-info.java | 4 +- .../init/Blocks.java | 18 +- .../moddev/mc/basepower/init/Entities.java | 41 ++ .../init/Fluids.java | 10 +- .../init/Fuels.java | 6 +- .../init/GUI.java | 10 +- .../init/ItemGroups.java | 6 +- .../init/Items.java | 6 +- .../init/Materials.java | 2 +- .../init/ModSupport.java | 13 +- .../init/OreSpawnWorldGen.java | 12 +- .../init/Recipes.java | 10 +- .../init/TreasureChests.java | 19 +- .../init/Villages.java | 2 +- .../init/WorldGen.java | 4 +- .../init/package-info.java | 2 +- .../items/RotationTool.java | 2 +- .../items}/package-info.java | 4 +- .../machines/conveyors/BlockConveyor.java | 4 +- .../conveyors/BlockConveyorFilter.java | 4 +- .../conveyors/TileEntityBlockFilter.java | 2 +- .../conveyors/TileEntityConveyor.java | 4 +- .../conveyors/TileEntityConveyorFilter.java | 4 +- .../conveyors/TileEntityFoodFilter.java | 2 +- .../conveyors/TileEntityFuelFilter.java | 2 +- .../conveyors/TileEntityInventoryFilter.java | 2 +- .../conveyors/TileEntityOreFilter.java | 2 +- .../conveyors/TileEntityOverflowFilter.java | 4 +- .../conveyors/TileEntityPlantFilter.java | 2 +- .../conveyors/TileEntitySmeltableFilter.java | 2 +- .../machines/conveyors/package-info.java | 4 +- .../creative/InfiniteEnergyBlock.java | 2 +- .../creative/InfiniteEnergyTileEntity.java | 2 +- .../fluidmachines/FluidDischargeBlock.java | 4 +- .../FluidDischargeTileEntity.java | 2 +- .../fluidmachines/FluidDrainBlock.java | 4 +- .../fluidmachines/FluidDrainTileEntity.java | 2 +- .../fluidmachines/FluidPipeBlock.java | 4 +- .../fluidmachines/MetalTankBlock.java | 2 +- .../fluidmachines/MetalTankTileEntity.java | 4 +- .../machines/fluidmachines/StillBlock.java | 2 +- .../fluidmachines/StillTileEntity.java | 8 +- .../fluidmachines/StorageTankBlock.java | 10 +- .../fluidmachines/StorageTankTileEntity.java | 4 +- .../modsupport/TerminalFluidPipeBlock.java | 6 +- .../TerminalFluidPipeTileEntity.java | 6 +- .../machines/fluidmachines/package-info.java | 12 + .../math/BlockPos4D.java | 2 +- .../math/Integer2D.java | 2 +- .../math/package-info.java | 2 +- .../package-info.java | 2 +- .../registry/FuelRegistry.java | 4 +- .../registry/MachineGUIRegistry.java | 2 +- .../registry/package-info.java | 2 +- .../still/recipe/DistillationRecipe.java | 2 +- .../recipe/DistillationRecipeRegistry.java | 4 +- .../still/recipe/ExplicitFluidReference.java | 2 +- .../registry/still/recipe/FluidReference.java | 2 +- .../recipe/RegistryNameFluidReference.java | 2 +- .../util/HashCodeHelper.java | 2 +- .../util/InventoryWrapper.java | 2 +- .../util/PowerHelper.java | 4 +- .../util/ReversibleHashMap.java | 2 +- .../util/ReversibleMap.java | 2 +- .../util/package-info.java | 2 +- .../mc/poweradvantage/init/Entities.java | 40 -- .../machines/fluidmachines/package-info.java | 12 - .../blockstates/converter_rf_electricity.json | 8 + .../blockstates/converter_rf_quantum.json | 8 + .../blockstates/converter_rf_steam.json | 8 + .../blockstates/converter_tr_electricity.json | 8 + .../blockstates/crude_oil.json | 0 .../blockstates/fluid_discharge.json | 8 + .../basepower/blockstates/fluid_drain.json | 8 + .../blockstates/fluid_metal_tank.json | 8 + .../basepower/blockstates/fluid_pipe.json | 70 ++ .../blockstates/fluid_pipe_terminal.json | 70 ++ .../blockstates/fluid_storage_tank.json | 8 + .../basepower/blockstates/fluid_switch.json | 6 + .../blockstates/infinite_electricity.json | 8 + .../blockstates/infinite_quantum.json | 8 + .../basepower/blockstates/infinite_steam.json | 8 + .../basepower/blockstates/item_conveyor.json | 10 + .../blockstates/item_filter_block.json | 8 + .../blockstates/item_filter_food.json | 8 + .../blockstates/item_filter_fuel.json | 8 + .../blockstates/item_filter_inventory.json | 8 + .../blockstates/item_filter_ore.json | 8 + .../blockstates/item_filter_overflow.json | 8 + .../blockstates/item_filter_plant.json | 8 + .../blockstates/item_filter_smelt.json | 8 + .../blockstates/refined_oil.json | 0 .../basepower/blockstates/steel_frame.json | 5 + .../assets/basepower/blockstates/still.json | 12 + .../assets/basepower/lang/de_DE.lang | 55 ++ .../assets/basepower/lang/en_AU.lang | 54 ++ .../assets/basepower/lang/en_CA.lang | 54 ++ .../assets/basepower/lang/en_EN.lang | 54 ++ .../assets/basepower/lang/en_GB.lang | 53 ++ .../assets/basepower/lang/en_PT.lang | 53 ++ .../assets/basepower/lang/en_US.lang | 52 ++ .../assets/basepower/lang/es_ES.lang | 56 ++ .../assets/basepower/lang/es_MX.lang | 56 ++ .../assets/basepower/lang/it_IT.lang | 55 ++ .../assets/basepower/lang/ja_JP.lang | 56 ++ .../assets/basepower/lang/ko_KR.lang | 56 ++ .../assets/basepower/lang/pt_BR.lang | 54 ++ .../assets/basepower/lang/zh_CN.lang | 57 ++ .../block/converter_rf_electricity.json | 8 +- .../models/block/converter_rf_quantum.json | 6 +- .../models/block/converter_rf_steam.json | 8 +- .../block/converter_tr_electricity.json | 6 + .../models/block/conveyor_base.json | 0 .../models/block/fluid_discharge.json | 8 + .../basepower/models/block/fluid_drain.json | 8 + .../models/block/fluid_metal_tank.json | 8 +- .../basepower/models/block/fluid_pipe_0.json | 8 + .../models/block/fluid_pipe_densuw.json | 8 + .../models/block/fluid_pipe_desuw.json | 8 + .../models/block/fluid_pipe_dnu.json | 8 + .../models/block/fluid_pipe_ensw.json | 8 + .../basepower/models/block/fluid_pipe_n.json | 8 + .../basepower/models/block/fluid_pipe_ns.json | 8 + .../models/block/fluid_pipe_nsuw.json | 8 + .../models/block/fluid_pipe_nsw.json | 8 + .../models/block/fluid_pipe_nuw.json | 8 + .../basepower/models/block/fluid_pipe_nw.json | 8 + .../models/block/fluid_storage_tank.json | 6 +- .../models/block/fluid_switch_off.json | 7 + .../models/block/fluid_switch_on.json | 7 + .../models/block/infinite_electricity.json | 2 +- .../models/block/infinite_quantum.json | 2 +- .../models/block/infinite_steam.json | 2 +- .../basepower/models/block/item_conveyor.json | 10 + .../models/block/item_filter_block.json | 10 + .../models/block/item_filter_food.json | 10 + .../models/block/item_filter_fuel.json | 10 + .../models/block/item_filter_inventory.json | 10 + .../models/block/item_filter_ore.json | 10 + .../models/block/item_filter_overflow.json | 10 + .../models/block/item_filter_plant.json | 10 + .../models/block/item_filter_smelt.json | 10 + .../models/block/pipe1_0.json | 0 .../models/block/pipe1_densuw.json | 0 .../models/block/pipe1_desuw.json | 0 .../models/block/pipe1_dnu.json | 0 .../models/block/pipe1_ensw.json | 0 .../models/block/pipe1_n.json | 0 .../models/block/pipe1_ns.json | 0 .../models/block/pipe1_nsuw.json | 0 .../models/block/pipe1_nsw.json | 0 .../models/block/pipe1_nuw.json | 0 .../models/block/pipe1_nw.json | 0 .../models/block/pipe2_0.json | 0 .../models/block/pipe2_densuw.json | 0 .../models/block/pipe2_desuw.json | 0 .../models/block/pipe2_dnu.json | 0 .../models/block/pipe2_ensw.json | 0 .../models/block/pipe2_n.json | 0 .../models/block/pipe2_ns.json | 0 .../models/block/pipe2_nsuw.json | 0 .../models/block/pipe2_nsw.json | 0 .../models/block/pipe2_nuw.json | 0 .../models/block/pipe2_nw.json | 0 .../models/block/pipe3_0.json | 0 .../models/block/pipe3_densuw.json | 0 .../models/block/pipe3_desuw.json | 0 .../models/block/pipe3_dnu.json | 0 .../models/block/pipe3_ensw.json | 0 .../models/block/pipe3_n.json | 0 .../models/block/pipe3_ns.json | 0 .../models/block/pipe3_nsuw.json | 0 .../models/block/pipe3_nsw.json | 0 .../models/block/pipe3_nuw.json | 0 .../models/block/pipe3_nw.json | 0 .../models/block/pipe4_0.json | 0 .../models/block/pipe4_densuw.json | 0 .../models/block/pipe4_desuw.json | 0 .../models/block/pipe4_dnu.json | 0 .../models/block/pipe4_ensw.json | 0 .../models/block/pipe4_n.json | 0 .../models/block/pipe4_ns.json | 0 .../models/block/pipe4_nsuw.json | 0 .../models/block/pipe4_nsw.json | 0 .../models/block/pipe4_nuw.json | 0 .../models/block/pipe4_nw.json | 0 .../models/block/steel_frame.json | 4 +- .../models/block/still_off.json | 4 +- .../models/block/still_on.json | 4 +- .../models/item/bioplastic_ingot.json | 6 + .../models/item/bucket_crude_oil.json | 6 + .../models/item/bucket_refined_oil.json | 6 + .../models/item/converter_rf_electricity.json | 3 + .../models/item/converter_rf_quantum.json | 3 + .../models/item/converter_rf_steam.json | 3 + .../models/item/converter_tr_electricity.json | 3 + .../models/item/fluid_discharge.json | 3 + .../basepower/models/item/fluid_drain.json | 3 + .../models/item/fluid_metal_tank.json | 3 + .../basepower/models/item/fluid_pipe.json | 4 + .../models/item/fluid_pipe_terminal.json | 4 + .../models/item/fluid_storage_tank.json | 4 + .../basepower/models/item/fluid_switch.json | 3 + .../models/item/infinite_electricity.json | 3 + .../models/item/infinite_quantum.json | 3 + .../basepower/models/item/infinite_steam.json | 3 + .../basepower/models/item/item_conveyor.json | 3 + .../models/item/item_filter_block.json | 3 + .../models/item/item_filter_food.json | 3 + .../models/item/item_filter_fuel.json | 3 + .../models/item/item_filter_inventory.json | 3 + .../models/item/item_filter_ore.json | 3 + .../models/item/item_filter_overflow.json | 3 + .../models/item/item_filter_plant.json | 3 + .../models/item/item_filter_smelt.json | 3 + .../models/item/rotator_tool.json | 2 +- .../models/item/sprocket.json | 2 +- .../models/item/starch.json | 2 +- .../basepower/models/item/steel_frame.json | 3 + .../assets/basepower/models/item/still.json | 3 + .../textures/blocks/crude_oil_flow.png | Bin .../textures/blocks/crude_oil_flow.png.mcmeta | 4 +- .../textures/blocks/crude_oil_still.png | Bin .../blocks/crude_oil_still.png.mcmeta | 10 +- .../textures/blocks/filter_bottom.png | Bin .../textures/blocks/filter_side_block.png | Bin .../textures/blocks/filter_side_food.png | Bin .../textures/blocks/filter_side_fuel.png | Bin .../textures/blocks/filter_side_inventory.png | Bin .../textures/blocks/filter_side_ore.png | Bin .../textures/blocks/filter_side_overflow.png | Bin .../textures/blocks/filter_side_plantable.png | Bin .../textures/blocks/filter_side_smeltable.png | Bin .../textures/blocks/fluid_discharge_face.png | Bin .../textures/blocks/fluid_discharge_side.png | Bin .../textures/blocks/fluid_drain_face.png | Bin .../textures/blocks/fluid_drain_side.png | Bin .../textures/blocks/fluid_metal_tank_side.png | Bin .../textures/blocks/fluid_metal_tank_top.png | Bin .../textures/blocks/fluid_pipe.png | Bin .../textures/blocks/fluid_switch_off.png | Bin .../textures/blocks/fluid_switch_on.png | Bin .../textures/blocks/item_conveyor_end.png | Bin .../textures/blocks/item_conveyor_side.png | Bin .../textures/blocks/item_conveyor_top.png | Bin .../textures/blocks/metal_panel.png | Bin .../textures/blocks/powercable.png | Bin .../textures/blocks/refined_oil_flow.png | Bin .../blocks/refined_oil_flow.png.mcmeta | 4 +- .../textures/blocks/refined_oil_still.png | Bin .../blocks/refined_oil_still.png.mcmeta | 10 +- .../textures/blocks/steel_frame.png | Bin .../textures/blocks/techreborn_converter.png | Bin .../gui/container/fluid_discharge_gui.png | Bin .../gui/container/fluid_drain_gui.png | Bin .../gui/container/fluid_metal_tank_gui.png | Bin .../gui/container/fluid_storage_tank_gui.png | Bin .../textures/gui/container/item_conveyor.png | Bin .../gui/container/item_conveyor_block.png | Bin .../gui/container/item_conveyor_food.png | Bin .../gui/container/item_conveyor_fuel.png | Bin .../gui/container/item_conveyor_inventory.png | Bin .../gui/container/item_conveyor_ore.png | Bin .../gui/container/item_conveyor_overflow.png | Bin .../gui/container/item_conveyor_plant.png | Bin .../gui/container/item_conveyor_smelt.png | Bin .../gui/container/machineGUI_template.png | Bin .../gui/container/player_inventory.png | Bin .../textures/gui/container/still_gui.png | Bin .../textures/items/bioplastic_ingot.png | Bin .../textures/items/bucket_crude_oil.png | Bin .../textures/items/bucket_refined_oil.png | Bin .../textures/items/rotator_tool.png | Bin .../textures/items/sprocket.png | Bin .../textures/items/starch.png | Bin .../textures/materials/brass.png | Bin .../textures/materials/copper.png | Bin .../textures/materials/invar.png | Bin .../textures/materials/iron.png | Bin .../textures/materials/metal_panel.png | Bin .../textures/materials/plastic.png | Bin .../textures/materials/steel.png | Bin .../textures/materials/steel_dark.png | Bin .../textures/materials/stone.png | Bin .../textures/materials/stone_brick.png | Bin .../textures/materials/wood.png | Bin .../blockstates/converter_rf_electricity.json | 8 - .../blockstates/converter_rf_quantum.json | 8 - .../blockstates/converter_rf_steam.json | 8 - .../blockstates/converter_tr_electricity.json | 8 - .../blockstates/fluid_discharge.json | 8 - .../blockstates/fluid_drain.json | 8 - .../blockstates/fluid_metal_tank.json | 8 - .../blockstates/fluid_pipe.json | 70 -- .../blockstates/fluid_pipe_terminal.json | 70 -- .../blockstates/fluid_storage_tank.json | 8 - .../blockstates/fluid_switch.json | 6 - .../blockstates/infinite_electricity.json | 8 - .../blockstates/infinite_quantum.json | 8 - .../blockstates/infinite_steam.json | 8 - .../blockstates/item_conveyor.json | 10 - .../blockstates/item_filter_block.json | 8 - .../blockstates/item_filter_food.json | 8 - .../blockstates/item_filter_fuel.json | 8 - .../blockstates/item_filter_inventory.json | 8 - .../blockstates/item_filter_ore.json | 8 - .../blockstates/item_filter_overflow.json | 8 - .../blockstates/item_filter_plant.json | 8 - .../blockstates/item_filter_smelt.json | 8 - .../blockstates/steel_frame.json | 5 - .../poweradvantage/blockstates/still.json | 12 - .../assets/poweradvantage/lang/de_DE.lang | 55 -- .../assets/poweradvantage/lang/en_AU.lang | 54 -- .../assets/poweradvantage/lang/en_CA.lang | 54 -- .../assets/poweradvantage/lang/en_EN.lang | 54 -- .../assets/poweradvantage/lang/en_GB.lang | 53 -- .../assets/poweradvantage/lang/en_PT.lang | 53 -- .../assets/poweradvantage/lang/en_US.lang | 52 -- .../assets/poweradvantage/lang/es_ES.lang | 56 -- .../assets/poweradvantage/lang/es_MX.lang | 56 -- .../assets/poweradvantage/lang/it_IT.lang | 55 -- .../assets/poweradvantage/lang/ja_JP.lang | 56 -- .../assets/poweradvantage/lang/ko_KR.lang | 56 -- .../assets/poweradvantage/lang/pt_BR.lang | 54 -- .../assets/poweradvantage/lang/zh_CN.lang | 57 -- .../block/converter_tr_electricity.json | 6 - .../models/block/fluid_discharge.json | 8 - .../models/block/fluid_drain.json | 8 - .../models/block/fluid_pipe_0.json | 8 - .../models/block/fluid_pipe_densuw.json | 8 - .../models/block/fluid_pipe_desuw.json | 8 - .../models/block/fluid_pipe_dnu.json | 8 - .../models/block/fluid_pipe_ensw.json | 8 - .../models/block/fluid_pipe_n.json | 8 - .../models/block/fluid_pipe_ns.json | 8 - .../models/block/fluid_pipe_nsuw.json | 8 - .../models/block/fluid_pipe_nsw.json | 8 - .../models/block/fluid_pipe_nuw.json | 8 - .../models/block/fluid_pipe_nw.json | 8 - .../models/block/fluid_switch_off.json | 7 - .../models/block/fluid_switch_on.json | 7 - .../models/block/item_conveyor.json | 10 - .../models/block/item_filter_block.json | 10 - .../models/block/item_filter_food.json | 10 - .../models/block/item_filter_fuel.json | 10 - .../models/block/item_filter_inventory.json | 10 - .../models/block/item_filter_ore.json | 10 - .../models/block/item_filter_overflow.json | 10 - .../models/block/item_filter_plant.json | 10 - .../models/block/item_filter_smelt.json | 10 - .../models/item/bioplastic_ingot.json | 6 - .../models/item/bucket_crude_oil.json | 6 - .../models/item/bucket_refined_oil.json | 6 - .../models/item/converter_rf_electricity.json | 3 - .../models/item/converter_rf_quantum.json | 3 - .../models/item/converter_rf_steam.json | 3 - .../models/item/converter_tr_electricity.json | 3 - .../models/item/fluid_discharge.json | 3 - .../models/item/fluid_drain.json | 3 - .../models/item/fluid_metal_tank.json | 3 - .../models/item/fluid_pipe.json | 4 - .../models/item/fluid_pipe_terminal.json | 4 - .../models/item/fluid_storage_tank.json | 4 - .../models/item/fluid_switch.json | 3 - .../models/item/infinite_electricity.json | 3 - .../models/item/infinite_quantum.json | 3 - .../models/item/infinite_steam.json | 3 - .../models/item/item_conveyor.json | 3 - .../models/item/item_filter_block.json | 3 - .../models/item/item_filter_food.json | 3 - .../models/item/item_filter_fuel.json | 3 - .../models/item/item_filter_inventory.json | 3 - .../models/item/item_filter_ore.json | 3 - .../models/item/item_filter_overflow.json | 3 - .../models/item/item_filter_plant.json | 3 - .../models/item/item_filter_smelt.json | 3 - .../models/item/steel_frame.json | 3 - .../poweradvantage/models/item/still.json | 3 - src/main/resources/mcmod.info | 6 +- .../UniversalBucketStartupTest.java | 2 +- .../basepower/compat/LegacyIdentityTest.java | 124 ++++ .../basepower/compat/LegacyLevelDataTest.java | 120 ++++ .../compat/LegacyWorldgenIdentityTest.java | 440 ++++++++++++ .../compat/OreDictionaryFallbackTest.java | 11 +- .../ConduitNetworkManagerTest.java | 4 +- .../LoadedConduitNetworkTest.java | 4 +- .../PowerTransferAccountingTest.java | 2 +- .../init/LegacyOreSpawnMigrationTest.java | 6 +- .../init/OreSpawnWorldGenTest.java | 8 +- .../conveyors/ConveyorTransferTest.java | 4 +- .../FluidCapabilityRoutingTest.java | 78 ++ .../StorageTankDescriptionTest.java | 40 ++ .../registry/MachineGuiTitleTest.java | 12 +- .../orespawn-legacy/poweradvantage.json | 2 +- test-rig/README.md | 20 +- test-rig/build.gradle | 9 +- .../client/ClientResourceProbe.java | 4 +- .../client/MachineGuiLayoutProbe.java | 14 +- .../resources/gui-label-expectations.json | 78 +- .../client-resources/resources/mcmod.info | 2 +- test-rig/client-resources/run.ps1 | 6 +- test-rig/migration/audit_survival110.py | 93 +++ test-rig/migration/native110.py | 8 +- test-rig/migration/native110_harvest.py | 16 +- .../migration/native110_machine_operations.py | 21 +- .../native110_rebrand_bucket_proof.py | 390 ++++++++++ .../migration/native110_rebrand_connected.py | 270 +++++++ .../migration/native110_rebrand_passive.py | 299 ++++++++ .../migration/native110_recipe_progression.py | 42 +- .../native110_survival_progression.py | 194 +++++ test-rig/migration/requirements.txt | 2 + test-rig/migration/steam_control_audit.py | 12 +- test-rig/migration/survival110_plan.py | 228 ++++++ test-rig/migration/test_audit_survival110.py | 62 ++ test-rig/migration/test_native110_harvest.py | 6 +- .../test_native110_rebrand_bucket_proof.py | 98 +++ .../test_native110_rebrand_connected.py | 104 +++ .../test_native110_rebrand_passive.py | 137 ++++ .../test_native110_recipe_progression.py | 60 +- .../migration/test_rebrand_target_contract.py | 69 ++ .../migration/test_steam_control_audit.py | 23 +- test-rig/migration/test_survival110_plan.py | 120 ++++ test-rig/profiles/dev-core-apocalyptic.json | 38 +- .../profiles/dev-core-tech-progression.json | 38 +- test-rig/profiles/dev-core.json | 38 +- test-rig/profiles/packaged-current.json | 53 +- test-rig/profiles/packaged-decoupled.json | 51 +- test-rig/profiles/packaged-legacy.json | 53 +- test-rig/profiles/packaged-mineralogy.json | 54 +- .../profiles/packaged-optional-power.json | 51 +- test-rig/profiles/worldgen-advantage.json | 77 +- test-rig/profiles/worldgen-legacy-import.json | 101 +-- test-rig/profiles/worldgen-mineralogy.json | 67 +- .../mc/advantageworks/AdvantageWorksMod.java | 4 + .../BatteryOperationalCases.java | 6 +- .../BucketOperationalCases.java | 4 +- .../CanonicalSteamEnchantments.java | 34 + .../advantageworks/DrillOperationalCases.java | 4 +- .../ElectricLifecycleOperationalCases.java | 2 +- .../ElectricOperationalCases.java | 25 +- .../LegacyPartialNetworkCases.java | 12 +- .../mc/advantageworks/MachineContext.java | 6 +- .../mc/advantageworks/NativeFluids.java | 4 +- .../mc/advantageworks/NativeHarvestProbe.java | 18 +- .../NativeNestedIdentityProbe.java | 206 ++++++ .../NativePassiveMigrationProbe.java | 136 ++++ .../NativeRecipeProgressionProbe.java | 8 +- .../NativeSurvivalProgressionProbe.java | 575 +++++++++++++++ .../advantageworks/PowerOperationalCases.java | 48 +- .../SteamNetworkLifecycleCases.java | 16 +- .../SteamOperationalActors.java | 18 +- .../advantageworks/SteamOperationalCases.java | 60 +- .../SteamOperationalSupplementalCases.java | 18 +- .../SteamReloadControlCases.java | 6 +- .../mc/advantageworks/WorksController.java | 9 +- .../works/works-1.10.2.json | 672 +++++++++--------- test-rig/src/main/resources/mcmod.info | 2 +- .../mc/advantageworks/runner/WorksRunner.java | 9 +- .../LegacyImportProfileContractTest.java | 40 ++ .../advantageworks/ProfileManifestTest.java | 14 +- .../RebrandCanonicalIdentityTest.java | 22 + .../advantageworks/SurvivalServerApiTest.java | 18 + .../advantageworks/WorksDefinitionTest.java | 96 +-- 517 files changed, 8200 insertions(+), 2776 deletions(-) create mode 100644 docs/1.10/base-migration.md create mode 100644 docs/1.10/base-qualification.md create mode 100644 docs/1.10/recipe-progression-checks.md create mode 100644 docs/branding/README.md create mode 100644 docs/branding/basepower-logo.png create mode 100644 docs/curseforge-description.md rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/PowerAdvantage.java (87%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/RecipeMode.java (96%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/blocks/BlockFrame.java (95%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/blocks/BlockPowerSwitch.java (97%) rename src/main/java/zone/moddev/mc/{poweradvantage/gui => basepower/blocks}/package-info.java (77%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/compat/BaseMetalsCompat.java (97%) create mode 100644 src/main/java/zone/moddev/mc/basepower/compat/LegacyIdentity.java create mode 100644 src/main/java/zone/moddev/mc/basepower/compat/LegacyLevelData.java create mode 100644 src/main/java/zone/moddev/mc/basepower/compat/LegacyWorldgenIdentity.java rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/conduitnetwork/ConduitNetworkManager.java (97%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/conduitnetwork/ConduitRegistry.java (98%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/conduitnetwork/package-info.java (87%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/graphics/package-info.java (70%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/gui/FilteredFluidTankGUI.java (95%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/gui/FluidTankGUI.java (97%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/gui/FunctionalCreativeTab.java (98%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/gui/StillGUI.java (90%) rename src/main/java/zone/moddev/mc/{poweradvantage/items => basepower/gui}/package-info.java (76%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/init/Blocks.java (93%) create mode 100644 src/main/java/zone/moddev/mc/basepower/init/Entities.java rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/init/Fluids.java (94%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/init/Fuels.java (94%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/init/GUI.java (93%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/init/ItemGroups.java (90%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/init/Items.java (94%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/init/Materials.java (77%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/init/ModSupport.java (85%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/init/OreSpawnWorldGen.java (92%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/init/Recipes.java (96%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/init/TreasureChests.java (88%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/init/Villages.java (97%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/init/WorldGen.java (85%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/init/package-info.java (77%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/items/RotationTool.java (97%) rename src/main/java/zone/moddev/mc/{poweradvantage/blocks => basepower/items}/package-info.java (76%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/conveyors/BlockConveyor.java (97%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/conveyors/BlockConveyorFilter.java (96%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/conveyors/TileEntityBlockFilter.java (83%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/conveyors/TileEntityConveyor.java (99%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/conveyors/TileEntityConveyorFilter.java (97%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/conveyors/TileEntityFoodFilter.java (83%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/conveyors/TileEntityFuelFilter.java (83%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/conveyors/TileEntityInventoryFilter.java (90%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/conveyors/TileEntityOreFilter.java (91%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/conveyors/TileEntityOverflowFilter.java (90%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/conveyors/TileEntityPlantFilter.java (91%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/conveyors/TileEntitySmeltableFilter.java (85%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/conveyors/package-info.java (75%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/creative/InfiniteEnergyBlock.java (96%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/creative/InfiniteEnergyTileEntity.java (97%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/fluidmachines/FluidDischargeBlock.java (96%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/fluidmachines/FluidDischargeTileEntity.java (99%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/fluidmachines/FluidDrainBlock.java (95%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/fluidmachines/FluidDrainTileEntity.java (99%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/fluidmachines/FluidPipeBlock.java (94%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/fluidmachines/MetalTankBlock.java (96%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/fluidmachines/MetalTankTileEntity.java (97%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/fluidmachines/StillBlock.java (98%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/fluidmachines/StillTileEntity.java (97%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/fluidmachines/StorageTankBlock.java (94%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/fluidmachines/StorageTankTileEntity.java (95%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/fluidmachines/modsupport/TerminalFluidPipeBlock.java (92%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/machines/fluidmachines/modsupport/TerminalFluidPipeTileEntity.java (96%) create mode 100644 src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/package-info.java rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/math/BlockPos4D.java (99%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/math/Integer2D.java (93%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/math/package-info.java (55%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/package-info.java (81%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/registry/FuelRegistry.java (98%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/registry/MachineGUIRegistry.java (98%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/registry/package-info.java (67%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/registry/still/recipe/DistillationRecipe.java (98%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/registry/still/recipe/DistillationRecipeRegistry.java (98%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/registry/still/recipe/ExplicitFluidReference.java (96%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/registry/still/recipe/FluidReference.java (97%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/registry/still/recipe/RegistryNameFluidReference.java (96%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/util/HashCodeHelper.java (96%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/util/InventoryWrapper.java (99%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/util/PowerHelper.java (94%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/util/ReversibleHashMap.java (97%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/util/ReversibleMap.java (81%) rename src/main/java/zone/moddev/mc/{poweradvantage => basepower}/util/package-info.java (55%) delete mode 100644 src/main/java/zone/moddev/mc/poweradvantage/init/Entities.java delete mode 100644 src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/package-info.java create mode 100644 src/main/resources/assets/basepower/blockstates/converter_rf_electricity.json create mode 100644 src/main/resources/assets/basepower/blockstates/converter_rf_quantum.json create mode 100644 src/main/resources/assets/basepower/blockstates/converter_rf_steam.json create mode 100644 src/main/resources/assets/basepower/blockstates/converter_tr_electricity.json rename src/main/resources/assets/{poweradvantage => basepower}/blockstates/crude_oil.json (100%) create mode 100644 src/main/resources/assets/basepower/blockstates/fluid_discharge.json create mode 100644 src/main/resources/assets/basepower/blockstates/fluid_drain.json create mode 100644 src/main/resources/assets/basepower/blockstates/fluid_metal_tank.json create mode 100644 src/main/resources/assets/basepower/blockstates/fluid_pipe.json create mode 100644 src/main/resources/assets/basepower/blockstates/fluid_pipe_terminal.json create mode 100644 src/main/resources/assets/basepower/blockstates/fluid_storage_tank.json create mode 100644 src/main/resources/assets/basepower/blockstates/fluid_switch.json create mode 100644 src/main/resources/assets/basepower/blockstates/infinite_electricity.json create mode 100644 src/main/resources/assets/basepower/blockstates/infinite_quantum.json create mode 100644 src/main/resources/assets/basepower/blockstates/infinite_steam.json create mode 100644 src/main/resources/assets/basepower/blockstates/item_conveyor.json create mode 100644 src/main/resources/assets/basepower/blockstates/item_filter_block.json create mode 100644 src/main/resources/assets/basepower/blockstates/item_filter_food.json create mode 100644 src/main/resources/assets/basepower/blockstates/item_filter_fuel.json create mode 100644 src/main/resources/assets/basepower/blockstates/item_filter_inventory.json create mode 100644 src/main/resources/assets/basepower/blockstates/item_filter_ore.json create mode 100644 src/main/resources/assets/basepower/blockstates/item_filter_overflow.json create mode 100644 src/main/resources/assets/basepower/blockstates/item_filter_plant.json create mode 100644 src/main/resources/assets/basepower/blockstates/item_filter_smelt.json rename src/main/resources/assets/{poweradvantage => basepower}/blockstates/refined_oil.json (100%) create mode 100644 src/main/resources/assets/basepower/blockstates/steel_frame.json create mode 100644 src/main/resources/assets/basepower/blockstates/still.json create mode 100644 src/main/resources/assets/basepower/lang/de_DE.lang create mode 100644 src/main/resources/assets/basepower/lang/en_AU.lang create mode 100644 src/main/resources/assets/basepower/lang/en_CA.lang create mode 100644 src/main/resources/assets/basepower/lang/en_EN.lang create mode 100644 src/main/resources/assets/basepower/lang/en_GB.lang create mode 100644 src/main/resources/assets/basepower/lang/en_PT.lang create mode 100644 src/main/resources/assets/basepower/lang/en_US.lang create mode 100644 src/main/resources/assets/basepower/lang/es_ES.lang create mode 100644 src/main/resources/assets/basepower/lang/es_MX.lang create mode 100644 src/main/resources/assets/basepower/lang/it_IT.lang create mode 100644 src/main/resources/assets/basepower/lang/ja_JP.lang create mode 100644 src/main/resources/assets/basepower/lang/ko_KR.lang create mode 100644 src/main/resources/assets/basepower/lang/pt_BR.lang create mode 100644 src/main/resources/assets/basepower/lang/zh_CN.lang rename src/main/resources/assets/{poweradvantage => basepower}/models/block/converter_rf_electricity.json (94%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/converter_rf_quantum.json (96%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/converter_rf_steam.json (95%) create mode 100644 src/main/resources/assets/basepower/models/block/converter_tr_electricity.json rename src/main/resources/assets/{poweradvantage => basepower}/models/block/conveyor_base.json (100%) create mode 100644 src/main/resources/assets/basepower/models/block/fluid_discharge.json create mode 100644 src/main/resources/assets/basepower/models/block/fluid_drain.json rename src/main/resources/assets/{poweradvantage => basepower}/models/block/fluid_metal_tank.json (94%) create mode 100644 src/main/resources/assets/basepower/models/block/fluid_pipe_0.json create mode 100644 src/main/resources/assets/basepower/models/block/fluid_pipe_densuw.json create mode 100644 src/main/resources/assets/basepower/models/block/fluid_pipe_desuw.json create mode 100644 src/main/resources/assets/basepower/models/block/fluid_pipe_dnu.json create mode 100644 src/main/resources/assets/basepower/models/block/fluid_pipe_ensw.json create mode 100644 src/main/resources/assets/basepower/models/block/fluid_pipe_n.json create mode 100644 src/main/resources/assets/basepower/models/block/fluid_pipe_ns.json create mode 100644 src/main/resources/assets/basepower/models/block/fluid_pipe_nsuw.json create mode 100644 src/main/resources/assets/basepower/models/block/fluid_pipe_nsw.json create mode 100644 src/main/resources/assets/basepower/models/block/fluid_pipe_nuw.json create mode 100644 src/main/resources/assets/basepower/models/block/fluid_pipe_nw.json rename src/main/resources/assets/{poweradvantage => basepower}/models/block/fluid_storage_tank.json (97%) create mode 100644 src/main/resources/assets/basepower/models/block/fluid_switch_off.json create mode 100644 src/main/resources/assets/basepower/models/block/fluid_switch_on.json rename src/main/resources/assets/{poweradvantage => basepower}/models/block/infinite_electricity.json (52%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/infinite_quantum.json (52%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/infinite_steam.json (52%) create mode 100644 src/main/resources/assets/basepower/models/block/item_conveyor.json create mode 100644 src/main/resources/assets/basepower/models/block/item_filter_block.json create mode 100644 src/main/resources/assets/basepower/models/block/item_filter_food.json create mode 100644 src/main/resources/assets/basepower/models/block/item_filter_fuel.json create mode 100644 src/main/resources/assets/basepower/models/block/item_filter_inventory.json create mode 100644 src/main/resources/assets/basepower/models/block/item_filter_ore.json create mode 100644 src/main/resources/assets/basepower/models/block/item_filter_overflow.json create mode 100644 src/main/resources/assets/basepower/models/block/item_filter_plant.json create mode 100644 src/main/resources/assets/basepower/models/block/item_filter_smelt.json rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe1_0.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe1_densuw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe1_desuw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe1_dnu.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe1_ensw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe1_n.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe1_ns.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe1_nsuw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe1_nsw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe1_nuw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe1_nw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe2_0.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe2_densuw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe2_desuw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe2_dnu.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe2_ensw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe2_n.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe2_ns.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe2_nsuw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe2_nsw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe2_nuw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe2_nw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe3_0.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe3_densuw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe3_desuw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe3_dnu.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe3_ensw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe3_n.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe3_ns.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe3_nsuw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe3_nsw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe3_nuw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe3_nw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe4_0.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe4_densuw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe4_desuw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe4_dnu.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe4_ensw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe4_n.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe4_ns.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe4_nsuw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe4_nsw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe4_nuw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/pipe4_nw.json (100%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/steel_frame.json (94%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/still_off.json (96%) rename src/main/resources/assets/{poweradvantage => basepower}/models/block/still_on.json (96%) create mode 100644 src/main/resources/assets/basepower/models/item/bioplastic_ingot.json create mode 100644 src/main/resources/assets/basepower/models/item/bucket_crude_oil.json create mode 100644 src/main/resources/assets/basepower/models/item/bucket_refined_oil.json create mode 100644 src/main/resources/assets/basepower/models/item/converter_rf_electricity.json create mode 100644 src/main/resources/assets/basepower/models/item/converter_rf_quantum.json create mode 100644 src/main/resources/assets/basepower/models/item/converter_rf_steam.json create mode 100644 src/main/resources/assets/basepower/models/item/converter_tr_electricity.json create mode 100644 src/main/resources/assets/basepower/models/item/fluid_discharge.json create mode 100644 src/main/resources/assets/basepower/models/item/fluid_drain.json create mode 100644 src/main/resources/assets/basepower/models/item/fluid_metal_tank.json create mode 100644 src/main/resources/assets/basepower/models/item/fluid_pipe.json create mode 100644 src/main/resources/assets/basepower/models/item/fluid_pipe_terminal.json create mode 100644 src/main/resources/assets/basepower/models/item/fluid_storage_tank.json create mode 100644 src/main/resources/assets/basepower/models/item/fluid_switch.json create mode 100644 src/main/resources/assets/basepower/models/item/infinite_electricity.json create mode 100644 src/main/resources/assets/basepower/models/item/infinite_quantum.json create mode 100644 src/main/resources/assets/basepower/models/item/infinite_steam.json create mode 100644 src/main/resources/assets/basepower/models/item/item_conveyor.json create mode 100644 src/main/resources/assets/basepower/models/item/item_filter_block.json create mode 100644 src/main/resources/assets/basepower/models/item/item_filter_food.json create mode 100644 src/main/resources/assets/basepower/models/item/item_filter_fuel.json create mode 100644 src/main/resources/assets/basepower/models/item/item_filter_inventory.json create mode 100644 src/main/resources/assets/basepower/models/item/item_filter_ore.json create mode 100644 src/main/resources/assets/basepower/models/item/item_filter_overflow.json create mode 100644 src/main/resources/assets/basepower/models/item/item_filter_plant.json create mode 100644 src/main/resources/assets/basepower/models/item/item_filter_smelt.json rename src/main/resources/assets/{poweradvantage => basepower}/models/item/rotator_tool.json (50%) rename src/main/resources/assets/{poweradvantage => basepower}/models/item/sprocket.json (53%) rename src/main/resources/assets/{poweradvantage => basepower}/models/item/starch.json (54%) create mode 100644 src/main/resources/assets/basepower/models/item/steel_frame.json create mode 100644 src/main/resources/assets/basepower/models/item/still.json rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/crude_oil_flow.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/crude_oil_flow.png.mcmeta (91%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/crude_oil_still.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/crude_oil_still.png.mcmeta (89%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/filter_bottom.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/filter_side_block.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/filter_side_food.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/filter_side_fuel.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/filter_side_inventory.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/filter_side_ore.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/filter_side_overflow.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/filter_side_plantable.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/filter_side_smeltable.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/fluid_discharge_face.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/fluid_discharge_side.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/fluid_drain_face.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/fluid_drain_side.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/fluid_metal_tank_side.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/fluid_metal_tank_top.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/fluid_pipe.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/fluid_switch_off.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/fluid_switch_on.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/item_conveyor_end.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/item_conveyor_side.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/item_conveyor_top.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/metal_panel.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/powercable.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/refined_oil_flow.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/refined_oil_flow.png.mcmeta (91%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/refined_oil_still.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/refined_oil_still.png.mcmeta (89%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/steel_frame.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/blocks/techreborn_converter.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/gui/container/fluid_discharge_gui.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/gui/container/fluid_drain_gui.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/gui/container/fluid_metal_tank_gui.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/gui/container/fluid_storage_tank_gui.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/gui/container/item_conveyor.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/gui/container/item_conveyor_block.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/gui/container/item_conveyor_food.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/gui/container/item_conveyor_fuel.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/gui/container/item_conveyor_inventory.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/gui/container/item_conveyor_ore.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/gui/container/item_conveyor_overflow.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/gui/container/item_conveyor_plant.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/gui/container/item_conveyor_smelt.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/gui/container/machineGUI_template.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/gui/container/player_inventory.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/gui/container/still_gui.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/items/bioplastic_ingot.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/items/bucket_crude_oil.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/items/bucket_refined_oil.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/items/rotator_tool.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/items/sprocket.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/items/starch.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/materials/brass.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/materials/copper.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/materials/invar.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/materials/iron.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/materials/metal_panel.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/materials/plastic.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/materials/steel.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/materials/steel_dark.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/materials/stone.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/materials/stone_brick.png (100%) rename src/main/resources/assets/{poweradvantage => basepower}/textures/materials/wood.png (100%) delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/converter_rf_electricity.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/converter_rf_quantum.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/converter_rf_steam.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/converter_tr_electricity.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/fluid_discharge.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/fluid_drain.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/fluid_metal_tank.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/fluid_pipe.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/fluid_pipe_terminal.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/fluid_storage_tank.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/fluid_switch.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/infinite_electricity.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/infinite_quantum.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/infinite_steam.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/item_conveyor.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/item_filter_block.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/item_filter_food.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/item_filter_fuel.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/item_filter_inventory.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/item_filter_ore.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/item_filter_overflow.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/item_filter_plant.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/item_filter_smelt.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/steel_frame.json delete mode 100644 src/main/resources/assets/poweradvantage/blockstates/still.json delete mode 100644 src/main/resources/assets/poweradvantage/lang/de_DE.lang delete mode 100644 src/main/resources/assets/poweradvantage/lang/en_AU.lang delete mode 100644 src/main/resources/assets/poweradvantage/lang/en_CA.lang delete mode 100644 src/main/resources/assets/poweradvantage/lang/en_EN.lang delete mode 100644 src/main/resources/assets/poweradvantage/lang/en_GB.lang delete mode 100644 src/main/resources/assets/poweradvantage/lang/en_PT.lang delete mode 100644 src/main/resources/assets/poweradvantage/lang/en_US.lang delete mode 100644 src/main/resources/assets/poweradvantage/lang/es_ES.lang delete mode 100644 src/main/resources/assets/poweradvantage/lang/es_MX.lang delete mode 100644 src/main/resources/assets/poweradvantage/lang/it_IT.lang delete mode 100644 src/main/resources/assets/poweradvantage/lang/ja_JP.lang delete mode 100644 src/main/resources/assets/poweradvantage/lang/ko_KR.lang delete mode 100644 src/main/resources/assets/poweradvantage/lang/pt_BR.lang delete mode 100644 src/main/resources/assets/poweradvantage/lang/zh_CN.lang delete mode 100644 src/main/resources/assets/poweradvantage/models/block/converter_tr_electricity.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/fluid_discharge.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/fluid_drain.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/fluid_pipe_0.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/fluid_pipe_densuw.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/fluid_pipe_desuw.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/fluid_pipe_dnu.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/fluid_pipe_ensw.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/fluid_pipe_n.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/fluid_pipe_ns.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/fluid_pipe_nsuw.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/fluid_pipe_nsw.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/fluid_pipe_nuw.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/fluid_pipe_nw.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/fluid_switch_off.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/fluid_switch_on.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/item_conveyor.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/item_filter_block.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/item_filter_food.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/item_filter_fuel.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/item_filter_inventory.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/item_filter_ore.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/item_filter_overflow.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/item_filter_plant.json delete mode 100644 src/main/resources/assets/poweradvantage/models/block/item_filter_smelt.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/bioplastic_ingot.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/bucket_crude_oil.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/bucket_refined_oil.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/converter_rf_electricity.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/converter_rf_quantum.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/converter_rf_steam.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/converter_tr_electricity.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/fluid_discharge.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/fluid_drain.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/fluid_metal_tank.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/fluid_pipe.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/fluid_pipe_terminal.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/fluid_storage_tank.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/fluid_switch.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/infinite_electricity.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/infinite_quantum.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/infinite_steam.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/item_conveyor.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/item_filter_block.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/item_filter_food.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/item_filter_fuel.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/item_filter_inventory.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/item_filter_ore.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/item_filter_overflow.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/item_filter_plant.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/item_filter_smelt.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/steel_frame.json delete mode 100644 src/main/resources/assets/poweradvantage/models/item/still.json rename src/test/java/zone/moddev/mc/{poweradvantage => basepower}/UniversalBucketStartupTest.java (97%) create mode 100644 src/test/java/zone/moddev/mc/basepower/compat/LegacyIdentityTest.java create mode 100644 src/test/java/zone/moddev/mc/basepower/compat/LegacyLevelDataTest.java create mode 100644 src/test/java/zone/moddev/mc/basepower/compat/LegacyWorldgenIdentityTest.java rename src/test/java/zone/moddev/mc/{poweradvantage => basepower}/compat/OreDictionaryFallbackTest.java (95%) rename src/test/java/zone/moddev/mc/{poweradvantage => basepower}/conduitnetwork/ConduitNetworkManagerTest.java (96%) rename src/test/java/zone/moddev/mc/{poweradvantage => basepower}/conduitnetwork/LoadedConduitNetworkTest.java (99%) rename src/test/java/zone/moddev/mc/{poweradvantage => basepower}/conduitnetwork/PowerTransferAccountingTest.java (97%) rename src/test/java/zone/moddev/mc/{poweradvantage => basepower}/init/LegacyOreSpawnMigrationTest.java (92%) rename src/test/java/zone/moddev/mc/{poweradvantage => basepower}/init/OreSpawnWorldGenTest.java (83%) rename src/test/java/zone/moddev/mc/{poweradvantage => basepower}/machines/conveyors/ConveyorTransferTest.java (95%) create mode 100644 src/test/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidCapabilityRoutingTest.java create mode 100644 src/test/java/zone/moddev/mc/basepower/machines/fluidmachines/StorageTankDescriptionTest.java rename src/test/java/zone/moddev/mc/{poweradvantage => basepower}/registry/MachineGuiTitleTest.java (82%) create mode 100644 test-rig/migration/audit_survival110.py create mode 100644 test-rig/migration/native110_rebrand_bucket_proof.py create mode 100644 test-rig/migration/native110_rebrand_connected.py create mode 100644 test-rig/migration/native110_rebrand_passive.py create mode 100644 test-rig/migration/native110_survival_progression.py create mode 100644 test-rig/migration/requirements.txt create mode 100644 test-rig/migration/survival110_plan.py create mode 100644 test-rig/migration/test_audit_survival110.py create mode 100644 test-rig/migration/test_native110_rebrand_bucket_proof.py create mode 100644 test-rig/migration/test_native110_rebrand_connected.py create mode 100644 test-rig/migration/test_native110_rebrand_passive.py create mode 100644 test-rig/migration/test_rebrand_target_contract.py create mode 100644 test-rig/migration/test_survival110_plan.py create mode 100644 test-rig/src/main/java/zone/moddev/mc/advantageworks/CanonicalSteamEnchantments.java create mode 100644 test-rig/src/main/java/zone/moddev/mc/advantageworks/NativeNestedIdentityProbe.java create mode 100644 test-rig/src/main/java/zone/moddev/mc/advantageworks/NativePassiveMigrationProbe.java create mode 100644 test-rig/src/main/java/zone/moddev/mc/advantageworks/NativeSurvivalProgressionProbe.java create mode 100644 test-rig/src/test/java/zone/moddev/mc/advantageworks/LegacyImportProfileContractTest.java create mode 100644 test-rig/src/test/java/zone/moddev/mc/advantageworks/RebrandCanonicalIdentityTest.java create mode 100644 test-rig/src/test/java/zone/moddev/mc/advantageworks/SurvivalServerApiTest.java diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 57bc1a7..16a7b78 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -name: Power Advantage 1.10 CI +name: basePower 1.10 CI on: push: @@ -13,7 +13,7 @@ permissions: contents: read concurrency: - group: poweradvantage-1.10-${{ github.workflow }}-${{ github.ref }} + group: basepower-1.10-${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: @@ -81,16 +81,32 @@ jobs: -PoreSpawnDeobfJar=${{ steps.orespawn.outputs.jar }} --no-daemon --stacktrace + - name: Check the isolated test harness + run: >- + ./gradlew -p test-rig clean check assemble + -PpowerAdvantageDeobfJar=${{ github.workspace }}/build/libs-dev/basePower-2.4.4.110021-deobf.jar + --no-daemon --stacktrace + + - name: Install Python for migration contract tests + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 + with: + python-version: '3.12.14' + + - name: Check migration and progression contracts + run: | + python -m pip install -r test-rig/migration/requirements.txt + python -m unittest discover -s test-rig/migration -p 'test_*.py' + - name: Upload audited release candidate uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: - name: PowerAdvantage-1.10.2-${{ github.sha }} + name: basePower-1.10.2-${{ github.sha }} if-no-files-found: error retention-days: 30 path: | - build/libs/PowerAdvantage-2.4.3.110021.jar - build/libs/PowerAdvantage-2.4.3.110021-sources.jar - build/libs/PowerAdvantage-2.4.3.110021-javadoc.jar + build/libs/basePower-2.4.4.110021.jar + build/libs/basePower-2.4.4.110021-sources.jar + build/libs/basePower-2.4.4.110021-javadoc.jar build/release/SHA256SUMS CHANGELOG.txt @@ -98,7 +114,7 @@ jobs: if: failure() uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: - name: PowerAdvantage-1.10.2-diagnostics-${{ github.sha }} + name: basePower-1.10.2-diagnostics-${{ github.sha }} if-no-files-found: ignore retention-days: 14 path: | @@ -106,3 +122,5 @@ jobs: build/reports/** build/*-run/logs/** build/problems/** + test-rig/build/gradle/test-results/** + test-rig/build/gradle/reports/** diff --git a/.github/workflows/release-on-tag.yml b/.github/workflows/release-on-tag.yml index af9cd1a..1063725 100644 --- a/.github/workflows/release-on-tag.yml +++ b/.github/workflows/release-on-tag.yml @@ -1,4 +1,4 @@ -name: Validate Power Advantage release tag +name: Validate basePower release tag on: push: @@ -10,13 +10,13 @@ permissions: contents: read concurrency: - group: poweradvantage-release-tag-${{ github.ref_name }} + group: basepower-release-tag-${{ github.ref_name }} cancel-in-progress: false jobs: validate-release-tag: name: Validate tag for manual release confirmation - if: github.repository == 'MinecraftModDevelopmentMods/PowerAdvantage' + if: github.repository == 'MinecraftModDevelopmentMods/basePower' runs-on: ubuntu-latest timeout-minutes: 10 @@ -37,6 +37,11 @@ jobs: minecraft_version="$(value minecraft_version)" loader_name="$(value loader_name)" loader_code="$(value loader_code)" + project_id="$(value curseforge_project_id)" + if [[ ! "$project_id" =~ ^[1-9][0-9]*$ || "$project_id" == '240982' ]]; then + echo "basePower publication requires a new assigned CurseForge project; refusing $project_id" >&2 + exit 1 + fi IFS=. read -r mc_major mc_minor mc_patch extra <<<"$minecraft_version" if [[ -n "${extra:-}" || -z "${mc_major:-}" || -z "${mc_minor:-}" ]]; then diff --git a/.gitignore b/.gitignore index 22b1d0e..1c4c442 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ /classes/ /logs/ /mcmodsrepo/ +/.ci-dependencies/ /test-rig/.cache/ /test-rig/.gradle/ /test-rig/build/ @@ -77,6 +78,13 @@ !/libs/RF-API.zip /secret.json + +# Packaged output; only the wrapper and the pinned RF API belong in source control. +*.jar +*.zip +!/gradle/wrapper/gradle-wrapper.jar +!/libs/RF-API.jar +!/libs/RF-API.zip # Nested local tooling and generated output AGENTS.md AGENT.md diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 4e4bce2..90f5229 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,4 +1,19 @@ -Unreleased +basePower 2.4.4.110021 + +- Continue Power Advantage as basePower, with the new basepower mod ID and namespace. +- Read released Cyano 1.10 block, item and tile identities without rebuilding machines. +- Import existing configuration and loot settings without overwriting base customisations. +- Translate saved Forge mod and oil-owner records before world loading, with byte-for-byte header backups. +- Keep OreSpawn choices during the identity change and stop on conflicting old and new settings. +- Keep fluid identities, processing rules and the legacy add-on API available. +- Restore translated portable-tank descriptions and retain the empty tank's description on its item. +- Check upgrades on copies of released Cyano worlds, including Sylvester, and retain machine contents across full restarts. +- Add finite-material recipe progression checks, including returned buckets, obtainable ingredient alternatives, villager trades and connected starter machines across full restarts. +- Route Forge fluid capability calls through each machine's fluid handler, so stills fill their input tank and tank restrictions are respected. +- Keep current OreSpawn global and saved-world profiles readable after a full restart, without resetting generation choices or accepting unknown future schemas. +- Add the basePower project logo and updated installation, migration and CurseForge descriptions. + +Earlier unreleased Advantage fixes, retained in basePower - Restore missing carbon-dust and steel-block recipe names when equivalent registered materials are available. Keep existing Ore Dictionary entries and recipe amounts unchanged. - Enable Forge's universal bucket during mod construction so oil buckets work without another mod enabling them first. diff --git a/README.md b/README.md index c608618..46bbb98 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,40 @@ -# PowerAdvantage +# basePower -Power Advantage provides shared power, fluid, and item transport systems for its Minecraft 1.10.2 expansion mods. +basePower continues DrCyano's Power Advantage as a Base Metals expansion for Minecraft 1.10.2. It provides conveyors, filters, fluid pipes, tanks, oil processing and the shared power systems used by baseSteam and baseElectric. The original Advantage repositories remain available as historical references. -The [test coverage backport notes](TEST-COVERAGE-BACKPORT.md#final-recorded-candidate) record the final machine, restart, control, partial-network, GUI, endurance, connected-world and reproducibility results alongside exact candidate hashes. The bounded legacy checks pass; the recipe progression graph is still partial. Earlier failures, modern follow-up findings and manual-testing limits are kept in the notes. This is not an all-machines or all-worlds guarantee. +The new mod ID is `basepower`, with implementation packages under `zone.moddev.mc.basepower`. This is a coordinated replacement, not an add-on to the old Power Advantage jar. Read the [world migration instructions](docs/1.10/base-migration.md) before replacing mods in an existing world. -The maintained implementation namespace is `zone.moddev.mc.poweradvantage`. The legacy +## Playing And Upgrading + +Use Java 8, Forge `12.18.3.2511` or a compatible later 1.10.2 build, Base Metals and MMD OreSpawn. The maintained dependency pack was tested with Base Metals `2.5.1.110021` and OreSpawn `4.1.2.110021`. + +Back up the complete world and configuration, then try the upgrade on a copy. Replace Power Advantage with basePower. Replace Steam and Electric Advantage with matching baseSteam and baseElectric builds if they are installed; do not mix the old and new families. Existing machines and their saved contents migrate without rebuilding. Check the copy again after closing Minecraft completely and restarting it. + +The supported historical source is the released Cyano 1.10.2 line. Old third-party integrations which check the original mod IDs may need an update. In particular, IAF's plumbing provider detection needs its separate basePower update; the preserved API alone cannot change that check. + +## Validation And Guides + +The [current candidate checks](docs/1.10/base-qualification.md) list the exact tested jars, results and remaining release gates. + +The [recipe progression checks](docs/1.10/recipe-progression-checks.md) explain how the test rig verifies finite crafting chains, returned buckets, trading and a connected starter plant across full restarts. + +The [historical test coverage notes](TEST-COVERAGE-BACKPORT.md#final-recorded-candidate) record the earlier Advantage candidates, including their exact hashes and remaining limits. They do not qualify the renamed jars. The base migration uses fresh disposable-world, operating, restart, GUI and endurance checks. The bounded recipe audit is separate from its still-partial crafting progression graph; neither is an all-machines or all-worlds guarantee. + +The maintained implementation namespace is `zone.moddev.mc.basepower`. The legacy `cyano.poweradvantage.api` package remains the supported add-on API. -External fluid producers can offer fluid to an adjacent Power Advantage pipe through +External fluid producers can offer fluid to an adjacent basePower pipe through `cyano.poweradvantage.api.fluid.FluidNetworkApi.offerFluid(...)`. The method reports the exact accepted amount without draining the caller's tank, allowing optional integrations to remain in control of their own fluid state. The [Advantage Works 1.10.2 Handbook](docs/1.10/README.md) documents every machine and component across Power, Steam, and Electric Advantage, including commissioning layouts and known investigation points. The [MMD material and fluid compatibility specification](docs/1.10/mmd-material-fluid-compatibility.md) defines OreSpawn ownership, legacy migration, crude-oil aliases, and Ore Dictionary names. -The source-controlled [Advantage Works test rig](test-rig/README.md) turns those commissioning cards into a disposable, walkable Forge server world with repeatable save/restart checkpoints. It is a separate test mod and is never packaged with PowerAdvantage. +The source-controlled [Advantage Works test rig](test-rig/README.md) turns those commissioning cards into a disposable, walkable Forge server world with repeatable save/restart checkpoints. It is a separate test mod and is never packaged with basePower. ## Building Minecraft 1.10.2 -The rig profiles use Steam and Electric Advantage `2.2.5.110021`, which retain unfinished -drill work after a restart. The machine repairs and their verification scope are -described in the test coverage notes above; this work does not bump the version. +The candidate versions are basePower `2.4.4.110021` and baseSteam/baseElectric `2.2.6.110021`. Local qualification includes 188 operating cases and 188 cold-state comparisons in each dependency pack, original Cyano fixtures, a disposable Sylvester upgrade, and two finite-supply Steam endurance runs. These are not a promise that every machine has run for 30 minutes or that every third-party integration has been tested. The `master-1.10.2` build uses ForgeGradle 7.0.34 and Gradle 9.6.1. Run Gradle with Java 17; Gradle resolves the Java 8 toolchain used for compilation. @@ -30,6 +44,16 @@ Build the pinned OreSpawn commit `5a50df1158e948c8db55814e819090b34c12d765` firs gradlew.bat clean check build verifyReleaseDependencies verifyReleaseArtifacts writeReleaseChecksums ``` +The separate harness and migration-contract checks are also run in CI. With Python 3.12 installed: + +```text +gradlew.bat -p test-rig clean check assemble +python -m pip install -r test-rig/migration/requirements.txt +python -m unittest discover -s test-rig/migration -p "test_*.py" +``` + +These contract tests do not start the full native server matrix. Its copied-world, operating and endurance results are recorded in the qualification notes. + Release jars are written to `build/libs`. The deobfuscated development jar for sibling mod compilation is written to `build/libs-dev` by `deobfJar` or `build`. For Eclipse, import the repository as an existing Gradle project and run: @@ -39,3 +63,9 @@ gradlew.bat cleanEclipse verifyEclipseProductionClasspath ``` Base Metals remains a required distribution dependency and is absent from the compile classpath. OreSpawn is a required runtime dependency whose pinned public API is used at compile time; it is never bundled. Optional RF and RebornCore integrations compile against pinned API inputs and are not bundled. + +## Publishing + +Source delivery and CurseForge publication are separate. The new CurseForge project ID is still `0`, which deliberately blocks uploads; the original Power Advantage project must not be reused. No tag or release is created by the ordinary CI build. + +The [project-page copy](docs/curseforge-description.md) and [logo](docs/branding/README.md) are kept with the source. The logo is not part of the mod jar, so it does not change the tested artifacts. diff --git a/build.gradle b/build.gradle index ce740eb..d53a87f 100644 --- a/build.gradle +++ b/build.gradle @@ -34,7 +34,7 @@ tasks.register('clientResourceProbeJar', Jar) { group = project.mod_group version = project.mod_version -base.archivesName = 'PowerAdvantage' +base.archivesName = 'basePower' def versionParts = project.mod_version.toString().tokenize('.') if (versionParts.size() != 4 || !versionParts.every { it ==~ /\d+/ }) { @@ -310,7 +310,7 @@ tasks.register('verifyReleaseConfiguration') { group = 'verification' description = 'Validates release identity, target metadata, and optional integration policy.' doLast { - if (project.mod_version != '2.4.3.110021') { + if (project.mod_version != '2.4.4.110021') { throw new GradleException("Unexpected PowerAdvantage release version: ${project.mod_version}") } if (project.minecraft_version != '1.10.2' @@ -325,10 +325,10 @@ tasks.register('verifyReleaseConfiguration') { || project.gradle_java_version != '17') { throw new GradleException('Unexpected release dispatcher target metadata') } - if (project.mod_id != 'poweradvantage' - || project.group.toString() != 'zone.moddev.mc.poweradvantage' - || base.archivesName.get() != 'PowerAdvantage' - || project.curseforge_project_id != '240982') { + if (project.mod_id != 'basepower' + || project.group.toString() != 'zone.moddev.mc.basepower' + || base.archivesName.get() != 'basePower' + || project.curseforge_project_id != '0') { throw new GradleException('Unexpected Forge, Maven, archive, or CurseForge identity') } if (project.cf_requirements != 'base-metals,mmd-orespawn' @@ -356,10 +356,10 @@ tasks.register('verifyReleaseConfiguration') { } } String mainSource = file( - 'src/main/java/zone/moddev/mc/poweradvantage/PowerAdvantage.java').getText('UTF-8') - if (!mainSource.contains('MODID = "poweradvantage"') - || !mainSource.contains('VERSION = "2.4.3.110021"') - || !mainSource.contains('required-after:orespawn@[4.0.6,5.0.0);after:basemetals')) { + 'src/main/java/zone/moddev/mc/basepower/PowerAdvantage.java').getText('UTF-8') + if (!mainSource.contains('MODID = "basepower"') + || !mainSource.contains('VERSION = "2.4.4.110021"') + || !mainSource.contains('required-before:orespawn@[4.0.6,5.0.0)')) { throw new GradleException('PowerAdvantage source identity or dependency policy changed') } if (!file('src/main/java/cyano/poweradvantage/api/PoweredEntity.java').isFile()) { @@ -367,12 +367,26 @@ tasks.register('verifyReleaseConfiguration') { } def metadata = new JsonSlurper().parse(file('src/main/resources/mcmod.info')) def mod = metadata instanceof List ? metadata.first() : metadata - if (mod.modid != 'poweradvantage') { + if (mod.modid != 'basepower') { throw new GradleException('Source mcmod.info does not use the stable poweradvantage mod id') } } } +def publicationTargetAllowed = { String projectId -> + (projectId ==~ /[1-9][0-9]*/) && projectId != '240982' +} + +tasks.register('verifyPublicationTarget') { + group = 'verification' + description = 'Refuses publication until the new basePower CurseForge project is assigned.' + doLast { + if (!publicationTargetAllowed(project.curseforge_project_id.toString())) { + throw new GradleException('Assign the new basePower CurseForge project ID before publishing; never reuse Power Advantage 240982.') + } + } +} + tasks.register('verifyReleaseDependencies') { group = 'verification' description = 'Resolves and audits Forge plus the exact optional compile APIs.' @@ -493,14 +507,14 @@ tasks.register('verifyReleaseArtifacts') { new ZipFile(mainJar).withCloseable { zip -> List names = zip.entries().collect { it.name } ['mcmod.info', 'pack.mcmeta', - 'zone/moddev/mc/poweradvantage/PowerAdvantage.class', + 'zone/moddev/mc/basepower/PowerAdvantage.class', 'cyano/poweradvantage/api/PoweredEntity.class', 'cyano/poweradvantage/api/fluid/FluidNetworkApi.class', 'com/mcmoddev/poweradvantage/math/Integer2D.class', 'com/mcmoddev/poweradvantage/registry/ITileEntityGUI.class', 'com/mcmoddev/poweradvantage/conduitnetwork/ConduitRegistry.class', 'com/mcmoddev/poweradvantage/init/Fluids.class', - 'assets/poweradvantage/lang/en_US.lang'].each { required -> + 'assets/basepower/lang/en_US.lang'].each { required -> if (!names.contains(required)) { throw new GradleException("Release jar is missing ${required}") } @@ -557,7 +571,7 @@ tasks.register('verifyReleaseArtifacts') { } new ZipFile(new File(libs, expectedReleaseFiles.get()[1])).withCloseable { sourceZip -> - if (sourceZip.getEntry('zone/moddev/mc/poweradvantage/PowerAdvantage.java') == null + if (sourceZip.getEntry('zone/moddev/mc/basepower/PowerAdvantage.java') == null || sourceZip.getEntry('cyano/poweradvantage/api/PoweredEntity.java') == null || sourceZip.getEntry('cyano/poweradvantage/api/fluid/FluidNetworkApi.java') == null) { throw new GradleException('Sources jar is missing implementation or legacy API sources') @@ -598,6 +612,7 @@ tasks.register('writeReleaseChecksums') { tasks.register('verifyPreparedReleaseArtifacts') { group = 'verification' description = 'Audits an immutable release bundle before Maven publication.' + dependsOn tasks.named('verifyReleaseConfiguration') doLast { if (!preparedReleaseDir.isPresent()) { throw new GradleException('preparedReleaseDir is required for prepared artifact publication') @@ -655,9 +670,9 @@ publishing { artifact(tasks.named('javadocJar')) } pom { - name = 'Power Advantage' + name = 'basePower' description = project.mod_description - url = 'https://github.com/MinecraftModDevelopmentMods/PowerAdvantage' + url = 'https://github.com/MinecraftModDevelopmentMods/basePower' licenses { license { name = 'GNU Lesser General Public License, Version 3' @@ -665,9 +680,9 @@ publishing { } } scm { - connection = 'scm:git:https://github.com/MinecraftModDevelopmentMods/PowerAdvantage.git' - developerConnection = 'scm:git:ssh://git@github.com/MinecraftModDevelopmentMods/PowerAdvantage.git' - url = 'https://github.com/MinecraftModDevelopmentMods/PowerAdvantage' + connection = 'scm:git:https://github.com/MinecraftModDevelopmentMods/basePower.git' + developerConnection = 'scm:git:ssh://git@github.com/MinecraftModDevelopmentMods/basePower.git' + url = 'https://github.com/MinecraftModDevelopmentMods/basePower' } } } @@ -700,12 +715,71 @@ tasks.register('validateMavenReleaseCredentials') { } tasks.withType(PublishToMavenRepository).configureEach { + dependsOn tasks.named('verifyPublicationTarget') + dependsOn tasks.named('verifyReleaseConfiguration') dependsOn tasks.named('validateMavenReleaseCredentials') dependsOn preparedReleaseDir.isPresent() ? tasks.named('verifyPreparedReleaseArtifacts') : tasks.named('verifyReleaseArtifacts') } +tasks.register('verifyPublicationGuards') { + group = 'verification' + description = 'Checks publication policy and task dependencies without executing publication.' + inputs.files('build.gradle', '.github/workflows/release-on-tag.yml') + doLast { + ['', '0', '240982', '-1', 'unassigned'].each { rejectedId -> + if (publicationTargetAllowed(rejectedId)) { + throw new GradleException("Publication target must reject '${rejectedId}'") + } + } + if (!publicationTargetAllowed('999999')) { + throw new GradleException('Publication target must accept an assigned non-legacy numeric ID') + } + if (publishing.publications.named('mavenJava', MavenPublication).get().pom.name.get() != 'basePower') { + throw new GradleException('Maven POM must use the basePower name') + } + def requireDependencies = { Task candidate, List required -> + Set actual = candidate.taskDependencies.getDependencies(candidate).collect { it.name } as Set + if (!actual.containsAll(required)) { + throw new GradleException("${candidate.name} is missing guards: ${required - actual}") + } + } + requireDependencies(tasks.named('verifyPreparedReleaseArtifacts').get(), ['verifyReleaseConfiguration']) + def publicationTasks = tasks.withType(PublishToMavenRepository).toList() + if (publicationTasks.isEmpty()) { + throw new GradleException('No external Maven publication task was inspected') + } + publicationTasks.each { publicationTask -> + requireDependencies(publicationTask, ['verifyPublicationTarget', 'verifyReleaseConfiguration', + 'validateMavenReleaseCredentials', preparedReleaseDir.isPresent() + ? 'verifyPreparedReleaseArtifacts' : 'verifyReleaseArtifacts']) + } + // Inspect dependencies only; never invoke publication or its rejecting guard actions. + def pending = [tasks.named('check').get()] + Set inspected = [] as Set + while (!pending.isEmpty()) { + Task candidate = pending.remove(pending.size() - 1) + if (!inspected.add(candidate)) continue + if (candidate instanceof PublishToMavenRepository || candidate.name == 'verifyPublicationTarget') { + throw new GradleException("Normal check must not execute ${candidate.name}") + } + pending.addAll(candidate.taskDependencies.getDependencies(candidate)) + } + String tagWorkflow = file('.github/workflows/release-on-tag.yml').readLines('UTF-8') + .collect { it.trim() }.join('\n') + String tagGuard = '''project_id="$(value curseforge_project_id)" +if [[ ! "$project_id" =~ ^[1-9][0-9]*$ || "$project_id" == '240982' ]]; then +echo "basePower publication requires a new assigned CurseForge project; refusing $project_id" >&2 +exit 1 +fi'''.replace('\r\n', '\n') + if (!tagWorkflow.contains(tagGuard) + || tagWorkflow.indexOf(tagGuard) > tagWorkflow.indexOf('successful_ci=')) { + throw new GradleException('Release tag must reject unassigned and legacy project IDs before checking CI') + } + } +} + idea { module { downloadSources = true @@ -837,7 +911,7 @@ tasks.register('verifyEclipseProductionClasspath') { || contents.contains('src/test') || contents.contains('bin/test')) { throw new GradleException("${name} does not isolate production code") } - if (!contents.contains('PROJECT_ATTR" value="PowerAdvantage"')) { + if (!contents.contains('PROJECT_ATTR" value="basePower"')) { throw new GradleException("${name} targets the wrong Eclipse project") } } @@ -846,6 +920,7 @@ tasks.register('verifyEclipseProductionClasspath') { tasks.named('check') { dependsOn tasks.named('verifyReleaseConfiguration') + dependsOn tasks.named('verifyPublicationGuards') } tasks.register('prepareGuiProbeLaunch') { diff --git a/docs/1.10/README.md b/docs/1.10/README.md index 35c398d..1efdc0e 100644 --- a/docs/1.10/README.md +++ b/docs/1.10/README.md @@ -18,6 +18,7 @@ This handbook serves two audiences at once. A player should be able to build and | [Inspector's Register of Possible Legacy Bugs](possible-legacy-bugs.md) | Intent-versus-code discrepancies waiting for gameplay investigation | | [MMD Material And Fluid Compatibility](mmd-material-fluid-compatibility.md) | OreSpawn ownership, migration authority, crude-oil aliases, and Ore Dictionary standards | | [Advantage Works test rig](../../test-rig/README.md) | Source-controlled generator and runner for the 20 commissioning cards | +| [Recipe Progression Checks](recipe-progression-checks.md) | Finite raw-material routes, real crafting/trading, returned containers and a restart-tested starter plant | ## Edition authority diff --git a/docs/1.10/base-migration.md b/docs/1.10/base-migration.md new file mode 100644 index 0000000..acbad08 --- /dev/null +++ b/docs/1.10/base-migration.md @@ -0,0 +1,42 @@ +# Moving From Advantage To basePower + +basePower, baseSteam and baseElectric continue the released Minecraft 1.10.2 Advantage mods under new names. The original repositories have not been renamed or removed. + +## Before Opening A World + +1. Close Minecraft and make a complete backup of the world and its configuration. +2. Remove the old Power Advantage, Steam Advantage and Electric Advantage jars. Install the matching base replacements together; do not mix old and new expansion jars. +3. Keep the required Base Metals and OreSpawn dependencies installed. Optional converter content still needs the corresponding power mod. +4. Test a copy first. Check inventories, fluids, batteries, machine directions and ongoing jobs, then close Minecraft completely and open the copy again. + +The supported historical source is the released Cyano Minecraft 1.10.2 line. Later base releases will migrate from the base identities. Unpublished intermediate Advantage ports are not a separate compatibility promise. + +## What Changes + +| Original mod ID | Replacement mod ID | Display name | +| --- | --- | --- | +| `poweradvantage` | `basepower` | basePower | +| `steamadvantage` | `basesteam` | baseSteam | +| `electricadvantage` | `baseelectric` | baseElectric | + +Existing block and item names retain their path, with the new namespace. Forge's registry remapping retains the saved numeric IDs and metadata rather than rebuilding machines. Tile entities accept the released IDs and write their new canonical IDs on save. An unknown owned component is a migration failure, not permission to replace it with air. + +Fluid registry names such as `crude_oil` and `refined_oil`, machine NBT keys, quantities and processing rules are not being renamed for branding. The legacy `cyano.poweradvantage.api` and supported compatibility facades remain available to integrations. + +The four musket enchantments also keep their original `steamadvantage` registry keys. Forge 1.10 cannot remap that registry in the same way as blocks and items. Keeping those keys and their registration order preserves enchantments on existing weapons; it does not mean the old Steam Advantage jar should remain installed. + +Forge also saves the owning mod for each default fluid in the world header. The migration converts the two Power oil owners before Forge reads that header and retains byte-for-byte copies of changed headers in `basepower-migration-backups`. These header copies are an audit trail, not a substitute for backing up the complete world. Restore the complete original backup to roll back an upgrade, not an old header alongside converted chunks. + +The saved mod list is also translated, but only for replacement mods actually installed. Other mods are not relabelled or hidden. Legacy read aliases must remain available in later base ports: unvisited chunks and offline players can still contain old tile or item IDs even after the world's header has been updated. + +If a new base configuration does not exist, the matching old `.cfg` is copied. The old file is kept, and an existing base configuration wins. Additional Loot Tables files are imported without overwriting base customisations; old copies are retained under inactive backup suffixes so both sets do not inject loot. + +OreSpawn configuration requires the same care: user choices must remain authoritative and an old rule must not be activated alongside a new default for the same deposit. Provider migration is covered separately from block remapping. + +## Validation Boundary + +The regression work uses disposable, hash-checked copies of original-release fixtures. It checks saved state, real machine operation, full process restarts and a measured 30-minute finite-resource endurance job. Generated worlds and reports are local evidence, never release contents. + +Automated checks do not replace visual and gameplay acceptance. A build or server-start pass alone is not proof that a world migrated without losing contents. Current candidate results and any remaining gaps must be reported against the exact tested jars before release. + +The new CurseForge projects have not been assigned numeric project IDs in this source yet. Publication must remain blocked until those IDs are supplied; the old Advantage upload targets must never be reused. diff --git a/docs/1.10/base-qualification.md b/docs/1.10/base-qualification.md new file mode 100644 index 0000000..9660c8f --- /dev/null +++ b/docs/1.10/base-qualification.md @@ -0,0 +1,131 @@ +# base 1.10.2 Candidate Checks + +This is the local basePower/baseSteam/baseElectric identity-migration candidate, not a published release. The old Advantage repositories remain intact. Tests use disposable copies; the original Sylvester world has not been converted. + +The results below record exact-artifact qualification before source delivery. Git commits, hosted checks and CurseForge publication are separate steps. Both expansions must pin the approved basePower source commit and development-jar checksum before their guarded release checks can pass. New CurseForge project IDs remain unassigned, so publication stays blocked. + +## Current OreSpawn Restart Repair + +The current basePower jar repairs the combined Sylvester restart failure recorded below. Global and saved-world OreSpawn profiles have separate supported schema limits: global schema 8 and world schema 7 are accepted without downgrading either file. Unknown future schemas still stop before any write. The earlier fluid-capability repair remains included; Steam and Electric release bytes are unchanged. + +| Current jar | SHA-256 | +| --- | --- | +| `basePower-2.4.4.110021.jar` | `164693E756A935A8C51085CF95AECCCAF3506390A6F0A3888E46765F29896F31` | +| `baseSteam-2.2.6.110021.jar` | `728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D` | +| `baseElectric-2.2.6.110021.jar` | `05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1` | + +This is a replacement of an unreleased candidate, not a new published version. The failed jar and its reports are retained under their original checksum. + +| Requalification check | Result and limit | +| --- | --- | +| Schema regressions | Three new preservation/restart tests fail before repair and pass afterwards. A fourth test requires unknown global/world schemas to fail before any write or backup. Current settings, disabled rules, provider records, retrogen controls and exact no-op bytes are retained. | +| Build | Power's full build, dependency, archive, Javadoc and Eclipse checks pass. Steam/Electric tests and assembly pass against the new development jar, with unchanged release bytes. Their exact-source pin checks are completed separately during source delivery. | +| Unit tests | Power: 87 tests, one Windows symlink-privilege skip; Steam: 135; Electric: 70; harness: 92; Python contracts: 189. No failures in the final runs. | +| Operating rigs | All 188 natural-tick cases and all 188 cold-state comparisons pass in both the older API pack and the maintained Base Metals `2.5.1.110021` / OreSpawn `4.1.2.110021` pack. | +| Independent controls | All nine partial-network cases and six first-tick/comparator cases pass independent raw-evidence checks in each dependency pack. | +| Endurance | Both dependency packs complete 36,000 natural ticks and a full process restart. Each finite Steam network/crusher reconciles 320 input stones as 287 products and 33 remaining inputs, with 116 ticks of partial work retained and zero lost progress. All 80,000 initial steam units reconcile as 53,986.5 productive use, 15,201.4375 idle loss and 10,812.0625 remaining. No refills or rebuilding. | +| Endurance limits | All 37 checkpoints and 287 batch receipts reconcile per pack; shortened and lost-progress records are rejected. The measured first-to-last tick intervals are 1,799.946 and 1,799.950 seconds. These are two Steam network/crusher jobs, not 30-minute tests of every machine. | +| Progression | All six mode/rubber configurations pass with maintained dependencies: 24 server processes and 10,576 finite-stock actions. Independent checks reconcile hammer wear, paid trades, real oil/plastic processing and cold inventory state. The unused lithium nugget remains unproven; complete progression is still labelled `PARTIAL`. | +| Original-release fixtures | The six connected setups, all 355 passive state witnesses and the separate synthetic serializers pass again on the rebuilt jar. This route deliberately retains the original Base Metals registry; its known bucket diagnostic has fresh, exact-candidate evidence. | +| Sylvester preservation | A disposable copy of the actual world passes first load and full restart with maintained Base Metals/OreSpawn. All 1,200 Advantage tile records retain exact typed state, including heat, fluids, energy and inventories. All 87,759 saved chunk states and 18,184 stack records match the old-mod control after the documented identity aliases; all 27,686 saved entity identities and four player records remain. | +| Sylvester operation | Two 2,048-tick operating intervals, separated by a full process restart, complete without construction or refills. Machine NBT and inventory contents match exactly across that restart. Nine boilers stay hot, four already-connected steam tanks retain pressure, and the full water/crude-oil tanks retain their contents. Two pre-existing empty steam tanks remain empty. | +| Sylvester limits | Its crusher has no input and the conveyors remain idle, so this world does not prove their throughput. Three real offline player files provide 104 successful native inventory/ender-stack reads; no authenticated player login was performed. Electric is not installed in this historical world. | +| Worldgen choices | Sylvester's global schema-8 and world schema-7 profiles remain byte-for-byte unchanged across all five repaired boots, including the operating restart. The saved world remains in `legacy` geology mode. | +| Third-party controls | The exact same 275 obsolete, inventory-free BuildingBricks dirt-helper records disappear on the old-mod and repaired cold boots. The replacement Sky's Grass Slabs blocks remain unchanged. Raw strict failures stay available; the explanation is restricted to the exact matching records and rejects unmatched positions or inventory-bearing records. | +| Packaging and reproducibility | Independent source exports in paths with spaces reproduce all four Power artifacts using a shared dependency cache, not a fresh empty cache. All 12 current release/development/source/Javadoc archives pass isolation checks. Only the worldgen identity helper and its nested classes differ in the main jar; three nested classes differ only in debug positions. Public API classes and assets are unchanged. | + +The original Sylvester installation and earlier failed evidence remain unchanged. Broader player login, client visuals and optional third-party integrations still need their own acceptance; these results do not turn a server-start pass into an all-worlds guarantee. The earlier GUI/world-generation profile runs below retain their older checksums. + +## Earlier Fluid-Capability Candidate + +This earlier basePower jar repaired `PA-110-002`: Forge capability calls use the machine's own fluid handler instead of bypassing it through the output tank. The native starter-plant test exposed this defect; its failed runs remain available. Steam and Electric release bytes were unchanged. + +| Earlier jar | SHA-256 | +| --- | --- | +| `basePower-2.4.4.110021.jar` | `9941893C0F536D97E3305212F3083C663F2F0BE30EF56B12AA5E6BEE3C2AE00C` | +| `baseSteam-2.2.6.110021.jar` | `728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D` | +| `baseElectric-2.2.6.110021.jar` | `05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1` | + +The version number is unchanged because this is still the same unreleased candidate. Use the checksum to distinguish it from the earlier jar below. + +| Follow-up check | Result and limit | +| --- | --- | +| Focused capability regressions | Four pass; three failed before repair. They cover input/output routing, side and fluid restrictions, simulation/capacity, and output-only draining. | +| Unit tests | Power: 83 tests, one Windows symlink-privilege skip; Steam: 135; Electric: 70; harness: 92; Python contracts: 189. No failures in the final runs. Profile JSON files are now declared Gradle test inputs. | +| Native operating suite | All 188 operating cases and all 188 strict cold-state comparisons pass against the rebuilt Power jar. Independent partial-network and Steam control audits also pass. | +| Survival progression | Normal, Tech Progression and Apocalyptic each pass with rubber equivalence both enabled and disabled: six configurations, 24 server processes and 10,592 finite-stock actions. | +| Real processing | Each configuration collects crude oil with a bucket, distils 1,000 mB into 500 mB refined oil, and produces five plastic ingots using only naturally generated hydroelectricity. A separately fuelled furnace receives boiler steam and exceeds coal-only temperature. | +| Trading and wear | The two Apocalyptic cases each execute 71 paid native trades. An independent audit reconciles merchant use counts and actual typed hammer-damage NBT with the recorded actions. | +| Restart | Crafting stock survives a process restart. The plant's exact block states and typed tile NBT survive a mid-cycle restart before ticking, and completed products and typed item state survive a final restart. No rebuilding or reseeding. | +| Coverage | All 88 registered item/block-item identities in the pinned pack have a route, a justified exclusion or a visible gap. The unused lithium nugget remains unproven; no new recipe was added for it. | +| Reproducibility and packaging | Two clean source exports in paths containing spaces reproduce all four Power artifacts. Twelve current release/development/source/Javadoc archives pass structural isolation checks. Only one main-jar class changed; resources and public API descriptors are identical. The dependency cache was shared. | +| Original connected world | Fresh rerun against these exact jars: all six released-Cyano setups preserve unticked state, then pass two 2,048-tick work intervals across a complete process restart. No machines are rebuilt or replaced. The Steam drill finishes its finite target before restart; the restarted check accounts for that exhausted target rather than inventing more work. | +| Original passive world | Fresh conversion and cold restart preserve all 355 block-state witnesses, 332 tiles, 272 inventory stacks (2,654 items) and four enchantment entries. The original fixture has no saved player or entity witnesses. | +| Additional serializers | Three synthetic native serializer cases pass again on each boot: detached player inventories, enchanted dropped items and nested item payloads. These remain separate from real player login, respawn and historical entity acceptance. | +| Migration evidence | Independent hash verification covers 904 retained raw migration/proof files. Original fixtures, test protocols and all three manual-test jars remain unchanged. The original Base Metals 2.4 registry is retained to isolate the Advantage rename; this is not also a Base Metals upgrade test. | +| Endurance rerun | The same manual-test jars complete 36,000 natural ticks in 1,799.948 measured seconds, followed by a full process restart and exact saved-state comparison. The finite Steam network supplies 35,991 paid work ticks with zero lost progress: 320 input stones reconcile as 287 finished products plus 33 remaining inputs, with 116 ticks of partial work retained. All 80,000 initial steam units reconcile as 53,986.5 productive use, 15,201.4375 idle loss and 10,812.0625 remaining. No refills or rebuilding. | +| Independent endurance audit | All 37 checkpoints and 287 batch receipts reconcile. Deliberately shortened, altered-steam and lost-progress records are rejected. This is one Steam network/crusher endurance job, not a 30-minute test of every machine. | + +The progression matrix uses the pinned Base Metals `2.5.0-beta4.238` and OreSpawn `4.0.8.110021` pack. It does not establish optional Additional Loot Tables integration, every third-party ingredient provider, resource-gathering balance, villager encounter/levelling, or later Minecraft recipe advancements. Read [Recipe Progression Checks](recipe-progression-checks.md) for the exact method and limits. + +The GUI images and optional-dependency/world-generation profiles below still belong to the earlier Power checksum. They are preserved evidence, not freshly rerun claims for this replacement jar. Original-release migration and the finite Steam endurance job have now been rerun as recorded above; the new 188-case suite separately checks restart preservation. Endurance timing runs from the first measured tick to the last: 36,000 observations span approximately 1,799.95 seconds at 20 ticks per second. + +The remaining source-commit, publication and manual-acceptance gates still apply. The new files have not been committed, pushed or published. + +## Earlier Sylvester Upgrade Failure + +A separate test replaced released Cyano Power/Steam and Base Metals 2.4 in a disposable copy of the actual Sylvester world. It used the earlier fluid-capability candidate checksums above, maintained Base Metals `2.5.1.110021`, OreSpawn `4.1.2.110021` and Forge `12.18.3.2511`. Electric was not installed because it is not part of this source world. The original save and configuration remain unchanged. + +The first load visits 2,346 existing chunks without ticking or rebuilding machines. All 1,200 Advantage tile records preserve their complete typed saved state, including all nine geothermal temperatures. An offline scan covers all 87,759 saved chunks. Compared with the old-mod control, block states match throughout, all 18,184 saved item-stack records match after the documented Advantage/Base Metals identity aliases, all 27,686 saved entity identities remain, and all four saved player records retain their state. Native item deserialization also preserves 104 inventory/ender-chest stacks from the three actual player files; this is not a player-login test. + +Both the control and upgrade perform the same existing BuildingBricks-to-Sky's Grass Slabs conversions and HarvestCraft item-name normalizations. Their raw source-comparison failures are retained. The nine tile differences between the two runs are the already-repaired geothermal reload defect: the old Steam jar resets heat, while baseSteam retains the original values. + +**That earlier candidate failed qualification.** Its full-process restart fails during basePower initialization: `LegacyWorldgenIdentity` rejects profile schemas above 6, but the selected maintained OreSpawn writes global schema 8 and world schema 7. No worldgen configuration was removed or downgraded to bypass the failure. The candidate jars and failed boot remain preserved. The replacement's fresh results are recorded at the top of this page. The old-mod operating control completed 2,048 natural ticks. + +## Earlier Identity-Migration Candidate + +| Jar | SHA-256 | +| --- | --- | +| `basePower-2.4.4.110021.jar` | `5F29C9D4A473F15881C782853256A8409ACFA17EC2A6C3AE2F3CD1DC64EF0405` | +| `baseSteam-2.2.6.110021.jar` | `728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D` | +| `baseElectric-2.2.6.110021.jar` | `05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1` | + +Earlier Advantage results do not qualify these jars. The native runs pin the production files, server code, fixtures and test protocol. Migration-specific harness repairs have their own inputs; the three production jars stay unchanged. + +## Completed Checks + +| Check | Result and limit | +| --- | --- | +| Unit tests | Power: 79 tests, one Windows symlink-privilege skip; Steam: 135; Electric: 70. No failures. | +| Test-harness contracts | 91 Java tests and 167 Python tests passed, including checks that reject incorrect migration evidence. | +| Native operating suite | All 188 cases passed, followed by 188 exact block/state/typed-NBT comparisons after a complete server restart. | +| Independent controls | All nine partial-network cases and six first-tick/comparator control cases passed independent raw-evidence audits. | +| Endurance | Steam-network job: 36,000 natural ticks, 1,799.958 measured seconds, 35,991 paid work ticks and zero lost-progress ticks. The saved result survived a full process restart. This is not a 30-minute endurance claim for every machine. | +| Harvest | 272 executed checks on each of two cold boots; version-inapplicable cases stay explicitly excluded. | +| Client GUIs | All 39 machine screens passed 351 caption cases and rejected 355 negative controls. This checks layout and text, not every world model or manual interaction. | +| Original connected world | Six released-Cyano setups preserved unticked state, then completed paid work on both converted and restarted boots without replacing machines. | +| Original passive world | All 355 block-state witnesses, 332 tile records, 272 inventory stacks (2,654 items) and four enchantment entries passed unticked conversion/restart comparisons. The source has no saved players or entities. | +| Additional serializers | Three synthetic native serializer cases passed on each boot: detached player inventories, enchanted dropped items and nested item payloads. They do not prove actual player login, respawn or historical entity spawning. | +| Packaged profile protocols | Current Base Metals, decoupled, Mineralogy oil processing, optional-power discovery, both fresh world-generation profiles and legacy OS1 import passed save/restart protocols. Station-specific `MANUAL_REQUIRED` results remain manual checks, not automatic passes. | +| Recipes | Bounded native matching, consumption and recipe-mode assertions passed. The conservative complete-progression graph remains `PARTIAL`; this is not a claim that every survival route has been proven. | +| Reproducibility | Six builds in two independent source directories containing spaces reproduced all 12 release, development, source and Javadoc jars. The Gradle dependency cache was shared, not freshly downloaded. | +| Archive isolation | Independent inspection found Java 8 classes, the expected mod IDs/assets and no embedded dependency, harness or agent content. This does not bypass the guarded release tasks. | +| Eclipse | Production classpath checks passed for all three projects. | + +The passive fixture retains its exact original test-observer jar. Its startup handlers freeze ticking; building is an explicit command which the migration runner forbids. This fixes an omitted fixture dependency without changing production migration, rebuilding the fixture or hiding a missing-mod error. + +## Preserved Failures + +Failed logs and receipts have not been replaced. They include the initial migration/header failures, stale harness expectations and the known original Base Metals 2.4 late-universal-bucket diagnostic. The latter is classified only with fresh dependency-only boots and bucket/restart behaviour checks bound to the exact candidate. Other startup errors remain failures. + +The drill's compatible new `Facing` field is compared against its original metadata, not ignored. Wrong facings, extra state changes and missing inventory remain failures. Retained musket enchantment keys are checked explicitly. + +## Before Release + +- Require an approved exact basePower source commit and development-jar checksum in both expansions, then run their complete guarded release suites. Local runtime results do not substitute for those source and dependency checks. +- Assign new CurseForge project IDs. The old Advantage projects must not be upload targets; `0` is an intentional publication block. +- Complete manual gameplay/visual acceptance on copies of real worlds. +- Update IAF's optional provider detection separately. Its current 1.10 plumbing bridge checks `poweradvantage`, so it does not offer fluid to `basepower` despite the retained typed API. Failed offers do not drain IAF's fluid. +- Keep the old and new Advantage jars out of the same instance. Read [the migration instructions](base-migration.md) and back up the complete world and configuration first. + +No claim is made here for unported third-party mods, original player login/respawn behaviour, every possible world, or unpublished intermediate Advantage identities. Legacy read aliases must remain available for unvisited chunks and offline players in later base ports. diff --git a/docs/1.10/possible-legacy-bugs.md b/docs/1.10/possible-legacy-bugs.md index 7fbf1bf..e1070e8 100644 --- a/docs/1.10/possible-legacy-bugs.md +++ b/docs/1.10/possible-legacy-bugs.md @@ -16,6 +16,7 @@ | `PA-110-001` | Refined-oil contact effect | None: original release behaviour confirmed | Closed; historical wording uncertainty | | `EA-110-002` | Growth controller soil capacity | None: whole-block refill hysteresis works coherently | Closed by runtime characterization | | `SA-110-003` | Steam crusher comparator output | Low: automation signal cannot distinguish input quantity | Repaired in `2.2.2.110021`; automated signal regression passes | +| `PA-110-002` | Forge fluid capability bypasses machine routing | High: raw oil enters the still's output tank and processing stops | Repaired in the local basePower `2.4.4.110021` candidate; focused and packaged-machine regressions pass | ## SA-110-001: steam pump reads a different tank key @@ -124,6 +125,18 @@ - **Required layout:** Steam crusher, comparator and dust/readout line, valid input item at four stack levels; [Card S-04](commissioning-and-fault-finding.md#card-s-04-blast-furnace-and-crusher). - **Versions to check:** Original and maintained 1.10.2, then 1.12.2. +## PA-110-002: Forge fluid capability bypasses machine routing + +- **Component:** The shared `TileEntitySimpleFluidMachine` capability bridge, particularly `basepower:still`. +- **Intended behaviour:** A Forge fluid capability must use the machine's fluid handler, including its input/output routing and side restrictions. A still accepts crude oil into its input reserve and exposes refined oil as output. +- **Implemented behaviour before repair:** `getCapability` returned the raw output `FluidTank`. This bypassed the still's overridden `fill` method and any overridden handler restrictions. +- **Runtime confirmation:** The new finite-material progression test collected a real crude-oil bucket and transferred its 1,000 mB through the native capability. The saved still held `Tank:{FluidName:"crude_oil",Amount:1000}` while `InputTank` remained empty; its coal was untouched and no distillation occurred. The full restart preserved this wrong routing rather than repairing it. +- **Focused controls:** Three of four initial capability tests failed: overridden input routing, side/fluid restrictions, and input capacity/properties. The output-only drain control already passed. +- **Repair:** Delegate the capability through Forge's `FluidHandlerWrapper(this, facing)`. No recipe, processing ratio, registry identity or NBT key changes. +- **Regression:** All four focused tests pass. The packaged starter plant now turns exactly 1,000 mB crude into 500 mB refined oil and five plastic ingots, with real fuel and hydroelectric generation. The rebuilt Power jar also passes all 188 operating cases and 188 cold-state comparisons. See [recipe progression checks](recipe-progression-checks.md) for the wider matrix and its limits. +- **Source:** `src/main/java/cyano/poweradvantage/api/simple/TileEntitySimpleFluidMachine.java`, method `getCapability`; `StillTileEntity.fill` and `getTankInfo` define the required routing. +- **Versions to check:** Maintained 1.10.2 confirmed and repaired locally. Other Minecraft lines and the original release's capability behaviour have not been requalified by this repair. + ## Reviewed differences not presently classified as bugs | Observation | Disposition | diff --git a/docs/1.10/recipe-progression-checks.md b/docs/1.10/recipe-progression-checks.md new file mode 100644 index 0000000..56378e1 --- /dev/null +++ b/docs/1.10/recipe-progression-checks.md @@ -0,0 +1,70 @@ +# Recipe Progression Checks + +The individual-recipe audit and the survival-progression test answer different questions. A recipe can match perfectly while requiring a component that a player cannot obtain. Neither test substitutes for the operating-machine suite or manual gameplay checks. + +## What The New Test Does + +The runner starts with a finite account of harvested resources: wood, crops, vanilla minerals and the registered copper, tin, zinc, lead, nickel, silver, lithium and sulfur ores. It does not start with ingots, tools, batteries, machine parts or stored energy. Resource gathering and mining time are outside this test. + +It plans a route through the registered recipes, then replays the chosen route inside a packaged Forge 1.10.2 server: + +- Crafting uses the native recipe manager and `SlotCrafting`. The selected ingredient alternatives must really match; a missing ingredient and a bedrock substitute must fail. +- Every craft debits its ingredients. Returned buckets are checked against a separate, explicit rule: the lead-acid and nickel-hydride recipes must each return one empty bucket. +- Vanilla smelting uses a previously crafted furnace and real coal. Bounded native furnace updates accelerate preparation; these are not wall-clock or natural-tick timing tests. Unused heat is discarded rather than credited as free energy. +- Crushing uses a crafted hammer on a real dropped item, collects its real products, and retains tool damage. A crusher-registry lookup alone cannot satisfy this step. +- Ore Dictionary alternatives are selected from obtainable materials, not simply the first registered entry. A proposed alternative is credited only after native replay succeeds. +- Apocalyptic routes may buy parts from the registered villager offers. Native merchant transactions debit currency and advance the offer's use count. No free restocking is assumed. Encountering villagers and levelling their careers are not simulated. +- Actual chest inventories are sampled in Apocalyptic mode, with nonempty vanilla chests as the positive control. Generated Additional Loot Tables configuration is not treated as proof of loot integration. + +The runner stops the server after half the crafting steps. On the next process it restores the saved stock, including tool state and merchant offer uses, and finishes preparation without reseeding resources. + +## The Starter Plant + +The plant is assembled from the items made by that progression. Its terrain and bounded natural fluid sources are declared fixtures, not crafted machine components. + +```text +1,000 mB crude oil -> coal-fired still -> 500 mB refined oil + | +water stream -> hydroelectric generator -> plastic refinery -> 5 plastic ingots + +water bucket + coal -> steam boiler -> steam pipe -> steam furnace + coal -> 1 iron ingot +``` + +Buckets collect actual source blocks. Container and machine fluid handlers transfer the resulting packets. The still consumes coal; the refinery receives only naturally generated hydroelectric power. No creative source, stored-energy injection, progress seeding or direct machine-update call is used in this plant. + +The steam furnace also consumes its own coal. Merely finishing a coal-fired smelt would not prove that the steam connection worked: the test additionally requires received steam and a temperature above 800, beyond this furnace's coal-only heating limit. + +After 120 natural ticks, the server saves and shuts down completely. Before any resumed machine tick, the next process compares exact block states and typed tile NBT with the checkpoint. It then finishes the work, checking fluid and product quantities. A final process restart checks the completed plant and retained products again. + +Typed item NBT is checked as well as item counts. Resetting hammer damage, losing a container tag or reseeding a merchant offer is not an acceptable restart result. + +## Matrix And Evidence + +Run Normal, Tech Progression and Apocalyptic with `plastic_equals_rubber` both enabled and disabled. Each combination has four independent server processes: initial preparation, continued preparation/plant start, mid-cycle restart, and final cold inspection. + +From `test-rig/migration`, using an exact pinned manifest and a new output directory: + +```powershell +& native110_survival_progression.py ` + --target-manifest ` + --java8 ` + --output +``` + +The manifest pins the server and every jar by SHA-256. The runner archives its protocol sources, records every stock debit and credit, checks them independently, and refuses to reuse an output directory. Do not replace a failed receipt with a later passing run. + +The coverage ledger includes every registered item, including block items. Creative sources, raw world fluids and hidden helper blocks have explicit exclusions. An unproven item remains visible as a gap; it is not silently removed to make the result green. + +## Known Limits + +The candidate's qualification results are recorded in [Current Candidate Checks](base-qualification.md). + +The final matrix passed all six configurations and the independent stock/tool/trading audit. The overall progression ledger deliberately retains a `PARTIAL` completeness label because the unused lithium nugget below has no demonstrated producer. + +The lithium nugget is registered in the original Electric Advantage release as well as this candidate, but the tested pack has no producer or recipe consumer for it. Examination of the original `2.2.0` jar finds its three lithium-nugget identifiers only in the item-registration class. That supports treating it as an unused legacy item, not a missing prerequisite for lithium batteries. It remains a reported progression gap; this test does not add a recipe or remove its identity. + +Additional Loot Tables is not installed in the pinned pack. The test can demonstrate the trading route without it, but cannot claim that optional loot integration works when absent. No conclusion about loot rarity follows from sampling a bounded set of chest seeds. + +Offers with missing currency or non-positive prices are listed as uncredited rather than used as free prerequisites. This is not a repair or qualification of third-party villager-trade balance. Optional RF/Reborn converter progression is outside this pack's recipe matrix. + +Minecraft 1.10.2 has neither the later recipe book nor ingredient-triggered recipe advancements. Those require separate tests in later ports. This test also does not cover player-facing crafting interaction, shift-crafting, villager availability, mining balance or every third-party ingredient provider. diff --git a/docs/branding/README.md b/docs/branding/README.md new file mode 100644 index 0000000..31b9390 --- /dev/null +++ b/docs/branding/README.md @@ -0,0 +1,21 @@ +# basePower Artwork + +![basePower logo](basepower-logo.png) + +`basepower-logo.png` is the square project logo for the basePower CurseForge listing. It is a 1,254 by 1,254 pixel PNG, meeting [CurseForge's current minimum](https://support.curseforge.com/support/solutions/articles/9000199552) of 400 by 400 pixels. Keep the square composition and its margins when exporting smaller copies. + +The copper and white pixel lettering, dark metal background and copper fasteners follow the [Base Metals project logo](https://www.curseforge.com/minecraft/mc-mods/base-metals). The new sprocket, pipework and BASE POWER wordmark distinguish the expansion from its parent. The reference artwork is [Base Metals' project avatar](https://media.forgecdn.net/avatars/thumbnails/49/301/256/256/636076086007754248.png); it is not the upload file. + +This artwork is outside the mod's resources. Adding it does not change the qualified jars or their checksums. Uploading the project logo and publishing a mod release are separate steps. + +## Creation + +Created on 2 November 2026 with the built-in image-generation tool, using the Base Metals avatar as a visual reference. No generated-image edits or resampling were applied to the saved file. + +Generation prompt: + +```text +Use case: logo-brand. Create ONE finished square 1024x1024 raster logo for the Minecraft mod basePower, marketed as a Base Metals expansion. Input image 1 is the actual Base Metals CurseForge logo: use it as the visual family reference, not as text to retain. Match its deliberately simple, low-resolution Minecraft-era pixel-art branding: charcoal pixel-metal background, gray steel plates, restrained warm copper rivets, blocky copper upper word and off-white lower word, dark pixel drop shadows. Exact text: two centered stacked lines, "BASE" on the first line and "POWER" on the second line. POWER must be large, highly readable and spelled correctly. Use crisp squared bitmap lettering with generous separation between letters; not smooth modern vector lettering. Replace the reference's generic ingot shapes with a compact, clearly recognizable steel sprocket and short squared industrial pipe/coupling shapes above and below the wordmark. Keep mechanical details secondary to the lettering and leave a clear quiet dark area behind both words. This is shared industrial infrastructure, not the Steam or Electric expansion: no lightning bolt, no flames, no steam clouds. Composition: full-bleed square dark gray backdrop, logo centered, generous safe margin of at least 8 percent on all sides, no clipping; recognizable and readable as a 64px project icon. Keep the whole drawing coherent on a chunky pixel grid with hard pixel edges and a small gray/copper/white palette. No photographic material, no gradients, no smooth 3D bevels, no tiny captions, no additional words, no watermark, no mockup or surrounding UI. An original sibling logo visibly related to the supplied Base Metals mark. +``` + +The generator returned the saved 1,254-pixel square rather than the requested 1,024-pixel square. The delivered file is retained unchanged. diff --git a/docs/branding/basepower-logo.png b/docs/branding/basepower-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e3f66fc0d7eb7740670b5b51ec156fa8e49d58ed GIT binary patch literal 1208470 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≷q81>C1nYHJ^U(_P-CZi`9 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 z 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 z z7UQVy47bNjK+r3c*_wqXMgRJHPIM0)jyR3S-vFaHhGIzV3O}MNdj7E~!)q8mdI(eK zeyZ7!l1S)`R)yO(Xbig9o~%|^ka6l00X59a2l{kqoZ={XqFUCQGxad9^-#B;k0P`y zkjJDWnHfl=Qp81v20>0#zo#f8H#|UZw+=Y2>1+&oT?=u}iilN0^9xO{S|2>F-#&VJz(%ZYh(zp(#pGk%S1TaKnDXf$s} zlX&9a4SGbCvlC+<)NdP}7K>QLb1I{F^1_|6$HQS_dx+q@uNt{eO|N;6f_ z{rVNX->z&!3^6lm6da3dB@G$ni2z9m@Ayfx37dMsuTiK#7rW|Wure8$PA6=vfTGBc z(62Mq5X-&xn#;$=uJYK-9Oi})t)N9Iw7B!|n-;BXHv8tj`-bm(>F8>To(@ks0pD1+z1vbb*J#U8oDn9v$LSMs~`zR$pMrO(MaF| z*2FzcS74JZ9g&WTU|-1&U{4I2ADd!O4Bp6<1Cotc-|J=I1V)>H;;cqs>}eTrB8lc; z;V&1lF}fFPHx) z$pKT~4+zDw1%*pR&dgClP_%f;?JDkj?IK~faNeJ1C=Eu$2WQ#-F#q?vZmitUb{wu$#k1qkEpRbF+=zEL0e812 zpuSR>+j!|reEhTD{>~jDi>X;$1A?hylKEGk`s}w6O@)^|59ql{rAI#N59cB%HaQWg z?a;}VnPM_NGjM5C@~0tRbql;`IXB`7j!qi_f(%R?q%QQ&)~{E^_r#VKGj(fh0LkxTSWU$Lho_ zkOQIqcQh>f?vy4}p!#%MqA~;E>Ooz@`=krHhSavhDjQgPs##gQu^@v+C_}e(VIMR& zb{ZQ5J{C&xTo>PhgOLf8U!z{6(?bF)DB}ce5RBmi;&%6qe;|@f@xTg|#DwX~heEz8 z6^l!!vxIXXM<~**`-5neLe$WYF!cqJeyUHamFIMUA%&a0g?&Zhf9=e*z2U86njMZ*6A@04Hv6F?0R*y?}}N>2oLIi}-vCP9``*Te0!v z`eYb2#F7HjCB0@upIV2jD=q2mh{by(-n_*LUi#jXN=TG^&@XUs+JA#k%JZFI*}#pl z{THM>^(Lmx1H_2a+zvsZdQ`QLw%?d*#^e&j>XP95vob9hh|HUJY#ECp8-fsw)yS~)*&OMHxJW1%KvuERB0NB{*6PoE zsFL?xzX-RFfhC8JKXwN5;|Z#GMr+~n#l)*ouDJbYUjEYS|M%0|Km6Et4lNz|`H#Lj zj4yCk!6F7r_6upvG{dFe9(+N zWgujD9Ff{gI}WV;dq~!r8I*h0A|2Z@>G&vbd=_&9>^EFYPzi$MySnYUAQ!E|2fV^Z zVmK^NOXOgDSX7FfKdI)={-_zC3)~%;q>syT1a-QajfRDs5m7YYKcGjJWd&7$JJHt+ zcD2F?yBw5}Ija&j;PkU7dwA{g^UP6DucY)W$GTg0Tku}|QX0KqmEv&91O~du1?i{A z8fvGv^n1$Cg73|{uD6Uc8KqhX-$KenUT!pC)%@SuO7kGCKV3Qp-zUuF2peAUZkM3fhNzHTPXxig^;|@5^GnP-H1u=0cO7 z6`w=scc@2&1_D4RYONhLMoGG+^p??)XoC$;fs@Kg$f-;6EM-uA ztStNk!B)i}?7`&H!0Wg?^wxIiWWzR5J$_1b>?^m^pnV z?+1Rvh5=U#_}wO!QBnqKwKAWt<(V6a8zaHeP#K=6rkGda=a&Bb&v*UyAOGmReJ3k- zuD{2#=g48wH-<}zM7#Q8<}a>hxBNfC-Y40P~i%)ICY&QZfKDgqQnfGav~6!{PR;E6IQOy)9e*{RjW@-djKa^Pm6EVCrjtQDN22;h|)Irb3l|P0eJ%f>FvchKsjg&(}w+8 zWn`}M&(k-zuE=q?EDsh_COXM4U>`;N!%y3 zN`?n5>(pPkG-R2hlhr$Ja>nI=k|0Qu~7V zRVwYkMUfT{7@fE$F1-jMb_1aobczhW&NJ|-CeqtcA$568z5)F^ji)GZcOM^}^AweA zg_D>~$^Fd~FO;PoXry2#XIzbAKV*rGryrSR#ojH!`r)V0{ITGryb9cZ4G=oVjvLCKhsY1B$sVC<|g1X}B z@t#Rs%L8vu)HuI~jT%R6wByvCIdxHUY(-9IWJ@FkVcclc(fhvmrn-0Ra2MQF^(l%W zq+}Jh=&%&MhMOSom`NQuB)AZ5r|1zb{Up3e?{;R_q?Y_}sVL1W+H^6)eDwqJatxux;TzAFbG{2MzF#Dem-C9M85!dcMC z&PHGj#TvcqxF8e@eDebFH(Bg*C4;HnE-dMGx8~g`o#bJXU0Gv!z)A4KDy_%J*~AyW{q1Yn?Oz)H(?9*EA8ksY@qlgWOr3m1 zIcLAJ``oiXTT(HkOvPmb8}i~a!9aCe4V(z79r&z^vjeDtk{?FB^pv?Vx^d|++7?0x zsR#BxEQ>q z70d19rh|0CU*txBLyvI}*unApiwxgb1Ic*{I{by_2vJ9|4KCis_)z9I;fgL-0x{7A zw?;xHwh&{`$EZ>8I0!7gMx6PwUK3K?7)7&%s~A+EvI2*r-Xd=2F2T^g&$E)cz8+&t zq`@fvTq$6nU@kp?M>Z9A>!7EGg@Y_jYxp$AWddYOZt*kF$&4+S4PZXrLuVk0z5zZ| z64xzRn4=zYv;wEe+09pJZ>;F!Z%7R~51sBLZ&vx3jYNYeSz-r3t+`kG4)=~v)&LWV zxNuYKt9&fR?EgPY?*raeec$_k&(ZNgie(}z!N`cxBl|cZLkY6NM7en5SP)l&kW!$< zZZdWh$;mIPOo6mC-g@Z~k|`nbD$BiwG!RN33T@Xh*`XR)S$nJ{s=XxjF3?uS-S4-C z-sI_Rq04+X*3owN_4R(wvuDrRL1Ihie7~R1`>&Y82lU%g_lrM$@Z_h1>z;?8tWQ4w zS05ukPm$6~1dni3Im>IcT5Dz_W+%vpGK(^aBPZaukeX8X)S{_1t1ZnDPqIVn5Bj zN&`h+iC@)_aiSdM{H1mUCY2eN4Ye>>WvlFPglptHsN9&Tw{6Fh#@FnWl&q+^=ujy$ zBzZuk-+H#q=PfXNV)y0~Yy_Ua`^kVRdLBdX`-~pU7WLaQQ@>a%N@<=MffSc*d(O+(%wMRDD$cy^lV7C4GjHd3IG8l z37Xhm1>}ct&uciErCvx`Kz{(0OfDVq6gDU)rRk-UN#t5vw4-BRelc+;EkE}h@usCb ze&L3CKVM&EDt6yOD5`}rX84j&BNl>dLUHIhLym6yqUg%8*;49ohO3CZMCYTj65g`u z($}UDCf{4a_m4d-%mqa)(EHs8dZeamHVSylHG9nhN=!1fxI9?er5}PIj*~l8V)Z=i zU4*i2XOnGs5TwGC~K+v3g}x)X1ABcMEDL zDc|GSH?S)*2AbVxxJTp4T!(?W7}<&!t;c4vGcq1RKC6eiRtU3~qE|@W`uD#P$wbO) zBC#luioB4OQJ~Ky$*x+}-Mc&f;@kiD2|bxi1(j`I>!A&VutH)^tL#2!N2@SBDS^3y zkMJoULISz4V|Y5F&B$;t$=wpmPQQ7Iuc8;3xwM@#^K=u3uqiiUlc+7@BxH^j5`3r& z@<{v*^QEhNKhpPSe0UL>L0#SjC$u8aw4waKYcOuFL z!)fde4@qE@0J|YI0(jKU$x~#%J`Y&0=8ByLr`EBHkQU&rJM zU)X|{2W@WLzC@iS)CTSJw(qX*|Kr7XfBpVTe~|s;k9J&ZnguuUl_$RN2S0m$_wHjy zw@53$NgN9o9YYPw7+*8I0bton*dlAPtHFgK%4rZb0C$VD zi={%y9#39Q_z{`9c_Ds>QP7Z3KXO${(H_90OT?{1ENj~O3es{!!7Xw-#zzoQRr^Ey;vOciS|2$UrCDe(P5qYF>ALe~#Qgsc0I(}3_RuS?LK|mGQo=qSeYG8ei zG8srUi8OhfF_=zpVH%dnCZw){UMVC=IUpzIc6lT!d~6YZZp49cRPxSfnuUHs^rGrC zJ*hhOQAia9tF>_TUN%*ygB^MZC|n-M%Rr?{2OEtYpuw#z?_2 zrQb#3!fk}~QU=Q3baay7qICrVPxPAo-apy@{ne-TZ;XJxSn}8+A$Cv1$BPhc@6HC6 zWTuKvxP8ly~UF0AaD^fr>DTL!HSj(G7N~XJj19x@o-^D*_@1>Pycx zlhPJW>@sxWT6#wW4-B7VXa$rJxLbuk-Z^BG?)})6fTz+SK5)yBgTw{(#k`zjWl}HD zH+S*&5j@E}vbu+&bHUE@1yNyiOykEu;R%wCvZUR(KNKdRYc<;&0mh}XS}#ntsf%dI z@_9G$iOFC5@P>U`r1VCI7aK-3z9V?j>i37C`BeN1pz0|K}vZxxfu_oj1 zv6DOXBNsnR!ao-Ji{H0N)SkDCrw&TKE(YnwV07UmtQxPL$Hp1^8rLVI7s~Jp#JL98 zZs)6q{xFY;hCNv5HGJ^I$JXE>-`$UdoD)DMlaj=qjjd;KU!u~UPlSOqQy$BgC;N%$ z$)b{-ogJ(7i=hka7~>4YMtFLcdV~p!M=Z@!uANzU*+xMKA_|s%$s+SWR_lH-pBENs zC&%vufFsa`?zC#DL>luFqCswYZ#M*aceqHasziLaH_xA32E?SaZO&4y07cwqi4;KT zL*dJ?iwq2{W_`^F0sS# zf^ww7ns16==(zMbg81%7h-+2Z{a#I8SSDdch0iqCBw!7ekwBWZsw>>%W#!< zH_Ij92rfJRB)+`d>dxlC=Jfer2ay*mJcRn!6H8x203lrq08XG7@~pL8l567mK@uz*wNW5JuZIPyn6D z7;HG4Cg?B?vn91!SmXC`yITL>f=K$xJ(zz?|# z?7o#84ERnd(g$;}A?jdAyZCPam#2AHE>LM0%6kk}3=Pi*&QYvxbZ~H><2BeP&LpeS zZbZMw*@Gn0DMTi--;Sz$+LB&e7v^1$I|^~W9GO*di9=E775vJS0r3kKnX&0h>(;8V zmQI6BSW>UO`AA8F4Ta9zBwOf2L<9FGHU;>e-ZN0!VxFnOgxHj4b#Fe)EqWAQ5-n|0 z!qhLvba;BD$f%~MOtnaFcu1%y*vGo31h0jy;kx3|C!B(CJ>)78&EYyiXnz72O_0f< z8F|nt#V+B$j?2(gc{&7*8p}u+?;A8Mi^jA-%U=1d=YHU1ql z+>NYKrGZ_ET^~f;zhEdZ8+*z~Cs1=uBBVfR%J<5BNdywNw96YM-&z?FLT6+Ylmugk z(f;0!b>Hx!vLuR3MTx}!^XzB?U#6XI!5{`_dhWfeM>3WuC+3sFC~6@bo#Ijwiv`7y zCD?pHh?uERPQdFUp_jmVBQHkum>RGH@MT{1B{_#By^Lk$3ASvGdTzdD+7-JZa3U@F z76E?|SDGggT(n3`3J}&2!i(`?`(@DvRxMM)H>}UOy!)70*LaTEe#)pN_V+ZdI3gcU z^9*At4S^q!E)d7t7xFvvqARWz=U?;6_7{~|Z}nqRWrEU`jM%S>Mj}#P03_W@|$0G&?afXOV{SMM$1~9E|cVW=>1D@n?&{_FW#5UiWtJ)L4|VK-F4 zvp}@`$tNy;1XeIX#A`EDmLnW;0j~(0SL6|YWL~H~1R47X%HJQvb*tDF?((86X3NFS z)5MZxZuE7N$wUVa7%2wTb3a+Cg7^&?W+bwuRLb!d@zsunvnZmdfNr%CPw$_d9OKt$ zkz#{9LTjNI6|28l*t4lzn~m`ddeeZR;=(d#uuRfHb55OXADWqkgcPQ1+K0^*GO6CCI{oCl&NAmP+Pg|dR!LKn_6gTUfkd8oqH`^L0ElF*!NO7sXkj$*!9tAiTx#N2Nhjfx51iDiq)zzopyqmiph@4unS}cjTdo zTuy7)N3Ju??@T8LOIKVQEd=DLm5&L@UZ7URN_sv%vhK3WAAGC+?17ag|D*Es<*E6h zUW!2v>_Zv+XBEBTl9>kR-yF#RP>{!f0#-?-oQZLKW31>@`tb*oo4Nz*Atx9!33QJu zrTe@S?`=p74_r?XWDhhD7jOuyo8Nv<8}a*RhUr@o^-@Pt3UcKi!Kh=B`(iH0*;=onH-e$Pem@k#L??n^=~Sb{e_;j~aI783R!EWahFQOjOfHbrbIR}nfI_X0gkqb(U}Qq<_vj(BoJ^*f&$9x> zGsSZ!7KR94ROVQ(A1B(96y|wm>l4(F>3pnqIEt~X0gnOk2Kk%-sIyuPI%m7JAuuU# zM2`3nVIZl$Elu))1yC~}(c~;c=>vdE%^O=+pb=Wl;{^qR-~)DML9tmgxi=8rvkB!{ zj!FR2hy^5uCJ@arOD?F~t}RZ^v@@xxrT&>gfg*$rtsQiG+cbH|M6>jhP*R0B&sq}W zm*kJUxHAY~iEl&ELhu@@7CdTeR~akCw5II^-}|KDB=24Rdfa5AYEM7fVB;{slL!injM57EW$ zi^QidvfLBW%1L=Kvs(-S1X()u3-!+XWXk^vG)xqWIEG5Vm+|lNOrf?VHg{uWW73IH zq=h8hP3piExIg(RK@}n+ky53U+|`Rzhn19=c^r)_NZ0@cN)lCqlgDMKuc`Ii*W1$T!?JW<+yXw#WVCPF6{CcNH<4kqfqIA$CKp!88z@^5z#hxz{?n(DJ zyZ_j38>}nurr5!SELIzW_$HQ=3*R#%g*`WUd22KLO-nQ|L!L5ERTa;W!1zKchyq$$ z6-;sbCxt>BP8|dqGN+_$0@8z)>V+}Oz@&<@x;&`+!bIAUn}Un?=;dF92oemuFa{(_Rkich&6@x zu2Q9^F=X$qZa;Z8L9vK;`NB=KV;^z(^w6+nnUIn1V$!>V*B%_%W7L2uVGl|r&ft;J&Q?45cZuU z3u8>VaFWnSqFDJY=*M0n5qEIlM!pZAE*PnfkgT#~3Mb+v0)V-+H!6WPwm@&zvKfkd z{J}_HDBDW}Nuu*ZZzOnK!TQPU?Zp?Q(jJ@qjTJrC6_|Oa-2S|2S7V^gx1jH^B3cyh=WR%-4D5g5n@MH!*rE zPJjKKSKfK$$=Z}=cLUl5QKCcl64VO65J}&yB`S4L0%Gbjd;)5rp9v4aJEj>XF+hgF zfg^a)iyU{he526%1XK7m7<p&}{v0IVF!vVrZ3E;9XAck1x$fHOB-SA~X>d-a;zE348mRcP+h%hHik4So$ zOY+B$@B~jVC-tM-paTM<>FL+3F1a}N)H0hCEM~xM=NQVCa zS)*uSN+3-hy5)MM-UF4_1pgVhV{d!p8VfFqpevm*EAZwgdXt@<5nnp^$iBDq+L*L7 z-EYuXli)fyB$OuuRkJeo%TLn_{I)X&3S?(XXaTxCLZ$Hfj`)QUCT}j^xe5U{K^-r^ zpsLtKB@+SEZ4TLa8xv$Io&9+jD#ks7aynmN8@ zJ7dxKqqzVEMX8;TMD;C1mK|Z?JbvsH^Q+`{utAif{Bm7P=#0S3);kv9a(U^yMd!MW zb3W?0{10!c&(1HP^W_Cd#YLh@+MW!r&~%DMJ=la5@9qZM(m3$U_jzVG9%yJj!#e#cTt-@5&c4Ljm6f7!_iO^!RyZg5uxZKAWKt2@2P9q!m+9Ik6VxyL##fQy zvJ$gBs=>+#Ki9hDj6=trYR^PV<Lhb&GK|kYer|Y1=?=7D z9q#v{O`WtHj%9=Y-Q-`Vw*#9RYfR%P3749QJL8vQI-06JOdbu{)#v>TvCLB)<9K#I1 zCsIRM=wn-hjcyoOQc1Aqf;Z7lt)TG(M8F{(q~$~=b*r_$3ONcFKMaf4N~GXsxZFss z>m;Pf^!a?X^0)yyyO_{%lL0dF|FzKo+5EAhwkAPUfyfZWAu@R3b;cVuLIn`6ef0QgStvj+ z=uR(jYJ{P3&%&m#1pvBwd0*oMF7PYTd=qqd&!s&p%k$qtcf`+E6jVb4VWF2sDWS-c zXUm4skj8yda3Mn))x2M3K6q?ULuto7Bi%?OMzXd)Dnsyg;th*pTa2w~Fc{}UBM>v$ ze1N%WJNZxqrN#{2hQk+amv9*nEx*pSK%}3$KtevpbHvAlT<%XL&&MeXCD5D$Fhrb) zD{JoaJPCNa!r(GYUR=vrt%;?LL$3rdz=RlBnDIl=^JHxwTWL8{rw+1j(K8KwZCHR8 zcB3S5B*FYDueLc6nhU?Rks%JV*SS8p)`hcG;lL61NHG^sC}}%8WQ`_xVkz( ztR&aq&}(<8$UFpcu`1&Mid(|lG$SWvT5XU0JvsNX_!&f#{ksS~il`s}6!IJrD8hXW z=7*U+nlUdwzm87DRjNgEbet71P0Mx#Vsd&<5e$s4pMbzFiI5;zJ>SNJTjuBBGmuSf zMMQ-3!2-oRAy{f4_4dbwffR0-P)H&`;?4`+_H4H7@8Us$-NeJBT6Q4h0luZ3Ofn;x z)!%rnF6r*iG0%qcM3JPQ){siB`Nz=PFw02M01&v#+FP6`9|F?k=>09)+4XC-GQ<&* zAL01p7z8NSnWDDAm@$8FL`r!y8wdf*M184J#0*Hi2$pn^rb=wWDCBlF!NY^hg<0g` z!AmmC3!%-C-0XU1?n<_bu(5w=| z;Eza^;9N3Q80v{Ww1lx(S0{e=(}%wJ{$G6WcfWZ1`+xrJA8k}bGMH$#_#Yb9naOn- zQ$})7Qik`N5%hn3AGrFO*M4^7d#8#Ij00;@y&PE2%8ieaZ&OB2@I3Kr!a0zaOTvP} z>3)74kFed20BY$cA0fUZ`@4_j)2}^$XDjGSSn$E%sT4!tQDxsJWyDt<$O_}7p zP9X+3k=B{ep15+Mj%w}7zc++*wujh;m-Zb$2UdsR!I=<&5Hqzna&d3qdPoH(78Y=< zM%-Nt>*cxo^1DZfwuP;+Chu%)Mscz+AsdO;Zafcu4e2Qq*3loyg z1L;P!47$R9aCyc% zVRN0)5pOY?Y0pElN)_(QwR7#8tb~va$JDSB$F0qX0H^GVU~dYe`;p~{dLgj%cLUQg z0pAt`ba~EgI+b}2X-=SUZIIYP#7Z)j6hQUqSAJQk)h11NZ#O~W3!-SpWm{!f&&Cpo z`q=cQ{3#mIgSeFP8xn+mK zy_}`E68u2F6C|xNK}eJ9I@7|p93~7=mH=1ekXhoelmDCT{?!J8C1w>K zYn+pQqq{O1GkA=#aAJLH$5l+0GbV#%?ZQl@z3EH&0ZHfyPn zfilRLUMg0zb%oJ@XvU4~|NpPy$M)5>W{9g(P`}{K$uZH`N9aP6xA2q_4IuWV88K-q zcDg?118jJAf3Jzu3Cu<|i_4ZNfp8<<1vjzPN7~XE_DI?Z`z)Bp#t<6#O~~+V(tSF- zmOO}a$F6%lWoNM~?4NT(*=(&(qVFhKcq&MG^>z0~SDv`Ruo|L1tC-n{gnikuP_EGa zCXzFwO4BKqN`kne(!4YNhbD!qEXnN1MlQ^Jm(dmw1VuDF4xAB|L)UH&T=OYkhID~} z%d)aek{g!I&LSQ2)aV@diJM3wDeT_uEkze0eu}5AXgUaHiNnI)$JDPxv)|-Mj>&C* zO;to?1;#$a47ec<0)N_w;}}q&55jmheQYKue^D!4p=x^Z5X){^!LCV=!k7g2$A!YP z4qoE)Gqb635x(c2A#zyRORqNgh@v^MD&|PQtnu1VaO>K6oO9)lEiYX?#}|uf12z#x zXFvLNO$GmM*0)cNd2A9ojtTb1aRc6l{cBzrHBv(I9->kJ3@IDrZ7Y? zL0)_5-#;OLTsNdh&DbEi10OjvOxKD*XsiMl%O<}kLVrS$lb0lQsCb1}1}DgN>3=z% z4myV(sPpYGmwF5)5M~P{DhlK}$%sAZCUk97L<0>9B8V<-LKBXw(3cUu! zuTdGeVGeBXK0E|XhqcCX%JUp?{31z!b_Qy@*1dc8`d=)!zB5ua(NBi5yX(sI?YwqW z4C&Yu$ZoFq6__WN#dbsVz}1ic=*!PGt9a_698{pH07e*;0&GbH>kYMp&Tx>WD5W16 zE-c3W&X5n?<%%3iz%+zxh>MW)gwhOh5Xu}fHv-vn6r8OC4j7(==YdF< z4?0zg-0@5(cW~kgLyl$x#}KnZRdqGZXw5AhNFPf>fUOzK(UClqW&b-3SJ! zFW?&XDj}XLSo3b?rh#L9NJaSyi$vGC&IFqh?j)G6JO-={^{rNGNDL*a^ekaY$stAo zwyq4?W+6ukk5S0&u%5U9d5DxuGq&0lfAajgf)b%*LF#Fx!DY9;283S!CAUcsl92)X z?NNqUnrYsRc?q+@K|r1YT3MFlJW00+*#i=c z=XV-RE+7mA!I%_`P`5_T*YO=_Yxo3lLNJtibj~WyiIT!hSKvCHEcG*mZ98%30oXfH zu;gkHkdnAVyXgCdSt04KJlUxiEgPKu$oQkDJc~A90eMpnx&>w(Z^^|5qfE={Aj@X|n|Dg_RbO`J=1 zz6b@zG{dhu?n6LibC`NbpMU6Rg;g0T7axZ=gH*|NglNxtczZq%Ce3v+u`#n)?c3

`nnnpMT0sB5i6BJ|R;^{Gx(LFAB^8SG=y6RMnVi!IF$8EM^EEEl8_TQI%7nOdq`dv@=ymJR6Y3Xz+j}TVrIij{ksZ4dsL?_ zG`k4L`ZBp$b8QY^xUWrClOJ~JJ7rDGp&ye3xgh+s5=G!fdHniSOLrYhg&+6%D10DG z(pYThr2rtMO_Wk1uupV>*8#JjD4IVXzqC_& zi8#vT*ku`_4Betl%lfUq*qQtqKv;YNS1hDh?YlV!VDm6q{6zz_)lO< zWh}Es)>>4va<1|w;G+pTe!JjSfu~&B14(RE&EgceP@_Kh+O?(fq01Rj`DqEmDs{@v z6}GyyY!beOK)nx8@xWK#3XN>2*9zYKdp!-tx-xsV@1rR5QZj2K5@+7_e!X3ZHRx{@Lz>6Nes!P;&^9|4Dfe8>*Ts%#(B>*Mk|t zT4zb_VA)FX>u=e8!$Kf26e$7}Afy_qSPR^nK_|jD%z4(Y1Fl$S;vJP6}Nloat5qHuoQ=Xh4EL063#S_F* z(eD)!elav~tlv?NiAo>+WvrnA6l+Df09|^5rNL^y;i4@8Or&n5hC1-oos`f) z>aOrvG9hw-o=nmXqvvt@3_1jRw84#8UIc2KM5I76+d4``pqfIi!)@6`mM?LXAWoWr z@0;8)c={`uEVssnRZPM1jS#TsJJo#cp~ut=uf3f&N!$S<ANrqQF?!2B+B>9U_oc{k&`={tR*|7XIC*Zq7?IDTXtzDRe&-Zp>}Pi z1LTVA^D>Tyyns}TuL?x;926dJ45Ljt2yWY6B;cwjXsomtK>4!*wh|OU16Ijz^XRK( z*HDsI2uy>(P|acRHHaEn=fXhO%Xym{c>^Ec>9vH?z=G!#$?0nxjj zo=(z$#~;;(q}5NdWy5mhiu19TJMdT!zUGzurr&xH52Un=aDee{Ye;VBLjiFBb(3{m z8Sb1#-uVFr*T#hjDF$I(I4!5?B31;fp!N15wfC8auln$JF=XV z>OeuJGLsk+93S<_+Rc>wt37~2iW>IaDp57eN1KcJ%{`ob2X|xbGbptyh0bqHhE(A1uRcT)Vy-E zPLv_71s9e}hkgoI>GMtaskZ8HwodTYPV*p>b#!n7O3m)Y=)aq0g!{@rsDI+-?RS{E z^<;(3h5J&1NF)c2zyu((%a%Kh@I=zP|Gq!@@yCcbhA}FX`!WpSl0t=LBP=3Q7#HYO zrCd<@`r+Q%AqZn?u`+%Q4o3zOe4G|P55^;!=NJ*FRO{zjYd*5?b`|szb;gB9hvG|v z3vkMG5X%JLE1-A^XxQQF?q@&rFj!s6&z(E5)^_F#uc$XiCg0fdVf(}P5JDS^@4E52 z$@26KOXg+9)rnW{s^r*LB7OC%$G*8QkQoUr<9lVte;El9eKaTN2JzJ8qRD8&tN>+* zSNX(v7yceg-jZ-=pz9?Nhmi#e2aqs@cw(V_QFF(TERt+7Ewcm$rcZ;eOikvH1pa!1 zz&?qrE6D@AK6mLSfh)+IXKR2zix;rCrWuFww7TQvhD>pV0rW{d5^blxb^tdyKS#MK zkSlb_+)(ZW#Ao<8(=)Y>xsrm?6`4kqYgb@H41nKSLpF~c4>{cng975PGCPHwEsLPA zTAB?c?1Idi?HpQ=nq(eCAgM;Y@1d<9|Ik;Q_{8jkpLpDaJg7IIASRg>r?+8`gt-Z^k1*{Q@;vTz3~}J2HH==pA(hg~4gn;sO;2-qWgQ znDb9{Su`LZuE6(o{9H=z^8K_d=q~gjMog{FJ1mFYR!c9HWy2H5Ufpk(D5k(uz>RhC z?7(!TpR-P|gImPnMY1xpz!%exAkrU!7|)-I?Yi-rKYr~upV|EI@BiRl-)85IFIDR>wmrZ{p=kiE1l?1$DO7o(GOw14fgk(}J54Ln-8lV;- z0h#1`YbdLur9lY2KCDvaH7N)k#n9|L?>71A(kF=Us_E@^(TP-QQ*aWH^3Y;|AiFOZ z+rW+8W(@~3pAM;IJH4Qf8Zip%jUs`BjZ}*Q57GS4sLX5aNEm0pLz%eSi*yyr$dn@b zy$|wKT(clw7!D_VC_Gm$*QP|Q_Q3eQ6My#pmEU_{`}hCo!@=}_o4(6Sh(}nYR-9*> z70~W#iH3;?V{GWNl!v`3{`OF$v$@WoC2hlUP z0TNzBO2TsZVJ%x5G6Hr!k3YvRi4gDNrmEPs$aH;_#}yaQZB$xC1ym+J@joWmv14FVThjpQyJE?doBk zCQ}A5J@~1oKUG3iC%={s zf=roq6y6>TMl)D>VlZBJMb)GBHZaFTU z;k=lrM%Y)6UL?nYfbtrDPXZkK&bJa2z>lRD@RF1jHub6u>^XSLrQZ-zH_67!ZMl4w z20jRlEVbb4b{)i5G7ExH z6(G|EDaznFXO@c*zP{?6Q6L@^Twk7NxSgg?}t5kBU_9e%OR5h^)T7#|q) zTd4(v7;A*D6a6pRjD`vCM>l@^OCKBg+^^og{sYeq?f7;nIGsM2cO#;xpVn%mgoP!`}3V@`$(#Zsd+ix&w?Hzt`dIPb%1WEr31z;y2u@nk+l$3 z7iJMivYyE+!bCz>a$#~h*99w4k8085u%d>uTZw;O7HA52l~rnfBR?met&*u za#r}A^n;I0rO@95y^0Yj;IzniKoFbFEh`6(bbaOpT8dG^-u495wBa*F3xs_;KnSw zmwUKN^_6b(@+t)E<%F^6@|A~wRa>5!94+_#*OiQ!J`9R%Ey&;&B7;S#qF~Cua1wn8 zQcJ!8{(8KfR zw`Lk(-rJkwLr~bz1{a1YIl(pU!8Ae7y*zh`Nj69}IN!G24$OV$tHo#j^WUdu{xNp> z<=1^{r@yi1!Ydua4?p&Xt_f?Vf`uR_EHjcJ9upKR&e&qH! zpegb6by3>$FouyphsNsAccVEv0qz)ZDi-@Bxn%1LN{pw`6MXuzxjrhkKu5Rn;qvVg zx@e<-ih`mOpccss#gR0D&PT*EROH7^C!Eswwt62mJ-|;y5k`HoD%Pk?YOQ-sj#Qr?IrD~yGJz-95RlqUnJ{k- z8wu%fq(07aW;Bu3#2h}v_Oq*-3AXWFN+MOIsE`Z;?lO_kWu}*jzSN05dH0`>JurFX zFaP+@8q5FszaPB+=41Q(N6kn6+dH3r5i3wT@Ml9^4649;yUNcz{=Y8#=tqkiR+P@j z7BgIV_P}4irTzSst-d^O47`)POUDEXZ%u8-i~#_a_n;Go&<)yABw`G!VTwIio3TWC zyL)pu6U+EzD?G9S$As1tMmB>-T6(qhMf4)HDl27Z{fH-Nms!B}us<}1MGLY3riz1< z%a^|k3X}sUPTF&(msyp$#;$-QU=iup-KRJDCa-$(E+<;7>~NGbM5iP#i8 z={@LNx>H4#H_fsSQ_EmM#$AFYKqm!E#?Tq1GwHWnQWZ`3~@Eky!zjOCSCcxmK?ES#l&VS`R!w}(0tWHcS503fTqHTA5empdh8t1i2#0M%IcM zY6$F{&y1l1>SxQnKl;b!(oeoUFq~NY>Fk|b(<@JZ`mGn9mAdaxI9nSN(T&Nkre@41 zdrsX@KX>|w#O}Q3$DciV06GA0FrXL6+9jqdN8*Q1GZ4nFlJWos z$+8$vVAfI;16box!hYBqu|~m{0s+YA2AsfB9cF?kaXX@Mh#?oXsaor2TDG~ACD_TK zs)a<(Y627_m z*!9^XlfOHActfJIP*L3%HvB(-`NO-PInWD^h1#JdH$ZY`7ze3_goI~XlX9uWD?lB` zx4}TKUVmbv^z$OI;?p>YO_3&|Wu6b_%ObL0KYm}iJ|Mey4n+uXmN6d)tj0lfar<_u zGVC1jI6+%iH0igx?n^&7^@E{LcH$U9em+xk;oeC;>h{=`S%gTDRAqvJ;#O~M3xbv} zspXEijzZ?b2wm-45#JdFf`;+X@I@HMPa|9(Ofr#VJTtCjaNxmMV&uy;Rz7#If5AAr zI_eIE3MTP!LamHqE`#Pjdt#B=3#N9M2%d%&l)vO%hLtLI8-{;_uUjT-6C_FGn9BQ` zu>FEF0efwowKO6D$V+NBsMFC?2if=FsQpRCCvd@fto5Po+h^x#ggSl>gt{bSHkbH_ zW;Ce(muuxtfM{15We(1E%8UjMst}=dHj{OKPx9f)T+auDUQT;#1wnd9#K``HQ<>5? zHfHYRUhZ(Bc@f`Wel6`$OAN!neg=m$AMJ1uv*5l$2b*s1>K;Z629S%lLSLT$wS+TE zQ>RvY(Pz`W!B^PU$)Iq`llEFEiK#}jW(F1@7|NDsm7K_y%oP!Q4?zOiYVBUZ;X!~|oXU*qD&yD*(-I>Whb9>`J?E`e*S}e%n+E{r$rEW~7lEHsU z9QpO$NB`y2>{q{fZM|^zm9d*&c=_Wi4n1Z}efG3HKj0U^9d3)`#%A=L`FnG=AXWLnu(76tf~KGi@2splB$|CJwvZ+7m&<+gGSzChIzX5?T)aCrF9}7j+=n zL|Zz$HHX*LZ~I&ZKoyQsloi&|gi|Ta17T<+f-D+Tli>~s>CtEz9Iu64QouY03D}J$P@!P5_Qs(7D{_j>oOb}z{u!`)ij0_&DV8WH%oCi#BHN4MlR<|scBPfr)Q^>~ z)aPesXRwqwGM`s%9$Jg3)1s>_1OnxQ4NDWcjq9HTBD<&nZsPu#3TzyV!~(<0fn{%Q zr3Ent_#wg+H@Xf59*pL=IRagwZs$~etk%~J&c`Cjd=J8uD=Sb3{{Pp5DFEZpi`ZRcwS*Kc36&zBVO}yN$g)WD_>G0r+q+95 z!?o9$!uWFd;@&7*o)I&SU5r>s)-be4gV4j+opkb7XzAKr9ZOdOk3BQjant01FC}Ki z!k(@cQfvU$HL;+GXx@@l{f9SS{KMHFK6Cu4PL;&MnZ<+LFm3fo+RLQvdEYe)1Xj}q z=91$>QW5pRFoA|opmQlnr?3N$ON%@%ds+kR=3<8uS|uyA6nL)Q() zi_q0iuIBIp>Qr*@R9-!lnO!0scS~0aEBiQc!SGurWT)<+Du4IR&Z# zdI|Q?mm6iC*mJ6V-v||UPmK@*feaKWSXWXwJeQuTX-QDCthASv8pnx(N`s$}wzK@| zZsyL`L34G=d(UJl=Gw)d*qDiTKZ-TyWqitT?#X zh?Lec>ykTzNooZ&4Vbmj+pY;~0S%KLLZd?$HBu8X0tLWaw)N7)DR% z4qsJ!_%Se>xatc>q*!qi{fEG#Kyv^tnNr8_?dTrbx!v{>jUgwVO;d+8Cs1#*k0T0E zkRaAj>p7=A_%o2Ek7$X@dCN?+&rO832Wv9ghoYAwye=({q%^}PkX8bj%N>w&jP+;= zDJh)I^RROSg2N9oDAoI1e$Rcfrwv}27?8>&$wKdF5?f{SAX7wo@Co$c+Sr6C;Zkyh zzmNC~T(VXZTjd55aqFR7oT0d&LSR$;VT;4S8tW-D-_%_?bPaD6r3>U5_nR~V{+pDy2H+y54`gC6dxUpfHdh%Jbl)}Ui*yl?e4j@h zeb)r*7Z&%YFC)I|EZy@ksD#kKS;QphjXzQkoR_Zox9x>WK>PrJ5LtCkRN! zPgq5r#^L}sGV}ZwkqA2D-<5>S9jxijp~Om3*sLJt@zeVL7bj7=jq^4$(n%Sa>T$r9HK*_BMH?nuP6yQLK?feYI0_pTu7C~cM7nh? z<Ngisp8;R9Xv}#eoGTW6oWO*PY^*I!Td9D%(jGBA?1Fp|JHRYZ ztpb{*_^$d5wk>BX8z(y5JmT^*!`Sa<6^mGQ{2QWJqCcuK>t|U!MyG=VkDIo`-DZ0R ze46;)<9Ala6U@)&gv_X<)on&_f;)g*AnR?2>Z%?jGfREd>&B5y$yg zP>2MQao7q7dTdkv^$#sF0CSrIeijr3vc{I8|90dxiRvMvfS9Q^WfA*MJ_8S;j&irqR~KdBZ#l&AkWJ;=yH|8T?YdH) zufT-^O>th5?9ZC^-U%52Du$$A918#nN_1M&ZRoXm2~Kts@;^IEhpxk`RRUor%9_|c z_Lp`rGe~gn(f1eQaA6`MsOi#uWp)9%1FA6R$B2H|_pZmYgcP>dz~L~C=&l~kk@%@+3mpKjvc`b}P*7hgokA@+wff{HkIqVd zmgEa?rtaZ*l^3fphD~2N0{Na5N^|XqbEof);_i5Lkqc{U|<03FDa9ZL>O}%MfScGjeSZ z__v5)bq`$8P27P+7zTyAh|r*YeK?@`_Rz#9L=dL<-~{MTVFGnSD%4$~?0sN;#B!AO znpK|~jYb&Gc<7ZXQR4E&;=y3Y*uDr}<{Bol*?>`!`A?2~F)CxADx1+Y(cQWsln#{$ zZ-HVzd?tE^jH-zEy4M8@p_5vH4=_k^X&d$;tY;|T7KQj!bcJ*jRisxZA)xv)3#}TUTJjaFROHL3nF_N z44pYYQW9DSV2=Q&R#%66sv#eUJx(R@0WSMcabtd_W-sPdHtb_Q%>Cp@0 z6b{82&P0b7cBVyvEo?!lKZvH33Y^pYLg=Wmi=+ITLry@^D_1S|J{x@(L(#!oaLv_E z%VazmX8|+qmmWZ#PloM&-ZFvsC=@0eF5in19laMef*gJmzaCkQHbQB_hA{GM@8%r= zWk8?V;Z-=pHYut`_(;B8eheh8!;Yc|$D2S{nXEy}M8yhk4yG#xe4UdPh+mIV5zGjr zlwpezYVCAD&2ZEDllYiuyL(pXca_Yvj9M`)xa9rQ;EkK|6_Ct&3I4&UWf& zd?RRCkiuax6pU6Nnh*g{eRq2362BG>9GBBaw@e&NHP+i;?Z3$t=&<~Z{42uJ* z7(l79nva8GP>Wmw+<|m2w5b*%RYofmjuq}s-cQ7TBx@V2fXLn>#zTB+p&HW~@M#bk z3m)5q_vm%e8i`VIR)qllqHICYs=_PAgSuxE7_SFh5loFQF=>+=v27YAw0re) zsPkN&P~4G}`0yXH#E)~F@mP4V#UI-btQ~*?USRg|gk+;2J=0-ChP^&c5IxN}-&7$$ z2&gmZIhqpS?^+0Daz`W7?Z>hQ&ct?whM%7oHoJ_oCS*|nEB4q0GN8kLiw7$q&qzLq8YiLfnsuk+B9 zN;nrxi!oJ>>!$}C5nxN{>H@UNAR>=cw(cgELxeC4JSQTGUJ`{saGfc=NF-!YbawG0 zc%h~KCZHB@D@SN}ZvYU5pm`11OUIB2Z0eL)H{_ppc65deFVt>64dYf3-CK?VqfEAt z&n#nW?v{xl!KGV~xT8}Y3l}GqmHLMKW|B#G{ds{*%`qbuM`PvCcVP!Z78VuLj3Bck z3TWre&mM4f+1ws`syqMg{*?re99;iTJ~AB2-XBA^`NU;G*^AYgGL(=%9$c^qb7dq= z6RJu()x^XUF{4?E(2l|koboLHZSVQvHPPG>aLqTZWewp-UeL@jQVEJKiqS2*PUJa7pGD=eE8ZGgD zf%Eb?HK1!;1DAJ%@Tb7sq(YR}AXz<@?#^ItWjw)819vP#Wh?!>d_>;!nxmdGV)qSK z^e8rD&aPagM(H=NI{PUiQEYcGGZ{A&DGjPxQ!H>Zgjedbo%Oba^ut+I%q$k@JyT)Y z0ZCJp^W#1YQ3UPuFdrVAz+J#zh|0K?@R}oP`Sj?F5*uQLj)A(9mI2akc`X&&6F28C zZ&RlSfSoCg0g$2wc##YEXd8&wm|~-L;SB*dDhB{gkf?;|S&%gfdBJ}4?*7P`f$PH} zyVfQMyWPe3@8=)SS5Q&W!CIe0kd4KN5(mB~Q$(>Tx?IJG&G1fYIH7$35#)C+ijo*K zuKNJh_L$UgITj_8QWX`^&dcIoi0jc}QViKSIT~a6BRhnDE>Aj?87Ys-lqmVR;_d~N ztspm*cE>bvIV4KK@uA!%(I8-OqaWVC9k-oJ;UzJm8#}94^HUXMSqJhD9D^TZ>ZjL< z7=U4r3YxxC)!-S1Q^g^HY?SOy@HWiDLrKbc@WoJ^ri-iRkET+q}a z+{@<+#7JQKCJXP}_fE0@Tzj4xZz91az<)({KE#w0H^Fd3JlR1qb0 zzFGEm%A~jhnZVeS$cB)LFXD_HtornbkZMd&flJ^N+yYWcWP#We_UsG0trVI)uyjli zBHeknbyZQORdFu{kbT;s8?IhS8m#zimwdFr^Cvm{$rW=<(VNefgo(@*Y1=_s_6X@{ zbm^I1NOrHZ6|$Pm^O}NwHyo`_jsOG%{82AWb_`>f30y8VwP@x^n4ufSEL9N3<1G~{ zLHjFvT{h5`X~Np& z+a*FMTZzF66Sg>Z84n6~jQ0x~&J8KOBV`S8Se|2eWJJ>hs1zmykWBt0vL87#`7-2W zkXH-s$}b0PPX3Z;CK9cohLIlb>9M|c+ii9`QVzxymzxQ1*DVQVBH~E!Fscx}dZ9C@ zR{Ugu{gXBbz{?*{KlfWw?|@;>9;{B1J0~TJv`k?zp>T#L6XAUo^=n~GlI6wtI#D@! z7E}yu4+06$PRqbZ zu>DA$jRd5}Id=sI22sm^a}SNAobhe(rqAeWQ8snuZNOO?qirb{OTtf~^xF(Kf+>~H z<~+_}a#nJJ*dMAds9_}*(M_yb+o?M4AlmFSIU!7c-QjFl7Jc#56s9ztA<`v0NTzJ@ z86Sb6LoUNJ%ID6&&OIhyH}oZ`76ooRN;0QI2caV^I%$)*47SCU^zPLVYhAKI3^5mjKWsD=2fEb)x;OcE$*yF!%E?$= zpc`KQWycEn+$4@Z`Z>&E-nV;ZbYuoNOX$r0>gv^JSL0~O??6;5%foOkM{9j~lLMB- zeOUt>1J5AzXoWeI@?!*YF=8qChuHraJ!%wr_xQpvXRM1X%IOB72Pu{GrGjK3=ZM*> zny53lQXtxi_c&Oa`u7{*alsNLZ$VOCb zQcvFHn<%Ni+_n?=j=*8tyD_K&VJ&kan%$*Yzf`}e)?;^V+yXDl1aC;(S#_PZRDFt~ z3gWJ~S%%ctHRqQb4Ig-?zrou&zAeGStc%Ugtly~6{!H9z3%EQF{@dOyz3KZ9g^-fI zNWMcqE|&jz`5rA8$w%_VvD##Q#e1u_^V=W4{iAjf>PyCdg=_T4Ay6v!qliEjuuVtN zX~x!nW%+ae?`KYLof0e{xinK}CFg0qeZ#JM-sU-eZ#q^5F44Q&%dyO53>ML_Wo!RZNR!M$z8({8BUAw)XeYXt z{}URu5O|Djp6&V) z@RDP?B4Z zrUxOE;(*dV;hn$d_yB@HCiM9C{{77N9^53A>Hr0l8AW!KzVc@LTVMFa z%YXa3|MTY8JjGOO z!K%aHij$G#vt>X3KFcGf;ORq&V???f8{|rN_?+)oS4CHWQ5ol;NQl(ky!Ql87bi<_ z!0{&CSM1@Bi}bp8uk5U|xFBLSZ>|qxl55S z&lv)>g9MWEuG^fKrAgWB#qjQnm@ib00qMh<5Zg=PI7dUundSdzvWqgE#I&VFwKvP& z2mK0N0iVy}WZCQnwLa!2(tS77`-x+9*a@6L@I?~ecd-mW4o9#ttLxNcc6QAw74ly)W9IOu81*@%uLOF4}s9hz+3ZWCJFbdp8 zG`8L(Xoc@#8zqww%VszOxMjXo44~$RSPCRmFK_;XL7;oHh>-%nfaUh|LU(!Uik9*e|O%y{%e&)&&KLtK=w=`?OK+o zq{zLnbj-Qy;0VbjA@Zsy)WJ;%rI(g<9bDO=TC%b3 z*d&^>B=z0sIvMqDUD_p2UxPk3*V|YhO7HXjnQgDFEU~5Y=lA`7Ki|(E$e=epjsbf= z^Bb;9paODirXB8JJ%_8rMBm2BUXyZ42<$}HC)Y3TKtj`}0h|SPO1_iA-zcr`eCfeE zdO#x3wYm@uN{CuQ$m>QB56SlkO2_;ge_S$C$z)d(InKdaRKVer`_mXNaV9pr0M~fu zI@MrE-cH|)>w{@Ab2zeMdy08QPgjrq7DcJjrb~VvLu#mmoiriLNP#bkE)s(*!M~xc zM}eo`_%-%Hbl^pWy}a`VWW(8C-HLfKz_4}t_z-z3xVB^wN6*kwef|B>!`I)Wb8$0Y z?_#k_&r;Yc?-z%0fU$Vy(B=iAp_hg%ENZoe&GK?BTwbPx<;zd`fX>ix0j{G0O@VF1 zuPONbk$ZGg7XGE|q$%DKe?WoQn<2j~EYd)F_-6%Z_UWd_>F1!NF`dB&EO5-i5poeO zPg-BV+TNsR$1ACq6Z&RsO!`3{SYq;Sq0GSz>!+7bHNN}6@nqGX_ORx)KvzC6_I~Wl z-tFGfTTLQ3Gq1e+oajDo``u36yy<5@{!oLAN7@h?%?#r@D|<==$}O&45ehR06@D~XOuW^fn}ogcu<2XIwXE9&6~?}Mq9`_8+sgO{YLW})X>8^4_ier}`R^9l|e}2~N8WslLg-^S=Jwsh>UnYWI$htz*CL zO*5ps<1ftcTqqtLV4kdw#(kd0)M-wq6Wzyyp?6+?@V?xC{l@UAn=-{AwMC9|t&Qu3 zlDR}+>?jwT$zRdG`=hzP{L9~a=jXHUzWVCpw-sI=Sl1#cZ}4PK>3;9}-fw;Xync$7 zuHJ8f(B|p*;1&@H1Ki~il}SpiG90%y{PB;!w0}R4=Rj|U3I-&<(b!gE?0@c|zu40X zeo~|ez7o|TA!(AE2XMmxfRkKnp&tGp_o)B&hhO+s?$K%3jWbiN}^tn)#EzuTM=Gt@2v08AY?xaK4GeJB&jg~p)tWO(@4 zoL8Ax+$0K z$2LdWWez^Y@7crbzRd!81uz?~4#iUh(EVD<{ueAMkOEPX*)DFz#WFJ+wU{*MEq2@0 zFF=I4h-Vj&FX`b9(LJ)_sCoK??iQpc0$Zo}jY^UVMNmbCbtFORMoUzEAnfIdE@`~m zQ#-q3;SD_zz<<%rK)}=O{`^xv>-cW;(?Dd5w0?a3(|5f7NXOczns0vi-@bYBuOGjw zIlaC!xPRZieQ$5XHJMfS&t6YDf6G7r8yr6GQv7VA(5V6b`x0vno)e+6yydv!X(Q#! zkCzfg3Ut!=U7?BfcqM#=AW@RWrVc-J^MAaz<_NZuGHT0ChC(N>C=Oc@44+CzFqR*B#Jw^Cj+xkhn2v6dnA@lRqs20*Z05s{U3kh z-5sxRN_1e+T6*x|@bToPu~&ZBz{jIy|KVDyTb$cOgu>s2?mxqPcR}?MqI7`&N?O*77_bx0xrgCQE z+Nc3f0Ojnh-Hxyo;i79of(BtZIA?ycR6qX#l3&&=A}hRQqJTg+$Sk~s5d!XQMy4pRvUQ%ghebeHQRI1ci7p8O zD_v=+g!NdsMBp#3j@WsYN&<>4yhWe@9GKr5m~Ojv4qBre9j**4)7A-}JteSZ!@3o) zHnx;|jb#qjg0uqYv`*hPW@s}h#wi1mWRb_*p@ovolz+^+htSCk+Xycp3y8HB0Az};P;+dp;c zBj3JneH!Sb>Bbc$E&QFoed%8wxci^}ZO_;Ka5fWsYa>>v&JU+&j`Vxw;_zIuGo1O0 zA3uEmF_nYM4TL0NLP?B6t%9w%)4jA_QfI*`w8L zB)|RK$A5YDXODmFsok%B{Zjs&y8tlL-}DrW=g$4d>+4>f+E^RMY^W~}iWlojdb*j_ zqGD81W_>{92mSQ)o%urrn!fB^}Omd zbfa+ifBfP8rPEuV`oWJkzmNb_;j>TNj3F@%LD~YYIpOsuu0DHMu=rsSzUJW8aEMx8V0=$j`)K| zCu8;B|DzYa^1q5-+w%YYAQdh!DRw*VmOa2fZEwbQKlQ=yZTXO!f!8qW75AKG_SGi}u) zSGm-tck{1~M-#vN_#gb!KYsf!i*No*K5=H9U&vXml;oV6dgbvCef9Bg^i{@RgKlmv z2EAiY&jP&0wkG248!C#D`cNRTI9G{5{erAddjUhx&{FhfkdWCUu@qrO*1g#=pp=Tt zRe5Eq&26eB(TeLZB+n)T_5OgKkNB0jG}epkIo~_ZCe?>=+`$?SPWG>EMWqGtkfVUM z2Xe4dgp6N@`*vdHsWxC|u#d{b-yXho=Nq2bM|&n7ad*>X*^1_-1%SV^1c7T#XdEyn zCpIVOvcPC*iG^c#lFFPHS?e2k1$;qn(ojd8M9~F?_kdt%5#*yFrc|1Lbh+saN!#^$%(Gm4gESmRq315#z@CY3{eet)0bj zEm4hbS1T_&M+7ku%=$nnmw-&ijZlmjyOw3JgEaD3M*q#_%g^ORNgf@T7N=Fy|NWhB zefi5@e*O0!tGv4G-mm^tYyI%91CHU&iS4$pS^>PMBc2A(@~~P#swAN))ZYr;Q*w6; zx0~QxAyXSld<}RZJ{6!egDR{mjt_gj_41>;*8b7WyZ-gxFTcDl%WYs#q(=#i{KrRH zfByD*2oK#(+*4*#ox*lxx#VlI2&v)lp0IMu)oa^MZadlgP)6iK*|H)oJ@}`4{~Hs_ z&fE6{zjO32Zrym>J0E`T;eMv&YVxpvL)Ssrk}^hq2f}M){|W<6u5#NQ_&!<-P@XfLz$8MocEDFpel^HnI8!gDT7#pe{y103}09$Er2P;_JA4 zQK7QAmI-fBaV0f?D~43{?^cCIX`Go+KzF9Vq}dgaAK}>j3>M>H-ttn3MU}k5qi_T0 zMwj*g-)pE3cW20HC0tZ)HMlv!H;zzH%FUP#dkpg2cSXXmq6F2uTMp)uW4*kb9T{~?xHSo|A%M@ADVK6I0mr8>Bg_xKpC04{lu>w!(g z9)l$l*h+OuB}EcYUzFbY@)P0S1hx`v^=nsL-fWrVLenCj7-5;+KYexw)cr$DjV(RB z>Lwq(h^=DL5vf3c><;D>(lF0m_9qTJn3@*RZF^o8@z30!to*K?r`ngyfbL0mT7J2C zKwf~-4X^)e%iI*a#|{FElB5gi`@_u6$ju32{S?aX{K=~iZNKk6ZNvs$rGYo0hdN#L zclXI~0v>WMY*l2CcCxV>SzsJ@Srt~$mTCFoFGut1`|{^_8^RrN?SwPAe_!A4 zZtVTma}RId2wm>wiYmF_0%^x~J9b2Y-cpjzHRaBxjbLPdKwDbRg6#W08oAYv0Zk;= zBKpRip$}x?iq0)1Hv*Tys&Qtj_b*^b2Wx$k46%om?ui9~0@=Rtq!As)Hl0SFUCH^C zun#1jGXjAb>*;CZB9m1bmP9v^;Xvvfj)TV`=hQlPfdWfV+5y>OM_wsu>UuF^xiFCT zN`Dqt!0soeh90;iP*1;>Pa+J2T+ngY=(w6ZJibp@+CO z$^T&DKn)rMQ17O~a1HkpSpid@Na(>u09b+=m=GN$g4a z;V&y#SzP~XMzJudWQUWk~?^|Q5$0KZ)mnCP23DZPUfuLd*e28o8=2F zM}I2Xp#7h>A_zc>UiqGkXWA>53fq2tiL+H&W0Ky6YMEJv-U2X;{ReZte&ngPf`Tmp zRE_I^pjQtOD_>&Al!mtlEg1seiHp1Y3`}Q4l#`TF00CIRAw_rS7B(ID#Ebv%@R#1W z(MWuhIPh$qcz5apFi&k0EH)y2xG3IZn;w1jm7S-Z`(GKrdQs1Oan}nxi=azG&lDJ-jfps%b$Ah-5^z0Oa*&?VApmo6u3UKNZ)UT9eeGX=@5qCi zI}^h3yTe@`N7mlaWII)=Xw_0BsXzF~-~aCSKKS8(++3MSR8eP)r=RFitnMstV@B@k z<%S4AxB7A{p%XwykhR$KnO6&dR9144ydvNaZbZO!dY87t+8|3bGg5;hoW4p0*V!TB8??din17~A)3v*?6 zMv|t{wL?p&As9QfLB)&Siu~T^pZeh6|DnBNzoM3W#GvC2DTQb=;l z#o2)u>YBCr(sSb|$VWK9cy3VFAY|50pHT47FK}eCvNRbLDhMP{YBFf7h7llO2uY?Z zeGAh}^9iz{sW$AkG2j|q)Xh7LT$-%FB;4yh02>Jwtqfj<<>iTZik%}te*%)YY|k?} zau%gQD?egtoeLJr8D)EO(3ZhKjtt9?5uA$OpmA}erd+OCXjRj9K=rD1)OojEG(+~@ zO3s96L0f(Lfd!=8iQxXXcaG`j_ttywqiBB#`MIdG)8*6nIkeb6u{4A2Ds2qi>8m#_ zr%+()ASo&b(~}KbWLt2X!OgCbGgjyrS@f{j6SOzI1=EwRR(xO8NXE_+tR5-wB4F)$ zchL_LemmBeuZPtPL^K3(Xsx0}IxXTy9E^zZzx)x`&5^pm9Q zD~%bNm!OXfn=te@>i=H) za3T=O0LH0>Iu#b|7l45cQAMfAVzQ-cW!>#N?@QeTIE1e*i!bCTgKHG(h?3L_(OiE2 zqeo`n-GROk-A%J=%k$2lt=#wtZX5ROye$lxfbxYict@!_-ljQP!Zs?lNNfZcl>x|3 zMaK>fw8purXfnamGxkOP1zranwI)GsZwQ3iysa09o4;;1HlRL1$H=*G@ri9bex&%+ z$c#dq<|h}jG=$F_(ju6%p)`_l(xF(2ZAW8DAh_MBW5i6VQJLH0Ld-YO`QaZ1E!l3 z2OD!9!Ldh?u(G+HN1RdXuo#6+)nsN#SAX;&P(TL6kJBPyH4VFocB8Ka%}{=SI+AT* z>0tu_kc`psVB*F2fgP3BkfyO17-xN=-T^ZSkiM*3Y946yjgvOTvXJaE)N=6@p``Oz zW$uq#iWOTLqS-9Z(i#g$A7Els5*W)6BN8WO@I&J|n7p-23IeSVtB7U?i)P|cuz_QHpoWbjWI?rY`ioFKMlFM=y z#YidueIITFFQLV!$ha(lsHoeeM`1|96-OX`@_OI$PhX!>xMs@bcAk1mR zMjlUy@pd{eI@8SdtB02D{`ZcfK`#Md>;kPt90XvBpN158GM0hycSj(JxM_&1h)~(N za&R>2{XE<*%Z0Z^dziwjXE0N)JD{2@=)grdy`Id|dJ}_)JO}+dphL*?6p%YA!7SJ( zBMIAOHpkU*u-5Q$7waRWI7W$tF`(mdAKtNUmlfWwjs^fqB+1LPN}UMVxhL%FF|I=X z*+bo99pp5EI3P1LYNe9L%Wl`-r#>IGVTwnMgvX{D$rR@fFQ!5hDZgmXqZPbJh=6@)3vMcQGZ z&3A@JYy<@J?h2y^%Xo%wEcN^#&_vY>Z|e509bZ(}&wr55wjglv_HN_7H?PhO-w%p5 z-s+>ik{&PVWcXL5*^&cJOo3~F_dzL6UWCaWU{kkve_&-t;zSxp1~-0y*MHj$cFn-O zCcbpR=2_$OK5$KMh`>#YScTt_CYUv$ z;TpnlFD>=xRViidrX@{supa{zKyfpK%$_}jgrHv>BFRq>HOwTz0pLI?MGZ^~o%(8x zl=fM)2y4Kdx-}ht<`Gb2%uFDl@k8LA$`-W3JOv41h_?co+{yiO3R-4oSk>?+Qrp7? z$VZ6NQwUn%KoEnj1Vc1|62nCs&8(*@(trqkguB2yh&jJzE7EY4VZDkg-#)aH40aLT zVX&~4uyDN~!@K(Pn5e(ib?v5;*LhLF%MF~9ST%N6I+%_*32B<}is2B#>+RrHnBd$~ zU?*B0Ne&6O=OZ_uS@~piY(C8T2^(lQLYA@WOkB9&N+(xa8fjTf^QjQ;tZ-yVdjksB z#Lhrqr&md&*x&LMV2~(Em)mD!pw~C0#1a8yd5mImAd4-$;jcq%-^8K8_gN_e_g_Z`5#A?`Bf2qiLs|S zOqYT8i_2z^4!2Yz>+r*vIGA%;1Y#IX91w6j6K(s?{BC@@yI`PFPgtd7c%&at~k#~Xxpm8;IGj)e32*8+5m?vKL z2BhBn+25(3@d^-Z>qg6PD;~S|gr4G0c zAo&&M2%07y31q$ty2H>+23tesrl{q;e#qn)XTZvxC(?rE#6`B)BJ&@%AHXNwrIKlR ziN?i`_kB5wkOqmrBU0;5PQnWIMMg%`{Ymryd2ILiIm!FOE?s2Os_&r`OKY4wjbgdh zR#)0-R$M?RU`UJ9XpswZFuOQ!KV&qZApJffO3faOG$rd~*#vuW0`GuQWu!Ucj}8l+Pn zeRl^NK&VlK+(;G~FZSj$QJLmU=kD*RAXdZneBl5lvliY!OFd=~JTu6NY`CtG0_4(t zbG`-k1Ql#MfX{i7a86h8Gz`(F)hb#tNv?q~Vd!a$;@wBz_eLR=tA<13!qq2}(-j@f zxtbNe1-)FtH|koPY1-&fnbcBhbn}_YIEq~YmpuiPbbvw9k7X<{yij*k*WpVgWxGX9 zEcC|oi)5<|3pGN&AOKxiJ?CLwL@Mm@c*>cyyvRlp->g7arb`S+LnEkS5l(g#qGuPF zggTOzxggLDP+Uj3UTn;$Roz-0^YSs9S%{NSbBAk2$jHlpAarpOHOb*7VAT#Ae>&=0fM_{jUDCY>QRAQuz)TXM zJ~pHmA&N+uf@=gGWF~4_Sw@o*g2cPCQa4Ajv$?76+K|-#c!`C>I(BIfXROGV=)ZN1 zoWM_hR%&aKQ20IcBB27Uj9<_5?osh^yz!5+s1=bhXl2YqGrF)rZy{>82AR0v(OEKXE9XqKZAn;QP*}h;2 z&z!DxfgWCXw{)<1W4hdamI z%GN|#;ETd^X$&66Ytgw@C=Dg(2S)-P6a683tr&W^Q++Xaw#Z;4S9OXi36U-IwQ}R+ zPc6VMTrT%|u~HvgOQm+|3J15O6dV#^E(3^;hfEE=G+MA6cdW|Dn};8b^dN1SDz9WL z2KZwSA<(x6;w?QZ=YnE z#w9y<68?%JjonIl{#5TMKS8#XN5OQfj+mQ*o}{zESw%z8wlHnSbs$ORJqVQ~Vgv6V zd4GABUjQ`-J_{Q!%F5tVZg}l!H#;y)tZE&LRS>bT=5{So6Ju<6THpl-101GcV9$&T z1>X={>`wWZ4H%_CEr)F!iEMhQIbL**zfsM56$%L<3}g)i9n}Z6LvQA1z+BY597=T} z`V23~5tIs|E_os6k?GlNBjFedElF3=C1esp$qaHnz|NdVU`}P~CV$i%SzMj4F^o{< zT6W%+0yeD75!CP(iCcgSyK*Xb2{tdYj!@j~{%hReE)R^K>%A3U;|&iH;5|@;Xf5&# zFcY5uoZ*g16nK#^2mzEbZr}t@ze2VHWJBCXD-toQvz}L%i4XKTT>@04de9jXhz`Z!0!I>tu9X{rf*Qs9Cha&OeYl> zG7N{>^f9BeV5*WO2{)20&H}5`LN3OJ5Y*jiV)f(S)wE(wD+^r>H%(Pjv0$Rt1Y!^1 zL%kJ!#wobqUuqQi0|h3D!U&u@>lzY~OrH!K@JCG9QMnbk^rCLec>#njyZfU?$aQ z6woeKl`TWH0*uEG}oZTarq9%EzaGH;wv)8h7gs6$hg&*)0C?E+QUI zpFsLhonWeF&S+6FJDOa2{gJz_-it#GyOOvXmQTlo!nuRU8V(ry9Xl4h46Q2`j{^t@ zEiQY0C3jKKocROpRaJzhcKaKcH;}$6w_8$tvh>U$FkCnS^TY))CtwX>ezXcZw!z8) z9^1G9^L3H`WOOU>1q8+B?!E#^(+U%-MI9$n0h&Y)X`!H(F}saDhv4y*0?UIl2K$f< z-HPC{>5%2b7#~uMie@maIsrC1TO=285h-Xt(=wZMOCyB^1PkCI!-2Phv96$?nPQr` z1>)m4tUS=9c_F)oBu55ZuQ0xlysuqAxoHfPiWHY&nOFo%Tb@(L73pC5%l*s%lDX%z z$s3GvkZ9Pb26<)~AK9MKBr!uQ)=SEYnPAr>IAr4uJI@wmALpf~Jg(V_Vaf{u7!LEE zo=rgZ3wbO31Zo(0kpJ0D(qREL65Fn{$H*yaY;F^u#x07o3jfW+r$KGNmjVw2_jVpC zJ!1$ah`_MWhrW59H{XTe*@fwz+l#MR?U63HLC?`6K8BIKnv?k(NN|wT4Te( zAP?lT0A;9F!Et$B5)8UQ0p^A*OdHfF5KI=C(D>#vS1`T+WkGT{fmLmXJxSJn#JpE{X(K(W#@V(M?w9f>*HmNl%`A$~cns7OT>WhKirP)uJs)b!Q;X5OBIGOd ziq`bh3&2{athsoW*MUHzVGsu|h+oU#$yn6xn;Qak1WojxXzRJJhofp6$Llg>KsE^53C%+vVbM+VAD{|g+!bL<`Kwu?1e;=5EwOcg=!TC6ebfm1 zY#OA6V2MC_+{>{bqFMUoe!fA{>L%2oyV&VA!6LXzJgts}d|fS`yDSlY%5`PlirKRY zxdkMj@>}7~xHV?=T7?(`ghBJdgLpHx^fkdYVVsV-R)QA7ya1<&r!~cP^$g4|xt2xK zmi1FC&LvTc?`YH~Cv+Dj$wVEa3u?@98RAQG27;LcUD(QpkhT+wjhDfV9f|kW!MtYj z-y!W;6n2fYB)ye z4hnF{J4f(nz^XBJ!W(ATccnnjFW=JTDVh3%tF}vio2L+AX|`e%z;TTueiisG`U{Vq0&`VLrmt~ z&a-5y&DCINk#_q+H+%~Z*RRWyelNHR44t*l3s09N=f6z8X5VnA?3$8j7PHmPH z;xPXd%)t*|jYBfA-=bY2`jBb<&?Ak(Eg+ag@jgIw>QZ{~4O(-`MpS5Q+Lnw6h7x}E zRUi}Q86T#;Oqv^WCtB z!x7H$iM|L(pHAs`Zyg^iU;F>pcc~9q{n!V{M#% zyh7=uy~)*(iBOW+BPuYaaR(1UAe@!|jLQk81NL1lwuGPtN-sqBWDk!tE?iJ z30APF3QL_0FKYupgFI{s4pRe;jwHvYse4`%8^X+ZgVY|A=@tsaMt?HC)?y0+ zCe;jTzlG25#?yY>JXX#yqndNIV}n_S$Y~Orib1( zsfr8=n)*1^f$e7arAkjv&$B%h6k8Jsw#T?Go?VqUiUI%)1sBnMI&K*y;RoPZrW}p1 zdQNh;##}_YXaes>&H#TL7ua(<?x)(4E@4V}E6D;PZWH8GZe^CDkecYB2z z*AA&eVHG;!#s!SU1&x5{VqaJjWm8WhmzTCXB}X4)+cRv7a0VOWEW-hBwQ98c;fUtt z8#41OR3U{8rWK(GW4Vd3k|18RrBC0l zGUf$wc3+G>16wLW^AyIh^-Hk_7XjeoavOsvLIY5HX%@AL`1zq1 zjKNR?iAFoZDP53XO2o-NEJ|478C{$br?!3n6$-=4_yAD#x@Qo9B6nvC4)9d3$I%jDEg$oY9JvzIN1^OMok;N ztfkmPU?2QcrP+A!F*wkMOfEt)O_@!=b$})ZBzTlqb_{`q>L7rP+v5(n^6D7s1>9wL zW<&zNtC-dGg_k|Qty$S3)OLH^l$N0g7c*stR-6(aCL@j_@6H}S(1OI7$H0y&l~UP4 zr#p`&4iw9?jui!~VldVyJ736v3c|IDmLKk@-~SKwLQanNp(?4%?9zoo=5>hWyJ7w^-}7_`t$0O zq<`Q+QNH3@9y|%j>bOMQ^ZK!!B2m|`Oa+ATEd zbP7O^+XXaYbM*3{N_ZT}7$+GjOIBF!BAozd`|c7L+*aB<=71!PbF<-QoaQw`RbMR$ zg|Gn2WzTaNKVUayN5nO!kyYB{T8- ztqY#Z?S0@{;g|g3B;pVOeaoJjy0VgSnx1rc+kK_=)#Rtw18%p7srA_;z9;M0wLE|Q z54D*PTcCU<9It4sG^o#1Y;Afo9HJah-$G?O{rW5CW!#`dal#M5(FSG`AsHw`%f z0D%q~2ivZADydgYTlUeaVn2S>cmX1H0-^uuZS*Wa?xp0jp0=u%M7-1Kb_s0R*z}-j zBtnIvb)E>)i?-tyg&_+qJj_kw#+HGl3l=Vo1^iXF!WUw}F`hl8)=c;1l~|(*_zs?g zJdFHTZJ}Xz!U1-nC=y}(cl+c*W=>9Vtkr3yp-i)nkv;@oZx;69>62uUv&9B#JNf?T z;N2L2V06HX7^8{1*u-)73)h~!iMxslTIa~?WD4VHdFoh6FxUZ20?bImUrEkZbWz)T zaE8_zE;NfisjFr)TFZkcoLHvpc;sXQZ^OXh))eCJ6Ox#UI0C+Fp1)jy#>Jbr!S=<`aq}Rh4l}-sddwYV1SQiQ77H@TA<330^aH5Sb_=vhUUScEICe1}}8ld!^Ew<2fwN5#e3P2&@?Ttjc2_ zB268?l_hl8xIPp*RAt1<`DJqospta6Ipm{=*wsQVEZw|IVC6&%7<6x*5?`I;c}}Y3 z4{k;FxaxtW*RN#4Jnc=Cj2*&S}jX`+P< z)hux~Y#5P&6`}Sh{$OdG!1wb9o}Cr#ta2$al77Wy4^&H25`bhK2rSbM-=oms2}1_h zd}gY{!)OSOhAIsYK+OshTPRn8iu|UqsxWp2lc%krrN)|#0>vQ}!453!OJFaSpv5dr z;Oe-$48Z~TgIJ5YqUfbEq0Ni9ra}XtVEIYk&E+?*+r^zM)rRVd17DLqRx;G6*&&cE zz>t82Y+gzNK~W7#XwdMMl~F5%k@Dctykm3o$GZ`~k=wGtadWxh6~I_!2}VdtlZTv> zf-_AnFEBlg7W$V6<~^4rA(0w`_H2h_6vMe*&>hiCC6;m}*l|#%_#mLdCM6!2$6*$5 zEdtVTsW9M&rce~(>07Z7&(MM+XTBHfYowejQMbsja&;uJ<-LJm867>LO~(L8IQygn z+^>0BDUmss+8tVgTPcX5PX;qCr&Tl#zw&ihb;ulTwfFKO>P|=>IG?^=!yY zrAUsKo4*_@Pq$;WteQ!y7!F587U*MsbycANK;ZAsqZWf|c|e*>=N+WRz|}6Du{f1V z&JV!fj`%DbsO|;e=ST-wIsb9&uz&daTgx^6+6e^@90>Ld7Mf~`;cNFocnhDuyvsnP%FAI4H;6UM*$7Fn%?^p>&k5Oe`Vx3E<6#*h1oJ*daHuTlIlP|CsuI=c348PK z-b|H=*N<6G6hr}AwqPD7)Ml58$E@hi0sLjdH5N0l$Koe0x|i`yp?+;gtHn~1rD7iU zcdY%!YqQ6Iu){{F*T|Y~ZCGaL01J|aE0%F6Cu*`0yp+Tr(FS+_pYUJxmMwgqY&eVU z%qMX?1o$y~5O%ZnAooQ?z-vZ@t`M2+3slRgqNw$X5D!T|fK@0~p}xU${H;ocrz(bbd(yqF}`9O zzA|p8(y;6lu35K>H6`_p6j9Sc=`qm74TqGFV4qQQ^o(|RhYQQbd@LdRFk+ChbXIyy zMOC-#uCPUf8q;)}wuZ6X%8p^rDacn@#Uja2$7*PmUMC!#1u!ff8!=EgOVKqs)#HLy zrF?WOKLo^8W~t)_K%8&T+O3Wx2@8s}+LrS0m3p)wfyY`GJM=m^c{uJ>m9Z+agW92+ zyGReM=3z?3-8n=OP>Wg3n?jmAVH8&CbhmU#*Mi}lTucax*m1qnSPbUNQyA&Qh?-nO zP;4r-2&YdiciR2B#w)0~WhgD>eDEp-DC>Z zkop7_w@HIRL#7yLV=FmcnxXo!5~XA4vxb69L= zWGfiA;Kt8k)4&h{r>?fw$Ah=mgrvwKhT_P>1*^(!4)eV6fl2THGV_$L+yadYh=nEU zp(lN+d|-r1U=sC#sfK;h)q59Jl1Cq~DWxVOG|^@bytJH4o(UgkbZ2d8f0|AN_EE3vhUu zD+T7TJpociF zvw`(uzy_=^WOLfGrzBKGu2g76yHtJp(CNN`rU>>A z1aXjJ5rRP&WQAHo1iprznn}wrsNVUSIX90#BlkKrd@X+RsR35s6C0Sn7ZB(8x3KRh zv)CZdkTozo#s%bG)6$ZYgOYBAZ4dXHY|=E(AsZT+mB(j9>)Nt`x4vB>xq-*tSI4t) z79|A9lD#qrM^%6iR|k4l?zj8(vHDv_<{S0d@kf9h!D}qh-OXyv$l$2mTf?UE$aRv` z+U%(gYLko`pvV=`hnJKb!PJxNay$yrchc6_i)ITd2duxSMB%~p%>wvZ;cU|Fg5Cz} zGwz1+D~9z|HV9ChNYu+y#}E%8jVD93VTB8X1vxtJB&$B5M>%N1@Wl7i*ei>Ri?X1R z7>dp)mZ0YVMC2DkYLW^E&T=cJv%dsz`Vyz+`7<-ubNLW3PHZicEtVB!K}XFP2!{dB z>GLbM(|AHgioFMKr99s94(l*9YqR}2Xj_-pMX0P)PsganFkTb94ijCGNH#X?cIJFt z^s5HunhU`4_TEcYPQdu^vXC;2Se4VA4L-8OPzb_;yX_Z;6MV{1~O~@RFid7KFk$dVJ)FyCQBPpl{G^JV z{?hh^W{^~=CQIEb&yzL)!^guKI`2=pU4$}KM8OYJA;<;hFDPm@3yJS(O71Oc@mIGp zhL!wXHWFu|ao6g=e<@vnLdwhrWq4Sm*n1F&DEuBrAGLBhY?R=$!PCaG*HU!MR^f*} z4+EYzinkbB$U}O@v=7bm;|r$c8)g8zS!I=``adg)mApxc71ksr8puYm2?yhvBLD-T zL6nLpK+llkv6M5Rvq8NfR9J8fLzOrJwhy~{iR5c8p-hmmTEnWro^KayrZo7{;H^jY zli*aKSkLmRz299E09%Sod}I+)P_&Wi{4i#8`S>(c9f}Ik;3x^aCqacvdCDN3|4}ys z=S4ood&fDJD-$AIi=xT(f-z4dwhK1}rKKv1ESDgZ&OnnJU6|(o4RS_yfKVAgn~8)w zo1ZzaMlhcR#Ku*eHylXT@f7-X@;o{E6i&1!Df&|7Baxc-22zKw=OQ5WicT_Td|Jqa z$L27pX}JD!m2or;D|)MGQQlb18msZ3i!|9exY~4!pp1O}umLpUzdDm+(?;4jDxJ9 zSeuVea++z2SY_E$@K8^mIQt?dE=t4o<_IkQK!=eMF8m`i-X-f3n0jiWWs8H-uJY(SW*So>5XPSWZLL za8$q?fc>g2aG`+QZG&8Da3qtK61>Em(S{ezMd~^Omcyr6zz;b?g>x4ed^?NoUXc_>#WulEoq*H7dNaQpx1lJsfi@U1&Q zrP!9B?A!*G$3++gQ+0`_8IQ+IJ1tkuEK ze!~e$Yv|%wNfA2yW}IM~1PN&4ExW(L>Ny;~u^Xu5f=Dr&im?&Z!5g{VDxXd2k<0CS za;Miy@CVipy%`J4Lz1pbwR3w}{j-2U(Aq$4s`Hw7C()aksyBu+j<1mrd=W@+GxK1w z>_Vt5=Pr93t2hhLl~@(w@jS>>vlOzm4Wt^{hQot&bO`LJK*cpmHIa`NYrSZ7uI6xF#&}XE&9QCx*UGz($y)qvR`5ME+c(@Aa))R@yYaE$c zup2vO#U~ogd*o4mGLGh_}* zSDpfyoy4>eR()~;wioGe(5GnLd~T<~Xjg)*mewy?msk8eN#H_Fc%2c(gqu$8A9!zI zE$fyAH{EnC2KI0oKc!!P&qEEk&h|le&-2vYN7O=pf&$9xY^p1&^rG%sF=<`z2>uSFiQ5QJS}T&LGvXViIa$o{m5RhvAcQ3eGBUVW0qlTW@ffpbI8m zt8_iU1TZwd0@E;56fDONP6Av#i4w}~`+GfKnkpg2Nrqt`E+0_&rAZCWfy}q?9GiBO;9ro13$7+G39anS zIEJYqr9RNnNFaXeTGWfMsLg5C7OJ=9aTeWtx$$&j7a}U!6zGx%Co4)8*yi~=-?@u3 zhU1bV{{hYPR#$T)X%3;{IMID!UzmoJ9$R5!j=@MwhG1wOj@W+57KR09qfI_3;I~v` z78B@n8@7~XjrC9`)_Ec5CYDQ=9?cHsDL*Jr!g{cx+ig7LMyZ9+bp@Q_Q~3&${Nr2O z!>2Fw;X}bpRCM4ofM5w|TEiCRyv$qSPzD1xoB-2&YZ=ZHye#|IF>b%z(NlxXA-T0{ z5Q$u5#c^C)bO(wiy0iw6w!@@zH>w+#jzykcqeYsxQt;=XW+HmeICY$-Gq`FnhKR)= zdPt6RSP=j=(4SEK3LX`1dRb}B)W>V%E^rQxCzdZ$C53P$COngVn;OPXrsMX?q0&vt z2Q(ce65~M&mU!ZLcm(3yz?kNF1znC*Nc&YsRQr<)gSWnN%qT0UgHOzk%Y^Nke`yHi zP>bdJBFqOm5wtyXQ8Cjw=3yVL-sB z7_1!n(y+C`>9V2m_1;)Ouf~-{7&rx0a0w9}#9%0bHp2v-8JOdPAO# zyqKXCB&eA}ZjybOVE?*94O7ivKadFJAF-GyVeXFdxPd^jx1Fl>LMucY$oO9Isl_3I ze$|e$!^%p--zzIbs1JTvlKBgJm9EB!PS1s-7(kJ3T4vYM6~T}Kz$e@cs|#JUPsQFs ztZ@W9U&gfwE-#9?7(dE{glM@eS$a6CXcl>Z3Z1}5ga__p%;p`%0jb3<4;BvnNsokl zq-TSUH~Y*?ec;{KXCdyfGpS8R{py2v+^@ke#5siE3J{ox4t0O)MLQN4fsToK!mx+F z`sF?je=q$sxLW|YxS=H7X>3sH^DL;rR6gekiL&U9;Qw_ug#gX|FxM9D49}!T-1s%r zE{|A-EO?s_X&p%j%`QS#?AdjU1kz|3^U6;8G)-^k5lKil*w<<%mVKhTttKAw-Qz~i>L7e_Av>+bC6CcF7NN)+K1Wy!Zhlz*dkmT zcHzW2F;%79NByuok@bQ3y?17a_AI;niydU%;0QoM@E#FCm4WH1kg5m4U`FM|=U=~QxIm4qSNF{7fH3Z2xj!KH7_Xurcn7X`=7UIM`ZLe1GTJ@pgJ=ko(=ZOSD&nNc1WdG zAGu|E4n)@j(Fia9t?3}N{V=BmKCpu~Ab>k`4w87wC--wWD2s#xrx!qsuD{va=L z8WbuB{k|Y6{R~}Ltzo5r>!#=Anu?TnXttvRERcnFeIH_H=*}1RULEy+{W^#*LiQBz zYXf;~yt~xjH8*4_sHF>RU&@RSgmpukxbc%{4!(b{BE2eaf+rElvp2;*VN9-(LVR&f zYJSsZ5^p8CBfYzr5*M$_>#?vEwnMk-sb!WNa z*xGde2`?_!42>u*_{DwMAgTcnff=toNn_ZM-Vf*;A>6Y7!cY~KWR zpXp_9qdDy=j$d~1`GPgNM#In=!-2km{vW=M1yWftNX6YF&7&wKTS^stv_csw%`U*Z z@nSS{6!6SD=Ai=yk^`d|UKsWOX{|(MU(PurMuBGc`0;M4%|p7daXjX5X2e10On)n< zK#st6CYdY}Ig3my0a`x>KYKV}5hZ%<$*yL)M}vu1Xyb2i{_hIX_ISE4i7wV6l8)#b z84h~0k#IQUUs^ALBqJ&^F@6{vO)X)w+teD!Gi}4DMK8@!kdi-S=}LxDZ4-90Pf~d+ zO7ZKJgh@IgXxXt@Lb_QLD?mUA1eA2B!v0gw`iH(*0nj9a%ArBayNsFTxxL>R7%%b% z?1`5E(-SOD+m3;5^skk3+r7LqOV3~<_$!hIH{kX(#Z3W&0=dx*C-|WD1m+mt^JkW^ z?LL8ut~!)JZY*fEu#*^d7qIu?PKR<~Y?7o-r3x^9=r`H|D0bHzS8Gvc;f6H9hr5ri!99?f*B~FJ1U{MLsls8I$0Vwa zG~6{}V)jsyQOD&=N@Z30Atm_*oEHhHH>~n&wn7@_PopvoF+NHC&ctyk+1J!r*R}I{7Zg8j0yV>j zk6ettS;7h!Ey2Ss%R!I9xC*5N@5CW)VAhue%=eyL6BuC|90~D3v6DB&7iVl`450^a zhIG@Hef8PP_5OyvX>S5%a-Y()3!c{=WA(H!yr{~=Q(7H57M2FT&6;qjWx*(Q099m~zlzCe# zc~81?}R{ug6AsWaVk$ z{8Vfo1h53&7)A^&axVUAH&y{-O^@)2E~u3au&YBq&=NSx36H$z!$9)1*B8WyIEv|ViWK)-w<=#}f~O*eJ~>J_L~)$vx< z&pa!8mli3tHvC>KC>`VDuAL%Q?a-G2IZ8qaRPW#TY%KW7TR5sqsTW3Seni%Y4=$R) zY`K$>af%0nE?|f*(Z&x6)o9GdWYQ6;7h)#DMxT5;8r0wN{7B=8dj72+&1GJzz}L8* z3-OrGoR_UU@>(gfS^0{#^xWV{AIXoZs~TVD4fyZr^b7y)V+RiVhpQwTa?Zy$_14#W zY6Pla!$phkBwoM#`oMTB0fA3i{4;V%_6{xbg1t$x;YCT>TsEZHrFk8eB$HzkS5%aB zAuL11!2VDqz%>_5A;fDIdWrAVy<*|EUthcyBU6i zoX|cCzAC}QF!}TO_B?llp0G@xvf$=@OkO)Qx|pJGBAZKmgb=qYD+HAP^7gFn>ObMw zKom0w2|qVaxEe6>ji(VlN^}>|{pEva6oXM1Cy}92hr1wmH1=MGFf@pqS16oZ&tLDO z*F%*rKvYYWLpx#ZGjK3mp4{Il;<#D|@JWEG98ESbKGorp@#%?eY_jN&NK+1+W`zm^ zv4+%mw+tYNut^m%=LYiFgpP#_oUrgeYcC%@{Pw?F`-eB857X+;o?U3LQ{eJP!WVz^ z_O_1wYJK2=2g*d=n(FzLNZ9L_fz*D21>1C%%dp;wI1TW;TL)(t=7|naje@}l8~W$h z-+k!*SHJzEz^4txu8ezI0rnP#ab)NH-}>HU)#yulWx0mob^1z`CtIFb(l61-)^G*N z*$;j!@+Un$Qc!hAhs8^nksC(C;yuZ~-S+DD@0)k;2Jg}c7=S_cru6EfJrI~Pb5+$) zd`jH+bbh(o(_?@|VFPQA9|1nmiPa&FoHR70R4xHYH4G4NQ>>Skr~nfihEcvtJm9~M{8^$f_Gsrc8*E5u@10?T04&NW5VNwB)svT^ z1Ap|hb1S#zi?8}QpVO*r15p0pWyb1QW~Z`#m!x+|uV6ap8T;PnZ$I!~p8CS#&Q_9@ z(mdw-*Gbxi{^job^i8{tvTsYmm1L*OZy7_-nDMKl$ zb#NoW7Oo6_h9&#%^_|w(L$Cf0SBm2aHTV0=^}^@=^(#Mk{>uJm#pHkcTL}-bwI%Mu zO`d~{ot36F6$$0D^Pzc?Bgw85x(_8o4~?@7$w-qBb+I=x=&^$BN>GEW6IHWvi?`JG z$X$u0JPbV&x4iTmJJz zO8Q#DAty=P9^y4=!2Z=Z3?&-4@-)`Ofi;!ZEq;$Zsp3(swFMmjz!SyI>FB^ zcg(JPpWCHfa{IKa<*hOKFGLo@F#FWxjQbO;hLlS%D@%*$gut%X=g`dwrR}t}y=0+M3D%WNde=r0% z%7_P-LuSF*eO%pU_mD-@@$1|6urIfL7`gLkeNCudpH@k}7EoBameQPLwLmk(39KDp zAJM79p?3{KQlQRZY5g#a3bDpsFyxruee3_be&zMe1OMPvAARQQp0f|yv)-oUPJM1yII#9AMk8E}^su;^Vx7b-DS-a?T`Pz$NPALbfD!kxoKZ*M zHVMD!c$Xjl&NILN&Ie;1w>ASyt@^Go|Zx7EJL;)|tSC4y#GL)llPo=)__Kz-{ z`^jCudfTr&^O>36>pLff!33YYvj(qjCr1FTDMZ;SxpJB*g#Z&6LHziD6(flhC&qOcjiEc5 zWMpqcE46@Sc3Hvo9eM$D+DQYg-{Hlniya3}Ut5%$MMgt;%zkqBpZ>&sI|;nBDIAI_ z7UBXg1(-1WPEYX3WH{h%qMVD3mmm1n= zH-7%lAARr8lMC-WWkfpo#p8UiFt_>$w|n!%4AGFM7mMzcxZO4MI~$w-eoZ45hI75r^YsIt8W`~0^}?OCk}D!M3gSCM_5R0y_(=9)xsZ>>b-INw+usVox#9{4DS+NCST`qU+#xo`0JHuCTbCr=5+GQkOO3G#U_PzKv)Tgv z9e1`RjN=56dH_r|(eys9>UxjJE&k)| zFW-Op*Syv7ZF3eE{8A4a_mHulz6W%+*xmN*qMCa4B75;@oOuv{3>61FnM{Uf8gd5hwEDxM1jC8ks5pRy9DQ_1f`rn7VknaElKF7A0 z_lPdvQ|LD2v~;1lFH+#Ql|ksdz=Go=S*Y~2m)2$Q(5A$%!6fA zMOnI3`Vs80XniH*0T1^>_)BPbQs|9Q2b5|}4^pYcWqmaeFp(2uipeR&8er2x|C5J% z!YIDV>E$3!9C!{ow8*O{(OS z=7z<`cf5JmZNJ+0;&IQXMqCmG3lPLEinm&C&Av6e@3!$bMe!RWJS7)jIH9s?_|O-o zx4;c&MeAZXuf=TMW>=_uU{8?n1Co|DV+C>I8sqhy6*tzmfXl3S>EA-Ijq*TVaDG{X zNN+HHQwugtKS&c@?0_}$&gNHY^%NzU*z1&by`*0M5m*`BLnVdp93!NHEA@DMz0P`= zujT!Pv(<}hG~ytQSYDJ7xqeuL2gkey%qTNU-GlrXwQ_VTG+08jfjAQ+fg+ba{_$cJ zp=8v(tV^=Ue8`aWMnD>&MGA5Rz=#zv3e7A=*s_Jc;VqU{iH+lAZIaY5COev1WtjsD zwgeN|1z|bW9QargCqAeQ1`8X%G^fL(2evr;P2Mr#8k{_^0szI1f%XFoIhdj6diwq8 z#UkQhY}xNAJ7x{Fue842cQ6+!)Z$Hs0-O@dgc@fFd_oO11 zcr7sn?O+v5XMTCu!+yc$NjDj-N!=!CGn|JG(_Zm`gYzwBOq8^df~=Cp%Ak4iNIxX{ zvH+yC-K!=yW3y3 z>s3;@m{GW+Ne;NZ_x_i=<`ADm3c1D{fll)D@T8^>A?ud53EbT&0T@i1+ta?@Tzd}R zq2T(B?eTVH7Z|hZ*vA9ko`1@Jli^F>4t9&7%4#H>dgz(kU%dat(U0?%2+Yr^-XDO{- z8WVU<{pizHIyngd7N6%W0&6Cl7{5&lEa2(N6jsi1B&^knaWB|)d_nH_d{zoyHu^B{ZszkI+Gp8^r0VG9dxge2n3bwV`a?OQ?2wt6iom2)Cv=jBlEp(&JNU*7{7t z>~$IN#H2GQ4WpAfX9spQ9s2`2kXB0IQ;Kq7Ukj!z!V!>B!RooNQ@SNq$lRWQ%0sR4 zE-=)P(Ey+)jRK&QxTlmNhMKiGo%?r@cwe4|T;ZCunE@IQAro@Y?{F5NTnW^y{0*`r z@I%(>1}?^>3P6IWgxqqH?u8BDHaJ`tcJgeY6~4cs#yZ$v5ue-$n?}y~GCegt}j*&8@cP4BSY1PFdi-O*1uC_879D8Hs#&^O7 zf5vJ3{w8xaQc2HtS;7{MK#xR-{2{3uSmZy%R`8f>y|I_L`e585Zao+-RNpS0Kr)fG zoDYT=)XyyFG|T+7_hxy%JV?3}Fle#BDAg{z=5a8F>6adEuQLN-cS!nm;kyT1sRqnM zl;c1`Sjw}`!SF%Khro=PW%c;+Tc)L4Rb2nQldw&l1_3?Z(v4i|^E=_CUmt)47tGhx z>iw|GVlIYD^yw_KmkxILKt3sK^i`N;T5faaC;!uMMlF=*xViY@0Hk^mk1Cp-Qi0$F zwwBZv$f=Z<8@M5lP^#@O9hm_LQZB7Mdh8c>S#ohygqtj)K0lOl2JupYD64++Ig`;! zF^IhNY%#nQI3KvPFBzqdVp;N_(Y?5a=Vu)xm?B>hBF`8yFJCnQHYbO27RZBvrD6q| zc7|;p*ab@i_b~shgqY`Zh&Sv$u4u+_zm=v5x|xI=GRS41>Vmg1Gd`+^i=4+RW3#j_ z)IGJfJ7cAgl4dE)uMRaw=?t^m(fAAE$lAy{oqY#tQ?J{G~sSYBYKn1}0nUqcy zF6tS5e^AJ^0*s|{|5e2)_XDM^<+q+26LB_&T}!7@uRe+aOcHCZQMS91kRzd^wLkK> zbl4E&W70wRtdg`x4nq1+KuFnaAL)Pg8Vq$IBaH}#0SAWeTM{XzWMa}W&p3_Q&?c|4 z%t8+VTUz(?JJGZwT7gc+#*dXwWfUgAbY|sZ&(|>$LInG?QseKw(k}N-!|drnuoO!X zYtO+`M~xl`bWO5*JUfCm&ZoJ|co5#jbYuL@={LUkjcw1jLcWC5#PwqlcusPSG}s@b zk6bOgC3m;lkLUc6uH7M!0@-JiobV>(g&6oDyIjAm(O)uhk~PQ?k#O8zZj(koj87 zhUAHO-KZKxMPZSR7#VZPf%Oa%EYFs{!VPKfPDzOY zjPtx3Ojt!H51O7qHc@Iyx0NWQG@n-Mnyijt_IR?3H3y_V0o^1g=2ay)S@HvuKvQ@E z!QyS&8qgj@ZRk+GP&EaI`s7UK-Q#m)LNPW?Y;5O7bq7!tF=Jyrgxzb-vv5p+v9JuN z%rylM;%fWeVO=1HpBJH&9yOvUtWg~Q#eaH=xd6X?0}v1oA2h@5n0kTFhn*H~2Pjv0 zC2rCpI9K_kXBbcY$&pp)6KLD`uAr@9IV0b-aRzKRk-w3si+{S@Soq74N58S{&0W~) zC}D_xYJ{~pI0={KoQc~xhblqjtX3JHK+UoTkp%+&;bC}Ym(Bg2>rj=75K?luS3+t< zBFH}OiOj$!l!P@=<cY!Jj2pnFS{&Og;g$?;RE|Yx z5a?f-<)~^quV6&))7cNhQF{Sa&ABd-0YKu*q)%4eI!4f-g0~!zI>~l0JhgyKSrl07 zo?2o5#P6%hd3PFev$Jm#L2;P9VQGwWN6~=+R=X$}6@YChcHyfk@Ig$6TmF@J2-+IZ z_EJv;H)~=-Oy<+8+hLBymtG(aBF_byN(4ReL8fKL+{;lvM}$>^13bZ5D8?3A@Wn%Q zg-FR5zA){sL6OnQBjp1z_thr`1Nc+C4+>AUdH1B#q_SP!M?WHsSLi{&ms@%)Wrmd& z%m9)gpi2eu1&iSi5s_m6*&jMMI~~JeQEf|QzJYxgk~{@$lDV54l-FUEx=nf%xNzHW zUr9{G*Rz{;c-&xrrBy1Az!bBgP|OK1a^a9JY#X(QH{P<8Y~i_Na+jxWxKu8%jOphw zvN|gW2i6Dy9_(0$1I+|hO5{3ZZBnC%?F5Dgo}E^7LvS?T71$WyI3yYG-r^e4S;Br7hvi@DUxD?B~xett?9U0 zA@Z4_7~**1&Wa2Stvb$R{4i%w7RPS2+KX>Ia5M>V+C0bq8AT=-6i#gLK#@J8-Qe-z1;Id?#xyiwTbCxWbHiI~vc zgH0YRDb@^bh(!mUjt!aRi5nJ0C4f|Kee6J~o3EAd;IY(HIx*FzqXU9VQNR=+o$!=I z1Zz}yeYi8qbyp8>8V@V&spDe=m%>|fhNt>LlQJ|e>{Ag_r7Q&p_|B^|46xkDB{<8~ z1e`{J6xn8rdtPbkm7{ZDd8n0*`iy)k!1`_t`u>m#Bum?~K)GPrUMiBGS0gS^1fly# z5C#9!Y4pZp_(340&o*TS*fQKd*lD5%GsKfT( zS#6WDF4N#~3ZGf#z3K-yT5RdueMWu}9hsoRHh9 z=Cgl-DG1DYY%_X!2DAX)C_f}rv^!xL(6qY=gr9HB;0SfB;Ww9xONBd-2j^P_{<&us&7tkH2@G8Li z1&8Wv5|Y|YL{Rb84p?+ZhBv?0EOH2`SHfoTyl?<#8+eXGyh=g5Pb>$utz)GH6fFsB zU0Q?EQi9*e#tlt90FuCeaUCkU^BI#GmZIQDW%twQPEDt=;4YQCh9qHeBap4YJQlG* zEm-3n#P30TO^B|ZIfkJ$i;WeZ7j<^ouW`QPK}J=UYaO*JJh~2SAqGyvrbfPijVG3y z{9KdaYPW0vC2|^h`kE2P_>+HJ@1N>d!(jfjP|!rT=OQ_|bLWI0BW32%C;~7c0Jh3) zcr?K)!dBuQ76v|iWFFw+Hl#@00e)V(m*(l&Lz8KN1OH5nM9BR>v!?KeB)K;&tTw%J zBd0K9GQ?DiG009gYmvD1_D?Z{q3D%(gB&QfNUTJ586HlkLn68g>eM2Ske>=o$CeQV z_GnTG1g0>p-rUmZMI{x=KMR*Q?7&#ZDqh+~ht^X3?XpbEoW8W?U42#OYC#uKOGBn& zgqQ&&=*ZS)B&l5bLhzijzi%8C;jkAAfqQ{<3E=L=4IKU+dA(g+Jmpc*ElKbQ_UIy?a6|mLzIpGJQ^>qk1w|~jOc<=iz{At?LalgfPJ-{c2xqKxcljQfsze; zYz8ryhZihaB!u;Fa+B(!6L@P)%_2VBb8L zxgq}qSo0;XtXy=l#{(=}RZ&b!kDV#D9 zhPsPG%hK5gEQ&x|>C?p$^MFrZkas~vRBcp&5BsHt{>FKWH^dVrV&UG~QdV&9J|34}F-Fb?J(p=U$oT#YO7f3G;xg7Pw=LUS4q{HAxz&fmwooHnu1+PgcJf z>Uj{6FsX#`Q{60MFwB@8XPlablHKHP0jN`^`te}qy`k4aMV_yX_@x<=1!OT393HngzvCOhk$;mM&KlZP7?Th4PsFB;^|E**YZpe6T%pBnI za-&e*sUbB5{qGDhBo6c|+`!-(kI0A{0~peicbUb)4|Y|Q?n<$WT}on*mEojYI`m-? zTF3ag+{G?Zu65`**@m#YGcjV5!#No`Qba(;s40rV)j0n`n%WoYz`-2UQ7-VH;1nbP zJ2~PT+*PVS?`6AWLDckeKQpV}86|y;X@O?Jz`?{|NJiB@x+xE!=tV4Rx`RtQgs0&1 z#T2Ua?6JFs1FXX7p#ri!;L&4OpcvH= z8x>-C^dn;DHjsGK68rngPPK!GHVZ(lBl^!lZ|5`zRjlEZBxi_xxVBH9=!*B28HVD^!axT6vBA z@1C20g2sY-6SEV|yBi^D1Rms|zJgEj(M>rNq+SXdj6!Y#swyB2J`N!P!(K!ci)y&X z;tBzcghj;ShMiH6-PRO9y>OY#0!zi)=B+lGi7Sak5dX{PAif%|L6f{5x>p{#OmN|) z0GtCoqk1G(bwJZs{Mp;V2O~K+C^qy0db|+8kJ@32Tp%Gm?Lr;+1OOS)W@EdXQvF)F zmxd?dF%;dOu>ir_3t~}9aU2X_8A59QXK$e^7D#cHUPxQgoX4QaH1_*}v{K9?8e0P- zgS7k0oG3n3Mu#>{oKoGuI&-mvHH9A`9pt5~^kSouNuF~l(*k%46(YG7zaQri4#>^i zK4G4>?ouU!KsQUe*_>X%p?D9rPZE*Ouf--`Cqx3rG8ajUF(1Pp>y2`k8G{qu$%1Ke zgsG@bvvNxDf-8pih6EV0&4N}SzGFojr1vFiqlIz)D%xa}zVuGq1=#cOd88c`7XgN` zppke?L4WDD?0&jHn`R1Z%7vuXKZROTQxbzTVphEu&cu72a;#n0W=~59!KeI1it5I;q0wzRE7`1Rs@Y?&z4Y5}Z+yluiGl$Aj z-LnXFxO#M#3havym`iiawPQG>2nspv-qm(oDV824=i)T(B@Kvp2*5mcN-INYLdx;j zJwuGi8qhH>W}(2#UBSs)%nxj4eM(uXB6q+0`NxlqlpyC3|FTMZL>r7ghfP$7=6h6E z=wJ37Jo99|7#|jzbNrS|{CE#pjzV)Gpq}Z?Jp>!XuiHh2sM~;FRY zSJJv$E0hH`)`uo*DC)7NmqvqFo|pKvB90z4X!(P%h{~cZz(nXGftCDcQL(wbj!(Oqvlmr`WmMwjq_Y!&;cforLnpO$iWj{a5I|xrMROvL@)Ir4;1IST7EY zSK7{v{yIR^s1yO5`B+&*B8n$psKDZ8LcLcV9Jq%QtPua})^v!exU{?`O=@wmz=L=}+~HBHbGqnL=4dDYaE?w^YJ2Q{}y&?;};wtHT^UV`?) zPlaH-uJzUw?M0nFsRE-T*byu z=?;IsCb3D^V3Wg^fp39Ja3{aB!ygy;+~PXmH_1oLyG-E~tCOtNT)-~$1v%tHIU#Le zbCZmp9pLDR2>qcoBjBJCn89O{DPSU?b3clPptBg1UWo>HK|@23;yUD;F_ z0li3aoq?dV1dkE1{{)kRSz!xw`VMxnV34-lb%{|+umpA}cR1T&tEfQ52Lx1QYfoK8#~Q`RE21%2+(vh!1OT z94-X9E_iw99@E_7aIYp6I0w99#VTn?lk7aaz;n< zz*YoF65m7xUKL(iltsoCdLOMKYH>(Q>_(4Y`|@woaYLfM_L`2zJ1QaP>ILGS=Gi^+ zsFd>PZRD@Bv{ghj{_HJpuqJyI)N9(EPhmv)0b$+O@_U)9gbI20Tn>nz0q5ofjWinx zdL|W<(}O92IX?XfS>w`womLpJ2Mk5VG6DV1@NumCta(^`9kRv6zsWMI%YS`40^jB1 zcd%WeS7MxFc@8Jqtt~XhYc=%v_W)mjPdl@AG zs61|s%Vq}XXH)$6x>*o#CauTD#^CkibhW4SN?d0|v5>=qO7EJ?aEX@Ij)f{Cj?Nlx zQuq;(lR2Ez*aWdgC*}&!YO3Dre@H)ZpSYsHJb`D#dqK6mQucA3NcQH3ZVg)`xrSHSEQcWCOHi1mS>;%Lu!X*Is|MqyXlzx1K)K z6++)ELkfXRPBEZRE2wNl3}G_jvtqdWU%WXbiM z!?TqYyFk+*uLk0G9vd4kA!nU~fhTYP6wnPpYJIv}_b<~paK-3e!=*az zb7jS?xm(;qD5fEJMdEtuiee~w>P83LNDIvm?8w}=8@pWzc|YeHhE5EFm~}wftfft9 z2Dz7aHwi6#?M^rlQ2oU5TgEVg5I*rU_c8Gtqx1PoRAmIBclZXel9ge-@O+klf(&I@ z!uwTTUH%cS6kvZYJ~RsrF!c43cM7|s05~HRD%4%oZ7~M1I}GBl%KhbQLcZlh5iVTd z{(NmvO$q5_a^-WJO6qX(%BWnNDJTOj@lQx8mgHO|rvYP1XPh&y4@2&Mj9_>n^VKtO>Z zXG7xb%qaPGi~&?aY;T%#c3|Um9x1 z0&82PC@{(SM6RXBhqVI4)Qf8gPX&)n7&CZU*wqPYs{kLum6*rZjl_PcjW=)=rW)4^ z$zZ%VHROPj$r|yv}?8%{L@%r&NKvR}?aZAo+O^LkN zSgm*p<#EEnu5bxD2zh2=g)+y|Nt}|ys-hQQ+Jd&L<<2CyoWPJ1Bnxpe9*+hxR9lIb z>5KY_bPUdR4g=T~8Tc?;--MeH7>nv=QDS!{IBuC{GQdj#423N!$2j8lMDyO%e8V99 zaCEA67UqKs0S+%n2kO#S@P08Pan)M`*rISka*x#JJhE6zq_LOIu3g%#fCwIeL<|$L zpqN9UxR|1hUt6RvO|Hk=9VgNAFTf4l!-8TM&E*t0axXptShD!%X?#|^_|dGDT5@lP z%$|FnngU?Q`dY!aTD^`my>67EKH@oaoNXlIVe1CIJiWw6pJ6Ys-%l7C*a;tpH4Xob zzJ|>cKa)$_^h+uW9|q~I17c5|0u}Bq2!z3?+38HJHdF`z*i@;dCmrh2+Og$HA8U{{ zGwe6_pdbX#8U$kE!_v86ZeYn817#UcX-q@0>OzOlSzu#^|TC9f{T-bMM3<=!~X$-<&+k>DgK^H(m=9t=?g73p2JsAI5o5^6JJ z4sq91rc+Y*c^N{G%hTao1|k)>HW3BbK*9h%yta>=(rBE8V5Q#A;Ynpt$Zmo<^xn34 zK6Fm1P4KFb5g*+^sPdxSJxolehOP?d0(jWe=?3pIa!?s%fPN0(zDNf^8pYC+<8TjS zkc|f|KF^KTk^=$|OrjN2aCJo0x4raoj_lIg_kO1F_QkWm#h+3aJr5pi|JPT(^4I9d z1=A(J91659scfu@)Up}{my`vR{U0D61FcR!rn8U&6^_9j=QIm2+(Sse>jcttQK{+I zz}_moxhb_R(==mse_+_-Z^%!F_pHh<0(W>P1ju>4mg@R^-}p~2wn$SOqi#b${sa>7 z;Q-SocL|i#6|f%O4?0PXOD|;0xK0G{dP6Gcd|X_6q?ZEW~IE3g?NF_kufnX70k-F(rMMWa;kVWmSeyPK^& zZ>g2m;D;EfowH^YasyEJK|<3bG=nS#>imw_bY$pIDMWY}Y_Z)QQhJw7o_rkw*zi1r zlkn!Hdr3OKW@1)~a2FN>b@xnV45g1x(9L87<(_-i?Ul5{06ofr_MrK+v;BdSZ+1oM zB`_gB(@&CV=js!YEty7!qnTB0Y_-ljusp1h#1yKe%@_q#yXaa0?BuyCn3CMkAhJ#2 zN+U=bPb2AO>G1`JRb?=tvD!ef1Ip^65fF+liYcl*9S+RJ1)$fqsiVo$*ANe2F9+TG zX5a~_FpGdPn!-SvN&YsgZklqdQ)i%KtqHpdA!t&Eb|`BPZ*!K@K`iT^{!jL{IzdCOul8ybIshQEO0gy@EGVOyXL_~z z`0j89jgcImLJOQ0pwz{b&{lx|ITDfxKslnb7N}qhC5cUNp-1Yq!rL9koKA}jMezQ|A)_q6tH!bokB z*%aMVxY4p5Ks7f7(N(#ime7BcQWDQN8w>4#^9v$K0o=(mpkp znOB*Rg~q+MoCz5liB6SFVmq2zbl3-HU&B_n&s< z!;wmnMK}@gR(kjc|NYjU`=RN;8G~o+4=F9Q78SpVW5_a4QNzj7HsjevKx|CQ&0c0l zxh*SSctl4QRg2QdIW>t9q|pE|C-zA|zJ=98$$00`ZCN<9VGbZRfu3mn{H1KD1|6Hv z$+orZpfPZxDtP-{Mf4EFm4S8n8XNO2G+o^`_6ihhlf@HTQJ2Xb@_^i6p?FGR zeT9AwP3j^73W!iBhjZ3;3!Ws^XAY;}%kdXru%Y)_)u;+nXpp z*av7Ox)q>P$#+eY)Uc_LQW5LpRRTeQnypu9M2`ZsuVUAhAzkeS+o3Z7j{|1Om`+Ca z2h?$eqVw1^?tUzkFTBvjx7<<0RFScY;f{z6;%M19x)I`x}t=cZMSJcJ0@|F(esO%7Z7-Ho;)4 zI^gzP{A>H*AxmeKhQc;JOT;16#|(lVR1OV#11IEQQr}Ix^t7Uw5y)M(yDUE|FS43NqjM7i4Q_xR%j2#y!^&Xw<9924n!Gzi?MZBWxYgEcYFibtZE;fyYqRF`$yf zKX`9m96C4&lAw?GZxndmjRRF7CZ!?#64e7Fi(~SD&p9<6>H>L6Ql4ru^$0lC4s!FL z?uQGxpvB;sc~LBY`_*w!KQc)?QPIt{zS;m{D1i8zFQHO#|ID4(kOPYeP!DwBpyq+X zdReEqY;r`9zZbrf7-EVdZh(h835N=w0&Y+A^%b5cHxE(J3na8CzD&@JEe_*fDpa?C z?NwH2v-SEIN6Hy@U4{PrzdAs}g3Y9}V}H^!Q&B*p}XKLUfBx9 zNyGU7!U^&(evyiZW?3j~s#M30Zsize1}*+2iR6CN2L7}EJ}eWt=y53Vp+>@YMluya zdz(oMt|BO9a7&6s=2%Zp$;JBi0T$8B4%;Q;UzL(N#YDH2hLnH(*a<8UUZvo%&4Fb^ z5kY%URiGPUxHcJaJY&ybf)YUy93f_l>7Fl6iLWn;k^(<>Fq`eMfr1z^;hgZI_z|3> z$PV>;imNANWyS0Ol@+^EpM^cZaU0lyIZ40>C44k}tgn3?R zN*-q4&VSlhj35^j8QMj7Lf*1!Go8a-(IqMjws?IX%3E8hAVR5-0mCY6bGZ#j*caG^ z44Fx}anV){35R_{6op)%WWa2etN8ihO1_()mq@ zY7|ov&sexnpe{l$OG{Q>f&m-i4e$^*XQF*wWBV~k*8ua7ACN`x?UJ0%6wzH%VPdEbL%n^7sfh4VfvdOj$wrn zG0k4E(ROt^Z0Cfz;=$1f-Wk`z(~Ed0cC%i~BcjmbdZ~hvdp#fl!`;(;wiAj8Ui=74 zC5BYRKMNh$Jtgn{eWVUxQ9YsnHxv-Lk!+xVp@dg%q6&<##VJYJ#fB#P*0X->E;ReW z9}>Dw-P(5$vp`GKY51jYo`?hYQS#0#4E%|dh$1_ZS$VcINTChaM`+Ani3hn33pHC$ zP2M~|RjlyfVvFD|#3A*TxI6JN^QU&!Q z$uj7X-u`0y%H5d2(~0V&jidq%X?vK#vzEF-`?bT|A7A^gg;KaGC+!@^4)^P1au}Ng z_#^DKJl(MZn;q=s$`i#s^9@9LcnyR)syuLgh3I$%swzG-YD#jGBR5Q92+ASIiwN@i zn2$O1^-zR<)CPCt`$|I}&x#CwJv5*%bK@A_@<8hI*3y=MJp&# zJ6bT_hqj=K2HhVtquf&%*2N_QMrLthv=P9InZrK|N=Rjh%k0?(%(F?hk}0i&6~N%^ z1dmg34+>BKkmRe|7n1NwA`Xji2jm2~PeS3|5qX%<)I;{y`~#CuK_bOkO+gQMHIb*6 zpt=I!Zy^6At`faWvB8OB5IzXlGX^&Dv2szoR*NeE0axl zNDwK(F4XZXJw1bYSdRN2j+vAwle_i6z@5>$nHfgnj?@=gd~asJCd=+xc(fYiCkgA!%47+BadT~GfDiX@L*b+ zfR)IqC->torc}LHipBBDv1t2RIL$SVZd$a`D&Bbr3u8P{luq3pY+j%Vt*IVRf`z1b zJQKng0q1(f;I)k8+OcYKfU^pio(f7!AepfGfo&FWu7`kY$WZo3*~r}fi=Xb1@Z54} zuNFauXl!xoZcG+whZ69~q4bz=E|_T)P)s`}5XoTy?{2A4_Vl20aPL6Q8q(DeYJcqz%&G-@WqqXMgsc|Dx$*XCJ)%#zq=8!boM?P#NV-TDKpx>;ED)fj zQ|l?R4|y-YKe}zbG*G~nq@AZP{@ae7^RY79~n z>Zt=63n)vlL>E|JnM3FQ)6KO=xuL(h`d&X^S_6Q2#)pZnFyN|n z52-2GzBnkz;?I{JEAGWq7}5a!@%f$24~DR=nsfq_XKSfpQ_@9>EYc{akXdM46;BKv zAY(Y;sOz!BsK7?xUW#@XT>t|pgNGO!*g0`=$UL)10d64{z}Cj#v`{n&$Eb8?2#t>F zkvbC;>_Zs!bOV5Mbb_3AzCP|=xT{td#ipz%dR>I`AN6W-Jf=l0QnIPTWPJd>la{hm zGKaJH5R=g?Q-GJ|VD&P;`afA!H=*}888&C!o;+F2;xCLH8}}~%+HbUfHnh2&SuGjhx=+apw;`;j%t6_?2eW=RIcW(Eqq=4+Jvi}-+85d zORZQHWg5`ubeyeAi25TJ+5FIJoLXSt0VYIWzmB&4)PkOZMn>gF2Zpw%f9W-xb!SJS z@sM2ffnq`jhyb|w8>uXV|GtCJ#PP^&!Atx8d@*^b&6Xohm^)-9s!gs!9ZM^PHYiiHl-#E2NS_FQ?f6 z>g>sv?$TFc2+=+ME3 zOJDlzmk$5lmq!03e&`s9R&zQsevI(In=CgY&f3oAaDX)$mkRhg^^T!RqMW9I)9aBj zyk3?0jF?51sdm?-vPF#m{K;$6uxovAW1v*xkeGl1c>1U9l%U`+Tw@Ln#A@jEBnHL` zk=3dGNocA_Hd~J$Q$To55vc{~0b`z39lIb_awUTU9aIe$Lqh6WS(KYtt{jvkTXLZuau*QUaUqdMb81JYYUVOI3 z`e-%s;eYpp!O$H+3#3x1vJ!C%{)g#U|2UBt-~RIbAHVDLgVxSR$KvKHWR5wmLkPNc z&mFLlPV9gDtMl2YflYO>AI!aajH$DBteP4@)E&3UoXu230aonCaK@NX#4n66`Km%0Mtd z-4#p-x}X`OI+GH=Eh>HugvOTlK?ZDy=9Z=vKlG@>bCQ%O6#bMsjh{i_B>&&)0YyV} zw4k4Pa)#fW0(5cPN(PQjXNK9V4mG#Wi?5H6t<@Z#L{50@c7mVk`=2L9?|A+DpTETy@-^9{bS6ZPU*&ui;)lOx zsJ|B6`Tie&@cnnL25x?7tlG7E`Pl6T3N!f?Yc#0nj=V7Vqg1pZ{#9Xg3$`Ph0Qidv zJ3o-=+0Mr04{bl21xJ%mB`yRGf^OE^3JldJ+BxRLJi%j_mb;{pF}B8Wa>g&ML0!e) zo4=FXv<8LLpOlb;1aDF%Ig>67+%bJj!@ipx5vQ;95?@L`3%jCP6APXdjxuE(Kv)5q zr{RNqh~dQ)XdS4lTRmOND4pKD2zGI$v$!PvtU$-)dTzgX=?8yzxdAR z;zHwW?duyOhKQupp|bdmEr0btAHVj!Fa6Iq-~Ho7ZQ08@iB(xJ4BALiW#tF(5~zWT zntL!f+m)RBK{ojP4jL$GH#wCJXD-mCsPgh4{i)FlkBuEr&gAOJ2>nB*mBkY|0E*B zef2`O+*ntt$q%^BT962`#gI|JE=*4UXzyIhn|9t9qesSpkv}Q^7)4kvP_SUOMHmWvCX?%G~ z?1B$|bTjxFUCD<$BkZi6y~fpp&=Gnw!V4W!BV76DVffVoJ@J;upE{`OSyqegT~Wo% zp;ZEez(^pW@@3FBW1B$Y%r}-E47$UsH z2%q@O_y6g4M}P9bC;sN0pTD~Q;K46^ynW2=23xAnjL(exV9yu6_sd`W@wGQz_}fV* zX!-B_}B6A!w&OGq_g%(BApsORN7I$GmHQ z9{uk-KB`pR^k%+SrVDC%5 z$G%Op)Z>>s@Nv*V7$UcET`@A}xzE!X)BbnPrl#m_?2&qyUG6L&a7atLo=N~zAkbLM z46N&BndcTwt{Cz3wIWBfc*grpP9Qe&fC2!@P@h`5GDW-DN3RZ{h9JiFh=WfHu6m>h z?$Ll0AShjhxHlML2&T`P=Xz`bR|}18h@1f-i(&x*pA2w9qSNfrSUO48r+~r`l{>7p z6d}L$2^7qDIwq|mG+DO@grWp%xV2(oVes?s{Pw1&kE_|$}pgbNoKo{9bFHfHaoTvPKFQY@oX8c-CsD}dBX5_FjcEnBO1k8E8)i$fMfvp5rgHo%bSdJFU zY2F34lQH+8yz>!{ArKRdt`G~_6fSoacCp8I{?%KbS$ylyWNVxQo5j=7$p6Nc&p!UG z7oXP_c7c{-{bVRm8=*_1oJ^StTamsM(uG2KxXyvDr#w%!4)1$qcjECc-^--#G9jlX zn~iPbT_LiE=tX8Pe`w^ffJnel<8Sw(KUGunvr_L}l2tSSRe|>Q4qjF|Q!CCIp0FM6 zDw&ejnnk`bdlJ5on#H=^g)jr);2Uhk;wPwGTky!8PE~brW}E zkEe%QlLq0UJDcX29DJ&XpYfkxaHfmN9uK{Ru6Oo6ep5b|2;QC2(W_>_J|9D1f}#=< ze8*GYT#4(sS)~N}gKw@+Wqq>_RnNXn6nP`n82y@$at@6h$|WrRRH&F6)=2XfTA?Po zxftd8i!F*vC4m)bYnludz%ck8sGa!2phz4_fM^PEBu)k~JTCZCiKU0(A6gV4))xWf zTivdk(c~k1?3W8At{yNlSZVrg^FrmxLbTzpAx8(UDiYhSr5u(cKJbcx_1JN+pMi zyTBt0(e;UIz48EKUr$R2REGXpV|ZK5=9#CVn9+6$)xm0jb&{y4d(VQbv(rM2%H;Rt z(fz~@zxp6V@2EReICF}-6mz38^n+y!O9;&!Aou3o4KT)L5RZ^8#p;r6j2}Ny7*E{V zHp>%NvXx)NDhR3;1%Xv2hrMDmTNph?=IjVy6ES;Y2wx5;uZUy8==U82QX~jbneFQ) ztWE*r;u1LLjez`tMBiC~@rKGo%`|eKSuB0)fs+}zG-nKu_|(?vtcF0FKd$I0p?2FW zeO!{0pgs0C9^DNtBpLX*k9UoHe&sXS=@Zgt077k6edgIqmo9x7Ybx+D69?WtFRTFO zU^+@r`s3Gn&RizIt5U-alwMIW9WLFDn&9rekXz26b%pKD6Rx!dU<6DebC8D^>(XVd z@JhYB^V8qj{^j#-zMaeE%}ANyFqSzsu)WJkR#Fd@z#|4r7lzQ1Yn<_ZVjJU-Rk>Yz`w zfv;lXzPrEho$ja7ceh=c=I%&|-5y z_ZnUD@msP@FurzlWV~CX)?p9h4ac~E!6-P{HwEd984gRFgA%~b@oUg%K#}5}>2-;v zIT>{B=za}>I35a`0<;Y)PZ9&997TaI-uL*vEU z2X~)P5#}ZbL~z?d3|k&-W)t&(2F`Hs$_hc>4BjEJ$AY$Vwang&5+%IGSDC{POorU9tOhFX;d$DVhqr z)Jer#^G5fyS0+Y-IDi+=oF?Zin9%KUXyR}J>L4+7dLM@D{=l$hFwNk-9>6DRsmb52z4*}Qw?vAU&Mgdk5C{xO zetkba7Aisl-7ZB%xXk+#0IME?Hb*m(M&Gchj81*vo+}qTsV#+9=sbZ_+9SD#elt7C z<$LMF$!iB8#!7?hUEh6i+vZP=cvE^&grO6qEQ7vV-d=bb?)B8GV}7X%+@w6$cz)AJ zxWak`11`2d95Z0}%xui&hQ_K@Dw20pDqA}mPoVjuh>Y{*kewSMV&I9I5*gNYCl# zVQ);1AAO`@@JCz>{X?93vMuP_`0(X6Pc-H!1$u~s#(i>K6vLiQookQZ48XfRYOwoa z^({%bh;LA`k6iyFnQdTImHJU$&x+`X@c#F^-`$X8pTh#A?BHjzpjV0x4I-%XGR=NQ z{+}9~WM;}ri86=WLXeko(qVOi3awYf7T~38tS#k@CN)Zqn8f}vEe4x|*3r2V8?n6W z!SQ}5<%m_-WLKo4I_{th@Oc3;M^g@kl7C?ql-=)fJfN+d^LFND0_Q^nVpYd{R;sBJ zLbsW?st7wBY+EDVlkC;`>!3`f^*GY-faFMZhkeLuFl4_p@N};B`iC4;G;Si$7$FJD za?A+OO>3wK2XY8!==oFE+9Sp2~7cC;9!oaur| zkYhm_o%Gis2aqLgPnm}1UI>jys5wnw7{Lk#&hQ_!4bA6dW!N$cY~MsvgzQJB8qb<|6% zyZn1dh_sV zqYah@?vzkED2T=uBNE9av4{)#ur8EM!H7dArhpH#=ZB<%AHF5>XLbZ0zaL@nrP)yU4ceBui>I{&qfbOu^WI%!&lV)Ig#jg_$oHyckKHDaFkne7rDk2dQ7Tyi? zXD8#D_$Gb8iT4+{-@n2TPoK>if;c=!Ll;@nB5~L+?5}9@4V=&r)Av?6D*zUspm5@t zU`8tSv9w7#Sazy^%9d8aOHWE|i8R?a7#Ofq+AgaZnLz`aD{*42*Gh~KkD+A@7w`ZS z*JIKZRtjHnB?%cwQ|O zaAA|dnfDJ{2k@)IA@=HaWa+m5Zc=yllDn`Ah~n{MGu8NE`JsW;%+$VvKo?BWa32e7 zAgMflc0b9%a%6m_kMx{W6Y%p!xqkN0@83$s`rBW8_&Kdq?KfEioH-3zfY+X6_n5-{ ztecNfqGRNzS+$(rlZg}&ShmP6zGo#XJEeUGBbb)L9D8Dt2w?nI7?M}vYrTE3_?>Tm z@rPPPqyYGth1~p6XIRg39vaFJw8dc@KJUTW5EG-(B>K>fNQ&N-HF6Ib)JVD@Odu<0 z1B#@h`_22eloeK>sb>kT_cA{wmU=)&dN{|}@YQ?4Id^AM_uc(J{@{BD+`(jGK55qb zyG4lm(GekEW5gcmsNc(QZC}V(epWz5uJ7|N^iv~B-l&tb4pd3nZi>T&O4_26KA%Az zl|pXk&CS|rzQ+qE-d_oj%=NxZ26StefHcvG4c2rKKlan@(|6z>_?}!}m8v5J8%ELg zH+h@?2Bu7kr_|_$G3o6<(Lg2pvL> zEr3u~nh|;JhR&OIdWl8ac#+#1$w2AMJ%!rQo34x^S(dKN#%jRA7DCRONM$UJZrY@+ zzwCi@G&AAotkC_hfEt`yAc>gQU;cwVgKDWLqOeGPut9(i0K!Rv=kQlYpTIY?6l4g* zeQ_$yZ8GfmS0@rB z#S4aqI58*DJl27uS$=}reQ_As02`b;2!0R^*!9wvQ}O_Vp0iTdYU1pp2XA`q z?(vhI)YHQBp?-vjqTriksZ!|JgCj%4MV-B8^+qHp&|avp_1yTvPCR_s*SfP;_QXV) zLEEbK4+D|H4`azJmrFQvDIWZ%`EdMOjgg4_3ZOVLk}WdBNMgb&jFWz*Xc~-R6cF&0 zBJTU1dF#*KK0dz_edFX^EL$vovqO*l8SJ4a+S67S`RHNC0OnI9QPD|0^2XuN-Yx+IUVbswW^&MT5Q($-6v; z-OfVt(0s!|yp9XWg#Ot3S!l1p}i}<@n-qe`WVz%Y! z;U{ni=!aWugO%oNHn>U>o*1V37NGj|Sa9ie0v_gvlj670vvsN!!^MS*B8!=Ftwa#U z$v*duv|ul+B~D-{QsI$3duRhex7cEENt^q1JU@uo#=X9rhKj|0NpeL1f660gE?Xju zJp_V#R;7TH>!k+(I0$?c5Wkk5GT|i#tk;k5X)C#6pA0kbW8V^r-B0_k;rrVsu zg~IAQJE~z^-ng-7$pAp<)+I@YWX_B!7}~GwK>^MOXB)s?KPH}AFI?W!Qzg-b8N48V;f8buB5z?~$2Z4>0KjcP57Uc1?J6Or zwMTdT|^r_L_XPSg2l+ z3EK2wqaL_lIAOhDetsl*di>}Au=`Iw{QFeDdFW?}S-LVOtkc2axk?S;mO3rmtr)~dpM`Je4(1WfM4TDJB z5Y%=8ih_~#qfA}E??m=Bqg#muZD+f5C!^l7XYYyUO~)#A_y#S!C8oib07N6+wWc>h z$4i?L#f>tVqk?9iy@Qg*g_U=tbZIG#<-s1oQj?!Xb_LczmfuW)I9VxHrr2@u=E!5Y znuXut(v5JjaB@C4bs${pmynS}?V-iR=$E!`qaEX4KvFocIcziLfF#wGyx%(dgwIon z(}{*?X8A7srU0eBiZu!QE1T7yOb&8kw!FBzK&c68)LYeDRr%?z4iYrA2J>9AmDA8BpIv0F>~z`u`Mx0Ky=tuOok+&tIz z+H1Rl49Pk7{ri1ifd+8>^AWNd=JlYa7~)hvS^M}A05EJd+idF;hr0|ECOET23Lsef zS>E|j{H%Wwvk)~d1wwO%v&+8n;lKTK)Aap6935NuoOD0&3}sTHS?u5B=Gbo1A}pPf zs^bHTSW5HD*6|Hv2azyC+C;S3jz#zYpUA}1zXMa{_HvGG_o5Pay(IgTJ}F4w0` zR(wOSk!lfccr(HNFLrs4e)D!f7bG7EP{Z{|^$`F>y_6IX+FXJ1)9=cvw zF=QKrPd6)J6MB*)z>Jka&|nU!D6>omC`ZJ$t%rCp^^Y&!p9+{~obA)QeZz@_I!N&6eKwm+MP~Bnb$&=&uC~5) z0lSgf=w)DJG#000_Eexy38?0vGRiVVh%ycU_Hl=Eg2tTbR|tJgq9I{r)Rr8hdlke4 z<>X|@mdqH>Mwd4+Ars6)omNQ7x|u8$%0M173-B9ke%WHq7DSC+-dEbrplKB@Yr8iN!!}KnLLFV5(}>nyq}( z?!Ky+GaURFEW=gzV-#31o|X|IF>#STBXTNv zn~n&g7X~|%a${s66r2(NLq?0n?UOCGa7arN1CaY5CDzrJ(E@xF$^#@X`zj{{%jnkN zxtkl|(Nl*PY&`a0c>fEpNl=_>;r&;`K8uCY@5pF_J^k_oy=32f|7_Kdz6|qJu)!U~ zr%hq1Udn9FLguzD+M-$GY8+ld!7p_&Ls)Q<2tw?9K71e6Wg}bm?O!kOBjQBW3otNq z)3{>aS;{HKJ-}t<^wv!D*wY(o+}dyz3Q1vPu1%sefR2$fz#P~Gd=WmPsv1-mp|m$;F`B zLfREAVA`SmDlw)_{k>DHA~~5>k5mfekhBtmcnC+A58~%lGR1z{FrpTC5b? z%18*hJ1kI4(q>G$^%eu}y^#poGuo)VqLgw2ah@vV0`1qcuyW00y1| zRA^5j1^h6}(gk74{E2@=;;bAC@2+JTj~M*495x9~4zB|{GB4Q$4dIg1lL>!{%y;RJ zwD9Dirdc@!TAO5qVf8)wTTi7M$9axao4IITKrrBAwSg&Hl7EXmg-t(%^h6LvMiPNh z+Hqy9P9zEucWRZCXdl`U{LN(bYWbR{%61sewRm@50c|jn<-afv0IibX58|q|i=a2O z^`FD5TF`S&ftdj}8CLE}RRhsfcp|xg$IxTs>>M0;f1>A`PMe-)}3? z58<)x-{eTnla4A73qkWa0ONR}*kW;#{epcLX-KRNXlnP-2ynUAcUF23K@{-d$e2-~ zM$A$PCLIR}8z^AJ-{*PSffDV|sK7(kIB&^`#-COewrdL1sxLjzXjIuelg)r{Wnia_ z)Je9OPM*#xZg6S=GP8|kC$>Ga^zS?tV7{y-EA8U}6AA@Ks1@Kv*o z!{dxDYNKIEy}Ehu*oJF=vGHT>l4#Ih*&Aw&E5swsR+p~(eD=0|81Fh9DNRb$@Lf-u zHRx#8hnnMC%yu@y-~wq(`Rg!|O*{&Qc3CXVwpKHn>^@@ru7B+2;SHJWwX-*^8gsOg z({1-8-2QL5m_>LEwhZYt4vc#2C1H^fENsS1#Davn$?&MGxY&qj?fM+PPOw1wMCSMs z@Fz7(<%Hd;LErMUyNHPeE3*W)3|;0DMh|?^-(qHdpxe0=daJ_MrFum=+dbc9W4cWb0sqK={1!P{M zUE`JF9sJBPhYzq-JZpoQ(kfD}fnStUR6&kI7FI3JU=p^$C_x9v_kgS00Ge~ga1N%N zQVEjAZqGg@za1>0tQxSd;EcB$g(zl44B)14%!UPQG`y-jY&&uyBU@mD(t*lK+tSMf zljb1rMfXTLt@c}IE(`B_8T@mA)9e>Dp4V=3sF+Rb^P&5E`V62>jx9nFVJIE^dMaWZ zR73rI&SA|Vn`gKcyL-cu&t$hZIj|f7Tyb+|C-FIsfdbvW{EFY))3D(X~JA9{-24-{1VNEBeR_V6?W2PmGr5 zyeiWJ)E>3u#e|=|Zpy~!eJXq-hZoGdo&m%(Ixxn<0SSJl$_WCwz$<%6XM*^J2+a-p zQ&OZaEOoAM z#oc#Y+Ya{(m)#daKX|Y@IJ>!HcFZ`?udOr-TV4+z8QgPl#eD;Jeg5S=3ywUx%f4bh z2PFQ@YG>%J%*SUN{YIulP~GtMRxnPLq?F?UsxOK4Lr{*qLyqd(yP9)SI>2Jzl@d~1 zCp>(RGHeU2#l5$+)srvW^W1Mf@#wjmbj!6%u56E$|NPp-NBc-m;=0r&NkMbHlqw{Q z&q%Hr`HUb0Q>iK{oy(36f`eV&S*im1`VAO>8aG*$J88XNTJ%JZl}K)eqnEXO#3(Yu zn2ZG}JXAq-3RA@KGne0pcvVztmXu=_-33hgaO3*rUwJ#T@Y6g9NU3JK<{z8+e$P$o zCVL4)75Z}zY~VFGekNoq2=op$&E@g~3dlqm>*J5UJm{H|6t{`=?0hyQ$2b-3F+@n)uf_xMm(`=g!5zxIVMzxVsfVvHTbJv;^H;=pD)+!bHlKM$*gx zE`TB8MQ%ib>;#?|lqlkKT9rcjjGuEt#p%W(#F>i<5?-9ZX4_?5CDm#St1tpQmd;7w zBq~2|MvCqQhNI4^ivYB(0KWTo2nESOii7};K@8wsvg7g4T&vlQUP>gpgdO6#5R^3+?UgJw1ih z@p4T1q!5(WZL`KL!EDQGRT)ptf;9Ea=`#=7)^n=X5))SUW z_NkBdT$4$#^8(8$@YTs#S_H=4JJpZR=|#IU4#BO@qUo4z#LZzH-OYrXosAm^F<5sD zq9wC#)r{akP~dyU0(n76>_?>X`9!0&Zqzokkzc%)Juk~UCpe2zQ- z&I^e_K*=MjDvbyBZYuMS@iN$;iR1?1oLsmt03fm2Z6I zj(hhUZ0T^8Y>%#T#6102{Cxh}#EUUYZji$tVEn+d zYo#67QkgHjVumz0P1&>Nq2$*-e1B-oZ9RDA*R4Ola^JSsf2n3>d*GFU9T9R|!JZE) zO6M*XhgrES&x6df2jdVMg63F?1NhTrh0Ff!K zz&zN8b2lx20jOP~Tr-GLQV?a75^Zej06XOS=kb=(Xhv2(HB!^Sh7%Tr{z*dD2tXmD zDwAjWt;x2VqO46%toIj(3R%3CJ3g+)jgC`Ze1i>{=%&at!c)C8m6715M<}6#1YiD< zbMGSTR2)>*IqMd(qhNGSk#sexGRt$^u^JWe;G{FI#vg*tu)#Uo(jb7A{xAtVL^T4;?()Z{zRK(qWBo-;T!mQr`fSg42A_E7&p$Yr`o$yfeC^iT zzpXDheUle_&c^p8C3QFJy|Ms z1EO69KM3(DXRe!qeU43;l!9_DZEsC9Y_sQ^mTI*)EeV@QH$Ag7aW3Rr-4idX!g6xy z&6f5=sIO$B)h0*05I-a%CLRj#PM!)W$-Q)~E>*60hZyHn#<008i5ik1#&^4$xhZas zOzCS}KX`nl`p|c$Ry*2%H5t|I54%WY^apa>WAL057G!d@=rseI*HF0Qd`Rtx9A13i z(A^sE*OGlfe;dqy(*$XV_z!b9*eb6aONgqlLJH><*;YR2hftF(6!0$;pJPFeW17dm zH>27Tw%`=ej##f#+@SDdPmTxFIt%4qD&RoYy&buNYF;&IW=Qcu8@j!fh%%jdnP4ax z`3+fr{0w8S3f&7jo0;8A!4z}~7X*h)3pUD%o9dN*T zW<-<0QUh)0=k|hzIdtomF}{g@JJBXSc2s@Kz=F)ItyIc7`k?R{nx6_w^~znZ&3W$A z3qgo2iE>bL*;6F`6HqNez2rTbiasWDl6%$mYdilITYSg&3XEWL9PD_tiGVIh>|Vd- zE@T`mmY_-mm>W?aQM`D|&t=b6q*?)hlkIKo?~ zdK3jY-q>a;+(+5BNWbx0?Hv~bF<@qr(ShFNARM$47`~&+PwH(Dk=HQixFLI`eJCNC z%t85?6od9O1ODjvmYu_Yex56T<8=}A5*Gu#Ec=o-)_q4mz2W9nKYH@kuk3pIh+eCz z-sgY%)8GE*!Nq8@b4n37)P)FD55~bC%$N2m|q}MDd_q$d^tUj^yf6268XL8 z%_2>C-t_Bg{c_=$D+Lzf%s-tW8ksD*Y9|aq?EJe@OC?**($w<=r%%`-sH%b>7czTK zHqyU~^tr%FFDtmvT{A60Brs#47$$~?jD#!^A+EVbO+5WV^&cOoeeuPQp}M{njuXQf zv=AC)%)Il$UBjiXO~3oW-aBWWJ#t&25}PQ^fA#$N^J7boMltswu-~B(kL;zZO#x`d zD41)~q~gn9CR=`WGe&nGU6h*wvlt42Ha|?Sc7|B;LEu z%@9L;@e5s`7uR2WKVgX=Qzooy$by#sIzI6T%8s?(MW|0P6csJ)!$0myOikbP-MN-fnL#HH>lPTOR%O+z(5%-ZPnqn9NC;4hGV3{@0Cbh(H zLPh0VQf!HF8Y|~nZ$OTbj^aqtNz14zJnv=}A{X$t=7EsLi#1*x3C4I|sWb}O*|cKz z9EgtsARrSE0WB+uTe4P5nvfHx%wVNSb}JbXQ=C`)D{Yy~(U!ua8rpL|M}4+d=4oCR zGuVY+oTMFk9Z63nLVH>LkP)XjfQs{El3&PBkw7&^dM8oNGV&5tQ*>)*j*+*_lZjzD zN+itt4nH;(xADCPFjU=uoaV}zYIkEG)>Im@=(_3$)NL-5WHD#@(4Fj0UbVVdG}ory z{L+Tq|KDw&y=}LrK>xN5P(-&E?HEf3JO;Zcf0dKX*AqX77K8`NGyO2eYPN^%8U$%PB-X*+Hly8y3y^z9dk$`n1TYbj(+5Wr`BCZAYXauuq!l5fIxYeoGy#R0Z0KKaC!RiUz&?S{J{+k zm#oa){xjM3!NSgG&LIlDCZsiX*VV%Xo;$fxELr+kTOsS<(T<%DHIv_mz-m!3S`Tr? zqho>tkzgdh?%2JZipGzq;D-Er=+2A(o;d+XhAh4~Y$Defe zw?2luzN^-1atLukPz47|qzSzi*axkM6TiI5~P}~Yn_B1sl5a`wh9l2HLSCa-EK501Z(@ zCtq<(tT#njL9u)E z7>N=^#}jIERvjEYwdHfE1^38o=m^uZ6rXUBsGvC@+~_g5*dvqSDNWIm9SBkERs#E7 zqcx^)lxZvF?#IKyQ9OOR3Xz{e(a=Cxiv~a!4w<{+441Lj6a;u9!f1OjgW^~LM)gd8 zBke=APKEm`gPyT+v4wZU}Z`I_* zQW|DNn-OycG(Vl98FJZ7Hy`||55PS3b&_Di`QNd}x!|tV9I)rccp~ISo=0mn11C6* zCEMVBW~ShR9z(tHiJKy=kKx!CWSn*zjJh-cw2`{ztd8$L=(!;t z^E~C!?BDt5EVK?Mr0mbUd@4<+#l`pAxUTaq?k|I54QX3YL+$_7%Wp4mHJWDtB?NWB z&3mMb9*J|R);fJcQac(JbTWgb*&Dmp3~*Mg(TmjA9N|Zs5p2OKg7cGGshX!VK}U^` zOnEO?f&@qotw8!3k1ab~5_)d6JwZwgjBc<@2_4!=7i-)U(ts&cPIyfieu%^7&Bfxr z2_Yg%L9|p~AK`)fIG+S&U9X3%n~;W%F(rlZ3iAi(Jj`Y*CCY^Eb~vkpXczgTGljF; zJ~mnH`N5I5KDMHODmnpXP#1MZ9k@#b>hci7dB~MnfYZuZ zLTIrf*hNf;P}-7002WIDta^pFgsX!%N% zi-8A^-iZSMsn)h6Iah6c#KL58AB5V}|5r(g@7NXMevx4Wf?PY7j1mLC%IKd70$|Dv zTD9O8JKsyhLermMZsV^F+Wq#XOEE9nuG3oT@(pAO1Y0>IdmA_)@p|yaak;9*!8t8l z{?7j3?Pq`c&cUB{t-X6w(3Wlkh<}nLO|{E(T&yEz%~mI-4le3*DnbLCza;Y~{J|BA_0t?4idHxA9T#_&DD`ajV%&;y_)UgY4=O~cK>O13b~Y#g>R{hP_-aBP+7_F zScS}UG_ze?Da9eMrKqJN2ym{8QaU*5jv4bgVt{~NJQJQvlM^jEY%ODgrh29|VP$mU zrL?xvrh^ZKdy1DFY?oAjX@2O(nype@NSqUv+w<>obHOBWT#~q4##iF%UjvlJV(Bj; zG%!0wo*WRXMpO?w)FeFzmCNhx54xVnAljBKcNkuFxEa}bZ7ADUOi zg2&ttobq4~!6&zX*-d_|z^smZRMxo>tRk&3=>X&)(+M3wC|n3ajG9ls8GC5;v-*Ng zl@7ijmu1jkjwscrh{KOX%mUCcfAY$wBJP-0aUm%~0OlnSIwLrVYnr5w9GDE~thUFHs z(n=k5;pKx9M91j~HAaPs&4hh~62%er3Io$pXNHn;82Y?O`rzK&VH61~36-r?8OqGN z-}=v&^FRN5YZDR-i!Y6`^?0mdc4k~g-=uA(S004MQOAM%fBC=-gCv=p{2*{k_F_hA zerg&4FsuVaQlK{}U>Sl8f#!hR_aY2FaIzUOkNMxz*C&Xx!Z8GfCC=Zv3z6d7G$MgB zmp0vbVeica8Q#QTNeE_i`Spkpd@Knqnlymn8RTC;GIfL$6FlUv01mLj`3i>jq1T>> z#%1oX!E(3W55!{OqO07E<8vv&vMx^1<#c#hjiY~let(ufX6(;j zdcAI>nj_MYqX04akcCm)%i-u@O;6*9MJ$9q z<>#`c0-(DTvFpt_)ib%ii*){4%mz^4bA^nY8x3ooDo@R^e^DB9vrAfkFx+v@?LLi< zYJ`n}UXs)OmJC5^%gu3aI)cr%&SON2I1=lseAZfx9y$3rudd(+J8?e5)EG$f zM1bQVJSs_r1{b3&d&3t&h|`S0#~r^o_ga`3@rp#kWDK<@nlRQ|7?9ycX7(A#vYIVZ^iR)`#1mN=Iy2nM@?GYsits8bdzuK~u4GSU<#zVka~dZ+l3vewl8 zS3M!eD_F1nEN0EzVv=H~q!w$34@Lg$s?_O*n9}&`H>%?V0g;N&A}~`OVIwAEHZwbV zH2j0#bMoOhrdsilelqp-lznncgUPv0wHA+wwSy^?iS;z2EGd)T}6F^Z)&g4dSG= zVYcLs$Ch7>DSf(2nYgns-fcU;EzwyI*;6iaxZ6@lFFDq!{IaKfRysS0_)1^O)V+mQ zd&St;OnuAevU8f=S!y$Pd4Dnf!p6+L-Ml}z$zrA~>%vO0ID#c&Qe%O1#SA`>%+bzf zqDX4JCOGw^CJ2pEXr08yo%#FO!^3yn}FnrIR2NR2mkKaS&+|Il8-X*--=b2U`h^v1-P1HnJFN(4Vz%@%NN1c+TSs{)I% zrpjzqkdFv51)PG{BHBaf9*Uzs_JG(2ab6KwK{86yu0?5f>LO|u4o)p|>5pyy$#A8}+`~AI>7Cy%oQ-{^`(r6+vk`5YJVs*2)qZL>w zIEs*=ji&~SnUAJD*P*0QW++0yLMFYNf2SAOxx-~DKDth3#I)etJ-%NR-B8zcU-N5ia60~9sB z;VEzJ_~`$teElzv9{qUdT~9xBco)H7>o6E+X6s^<q0#fF|cSsXU0RlLJCVOZaNYG*2PZ%z`>A#eXjpW<^ctEyMt8eZmJxDerG|i9 z17)_%Grm`fUOJPA;MctQy~%AaM#J zvR18-*4tdOO`Wft-EA#qkFr6@v~1mK1o+{l3$l8m5#ILt;-lwJt@^`Fo{7cjz)?)U z^&s5V^SMha?iqrFFW1Nt8ZnVpq7pIOH+_{+_kV zTI}CF_&)0fwhB#Ff#N!Rf0omikE?|%;@x>Tik4rUkRdL*&jFQh_}QWfY+<&IgwU+W zxtLbu&xQ>yvqO7baXz>XS+1-nCLxDZ;GvV3lHA#_)4rhLD?~|Vn0&>Sr;mec2=xn9 zD1>l7SL!A~58qn*aAEiiPp2Mcf=eg2gHfH;Os0a`2(i zL(eQcn7hyIU-1bK`mT%1={93~dyl9q^wSKW*8vH5AE-Y5On5`*a1S(FNah7v=r86% z%+Po<4OJy015($KZoIV3)nDzTEMuO-Kb*JYYf&$aaOczTmeDgf}krYJmc zO(dL)N@GJv6KX#t^!lurGVwS8M(gf5-+th!or_hO+ciP>2CF3~Iu;gM$xy@~fpglM z)Hw?yW!$hSfLL6%gdq>{i@4S>MTTQWn)9TEG3qowsjV3{4YX_$HhUm#h1CH$kuhn+ zsJ^|agIo$)({Xd})k#4(jS6Sm9d`*^&1a5vXZ!OdDp z3gregwQQTxa)#|uvb0hb%M3V#e!2)6ULaF( z@udJ|4WKMC453ZPV-E=>e^PavP9jAnR7AX~g2-0@gJlCY^a?KoId_%Cy80%EJBKyy zh6@|0BHy}ndV>`wN$KFW*YCF#=i%;-*k&}29)Mcr$U}lkZ#K<{ z$D+hyAme}tIB7MjAt2&yK{?`smxd;JV3yx%=@707)XJ!ddB#f7iD9M)Oa}D6d2TF% zt|A;EbDZ`Z-`@95@ergTDsf54Dr?$fq0XEp)=5>qAqp8Qi}#kK@pp#9Y(J*;*|BXO zv;KbNAA7Xjr6T$4aL<~6Sy8>Gy=vsI0T37)i5kA6SK*B(-x^D4zQ!~6=E?+5A2mxp zAWhDrXiVk>5YWMQg&vlno&e|68Ax+DM^gbum$w*)DT%rO=SFU%0@w(D=wq(|jUEPV zM0V+#*5{Ygjy55gvVesrjYw?%Hh7M7GOE~gVqV=oPeXMe{FmfJXd^oXnOVdnol6T& z-wu9)olmY&`v{fy5U=qZ?rLza?i&w~hYupa6Uvhz6paKw%Dgd6D3j6^$6P39AzKDZ zl|clzi6D?WpX4``@HL}G8#wXCJGwdmKf2>@Ov6hWs0q=YPBvKJ8s=h|xazQu65=4J zS~f&7&&oJkU*%i59|r+v-`25zdmgi$u;nCbKrc@|y`K)CVD$u^zhU4xezF&z)K5`~ zMR^=zGFkV4U<3`FtUKdWqFe-a`6FA$f+XXFs904fttFS8aH$TiQ!HO-rDgeu^KxZY z%IT3$%Y!yO2i=&$7}5G&@}_MA(oSY7vKSD(%Ur%f8u$QztpHv@(#M^l(c$1)P~Sn~ zzuWWyAfD%7NTyE#YvhivBoWBYW5gw(Q~m}vuQOBuhC0vBA>A*6#)LPSJAUgx8D$|p z9=Z&53LJrf(UIWmvL}!#UZdbwB&V?=> z2=ITb1MV^yI1G`eYI+~}E<_~hK62!{I!YCUb?Z0k&|q=Rk*EWHr4fK(+$Ld*T|8n* z=Sf5-ETq^uc#ULG6hK1nfIW?FTCp?C$R=>c?OmIWEiOd4lm`1))Hx!#F^#VWiqvS+avxp6WiG}3z5_rva=reb(4Ml}0jEIyy7nFx7EI;&A0j=Jp z0J6;&CtD|&9m}LR5JExJzXP!Twhr;?LIvchK3Zt$FJ}|q+O?}7Db zQWzl@Yg$nF7g`GQw8WZnp)^>KGh8E#Q}!6fT4KNmp0lWpi2(W3ty+aofi^C+H&&Jk zrzx+V#4>p?(#yS$p@M|hh+UcN1s`;4w8>B5w8VbyfJ{gWEAA%3QSzh#0t$ryEJZE? zqL~EVX|qm9kr>MsPjrAo3r$rN$HQ)pg@{y+UAne7$e_XTUl}U7jW(Um0l;^%d042C z!U*3fk`4S0m@$n3E{NXQk{?{MPtI)8fTnchDhl+ABI8b5ypFs&I#d~6%>K^U&AriT za=~~Qsuhzu5@)%@&5zBHlK?mm*iIy-=%XelI>>l$H7JI%wn~4!q=oCt_q(y7oOXJP z&Jy{r1{MTz{W#wVW1>0?Ue$KG^_O3|r!@?mFIIU{Y${|(-8#$AoCl3$*G!3G)TaAV zs)uF0Od{Eglg=#JJdXN>o>XCj!Xgq`wG&h$>@%iYLhnQ5ffS=tW@)@Ke0=5dt0h2y z)R{|Zm>1U;se?R%HuJ)kK$8sqwucDiB4r{pb=<<@B2$T{C|{wf9#H#M?sc^H6imQ> zJ8h-N)ZI8xdz6Qv z5@=RP3oLL+6TZveG00$J%pM+dE>6r_zAr*sI%yi*y4$;u@DW}gHF(14MWL#UjDl6N zdy|lth8M+JILtC(q=g z6g#ezvJ`5R{6LTm}QEtUVYmjjiAk&Ba;Z}>WKXgk7=I|@CjAETL9(fAih zFGT=0P@+%#&66E;7Fbk&L3fw%%fo&Qs0}T`!wC~SMduMgIVgT3FFhc2E<%r(P4Qj} zw%YAo9efcwhdAA}&}qRbM)?{@)x>at@gI>?8yYx{0Lxx{rBQ_QnLZC&SA>)9(#`~8 zd%=Hz*XW_;qU5nlKe}lyxKT|dGQoL5`V|%@NAV03G^Ec->RoTN0f2Kh8l27u>-E~mjS+Fw{ zW-F^%nUHn-jH&3{3rgeMz{#!1ta*tmid?dDgEb=uoU_j4=q0?Ax6>qGi2vu}l)|E6 z%eC+<#icNw>v={NVelTIy$SwLD<6Y|GT+62F|2CO^1YKR#bF2!J;h>#-bH2n#0v^0 zsA|@@neGV2nH(nhm%MDHkh2Y+JnnX0t`5*!fTibT%c$K|m*YP6<%-*EG9g6Dpc2(W zR@De5Dg*%7-x)EW4DqQiBD9_poPo9%+%8iXL1-0dHE2rW z90y*O(p=1820#YhRrQ8UeIkt2ui)9Bd ztgS$!E5}r>Gtz1XhDv(EfL;Ok&%*toNU01*VKPg>#~5u;qhj*XB`D?1H`$s+9<>MN zcratNVTCT%G15%uWmIboks@k$_Dgdh%I3 zo=FY2IKk$QKoGRFEI5-$B2*<36-X5;ooxkoRV0O;Nq5k*M5z}7R1)tP zywDf#?bd40h7GMbzzKYcZ>?EWC$2sWeUBrzT zT4$e;l?M)TQ@n*hzUbB@y)T9WW%u;La@Dp^vdXh99{ zy7O`apI#GnZy%?nckdn*J$ulGWSkL%mwjzNan7kjuPoo|mSh^9kRV*P$Id23ULv3+ zg3>4^&I~zxKym%F%C@10Lh(q}J@NVap}Ci2lEet_>71h`5(ctXBPrFq^4TDls9W^gaH=Go za}M3Qu6-Wxf7jVdT0WPkzYFqi{YmQt13YPnd_ikN@;jiMe}pO<^>6Dm1vBV0(yC7 z^yIqbduv#mow3VK2v?cvBb3^uEE+&7^eOuiAw9CEo1i9Oh=E4kj7|aj5SPnPZIW?- zw@YVn=6vB(W)kl|_n=4aUdV(5Pmsy_$u7c0eKA13pD9QM&2^F*)`P2GCc*{Ye@tcOl7Hi-~8%=Ie$+kA$Z;2wx?T;^{yJ9ikB_Ra8wK zTs5XCW($6w6z`|XX2~o7H4@r+a@#e6oMS?Igr$#ZjBo<}{p9AcQUq<1=piI*s;Z!+ zIc3oPfEtMIXhF;!(OQ8V-fJ{Xr0<`A*0pf*Bg-n{z)Gjq^W z57YU`W|$OKtwcd|5CH+L>*$VU8;K2l6dn*MNJH!l>W~AqsR2Kj5e;cPUNDDjbZ|Iw zLg(lq7SZJaQ?D85#}_%nVGTcsYx)~f^QNe<^CYSN4EU-z{_fR|1Zxch9F*vD@K{Us zxgVpRR_e{IVQ*15H}7k0^^}!_|C^Cmxll+Cm1^Pe=2si!_Eni}bAbWrpJ3>5#pOVN zsoTN%t(C8E_ z;_0}bpW==lw+FrX#CSHvMP^ZKR@*wPE&cIW`{B}_`D>znDhnw?7Cd3#!qDw`WSIbe zAx5_mAENw%=;kUA#I=!=D4KLl&xtg!|GQ=Zskk+~ZGC~8MpRDJI zM{_YH6?GkwmJIolo)ihYKdGS3+IvM16^boCasph4i5yKCT&NC=5MrceURHXgf2C&P z8lVg`Lf-n0>p(Xmt-PNiLmL_5 zCk#H=oZ6^wF3QvoQc`R6I&xN7pQ)5F!)cK?w)0k;h&bB#Bz@?b=#S(pW1f+KDH0BV zS2{SR>}bvtxj7!ct~Xm8&hT1qGM=Hr$(PYeh4d+p$L_g?%-ut$FdWgKj}=gHN^&LO;_ZfpU?7ZeCU^{yD+<@tl)*o@JX=-hR|--)OPb+US`IDE33F(B z>)!X;fV&VH=%<;lY-n-0svm2sh~VXHo(cD34m>4b!EB3BVRSJ6n3NRoRS+%Y5g)D-Mf3AX@MHoU7+yrv)gL*M@XZTM1N-P)QLJxYKMhXxR zi4%YGefkw1XzC$OKfd)dSCzNZ3xPwK@329SBRW5Sp775SIc>xsIwGhOu#LE45Km0x zVGW9e@p^iG-BR<6#)%lh`HY*v*QR==UxDu23Ue-N2N1F50MCfP=IZle-HVt6ES|hn zLAM~=oItd;cahk_+?xRn@XaZV!8B*^<0j0* zZ;oa5u!VP`2AMS@b!3-VtXSWne}Hrdvw^lj!8DBS3WtJ0=J>4+F1KrG4;muO$gs&6+u(kh>b3Mjo0cTZikBYr@nkn7W)ynB*4mWCDn=JP>0P znIw{*Vk?L(*_A>Ztd%36lh_2ms0a=U0_vy|%2TovICZ{hUJN~J$cj!oYB;HM4ayWI zzvO+uJ&QGh3m~lI&>Ru1W!=U6pgPdzqnQD%0oQI;7?D8J%u^?4o@Vf zsmvk;Mo5tWYLN+ltm>eoLKe{>VBmHYjb2axWGnDw9`!i93-?y4_R6*=h&XXVS$Gj~ zH1RZt%UQICoYT5H4x8)I#@=&aZI(9zPOwY@N+;$e#BI_JTDrbVHOC<&whj^8I$Wy; zz2fSd)jJkaV^&VP$QDhPqDF>?gCt`bd-IF?>^WV;lIf6S@ngIeu!g4&|ui!l#jS~WaI0P|dcG}1jQj66Gq4uPWq2Psapi-npQWe8+( zM)}lgMiJ)NB7zV_QoSx+3%7M~<+(8;4uy^o4)$TvHczp|k;x>Mf1O^NOXNMB){A;V zV<^OG^q?oU1_MLm{AbfZJl&`Qv|Q9+LLAz&=Fk(r(ng9PVp)4pnVov`q2UuI+ROq6 z!`Y|&-##_pp7199g$PrBp^5OBZWQr70Nmq&B}+%6(8s$k{JfVAkLfN)aI}5C%maV> z`sBKDi`jB{(?HXzHjL8*B4scnyu^?~(3CRi=;w~gb>CRn-o-;p&SHaYs08FrExG_9 z!*9ex53$JhEpVwAMUg}Pe>?jMq_~A;75nlWSL=iT`>5>D@Z;tsxIGV3oxkAXV5+IK72>#z`iA=`Ls5V5_Js6%}%G_|2ZqyHbqyzi%UQVZEsZ=N^IbSrL)_l)ShA!qPE*V}60PEVh9W$53)zjs#Q`>v zGf<|_r672^y*Xy9ITu&9_IuMA0I0N#>0>TrDyI|&9J=J%?S`zE)ipsWS*Mavnw&^w zHDQdpSRm4mUZSkoegl;0Q6u1fg| zoDqJJM5d&H8yMC&d)PyfI1`+nsCLgyqfT{NQZ;U+RulargViz0xazbHO3=+$1F6=m zasQ`Q%`Dh69yBW1)V|hj_n7mXF-yd@8m)&CnmG6`6Swca=X*EQNzv-(h9%$yB@>6l zY?*(hM!u8N;>h6&PA5<9&-)EeO7{f7N_CF$vm=G zV2?^WTCqN>ChxejjPs_T=Tutf9?pI^7$PklH!{0a6YNc}f zxw~H1j<&RI+n_*1yS4dyB9>=%eW~z^)|>bJ99N?~BFfYQOs_C%FWHN*)0g`|hky{9 zN@B$VIaW?dCKU-Yj!eojuKfE?{zZb7G-8c%1jhu&6ZIpeLcmBV%Jjl~BdPRcp6Ar1 z(dgEUR#7#W*8=!I>Ka=%vHX)fN>JukNi7TG9GEb^>@I{LAv@QRAg!h_95}ML@~FXK zn)eT%sEfxhe9B&O*-^}DAfy>Jd_yl^HirD^jWSj^DE|rDEnIoTQs9#&K^%a{*&nNO zgpjX*BkofnLqZZLsq8MoLcw`kyqQvWymu1MS=0ovii8XYDL+Xkg(c-$*iw)i2tNZU zyG_0F4x97)9=g$a%+S~(;^p#I8)%Q20!XE27)4Xb_JgX$0TKMNg-k|s2&K3bf~N;$ z&3nW`N`9s}kn4_l>Rx{y=uyUJ%XVl~xoEvLiJX)anl|7zMmot*U*APfP+9a%D1Gd$ zDn*rA2RT0b3oVhI9K=yP?cJE_tK+x#eWQKf#!o9TK)b&BLp_f0=2A;P)s4@QXl*aW zD-O5a7l-JxMW6YmS?T7T%87LT8kGL!W4kYr?Y-hHj z|7kDjCHq1dK~78R@~bZ$ICB+cApdh44-slj8w)>Iwslf__P)=5`#1Xc&_h)oDDVFB z=r-DFQ#hI{(vx$repMbxemIrgMz!y^_3+ zjbhZp^wV}`>(aOpNG0`rgm0AuSq-2F_}8Fv(gKo7z^z8Yr?;duCp&VBxrk|W!37BX zhU;NWmK61x5jJ=UTd^H0Mp3N}jZpu*9xuKj1~}8as`)(`_YNwyyd+8rpKqIsJPg#* zB+zW^5DFMNX5>7ESrAE;8eodkIDweD?PrQ9p<$=^A{j($DD`WWN))(>7j9I6 z>B(4SyGWZ%I?;lL%4<)Rz$roS3Rk^N+Pu~$F&;x!NU4JlFnwtpNqpDkQIUag!etMv z7P0W0%s`UW&gaYDzH^uiR*S;tG!QrRHjCXKY;>;dNJMPlbvwcw1rXG-BbNV#S;tdF z7ry;L8BSXrs?guw9mif>QU!`4{o(=r2oHg5TIdAxyi9K2pczSs!!#6Cps+FHAgb-OZdO}(nUYF{*NM#45?nyaVOp%dY$Dpzt&_+9p< z!x6swJ(UxQYp!|Z?k|2ZcA`;7He&}=+9)dMb6^3L0+1V33#5yLO&xVX8^=28fP8Q+ zm242UDzL=4p?v}`!S?$lY5k={Ga0{t#R? zJbta29*RupD|+I4?8zC&*xAYT3%+K1q!?r zzvhlR)G$Ty;v6#jK#ysIW7}Kc zXKt3;%JN&mm*eMlfWEBg=~?^v@BG>upc1HsB&JX7TuPQb#k|1MO6k|re_Qjt@ori9 zbT!+MP`D$WQ?moyJx9Pn6 ziwYID7kdn^u>x)BiFsnU$h{{od3ci8%e7`a_IA~98T^RMdk|~15+SRQiPH7mlJU}U zP|3h8Y@a^#Y(}2;9fW#PaD{4>E{{TXNuSG{hcah+h2^wm|E7753#(b`E+3rp&ZVC{ zvTyI6JGYhM(NBbPi36xVTrsMnCyKCplUMq6dnxF_n0WJv-re_H_q%5=?fA`K|78jJ z=SpG6XJWP-y5T7YT~(>C-K{$SvNS;<5-c%2~!-I}j-#Ph+uZ@vG2|LMoxnI2cG zePttjxcmNJo_Tb5F&4YnikOzTAzFwjb&<=5pS^DL_mW2k;q6xR*ZUW6c(K?^+Se|m z+Fs7T#N03m4ez)Txk24{4v1*$*-w zcc!*(n8hoF0l3Jh%fg7T8K3)fAC||Jo@u<({MzTw%zXa~W1srzfBxz0vR~h`bRNWn zMU6ahI#c7fYD3C^p+555_uhN>lm1*Z<^?Z-n+2T+4L=8Da2^L~T@q!W_G*Y(3AOq1Zg_n+3yz2%?hm#@8B z7=C@WWKylj01hdZ(DSAsa(H~0#8df>z`@#ROl9VW!Um>Mh#4ez zxSWa9<64F|mLzwk8ZNuNC4B%8NI?dduZ+8J>@BDV#?4MtFEwfu6>QTE; z<`%kF70-I}*|fh$IiaB<*Tp%YwlXH_#k~2yU#XO-O}QSgIy8^ zs>R}kQn7NC>*S9&e}4SpQ|s=3^qy4+RLkuLX1+Y=rF^oNA@is%8cM9 zpjgtuIt8Re+O1@%W`*Xc#b3HlwdIMK>q+%gW? z;k?ZkIC-f|CIC|4)YCn``{eK5`NjFKjlFj7U2(mb$Yl1eTu)_}Io^U4LM{(;7U~N; zp2*HSum48&oA;b$3ig!eD_6d}tYr)%7wn02;^qr2aW9u3!bWsT$n?m}`bf+!7M2cw z=k~^);}2Xs_t(GNM}0xKt@&bv;R|hnVcpCQUC8?Nox41HYMKw0mzfrY-iqs`qCvw& zC_5@;1i(sDm3+Evxgy%(?-bxF)W8fM)I@>%*S1_B~NbLsZ=TbL^ z)1)-8k_qPo;rb_xnJN$T1$<^vW=tPl2oEEY+z+<4A$MY;)YQv->{}S+GRkfLu+U;7 z{VHO)BrM!8h`Pl&rKrowb@Dr+VP;6K2K;eFT)`=qfJ0ugw6(uH%$+9jsdbUp(UJk6 zTS{EW4v{X(q;kd`)l{&b^L~@U96o%2?SKxVf zt)0?D0SU0@#$70kE+<-;BT*Z-o)*7$&FO7#zj5;{_`$-$d>6K=;+EHuWu>STe`?oi z?aTKL{NOjU>u%Ze!1-TwrDwz3Xr!O<64zugVp2*Ln=s2#z>Pw&Z`s7^q$tTvxd^0r0+$GXB*yB0Jn3DCv;&+r*2-o^jfR$*dK10jl3?Z z6-PRMcywVw+sBqkbP_vB6hB zM}qK}8ninY`H3c!`}{~DOD6#$CHg9DZ57I4r7+pa`>NBGgMbB-#>r-|fUcYif&0~U znj1Osfx5#e^*QR(*3opHC|;e{+l5ZvH9hTRLZC9jf)X*npxLX~ z3>8l}W&^ZFETmY&5I7#gHT`p`3G|<~6g!D}MqwMAg7UOLv%y{(#U`2~q#{igw~jSI z%JtRDHC93RE@d6fB&W8PrIopZ^N1JQ+Gy1-3Pgv5+@Dj@MQS4(PSM^WhJSd=*h&7e7~%r~Gi8K7zfGB7wx3|D)L zmf>}#wP*$1)pj^kBCBZtBg0Y3b$F=B${l1xKe_c7PdOp?=O3&yo4VFw;A$p_Yzl3k zIXGaTVX!P1x}v17;E-azU*($x>-4Fnt303T+0NK6pC3VRoQj~nq*=@&j}OAga2oL} z6B*&MS?46L`~O*bANZ#3``-I^j$|R(a*zcva-7j4`(Q#5K^D1M()gAm1vEMQNt$+z z9Vk6QGCZ`>7DmVH-7Y&qa)XPV3OO~n5U1VpXMMIZ*(7>Gm$tGCo?V;x-f-92ae9+W z_n6x?O|M_Rw;4;5J@23Iv)9&F)_^UY^ZWDte!ibSQ_@zWG26@lWm8S#%O}Qe*u(UK zHKq2&p@Du}0Z6p>`Fr*6v_y-WT>iLtVoyH8$+0yMdtDU;zmH7}sPKHsFGz9jFga=g{d7JH4Wai3Xz5>?V60haX}Y zv?L_4G4@u%6PK3tVDd8F7l%_nYYr|X|BN$$=iCC9S6(EV<=l?Bn^Wc;2nbQl%c2;O z)FT>2sm}^RK&)2_qpMg$0`ePJUX4N3Ym(WQhB+d~6Ov&ok3(jVQgQO5y||+hOfd|r zBH4%|3~DB*Z}2b#Zs>6EuF`QLbK@k|{0(|~@$-3{Pa5E$i3>l)rXd1Uo}UJ~p!eeX}O zLB{BUkLL{+^^t2Q??H)8fuTyLS!_VzX7HnhbGeD-^}&v{W+Mvow!geNoR-x5hQ3>= z)r6BysR2l~bBgj_3{?curE$t7$nd3YF5og=S5sa=$wRs$K5`UHma!#4K?_4eC>lWa z(H$@vRe`5*63`hs6LZf5WX5v@vT;RqqR$)k409v;^>kCd)|n2%l+U%=$EYznWZ)v= zn1xB1VoAcZN{y{iVKJzIR!K6Qwiun%QkD6#RFeuQ&NgX4O$NISLa9|JSV-S!1=1>S zO4vEe+z?BGur^R+(!c`a3q%0~hejn3kb?BS7M<3~m!3P;2r-hV$qQHZrrv_wYiB*g z%!FqS5k4^0VC|}D)3i^oSi(le)9I~xDdSJr80qZize@Gja`rKM_g~bI;69x)Gz768 zUvWm4F~|a6s>cCd$Z?#pka%)6d7|N)ySs2J`u$d(=~_8fhpR|!kOl%dA`8j}N_|!p z;5paf^FsXfyVZ)B?}8+>t)2WaWNNi<%ZdF+MvD3mrN=Z#0TUI z0k2*A*62U8wUQNXol&`nLUaAiZm2+*jL?K zam{sZ>tip!^DJJyMMG>b2Z|^M`cG0Tv~U}d+W#SzIHQv z7KAaY1ZL#n%9nJj$1T3oz3jM|Saduhd$pMhahcBCJQ3dnzjG zHS$OiaGE6#b@n}XTbZQd8+_xHOwxuYD|gbO#tU{~L*|5ud$lWU7Uako-)!(g2q96B zaAoo2TYxb1m(X)~k2=%^MW!59&3~S!;#vtnHen=xqW51P(G;3d8sgcN9&Us{V`jtGO_4YUEk?HP zJfAG48Y=v#PJ0}>4zy62S+gm|n7iq({`NU;R9}vQE&3gf?u+xsE-rlkQgv3(mTFal z-$k>yDmLseVLLnybcT6W$54A->N4ncJDdxS#g2M>2pWqsZY)%&{y7~40*LcRTOVg? zBlRiSD!zXP;%k3zp1QvTX<94QJsvmhaJU)D29W`l3%&gc@0yxhs;Ra0fAO>Hw=O^R z>A&5!$v^G+8Xk$^iP-(4Hym&N;{KP`EgytkT*dBJan^&KgdK{a=U8WS2!!3!T6mD_ zb_{i8BU!Lz>M^eQz%JsTYx0;aa<-*{=vL|Z^4nKeHjCLayABR%cKq9;VYE-wqzsL69_W>0XuzHD{5e#TgTuqW zwC{aO4VJN0K_S7sJIX0NiHSMZ;4>mDCVWOc(}+nglqQ%?6_SrZZxF3n+$SIN4qyBWEw5HBZC>cqj?0G zi-4TvnLF1jnDRB_+{4bmicdHSvzMi2mr-bf>Xt2dGlX*^95fUH=M+UlXvNN!R;MR= zaX!1IF`lrtI+G~hQ225+@RpgIUq8XUg~uZPQ8jMnf(mu{nVD38_n@G^dDoM{P5Mn4tnH zh$OZJwS@;#2tDML2`j^t^R>OOeB_{rZx+&O5Us;Y=PttVItTLzYb+(`P)uMXIBK@I zkdLQ*0>qj;KR%`;4KE5zHKbq#{R68Z6>03X=I7K=t=|L$e1k$bRa93olaKGgd|%+!<#`0(ysLjMpgm@e)yK2qHQMG#)krm?*f)%r+D?OmJKc- z=e_s5bnNYS7H7Wu-MkXttQMMHI89)10b2hZ&pb2q2T#{2<+GeGjO6gymyE)E#S!Eb zAiGaXWA=`s(ZEg!3YSsun=b!4{l>*N$(r7jxNwUBqwoj@N`O3&K6pOeEsb!?3N4o# zNc*h~nH5SS#10k^e*lw-%SxVN?SNUrexit=$zg~Njtd?U5b5_`J#lO9oxhlS?jKJ+ z^XgC6`}2=F^XdHfu>(`(%(uJhuPrSd`Ssu4u+SGX)0IwnM{GrU5f(5iOw5XgnH2+Y z)i(-HbP}NOU}E-iyGkh7^A#Wrg~A|(DLqNfn@{Xy_4ZfcPI*RW0+I4?)-Q(7RgG0X zU-f^ez zIcrQvEg&vJTPe8{&4ysE4BuW)f-MBfnU{C$zz!GD=uFyP&uj9isa&ln3fMLiAaAX7 z3=2FDKVm+lXLu7TEaE;6>|+n|0r=WHNMwQDrRwIsTV0;X4#Y8##ww1KULnv6V^d^D zR|q8Cqw?}p4xkSk;DxV2^O9t_;oWo{MRR^?C;6Z;?nx`0^bH!w&8qm@H;_`fzjG%EQx`MuoV;O8KErsm?AVZr+!HAg>8XNZ*98!*xVddif zMI_UtdyPCTF#(9jNXrG4SYbe#4Ztl6GayJlxDKcEE<}QMNXpA^yUoIrcOhp$M86fm zsf7N&|HMCB+VR0)7fJ@ZHocT(lV6F37)8!f6vzYs`aGEVlyEJ1Dou=#wp+OL-)_C* zyRRPn`=8y@{giaSxZL2na7(MnlJ?YHhV$bkyDTbmE8ScmAt??Z15a_XpOg_Q&GZ3y> z-s%2vZRRd}0nswIuP=oU0t>`L;~Jmm$?zRtr;l_(VXTN}AN#i-{_!TP20%XHn!z3F zJGz4xq>-3|`BkQWR5!4s#Q%hD^tI=K!5E$@;4lgu7JMy2HPZn*F+NZ`CrP>y#s21r zH=G+kI{ybhfAXV0Z9FsZl}|RU|4h{HvQ;+(;is0r@bDMDH}wDf$6x$5_v0U5`preS z+UydXAb9qS4rLZ+wnBj*jH%TSTaZTb6>$(63!uC}+D*T4e7O4%A7X(9A;9t@avHD8 z4iw9O__P207hlYXv{CH&PF^xIp`twRF)>Qm2OpIh3pO&zw*<{V@!=vIN43enLokz7 znw}m0aqumdcWnw1g<^|}u?iR;=p!Z^?O5SZOfCL$cJ?cF6hhMPGs*k07$spt)Qlk= zyn}l$*MVuAAbk(xQbvZl@N?;1ppu60=OIVa;+(y@W16RjhvVs6%I7GoW2hHU!l56+kqamNh8%8S90uf`fQO+Z zV%&=nQS01cVjK9wqKrugHv+r2=vpGs$*%#&|(Yk!nt@ zq5dn7oQGXp+Zky-BgP7K8Y3QHn<0h3QJNz&H%_U>v-8OW3WpLWmJh#|LTz+@Qe9kS zZ7hY*T{tSJsB-zUb~>FHr)4Xo*-J?ErPv*QmNdYbG@jO7lJM{P16It$QbNs!150)w0vSGuEwjoL}?dhySo)`#0~IL`(-3Oo`&aSeUDbmKL^Uf9v-1RrG(^vl%yo?0ESb z&ph+q>?`}lkBoJ=Nn92ndcuPa8Qvc+h5&bVjt z_*)O0eDCesm*4rfZSVZ~Z{NFe?W?V?MDTdkHVek6*sO7yQKGh+xdFp>)#if6jX8$m zB*8XiaGWY06Y&9>;yGq4^YBQQ4KC|zPNTz_XjUc}WWiszVBgY}pa1a6Pyfe zu^yd+FLMGI6s`xX2^=Lkj4;|;jxI=p9E`>UKj^wIrxXL9dE(2zxPO6dfwaMy@85*} z&XGpJH;ac2y)5|`vnNU!D0*kGk5@pgd@~*9EXsAs_$F2fyA`bLf?lkJ!|)QBuZed0 ziw3-;T1^sMr^FLRHE_CKtFE6SaQ37V9I-MwmKqy?Fnoxk;u;4i|1>%LUiGy;KRIv@3aS61%;fsVw4r}*CL2%92O}Y%9^|VrN1U? zsAoSv0NW6ma%6f)L4_YgYl$w?Fta^}WXw{Y1P(G<@>DySJuEQL84RL1H@LkwEvLbD zdpTMsnYtG^nZgiFl^SGgSSi!sB4f$pfFbYBxh5oJsga#n@G#s`l}R+=VLldm$t)WM z`!|B!=5W6HU>!S^xdS{4p)kS{}x=oj8TZQRznj+6XTYEnB_Md*VoZS4(?>(6K+g-+| zXl#m2Uss!=xcUD)^zbV`edGBbd3fF;gg+4voWkZrYkb~{Xi!`51F{{1z7?p|IsTHJ z)(b!Q!4EhaDkPK1Aat1{^3j`d*u2~xf{{?xZb8VO+)u=fm~he5Fi4bFeCN;rf)3$N zj$Bi7()(DK0uNM{%zv%ghi&)YxHS6e4=!IB^*!x>xRoK03lQVtB+i6izh~w4S5G8A z`}Op9J@V>gKRN%qJuhr=M&#&g5;Zo50{G4ka-x;WMv&#yKki&fQ_GRtQGvONNUShG zk=+Ql2hui|bw3Igte|j4X)e%lRIq&}vS(6D8!7_udw0OQf|#{oVySAZCk+3F*c+xR z>5+38h0X+%(1S-7-*}}Ke>Ot#Ld=#yoObfh4ryejOnN;G_@Sx7SZ50Dhi&o{ZvOQ) z4QDVI9c-*K%-l)M68O?1YN!BA{qmIzR~x~IvIwDI2iwG~-_6G7OrH#gorsl9Y34#4 zD}6M7A9CSF#BwUTCNy`X(EXG&)OkeA)AOkjHRgnl%r%Hh`QaS33Ew)satf@H@=fxf z`3g2}E6j7)#kQpfI$*2-eV3@T6(BN#r?^u7>Tok5)Y28DZFBNvJ?k%YQI3N_b=oD^cDk<&rfSK)@qS?Y2|3qcFqyvvZWP%iI(`CLVEjo#N+}P=g!+q?%*^{rd{UrU1 z;NPsTihKq!#i_4+YFszle{tV8pBS3yy6p0Jxj#j{Kx=hGaM8mnONu~qVzog6F*of) z3TCut)_4KerMnF#F6SD!ez3mV(dj(Fl5lIn7UP7zqh5u8HrL{wFRrRh-cD22qGqx$ zz4Hb_73MNeE%nO79T~vRmDk}K6-%Uc*^5*6&0&$e#>K%(pBtHHI)IxW&^1OPyY32< zGIE*pk7Iny)GI%`V*z5gzjUSPv!+Yhc`z4xx>hqdrg1@{4ernAI4eK-QcuePj7B8I z9roh^nFc28{Od(iT==kI2Jb#naMmCkx`|Zl60^GF!{b`OyK*qC2U)3#2E7bn1Qjg4 z0~s(TO~QDn;&E7{it_>>0z+vKE^*LH<%T<@aRqjd zL%3*&{;pLx*XemwNh>&lAoe4QiFVoR%T`&?H7WYxKU_whZ>yhxf31P=3OQ)PMUr0$ z*#V;4Eqss<^AVYAc+EoX`CGcw9NMi2vwZ#&=*X^-J&0G}n>^2XjA`0s<0JLp0^Psj z51M|eLB^?wNw1&4sgIqic;N#O;0FdBRBbN6=&&}eH79_&R?tC1IK*OF;&N=!ET&X0 zXc!ZqUZpxmf-%d|0)gZxi7{`D3bSI>iqMoavS*B-BrkblzT?Bar5=I60z=5QGZ-EG z`*+c~iQx9TILx>lPlPC}0hDOFxdZY-N1;m1FloVBV$doF%Z`5g&FVdp=C4aoGKsm7 z8+XZ-Q&1VCpBXQ8vlK5Y@XH$6YnW3}kp|(Za@WN?(dymbd-d5TzO?PdPpxx1n(XQ~ z?{T&}J?}pD@U~ai`(ZM2wZ!K;+N@UW86|d_sBx7@rexFulrxu-&A1$Yn}zjR*zrXM zv4oub<((4vFuwgYc7vVGHKo&0u1x9xRQRZ>|CK2mwN`a^;(h^C{W(Sb&Q3| zQ?8q#-p}pX^5Scs|EAafC?|5oGo-9D^{yjZUVQehqPCviBfZ$RR*7QJ^V;*ZsKLwF zuD9f{t(3HIfitic#IT>EoQl>;H=+RFf2Hn2s=f@lAKFo3GG zpUeT_+XJRi&OEqDp-pHgaJ2HtIh^op$jK6n?nEEi7xU6t=?d8t3cRMbAMwg7oC1<(K-Mx8t8m=Q$7XT;zF*ind`SYd_F{~{&!j$OH$&G(&|G3VClN7V zUMD0+fCWtiIO(jfBLc(vcLeL&T(^{33y9FTw-|(Nv)#$y=A+3Os;sYOZFJHGjGp#+ z_F8tFeVV?!-HTb@I@p=8lQQk|L+QnG zts^(CUeLQn_BkuyOHPmXT$M*y1Et#gmC$FU-dJ&famaxYNF;2&bzEz_ARKUdsYmmH zN)*in)D_6qPpOu0d;BRk)IN#>)fTntv;|GDL@fluRq(QQh9{YSHSlq<{uPi6+6K=e z2SZ56P_P@~2Wdu9UgJmL0QZ03OfxC-##!v@L0^jMJz z;oIe-^22w+6-Ys>AfG1RokfbjqBgh~?faB@Bxqtm3-SPSO5^5`Rh4RLnA%%)Qpq3zhQ&vMCmT0M#>mC|OiXh&6DgI|P7c^*b%fsfB%su2zeZ?zJCEN@*+ zJ&b4*lXI7;FHC;zzOahj#%iJr>}lcTnHuxlk(Bw5lmFQZ6p)XY6~VM%w_0J)3Wd&% z!HGq7fMh4pUR;BYrBs)=hYooZQ_8V$DsmlgdcuH~UJc7a39Rl#X*j)_6#^GQXX!=Q zPbE>R^=?=F`C2lt-rsyERd+CvhiS0R#}u*A1x*3!Nwuz59J%KZzfZhw0NCPdjy?#V zqCD|tBv~`D(h>)}j%AfskQ?VnmDJ@Z5LO~rr~;?(hKBMuhLy()C;z8d8Z*4x3$(sA zMw4^XF_pw&4DtRraUklQ$Fv5On}QPu1;AnW2Zwx8$2_~zB~ilA(o=X(Q>^NOiogha z@nB&=DLO?U#U_{c*|W?2J^SQTG@ zGPWQ39V%o8H3B)szL!0wTb5FOm#Y`^M}MAk1tvWnP3TIQL3EfRP{GrkALGcA=ElzA z7K>rlToD$j!Kj`{o)ZCbFF}41C`sv1ad*M~&e6aR)3Fb#^`2XRowT=}x+fPA9V!SO z7LRK+1lK5hlYnWcW7XfXm^I z;xY4{DcsG>i&{H!1+UtF_O;ni%$LY-^ON8}lMzB|&(j;l?o6SQj!eZ&KT*ZkKeCsZ zf_p$oFjQY$tuq$5EYu1j$RP%0Bp`A{+8oV_>YgX-8f$Y5Snoy1gTZ~gOu9;z3IGGZ zA#4G;lzgjMUY6v-@#Yy(t{i;Nj#x?a%oX=nz^^1wig}cy1ndY#I#@?n-HUrYg#{rw z9mP>4S5RzA*??^Bjv&Ltpp$(Q5mB=pu?blVA{}H>KV@#LK+3}ph+YIvr5{I!jI5>P zlJ?lwN@orZE=l`cT%8P~0+~H=HXq@6N}!klk|cAtPEls{&3H*g#k@7jgv3e4ZT@IwLkRSt}ak+s4HFLd95BTlEzYno@l`7k5H%p!w9gdcYZ zyePvATlKZ9SD2f#oDelFkX5XKeK6O%?}dxgF5;6+IS_8ErTor09S z^Bd@Z!7sS&vE0*>WJ@_cF|6F26sJOl&Pb6J$qQAW;LC0O_M&7Ikq#sz)1P`udI1|w zKT%%X!ytqh)6KQyFdU=5;a7^kfe&5U<_TeU7@GSr0&4&2b?Zt>H>bDfENLCr_WO;% zK9$!sii>$}IW{yA9Q4MZ!XN)0oKv7RW-2WS{E;>veGEJjX5`~gkx06k+f;jh*U=;8 zrM)k_QcGV#KqK!<_Iuf784wl+O+MQt}H(7#igLCItuPfvkV`(Ur6G%a?uHZHH zK!e>fOa>#_eC^HKAt!YwRW^9Ktl;a-PEj796-mDTvdHQEn@XNAO_$=ODC6@j!eB-? z!4jmd!O*^$J-)*K1{_ihT21sZp>}fPvo}%b;>qsyQRL8T;yA#7krGH=TcLV~B5CEz zm}B1U#=8}$Y6P|nQ|1x$P{NUh$-8p#&3cZk#r>g7`pt4HP&Y*piO3vH=+VtWaA-VE z1IGBlFt7e74wL;tms^9L0aDjLz6x+%xH9{?hLF#q2qI$OBg)PbJ7oMglz|1JVWu6+ z2i-m>l-(KwIFF2XOZsKCaYuOjC!2%YPxpLUzR7>&oZwIv4tzFLvJ{r1k}G$90~GBZ z4Z=tjG*$Qs>#894rofvdB)W|c*I9(8We|}U4UzHFpN^;~%j8)1gog5gqfn|0% zJq}{4pI2t$FRR^~JGZRUkFg@MeypFMo^rO^yrRM}`sZw#zY^13@JEB5vO9CVb< z7KkRnvbcqJi6;QmSCpqfw3YCbYD~dv15mpKwmrdWkHVUq(DV|rP|n|CL=6rx+vy)wY8vz)4^8*e zX`BA$#2(qM!psI?a_->`%RSly-4x?Xr2{4ekhm2ITY^bF4+4G{K2MmTK6&J&8~g8$ ziil+}FN;rzv52<5u5MxqqR$YyNu?^TK08)3hN$MPO?Fsa{+TEv8(0rW^WEI=Ej1L{ zQ1d9=gni1<&-g51i?NFtEhk-61Ts^TS~>vGRPRf6QkpuLT#TJf1ul7zGitdMT4N20 zcqJ6m66pR-o)V*^N{nr+5bXECj#Kx+5hLK;L zR5T^*q#BZG^%bC5D%^6Un5l^tQ8*y$wL7q2mA)VLVt}Y@L!EhS7tA$G`E+igA!(Tj z0O=~^u@R9U6x#x-9P>@d7G&Za#Uf1yQ#*L1-J&2BgsV~ERmzA_TOA(IBy_5=@+Lp1 zOsz9VaR*I;s29)n^RG=r9ms}EQW2`X_nZ z$cT-j-myAnv-E8>$P_3zXmSp^EuupAVp0%oTPvgLgWEsF)D5c%Kx(igs-q8SbJHWA zNFXxu?V+(~WLw#&9iUfeqO@+0tT(Oa;^j@Swn4XR7;o`YDbW9U@7^zG?tc3C-Jz|X zVx9(?g~kHJYH?yIt8bjLre|mETOO+~rW+HB?Ka4kHO5rbLQ%bOiV2h~rzC)0icBKa zO;vdKfH4f1qIS)QQk_yPSLAo29*cyhoQtQ0$B}m<%RnW2wZ`OfXC@ayN6i;>_!sFu zF%!_!oHeTxDw%4}h=f#EJLFAx4qTF186O^Ay1fIlTq_TGY2;kwrgHTJ!;=z-S$sau z>>`6%gBgIWJQ%@W->3JNh_C^>2GFNOUUeRq0QZ{EM2yJ+$}=(PJ^#wK#&lyc-%s~! zv%ml&2VZ*B?w9^@{0&GXIfE?%RSW9se336;z)H$yFnes_Gb&T%KpsYkgzfc;h>7^v zHYSyKssV@4O~yZ&9`xgD$VE3M9Lr1BZ@;^0+49ODc?p3bX^x9XJ9+Z-&Gq3FSa~Uts@mbnGnPpj#H;C>Puy zvREAXY#_g9wh1QclBEX#vwNPo87S0P1RI9EuWL+T8})X05+1>`ecCRKambhiEHb18 zmn3Are>8xTh%22;K}l7EYg0T1*)FV`JAw@}2ZU_d36POjj}%^Ty*n2_dx055=5z}z|nH+W;c41byqt-qK5DYKk5Wq2_)X*YuUhRkaK)?g} zV6sewQ3R;fEUVumw)xK;;{U_79qDymInjIlGJ*F%$uN~zCu~Q=?9zKk;SB4}+I`Ev zBMxX0aB!3K_2Y8WupR4kGW&(=#84RrsS5y~Hr`O^YwN9Eg;C8!jHe3hm9CNNBL=pE z@Hl;<^PNBa*%$uP&%gBQ-@W?qCqG%eFqFdPq)53h_-fLG-}HOt-~C@d{ppadOx>^N z`bT9i;noVG&g%Xzup>A~{dNte4rNX4dE|%Ag}Cz}kNq)CDKa`kCIZx5!+6IVRw=ZZ z%LNiOos;r#f?ktZ6jrUnnI9FxW=h&D&z5>~5gVP-wmj2VMnTf9K0@3HP!r5Yddm;i z&BqdNc( zdbN{|*)Xx%1?3aYq+j5d{{Ch>R~S)OoXZ#O(KmM8d|+V`?p#lpi0Hcp;v+@UJC`9J;zHp-iS{ zCHTVc%T2_Dvcei+gSQRl^N>`j<6lSU&-1-?#Ad>uxO}=28&jI|%yCJXX=M7h0Ei5r7lm9N zo;Y@?aPg)8nGVyV&3$9MOcE&6wtPPU9_b2Qxknjl?U)j@88%Fjvkd$h!c1eCp2}tz zo|j1n2#e|@HV4wtVu0ip`XT9ruLLJGF03{ztJ?WX6clnH`u+yEkvW;uC2FPtEUsUU zTi7yt=2{?_aOpGOrCYT;V?Fg454ce^8Nxi^-A=kjS^#rO_^n8rG1yaIgPQgD@F57snLGVW2lCL?%&1Ff8S2W4)dOmvMPK zST$f9KX;uP9{n}}PM(elYnu{6NQ2*dhe-=@Vi>BnA;R?WJQI*e*zR>wg zOV&ohhAl1|U-fh9NhUPKDjO9WKp4b*w+>^#G#?LXjhJ?y$hfG#RXOyP0(J0n)wQ zxaKb{ygA*)iYE>E{mr~O(2|s!_}H!bBIN+-Izlz@gAxG<83<4?{X@tBn~h7z%EMg1 z8NdXH#WxuJHmnW5lok+PM%Cr&+X`WsNgF+u@_&4ijG{tGS*;ZNs~9dk)IzgVvbT(S zND~l^jhM$PHZMaG_}wbv8Vr*i(;BrAxXe(=j%3WDVNvlGCyG#Skg_8mc%R=0OM(x; zDzH6;%u_0!-RWGw784E|3i=&OyJd{1vl$xr6iF01u$b3Da6?W>g090uD%asSVdpTY z_;5_~Cq${#D;vTKGl7{goL(0wB%FSp;dbC6hVZb9G87ZiQE{UYKG#{qAP4(2<}}i- zdTW|a@?1m0AOUvys|!q#NdwLYhps%&>3H+@D4eUm76-oYvoHRq>woHn51rN1jI@B$ zJJek1+D8}yj(0gK`?UizLvVf0wX3MZCb>OzJWZt}Hrq3_3vrtnglebQq3hm02e{8+ z5^)$ndWyzaqGX?QN3*FnalR*G>jg_8}&UJ+)xtYZc09_RAwY29FqPP4-N zj_|v-Gt6RzmxrZ6ICra$3mZQa09sQf9Fm;lbIE*FNPL(sc>xq~OG3Za+v=1MRs~uX zrj&TQ;HN}kfjpYaj~|X8b30{R75xrCvRt!}1OR~FhQg{R82qrzE6kTCPab*ejiKrn z12w<{yBTyb_+k_Qe;vYDm?r^%B@}{HBn2@*1e195Qxj50=Bm;Qp<5f4*eMd3F@S`6}4yLl*c*wvUu45#vAX8a>TW9$?6M<3% zAU-$+|I0uv-GA*wfn_Qkl5I4CGd?B}%9QY}0(I2%xH|akB6j~-EEQmbHbZx3uh`8- zh}(OBHynO{a{*r?qs^lH*|GhT{*~9^z|$3;-|!PTet7cFXFsDN$)dAh9`To3i6t zwhK)p{nQ0wnVDfMJpjPfoRExoX-ia!Kq=UXCmp<0s0%Is$98MwAksYmbL*2q{;J`1 zH2U#6;W+MR35)1Zsg9d$dGAmKya4qQ-k8jsKOk7w;r2Qx$fa$uq`fXF%&kbcx_Jd$ zSSfERxr-5t7|+YT{I-%LYr^EY(+dJ~Gt@wSecy)t=<_OYh_gUhj_l}J9Wx`(yrZCt z1(DV75`MkCE}LP0Gra8ssvI@`+e@5O*=Z#b;1k1miIa z;Ig!o^D#oc?;YeHBM31WIq`1UyhFXXESYYssxaL`fXcC%lLBB}96*Y^N7WmWrA=9S z(Tb^a4}>YkOg3T60WkztoUb6<@sZ2MyUeo_M2d3@DW|0YKMm|SoZV}r`}=gJ69bwu$W zb(JcF!EA!~RL{I`F-l8eQ}^J6kzh{38#)6*OCLzkEy;q3#uA1OsFSY^8j6; zMgk#7kb@lKRGMiC$6aHoR+Ovow$MdEhh$QBdaIXi0mET76Y#I*;av)Di9n^Py9K_i z+TY4>rBD~1q9U(MLY(JRpJvVqIzBZ|C%haOBW$_ZDA$pp5VN3mifn|=le4kHm$Iqw zq;bTY3gLTciU#aD{7$%wln}gIhA<4>M+3pQB|8+b!8En!A_Pj9hNB!2d3<#y#|##% zLy(%(=}ha%tjA)3na%EEtEcXJ{{ezQp_N0KGQYx~Vv_Pz{1XPgd~&xIMJ@%xrRi$SO<&e?s#8L)iTOQNPD0l}an=BFG8CDuSyM0Rf`!pc5Laz4^r> zaN21ZX1ii+K>QZSD7$y*0S5hNan0-g^lA_yI}rW`HfVq;_80-Il_(K)(_{p)^t-|Q zy`iNqa=(fx2~g2n;o$bXZ21Jl15z9r-+QA`nY=iL^nf-a7m*tK$(AEkb~9QNZ}NKpwO8<46k>X8En6BWunzFygF28*xB#1p02aFQbhvp{hK{l-L$ zQ701+fgjEVnI*v3S`{o4TvMZFnsAiRT2q`ldRd22nX5RV^=S#=e_FARMe(N%&rNgj z9zEN=Uroyi#TlZ&L8Ee10N^j*LMD(WSHYip1%IN1G1WPj87(QKiPxy<;H>FS0FD?+gVZ^aGg zdlRi=LvD0b;l)Xqx|cDC;+g7zBVz@j9ZFX82Rj%kYC*|$zA^ze$K(j3)k7X+@Dy&U zAs7=9rjFUN;pEK>!CIL-Cl3l5;X43E3jVLo+cr#F0!jxdl|GenR0df=*le5D# zMtOyz1;?U_gYi!1l%@D>ileU(rM%+ur24pf*ZEt3B+Yykh*E7AMu|N^s+ncmRfOIU;_5QZS0YVij}(~aTb;nd+LPgPiu5Sl`E03f8202*p@p04a*qLTzH zX%RsHnoYZR-2}HnB}M~A`RtC;N-sju9veU6?SZR)vwB((`_P=dc4vJQ*Xnr`Oy#`y?J_OuSM1Al~pg)PBB!1UrS{P zyCaLBnj_lcRB&rpM2?H%HifuYTgL=BnR{^CKfi|Yl8ZueRY6+|qm+-c+6z)!%zNIo zHx-<9MGQ>=@5Ii4dZp?{p;D=!;Owv78_ z)(Xv>g#9=i;O)ZDueM398GSA1_}o5v0InfP(&v(0xm!;)tlTXV9~BUbKutyPn-v}Y zT^>+h`KR#QZV_hh4x~yI01keaP#N4)T&c{PQDscW+RkKvk>s@!0c)n}le9mKJgITX zH7eE3ox|A>8%TgjFfJ}c*Q0M~2|13C^u&-R{C8Jt1u~2%?wC1y_(NFS1X3c0|MiLi zE6}N+Ya+%`xEMtV=x{!WDiZQ6$iz~c%7z@QMRDq^bRcraXoZ83X+GRL7)=U3?kWzT z@NdDd+EBeXvc`m2IoYzG4bIm<63WTXfh3csrGbSqUtdJjcuq1?V7~iNz1mg4uYCY@ zc(rgYuwJQ|eIy(@6(u#azZZ~b3!mezEkKptVcGR0h#wzoUAaoN;Fh+rk1mb{_ z_U^p@#)P+eOVsyrVG{|~hznnPezdhC-wG4XY(~Khb~?e#Ya%>pUAHv^O~piWP9d0L z*p0A?@-J;;Tu1YlVyKDazyx=aBOjMXb7QQ*ry;!8fYXYrAM=2t{Z;i2SM$iV7Z`Cd zW5@%ry*(F3)KJTaHea{YliXEUYdfjAV*-F<%RN0pp`-8Y)=fkbG?p7x3t!rHF)%rT_($!)V)#uGm-N%Eopw zCe1exBL-N+Rf5R*B)oEUCPt-z z`8JYl&}X`I$vu^`L%3hm5mnNFIER_~N2kHe* z$Q(`Bj`LYqiE6I(Tp!WA_DO0t&aL1#i96wZU?DolC!Em&2{5_cusQpVUaqsY34RLM z60qqc4h}ni9^-a~UVwLj#LC;$v4vjw2H+m0kxne+MKTFHy=^o5I4AVw-;u%U@qviH zf7Hb+P}|6qjZ}9J8tdTWaG)79FekzK4@ASsz#hCFW%}k^AUiH+DM6G2E?}y5=IU)5 z6t9K?xEeB0L3B>VEY{`eqt$YhRY~1^Wnfhlma9NQZ{-@3{wU1NIGUtiqFY^l9XFde zAtdRV;aht+7mzRa5gZG?bAH2B`TL6s1vrCf+_3s?`4D(;V=<|toS+VdceA0qH3a81P_SF#>rm1|X(xAAWOvV`Jk9c;!XrnRLR}IvfUD0b@u!!CQhbYp|aH(4la>K&b!dS{07L;DBc{Nn^&aGJ@mY5ZJ*%M(y@>u??b>eAekyl zi#lwl?AC~!yLr0~nw`K9Xc8`sl^1E@p5kRdD`%v2^NN$%4Q>iM8x5Lj&`(aid<8gi zZU$khSWZvFVY&=hF!D5xK=789`6c{DE+UK8 z%dr>m!|7%%_-yoIb4}8YeEE0y(^urt^qs>8RD6NTXDi@WI@p9^wrgq8IcZgCyj99~ zgK@f~%>l=e~pqH?|(*1>0Ak#Z!5o1Ye>$3 z)}tXsRS5H}ZXPEq&~1wq2~Fw(2P>-;qedpnKz{&YPTMhe`NqMalW)lfD zgMH|M&;m9=w_QIGSNnTDJ$vVV(Jm(*DaEY!>Rzq3>Xq(;{NGsYAt1a{~EiEJ^~K=BA8A2VVo!5`*&r zLahe}KRMoaBfu6(iU~RO~;Dh$1+jQwvt5|lxNBIwAkwhS3N z!Lnn4u^MuvBkt5T$Vb_JJu z`TDRgklf^SI()lH8^%Z#0aYE!c&{{?A=LwZmV0a)9)x$Oo^di#8^r7l{GGLcuTBpQ( zLRsy#=LzwHC9V^Vfk~^&W!S5ob=>vLG*zADuK8W6QS_*U92=AjUu};^+qO3YSP*y) zK?*tr5LAJq%hj%V0OnEkxX8o9Z+ZOSSqG+Xj$G^Z(;~}X&h_k%s)!2PY+ z2JWCLQKCLIJ8`vqqV5*Ilw~uQqKH?qSS6y1-=D>*C(e(GlSt0CJ&T5flF3wJ4usuM zm&kR(_pvc&=;iV9sPrO{;I0FRHA-v0n5@W2$S>Ay=ool8$eJD^`|zHkdtGy^6% z+R5|4gy-LzY;v?yH@AnzoKNPkonBKcye5anbc2e){1hSk>Wi}NG?VD z?F+Iq7+V}t?U;L}grey#ziT<|V192IT7}LB_6pd=jNPX|Q{@h#{i`7J=J( zR5RE+m!wC)@nNtn$`@cbN(iV49yA24b59%d(ZR8Aq}Mc1j}nCLYl2IX`x%w`E_06c@bLrZ5|ARZH@i>N6cG{Z8g z0{Z+_7Ys93_)I>NuY*;Be^J(slNM6>G(RP$i$T^5zMh<5Ez5fqXbGHtj5{Q4ONYrn z6QY+vd?TFx%D2H7XFp2iV3&o;N}da&qS_n=)G2NdcT6o^dEUPVnd_DpV~WSP%YMxD z^6o;oZ(IIuuM-=|lz?$d0Pd@2xa6kmUa0d)Ut$+GQMB!|VwbrtuO@}<+k(fcior36 z#XRTO>LzwS9KRcIKWgog!at=>HA3-c9*e%X%MJ%J*Q(*GK;L39kL*PAB*9udq1VxR zoVQbPQrJmzJT3`EE;Ojfbh*g3nf&_UWAGfMKM;0(J{O!IR3_ml;m~+}6aXsLqMU9D z(!!Vp!-SXvz#yR&U~HUg`1Q&vcNlzaCd)LS9KpjC{)l9QQYRQD=ZJ67tdO^Z?;C%U zR}NBb*63~xr>3j|H$lyv&0~v{XBL#j2F3SDJ`MR4YC8V6b3qg z8dp=XT0f}K@oI5eh9l803govQ1z*n_PS3Xu6|_kdVPv~d1X6T*I42;mc~EG%aBJsm zxK3h50==bAVwUXnCM>G4#u8ZQoLewXDJ!SgWsJ_b0!>?t6$U;|aZ08kPL|CQru2*v zps{4wKISr{^<>IOV8OgJpF!*PagalYCQ`$A*w#4iH206 z9aRhv5a$C%dFLYH{7~jwFCG7u?$UGt03LfnhMMY%J=SO|OW=DF?IU~igjzmr< zkB(m1Ymu3y1Odjr=)nJ>T=4?wK;rbnu9OOVvXbew`KV-^QzaE&i}G0oQzZ)9VY`dE z1Rot4R=Eu_vx0s^dgTdB+}Sl6A-S7N1M=C-1IM25oZfr%$dQLbb155Ol_L#{)SZb`*Ih_N1YXHcLbB4a2Mud4!}bOn}bYd({SN*`X1POm|Q~ybP?mYYT-asp@eR39j0N~ zf!K$|MOBS(Xl^$Z?os(-fs>S79eg~?vX*{<4;-FjB2Boibb z%%J3X`w^$#oA;<{f0Tp0A14l|!u0ojc7+|2#-JLpC}&(N777$ogpF|Xc;n`SI~2QC z8vo@ht&nZE>RH0r>a(Ge z9^n%EZgfBSWa&pg+PN>eC9zpkd^VPo^wM|c;t1-O11@#>ZZFD!AcJGP+l#FrR;;=+ zfNpsuD4lHDC2nX)cs0)xB=ew~Oh=*1#i!Cq!^-q@Kr^1@tXDYrpcq(S8OR~6UcABS z2s7;fmaqkDrKM%}9l$*jR79Fp?zuNi(zZoTCyije4+D(BeC<5Y>B3Sc!k&Jd`haG8 zJ(_Wf!rHI4bJv9&E; zVJSrG3TEg`dnN=6h@#1a_ZgWO;$OJEfFO{cV4u+_OQvHXP1HmJV?X;C_XxK2mDtVO zV`oX7#(~!3OO9;kx-kJyckMdzFoPN#D@%Q+dv;#9z7+k;*Oh(}OA)3lngM_q6zVow zA!h-DN8L~h4}WTt>jikhoaahoQlv@ZVv4`n^uP~qN+(CIbEtY<)MLo6RC@iZHBEgR zD8612E5DOg%B8AurL6qJvv*wW%6?1eSmDt~IPB$uei4zFRWbejI5HBhu0pCLP0OTE zLy^F?CxqLCb=k;6u=IN`Z!R|D4 zFtn=%*Tj{HC~aRAHyyxb#>2#lJGNamthB_+RM^=!18y~m0XfY^BO*Sh95V%o;GqT# z#yCdIPUnRWUp!lBZ+fDf%l-I=7k+QsH-7Ty_-=JU%hO>#xGu?17k&!bA?{IDJMOhs z&$loA^sPU1PpLL+!WQ8{!9fhgy;^&ePlaPy5-Y6H9hu6>BVYdPo&#PlH_IaHCBmgR zR;zJ}Q5UA0sg>bQDO8~}yEfyyfBN~q#Wpbc@{N<9s>NXp9vWIpy`k5BkE&o2?>T=} z_x|1e|o*r}gb+>h+_+Hzm+WzDv5(o$3CZ6j(RnQkT?ehP7->-lDn@7I4 zr74rfm0t_cK3OQ388`2kvIc@CbCqP_%JXOQ61ZhOKm>a{?x6kMnuqxhaJZNH*(OPW zcmcNG>vCk;urQmAurpDU zT@?gG$qr!dPV{Pm)B;pS^W6BWo7rnciV8E@PZOq1#It9q(`|BY`Y<_#gqFM%)RIv4 z?biRDfy~4WN6V{ohG58q*5@`g_()E7Lw}W1j}RcS%izrIyM@-hoewF?-)%vTskjw+ z`w@px&oI`nASuN(f;Fj76L<>4m@u;VGT9f7-Sv_l`zt!=~m?0fEC9PEU04K8g3+H&Gizl zP-OQpi9s$jw-4q8pwvv+4%h?Fu1SK*%WVv0N6sNl6?XL1wevCQfDem<%{#l&T%lX; z(G+}jdo;|FF0hKI{L2{K&34`4Ds<7!If5~-hH--QGD3Xa36xA!pL0yI^?yq4INmB7~*`_D&Gz^<5?&+0F)Sef7Q@U-`-_{g(>i`N@-S?O&V( z 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

0Q9vIL|xZZwA8= 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%0AGhMwoQBj=K?pY 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

F#E`zzgheH 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�NQ?U1f5g26Z!T{q6OogHL@J=F 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

*

For example, you can add Power Advantage compatibility to an existing mod like this:

-	if(Loader.isModLoaded("poweradvantage")){
+	if(Loader.isModLoaded("basepower")){
 		LightWeightPowerRegistry.registerLightWeightPowerAcceptor(Blocks.myMachine, 
 				new ILightWeightPowerAcceptor(){
 
diff --git a/src/main/java/cyano/poweradvantage/api/modsupport/package-info.java b/src/main/java/cyano/poweradvantage/api/modsupport/package-info.java
index b86dd02..16d362d 100644
--- a/src/main/java/cyano/poweradvantage/api/modsupport/package-info.java
+++ b/src/main/java/cyano/poweradvantage/api/modsupport/package-info.java
@@ -1,7 +1,7 @@
 /**
 This package contains the light-weight API for people interested in adding Power Advantage support 
 to existing mods (instead of making a Power Advantage add-on mod). Typically, you achieve this be 
-first checking whether Power Advantage exists with if(Loader.isModLoaded("poweradvantage")){ ... }. 
+first checking whether basePower exists with if(Loader.isModLoaded("basepower")){ ... }.
 Then if you detect that Power Advantage is installed, you can add an ad-hoc power handler for each 
 of your machines like this:
 LightWeightPowerRegistry.registerLightWeightPowerAcceptor(Blocks.myMachine, 
@@ -28,4 +28,4 @@ public float addEnergy(TileEntity yourMachine,
 The above example is for registerring a machine that should accept steam and electricity power from 
 Power Advantage add-on mods.
 */
-package cyano.poweradvantage.api.modsupport;
\ No newline at end of file
+package cyano.poweradvantage.api.modsupport;
diff --git a/src/main/java/cyano/poweradvantage/api/modsupport/rf/TileEntityRFConverter.java b/src/main/java/cyano/poweradvantage/api/modsupport/rf/TileEntityRFConverter.java
index 9cd3980..a7a62c2 100644
--- a/src/main/java/cyano/poweradvantage/api/modsupport/rf/TileEntityRFConverter.java
+++ b/src/main/java/cyano/poweradvantage/api/modsupport/rf/TileEntityRFConverter.java
@@ -1,6 +1,6 @@
 package cyano.poweradvantage.api.modsupport.rf;
 
-import zone.moddev.mc.poweradvantage.PowerAdvantage;
+import zone.moddev.mc.basepower.PowerAdvantage;
 import cyano.poweradvantage.api.ConduitType;
 import cyano.poweradvantage.api.modsupport.TileEntityConverter;
 import net.minecraft.entity.player.EntityPlayer;
diff --git a/src/main/java/cyano/poweradvantage/api/modsupport/techreborn/TileEntityTRConverter.java b/src/main/java/cyano/poweradvantage/api/modsupport/techreborn/TileEntityTRConverter.java
index de840dd..a9c55b8 100644
--- a/src/main/java/cyano/poweradvantage/api/modsupport/techreborn/TileEntityTRConverter.java
+++ b/src/main/java/cyano/poweradvantage/api/modsupport/techreborn/TileEntityTRConverter.java
@@ -1,6 +1,6 @@
 package cyano.poweradvantage.api.modsupport.techreborn;
 
-import zone.moddev.mc.poweradvantage.PowerAdvantage;
+import zone.moddev.mc.basepower.PowerAdvantage;
 import cyano.poweradvantage.api.ConduitType;
 import cyano.poweradvantage.api.modsupport.TileEntityConverter;
 import net.minecraft.tileentity.TileEntity;
diff --git a/src/main/java/cyano/poweradvantage/api/simple/BlockSimpleFluidConduit.java b/src/main/java/cyano/poweradvantage/api/simple/BlockSimpleFluidConduit.java
index 73034fa..d169c22 100644
--- a/src/main/java/cyano/poweradvantage/api/simple/BlockSimpleFluidConduit.java
+++ b/src/main/java/cyano/poweradvantage/api/simple/BlockSimpleFluidConduit.java
@@ -3,7 +3,7 @@
 import cyano.poweradvantage.api.ConduitType;
 import cyano.poweradvantage.api.PowerConnectorContext;
 import cyano.poweradvantage.api.fluid.FluidConduitBlock;
-import zone.moddev.mc.poweradvantage.util.PowerHelper;
+import zone.moddev.mc.basepower.util.PowerHelper;
 import net.minecraft.block.material.Material;
 import net.minecraft.block.properties.IProperty;
 import net.minecraft.block.properties.PropertyBool;
diff --git a/src/main/java/cyano/poweradvantage/api/simple/BlockSimpleFluidMachine.java b/src/main/java/cyano/poweradvantage/api/simple/BlockSimpleFluidMachine.java
index 0e376c8..3fdbc7a 100644
--- a/src/main/java/cyano/poweradvantage/api/simple/BlockSimpleFluidMachine.java
+++ b/src/main/java/cyano/poweradvantage/api/simple/BlockSimpleFluidMachine.java
@@ -1,6 +1,6 @@
 package cyano.poweradvantage.api.simple;
 
-import zone.moddev.mc.poweradvantage.init.Fluids;
+import zone.moddev.mc.basepower.init.Fluids;
 import net.minecraft.block.material.Material;
 
 /**
@@ -8,7 +8,7 @@
  * block with an inventory and user interface that gives fluids to connected 
  * fluid consumers.
* Example usage:
-int guiID = zone.moddev.mc.poweradvantage.registry.MachineGUIRegistry.addGUI(new MySimpleMachineGUI());
+int guiID = zone.moddev.mc.basepower.registry.MachineGUIRegistry.addGUI(new MySimpleMachineGUI());
 Block myMachineBlock = new MyBlockSimpleFluidSource(guiID,PowerAdvantage.getInstance());
 myMachineBlock.setUnlocalizedName(MODID+"."+"my_machine");
 GameRegistry.registerBlock(myMachineBlock,"my_machine");
diff --git a/src/main/java/cyano/poweradvantage/api/simple/BlockSimplePowerConduit.java b/src/main/java/cyano/poweradvantage/api/simple/BlockSimplePowerConduit.java
index ddd7780..17f18bb 100644
--- a/src/main/java/cyano/poweradvantage/api/simple/BlockSimplePowerConduit.java
+++ b/src/main/java/cyano/poweradvantage/api/simple/BlockSimplePowerConduit.java
@@ -3,7 +3,7 @@
 import cyano.poweradvantage.api.ConduitBlock;
 import cyano.poweradvantage.api.ConduitType;
 import cyano.poweradvantage.api.PowerConnectorContext;
-import zone.moddev.mc.poweradvantage.util.PowerHelper;
+import zone.moddev.mc.basepower.util.PowerHelper;
 import net.minecraft.block.material.Material;
 import net.minecraft.block.properties.IProperty;
 import net.minecraft.block.properties.PropertyBool;
diff --git a/src/main/java/cyano/poweradvantage/api/simple/BlockSimplePowerMachine.java b/src/main/java/cyano/poweradvantage/api/simple/BlockSimplePowerMachine.java
index 2d90210..65fc812 100644
--- a/src/main/java/cyano/poweradvantage/api/simple/BlockSimplePowerMachine.java
+++ b/src/main/java/cyano/poweradvantage/api/simple/BlockSimplePowerMachine.java
@@ -1,7 +1,7 @@
 package cyano.poweradvantage.api.simple;
 
 import cyano.poweradvantage.api.*;
-import zone.moddev.mc.poweradvantage.conduitnetwork.ConduitRegistry;
+import zone.moddev.mc.basepower.conduitnetwork.ConduitRegistry;
 import net.minecraft.block.BlockHorizontal;
 import net.minecraft.block.material.Material;
 import net.minecraft.block.properties.IProperty;
@@ -28,7 +28,7 @@
  * block with an inventory and user interface that gives power to connected 
  * machines.
* Example usage:
-int guiID = zone.moddev.mc.poweradvantage.registry.MachineGUIRegistry.addGUI(new MySimpleMachineGUI());
+int guiID = zone.moddev.mc.basepower.registry.MachineGUIRegistry.addGUI(new MySimpleMachineGUI());
 Block myMachineBlock = new MyBlockSimplePowerSource(guiID,PowerAdvantage.getInstance());
 myMachineBlock.setUnlocalizedName(MODID+"."+"my_machine");
 GameRegistry.registerBlock(myMachineBlock,"my_machine");
diff --git a/src/main/java/cyano/poweradvantage/api/simple/SimpleMachineGUI.java b/src/main/java/cyano/poweradvantage/api/simple/SimpleMachineGUI.java
index 1540445..2c4d62c 100644
--- a/src/main/java/cyano/poweradvantage/api/simple/SimpleMachineGUI.java
+++ b/src/main/java/cyano/poweradvantage/api/simple/SimpleMachineGUI.java
@@ -1,10 +1,10 @@
 package cyano.poweradvantage.api.simple;
 
 
-import zone.moddev.mc.poweradvantage.PowerAdvantage;
+import zone.moddev.mc.basepower.PowerAdvantage;
 import com.mcmoddev.poweradvantage.math.Integer2D;
 import com.mcmoddev.poweradvantage.registry.ITileEntityGUI;
-import zone.moddev.mc.poweradvantage.registry.MachineGUIRegistry;
+import zone.moddev.mc.basepower.registry.MachineGUIRegistry;
 import net.minecraft.client.gui.inventory.GuiContainer;
 import net.minecraft.client.renderer.GlStateManager;
 import net.minecraft.entity.player.EntityPlayer;
diff --git a/src/main/java/cyano/poweradvantage/api/simple/TileEntitySimpleFluidMachine.java b/src/main/java/cyano/poweradvantage/api/simple/TileEntitySimpleFluidMachine.java
index 7aee735..375ba76 100644
--- a/src/main/java/cyano/poweradvantage/api/simple/TileEntitySimpleFluidMachine.java
+++ b/src/main/java/cyano/poweradvantage/api/simple/TileEntitySimpleFluidMachine.java
@@ -5,7 +5,7 @@
 import cyano.poweradvantage.api.PowerRequest;
 import cyano.poweradvantage.api.fluid.FluidPoweredEntity;
 import cyano.poweradvantage.api.fluid.FluidRequest;
-import zone.moddev.mc.poweradvantage.init.Fluids;
+import zone.moddev.mc.basepower.init.Fluids;
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.inventory.ISidedInventory;
 import net.minecraft.item.ItemStack;
@@ -23,6 +23,7 @@
 import net.minecraftforge.fluids.FluidStack;
 import net.minecraftforge.fluids.FluidTank;
 import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
+import net.minecraftforge.fluids.capability.wrappers.FluidHandlerWrapper;
 
 import java.util.List;
 
@@ -72,7 +73,9 @@ public boolean hasCapability(Capability capability, EnumFacing facing) {
 
 	@Override
 	public  T getCapability(Capability capability, EnumFacing facing) {
-		return (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)? (T)tank : super.getCapability(capability,facing);
+		// Delegate through the machine so overrides retain input/output routing and restrictions.
+		return (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
+				? (T)new FluidHandlerWrapper(this, facing) : super.getCapability(capability,facing);
 	}
 
 	/**
@@ -744,4 +747,4 @@ public FluidTank getTank(){
 		return tank;
 	}
 
-}
\ No newline at end of file
+}
diff --git a/src/main/java/cyano/poweradvantage/api/simple/TileEntitySimplePowerMachine.java b/src/main/java/cyano/poweradvantage/api/simple/TileEntitySimplePowerMachine.java
index e8d9151..5eeeaa4 100644
--- a/src/main/java/cyano/poweradvantage/api/simple/TileEntitySimplePowerMachine.java
+++ b/src/main/java/cyano/poweradvantage/api/simple/TileEntitySimplePowerMachine.java
@@ -4,7 +4,7 @@
 import cyano.poweradvantage.api.PowerConnectorContext;
 import cyano.poweradvantage.api.PowerRequest;
 import cyano.poweradvantage.api.PoweredEntity;
-import zone.moddev.mc.poweradvantage.conduitnetwork.ConduitRegistry;
+import zone.moddev.mc.basepower.conduitnetwork.ConduitRegistry;
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.inventory.ISidedInventory;
 import net.minecraft.item.ItemStack;
diff --git a/src/main/java/zone/moddev/mc/poweradvantage/PowerAdvantage.java b/src/main/java/zone/moddev/mc/basepower/PowerAdvantage.java
similarity index 87%
rename from src/main/java/zone/moddev/mc/poweradvantage/PowerAdvantage.java
rename to src/main/java/zone/moddev/mc/basepower/PowerAdvantage.java
index cfb8e4c..ff0c593 100644
--- a/src/main/java/zone/moddev/mc/poweradvantage/PowerAdvantage.java
+++ b/src/main/java/zone/moddev/mc/basepower/PowerAdvantage.java
@@ -1,10 +1,10 @@
-package zone.moddev.mc.poweradvantage;
+package zone.moddev.mc.basepower;
 
 import cyano.poweradvantage.api.ConduitType;
 import cyano.poweradvantage.api.FluidCategoryRegistry;
-import zone.moddev.mc.poweradvantage.registry.FuelRegistry;
-import zone.moddev.mc.poweradvantage.registry.MachineGUIRegistry;
-import zone.moddev.mc.poweradvantage.registry.still.recipe.DistillationRecipeRegistry;
+import zone.moddev.mc.basepower.registry.FuelRegistry;
+import zone.moddev.mc.basepower.registry.MachineGUIRegistry;
+import zone.moddev.mc.basepower.registry.still.recipe.DistillationRecipeRegistry;
 import net.minecraft.block.Block;
 import net.minecraft.init.Items;
 import net.minecraft.item.Item;
@@ -18,6 +18,12 @@
 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.FMLMissingMappingsEvent;
+import net.minecraftforge.fml.common.event.FMLServerAboutToStartEvent;
+import net.minecraftforge.fml.common.Loader;
+import zone.moddev.mc.basepower.compat.LegacyIdentity;
+import zone.moddev.mc.basepower.compat.LegacyLevelData;
+import zone.moddev.mc.basepower.compat.LegacyWorldgenIdentity;
 import net.minecraftforge.fml.common.network.NetworkRegistry;
 import net.minecraftforge.fml.common.registry.GameData;
 import net.minecraftforge.fml.common.registry.GameRegistry;
@@ -33,7 +39,7 @@
 import java.util.*;
 
 // NOTE: other mods dependant on this one need to add the following to their @Mod annotation:
-// dependencies = "required-after:poweradvantage" 
+// dependencies = "required-after:basepower" 
 
 /* IDEA list
  * drain block ✓
@@ -178,7 +184,7 @@
  * compile classpath. Do not embed PowerAdvantage in the dependent mod.
  * 

* Next, you need to specify the dependencies in the @mod annotation. For example:
- * @Mod(modid = MyMod.MODID, version = MyMod.VERSION, name=MyMod.NAME, dependencies = "required-after:poweradvantage") + * @Mod(modid = MyMod.MODID, version = MyMod.VERSION, name=MyMod.NAME, dependencies = "required-after:basepower") *

* Gradle or Eclipse should then derive its compile classpath from that declared dependency. The * Minecraft 1.10.2 build targets Java 8. @@ -186,7 +192,7 @@ * @author DrCyano * */ -@Mod(modid = PowerAdvantage.MODID, version = PowerAdvantage.VERSION, name=PowerAdvantage.NAME, dependencies = "required-after:orespawn@[4.0.6,5.0.0);after:basemetals", +@Mod(modid = PowerAdvantage.MODID, version = PowerAdvantage.VERSION, name=PowerAdvantage.NAME, dependencies = "required-before:orespawn@[4.0.6,5.0.0)", acceptedMinecraftVersions = "[1.10.2,)") public class PowerAdvantage { @@ -196,11 +202,11 @@ public class PowerAdvantage } /** The identifier for this mod */ - public static final String MODID = "poweradvantage"; + public static final String MODID = "basepower"; /** The display name for this mod */ - public static final String NAME = "Power Advantage"; + public static final String NAME = "basePower"; /** The version of this mod, in the format major.minor.patch.target */ - public static final String VERSION = "2.4.3.110021"; + public static final String VERSION = "2.4.4.110021"; @@ -250,9 +256,20 @@ public class PowerAdvantage @EventHandler public void preInit(FMLPreInitializationEvent event) { + LegacyIdentity.requireReplacementsOnly(Loader::isModLoaded); FMLLog.info("%s: loading config file", MODID); instance = this; - Configuration config = new Configuration(event.getSuggestedConfigurationFile()); + try { + java.nio.file.Path directory = event.getSuggestedConfigurationFile().toPath().getParent(); + LegacyWorldgenIdentity.migrateConfig(directory, "poweradvantage", MODID); + if (Loader.isModLoaded("baseelectric")) { + LegacyWorldgenIdentity.migrateConfig(directory, "electricadvantage", "baseelectric"); + } + } catch (java.io.IOException error) { + throw new IllegalStateException("Cannot safely migrate Advantage world-generation configuration", error); + } + Configuration config = new Configuration(LegacyIdentity.migrateConfiguration( + event.getSuggestedConfigurationFile(), "poweradvantage")); config.load(); String[] presets = {"NORMAL", "TECH_PROGRESSION", "APOCALYPTIC"}; String mode = config.getString("recipe_mode", "options", "NORMAL", "NORMAL, APOCALYPTIC, or TECH_PROGRESSION. \n" @@ -361,12 +378,14 @@ public void preInit(FMLPreInitializationEvent event) config.save(); FMLLog.info("%s: initializing fluids, blocks, items, and loot tables", MODID); - zone.moddev.mc.poweradvantage.init.Fluids.init(); - zone.moddev.mc.poweradvantage.init.Blocks.init(); - zone.moddev.mc.poweradvantage.init.Items.init(); - zone.moddev.mc.poweradvantage.init.OreSpawnWorldGen.register( + zone.moddev.mc.basepower.init.Fluids.init(); + zone.moddev.mc.basepower.init.Blocks.init(); + zone.moddev.mc.basepower.init.Items.init(); + zone.moddev.mc.basepower.init.OreSpawnWorldGen.register( event.getSuggestedConfigurationFile().toPath().getParent()); - zone.moddev.mc.poweradvantage.init.TreasureChests.init(event.getSuggestedConfigurationFile().toPath().getParent()); + LegacyIdentity.migrateAdditionalLootTables(event.getSuggestedConfigurationFile().toPath().getParent(), + "poweradvantage", MODID); + zone.moddev.mc.basepower.init.TreasureChests.init(event.getSuggestedConfigurationFile().toPath().getParent()); // keep this next comment, it is useful for finding Vanilla recipes //OreDictionary.initVanillaEntries(); @@ -380,10 +399,35 @@ public void preInit(FMLPreInitializationEvent event) FMLLog.info("%s: preinit complete", MODID); } + @EventHandler + public void missingMappings(FMLMissingMappingsEvent event) { + LegacyIdentity.remapMissingMappings(event, "poweradvantage", MODID); + } + + @EventHandler + public void serverAboutToStart(FMLServerAboutToStartEvent event) { + // Run before OreSpawn's matching callback reads this world's saved profile. + java.nio.file.Path world = event.getServer().getActiveAnvilConverter() + .getSaveLoader(event.getServer().getFolderName(), false).getWorldDirectory().toPath(); + try { + Set replacements = new HashSet<>(); + replacements.add(MODID); + if (Loader.isModLoaded("basesteam")) replacements.add("basesteam"); + if (Loader.isModLoaded("baseelectric")) replacements.add("baseelectric"); + LegacyLevelData.migrateWorld(world, replacements); + LegacyWorldgenIdentity.migrateWorld(world, "poweradvantage", MODID); + if (Loader.isModLoaded("baseelectric")) { + LegacyWorldgenIdentity.migrateWorld(world, "electricadvantage", "baseelectric"); + } + } catch (java.io.IOException error) { + throw new IllegalStateException("Cannot safely migrate this world's Advantage generation profile", error); + } + } + @SideOnly(Side.CLIENT) private void clientPreInit(FMLPreInitializationEvent event){ // client-only code - zone.moddev.mc.poweradvantage.init.Blocks.bakeModels(); + zone.moddev.mc.basepower.init.Blocks.bakeModels(); } @SideOnly(Side.SERVER) private void serverPreInit(FMLPreInitializationEvent event){ @@ -401,7 +445,7 @@ public void init(FMLInitializationEvent event) FMLLog.info("%s: starting main inititalization", MODID); // BaseMetals has initialized; fill missing aliases before fuel and child recipe setup. - zone.moddev.mc.poweradvantage.compat.BaseMetalsCompat.registerOreDictionaryFallbacks(); + zone.moddev.mc.basepower.compat.BaseMetalsCompat.registerOreDictionaryFallbacks(); try { FMLLog.info("%s: testing whether we have to support redstone flux", MODID); Class rfClass = Class.forName("cofh.api.energy.IEnergyReceiver", false, getClass().getClassLoader()); @@ -427,16 +471,16 @@ public void init(FMLInitializationEvent event) GameRegistry.registerFuelHandler(FuelRegistry.getInstance()); FMLLog.info("%s: initializing more content", MODID); - zone.moddev.mc.poweradvantage.init.Fuels.init(); - zone.moddev.mc.poweradvantage.init.Entities.init(); - zone.moddev.mc.poweradvantage.init.Recipes.init(); - zone.moddev.mc.poweradvantage.init.Recipes.initDistillationRecipes(distillRecipes); - zone.moddev.mc.poweradvantage.init.Recipes.initCrudeOilAliasDistillationRecipes(); - zone.moddev.mc.poweradvantage.init.Villages.init(); - zone.moddev.mc.poweradvantage.init.GUI.init(); + zone.moddev.mc.basepower.init.Fuels.init(); + zone.moddev.mc.basepower.init.Entities.init(); + zone.moddev.mc.basepower.init.Recipes.init(); + zone.moddev.mc.basepower.init.Recipes.initDistillationRecipes(distillRecipes); + zone.moddev.mc.basepower.init.Recipes.initCrudeOilAliasDistillationRecipes(); + zone.moddev.mc.basepower.init.Villages.init(); + zone.moddev.mc.basepower.init.GUI.init(); FMLLog.info("%s: mod support data registries", MODID); - zone.moddev.mc.poweradvantage.init.ModSupport.init(detectedRF,detectedTechReborn); + zone.moddev.mc.basepower.init.ModSupport.init(detectedRF,detectedTechReborn); if(event.getSide() == Side.CLIENT){ @@ -454,9 +498,9 @@ public void init(FMLInitializationEvent event) private void clientInit(FMLInitializationEvent event){ // client-only code FMLLog.info("%s: initializing renders", MODID); - zone.moddev.mc.poweradvantage.init.Items.registerItemRenders(event); - zone.moddev.mc.poweradvantage.init.Blocks.registerItemRenders(event); - zone.moddev.mc.poweradvantage.init.ModSupport.registerItemRenders(event); + zone.moddev.mc.basepower.init.Items.registerItemRenders(event); + zone.moddev.mc.basepower.init.Blocks.registerItemRenders(event); + zone.moddev.mc.basepower.init.ModSupport.registerItemRenders(event); } @SideOnly(Side.SERVER) private void serverInit(FMLInitializationEvent event){ diff --git a/src/main/java/zone/moddev/mc/poweradvantage/RecipeMode.java b/src/main/java/zone/moddev/mc/basepower/RecipeMode.java similarity index 96% rename from src/main/java/zone/moddev/mc/poweradvantage/RecipeMode.java rename to src/main/java/zone/moddev/mc/basepower/RecipeMode.java index cf753ec..03c5450 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/RecipeMode.java +++ b/src/main/java/zone/moddev/mc/basepower/RecipeMode.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage; +package zone.moddev.mc.basepower; /** * Differnet recipe modes change the difficulty and means by which the players make the core items diff --git a/src/main/java/zone/moddev/mc/poweradvantage/blocks/BlockFrame.java b/src/main/java/zone/moddev/mc/basepower/blocks/BlockFrame.java similarity index 95% rename from src/main/java/zone/moddev/mc/poweradvantage/blocks/BlockFrame.java rename to src/main/java/zone/moddev/mc/basepower/blocks/BlockFrame.java index fccf622..12081e8 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/blocks/BlockFrame.java +++ b/src/main/java/zone/moddev/mc/basepower/blocks/BlockFrame.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.blocks; +package zone.moddev.mc.basepower.blocks; import net.minecraft.block.Block; import net.minecraft.block.SoundType; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/blocks/BlockPowerSwitch.java b/src/main/java/zone/moddev/mc/basepower/blocks/BlockPowerSwitch.java similarity index 97% rename from src/main/java/zone/moddev/mc/poweradvantage/blocks/BlockPowerSwitch.java rename to src/main/java/zone/moddev/mc/basepower/blocks/BlockPowerSwitch.java index 447430f..17f940f 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/blocks/BlockPowerSwitch.java +++ b/src/main/java/zone/moddev/mc/basepower/blocks/BlockPowerSwitch.java @@ -1,9 +1,9 @@ -package zone.moddev.mc.poweradvantage.blocks; +package zone.moddev.mc.basepower.blocks; import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.ITypedConduit; import cyano.poweradvantage.api.PowerConnectorContext; -import zone.moddev.mc.poweradvantage.conduitnetwork.ConduitRegistry; +import zone.moddev.mc.basepower.conduitnetwork.ConduitRegistry; import net.minecraft.block.Block; import net.minecraft.block.material.MapColor; import net.minecraft.block.material.Material; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/gui/package-info.java b/src/main/java/zone/moddev/mc/basepower/blocks/package-info.java similarity index 77% rename from src/main/java/zone/moddev/mc/poweradvantage/gui/package-info.java rename to src/main/java/zone/moddev/mc/basepower/blocks/package-info.java index a8bcce1..0b4337c 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/gui/package-info.java +++ b/src/main/java/zone/moddev/mc/basepower/blocks/package-info.java @@ -3,10 +3,10 @@ This package contains content that is added by PowerAdvantage implementing the PowerAdvantage API. If you are writing an add-on mod, use the code in this package for reference, but you should not depend on it's implementation details as future updates might change them. For a better way to get -PowerAdvantage content, look in the zone.moddev.mc.poweradvantage.init package. +PowerAdvantage content, look in the zone.moddev.mc.basepower.init package.

Because these classes are not part of the API, they are not well documented. They were only meant for the eyes of the mod author(s).

*/ -package zone.moddev.mc.poweradvantage.gui; \ No newline at end of file +package zone.moddev.mc.basepower.blocks; \ No newline at end of file diff --git a/src/main/java/zone/moddev/mc/poweradvantage/compat/BaseMetalsCompat.java b/src/main/java/zone/moddev/mc/basepower/compat/BaseMetalsCompat.java similarity index 97% rename from src/main/java/zone/moddev/mc/poweradvantage/compat/BaseMetalsCompat.java rename to src/main/java/zone/moddev/mc/basepower/compat/BaseMetalsCompat.java index 67cee6f..ef6629c 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/compat/BaseMetalsCompat.java +++ b/src/main/java/zone/moddev/mc/basepower/compat/BaseMetalsCompat.java @@ -1,7 +1,7 @@ -package zone.moddev.mc.poweradvantage.compat; +package zone.moddev.mc.basepower.compat; -import zone.moddev.mc.poweradvantage.PowerAdvantage; -import zone.moddev.mc.poweradvantage.registry.FuelRegistry; +import zone.moddev.mc.basepower.PowerAdvantage; +import zone.moddev.mc.basepower.registry.FuelRegistry; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; diff --git a/src/main/java/zone/moddev/mc/basepower/compat/LegacyIdentity.java b/src/main/java/zone/moddev/mc/basepower/compat/LegacyIdentity.java new file mode 100644 index 0000000..c63fa13 --- /dev/null +++ b/src/main/java/zone/moddev/mc/basepower/compat/LegacyIdentity.java @@ -0,0 +1,156 @@ +package zone.moddev.mc.basepower.compat; + +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonPrimitive; +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.Iterator; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.common.FMLLog; +import net.minecraftforge.fml.common.event.FMLMissingMappingsEvent; +import net.minecraftforge.fml.common.registry.GameRegistry; + +/** Read compatibility for released Cyano 1.10 worlds; new saves use base identities. */ +public final class LegacyIdentity { + private LegacyIdentity() { } + + public static void requireReplacementsOnly(java.util.function.Predicate loaded) { + for (String old : new String[] { "poweradvantage", "steamadvantage", "electricadvantage" }) { + if (loaded.test(old)) { + throw new IllegalStateException("Remove the old " + old + + " jar before loading basePower, baseSteam and baseElectric. These are replacements, not add-ons."); + } + } + } + + public static void remapMissingMappings(FMLMissingMappingsEvent event, String oldModId, String newModId) { + int count = 0; + for (FMLMissingMappingsEvent.MissingMapping mapping : event.getAll()) { + if (!oldModId.equals(mapping.resourceLocation.getResourceDomain())) continue; + ResourceLocation target = new ResourceLocation(newModId, mapping.resourceLocation.getResourcePath()); + if (mapping.type == GameRegistry.Type.BLOCK && Block.REGISTRY.containsKey(target)) { + mapping.remap(Block.REGISTRY.getObject(target)); + count++; + } else if (mapping.type == GameRegistry.Type.ITEM && Item.REGISTRY.containsKey(target)) { + mapping.remap(Item.REGISTRY.getObject(target)); + count++; + } else { + // Never silently replace an unsupported legacy component with air. + mapping.fail(); + FMLLog.severe("%s: no migration target for %s %s", newModId, mapping.type, mapping.name); + } + } + if (count > 0) FMLLog.info("%s: remapped %d released %s registry entries", newModId, count, oldModId); + } + + public static void registerTileEntity(Class type, String canonical, String... alternatives) { + if (alternatives.length == 0 && canonical.startsWith("basepower.")) { + alternatives = new String[] { "poweradvantage" + canonical.substring("basepower".length()) }; + } + GameRegistry.registerTileEntityWithAlternatives(type, canonical, alternatives); + } + + public static File migrateConfiguration(File newConfig, String oldModId) { + requireModId(oldModId); + Path target = newConfig.toPath().toAbsolutePath().normalize(); + Path legacy = target.resolveSibling(oldModId + ".cfg"); + try { + if (!Files.exists(target) && Files.isRegularFile(legacy)) { + Files.copy(legacy, target); + FMLLog.info("Imported %s as %s; the original configuration is unchanged", legacy, target); + } + return newConfig; + } catch (IOException error) { + throw new IllegalStateException("Cannot preserve legacy configuration " + legacy, error); + } + } + + public static void migrateAdditionalLootTables(Path config, String oldModId, String newModId) { + requireModId(oldModId); + requireModId(newModId); + Path root = config.toAbsolutePath().normalize().resolve("additional-loot-tables"); + Path legacy = root.resolve(oldModId); + Path target = root.resolve(newModId); + if (!Files.isDirectory(legacy)) return; + try (Stream walk = Files.walk(legacy)) { + List sources = walk.filter(Files::isRegularFile) + .filter(path -> path.toString().endsWith(".json")).collect(Collectors.toList()); + for (Path source : sources) { + if (Files.isSymbolicLink(source)) throw new IOException("Refusing linked loot file " + source); + Path destination = target.resolve(legacy.relativize(source)).normalize(); + if (!destination.startsWith(target)) throw new IOException("Loot migration escaped its directory"); + if (!Files.exists(destination)) { + JsonElement document = new JsonParser().parse(new String(Files.readAllBytes(source), StandardCharsets.UTF_8)); + remapJsonValues(document, oldModId, newModId); + Files.createDirectories(destination.getParent()); + Files.write(destination, new GsonBuilder().setPrettyPrinting().create().toJson(document) + .getBytes(StandardCharsets.UTF_8)); + } + // ALT reads every *.json. Preserve old bytes outside that suffix to avoid double loot. + Path backup = source.resolveSibling(source.getFileName() + ".before-" + newModId); + if (Files.exists(backup)) throw new IOException("Existing loot backup requires review: " + backup); + Files.move(source, backup); + } + } catch (IOException | RuntimeException error) { + throw new IllegalStateException("Cannot safely migrate legacy loot tables from " + legacy, error); + } + } + + public static void remapJsonValues(JsonElement value, String oldModId, String newModId) { + if (value.isJsonObject()) { + JsonObject object = value.getAsJsonObject(); + List> entries = new ArrayList<>(object.entrySet()); + for (Map.Entry entry : entries) { + JsonElement child = entry.getValue(); + if (child.isJsonPrimitive() && child.getAsJsonPrimitive().isString()) { + object.add(entry.getKey(), new JsonPrimitive(remapIdentifier(child.getAsString(), oldModId, newModId))); + } else remapJsonValues(child, oldModId, newModId); + } + } else if (value.isJsonArray()) { + JsonArray array = value.getAsJsonArray(); + List children = new ArrayList<>(); + Iterator iterator = array.iterator(); + while (iterator.hasNext()) { + children.add(iterator.next()); + iterator.remove(); + } + for (JsonElement child : children) { + if (child.isJsonPrimitive() && child.getAsJsonPrimitive().isString()) { + array.add(new JsonPrimitive(remapIdentifier(child.getAsString(), oldModId, newModId))); + } else { + remapJsonValues(child, oldModId, newModId); + array.add(child); + } + } + } + } + + public static String remapIdentifier(String value, String oldModId, String newModId) { + if ("steamadvantage".equals(oldModId) + && java.util.Arrays.asList("steamadvantage:rapid_reload", "steamadvantage:powderless", + "steamadvantage:high_explosive", "steamadvantage:recoil").contains(value)) { + // Forge 1.10 has no enchantment missing-mapping event; those saved keys remain stable. + return value; + } + return value.startsWith(oldModId + ":") ? newModId + value.substring(oldModId.length()) : value; + } + + private static void requireModId(String id) { + if (!id.matches("[a-z][a-z0-9_]*")) throw new IllegalArgumentException("Invalid migration namespace: " + id); + } +} diff --git a/src/main/java/zone/moddev/mc/basepower/compat/LegacyLevelData.java b/src/main/java/zone/moddev/mc/basepower/compat/LegacyLevelData.java new file mode 100644 index 0000000..82bffcc --- /dev/null +++ b/src/main/java/zone/moddev/mc/basepower/compat/LegacyLevelData.java @@ -0,0 +1,120 @@ +package zone.moddev.mc.basepower.compat; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.LinkOption; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraftforge.fml.common.FMLLog; + +/** Converts only Forge's saved oil owners, before Forge reads the world header. */ +public final class LegacyLevelData { + private LegacyLevelData() { } + + public static boolean remapFluidDefaults(NBTTagCompound root) { + if (!root.hasKey("Forge", 10)) return false; + NBTTagCompound forge = root.getCompoundTag("Forge"); + if (!forge.hasKey("DefaultFluidList", 9)) return false; + NBTTagList original = forge.getTagList("DefaultFluidList", 8); + NBTTagList replacement = new NBTTagList(); + boolean changed = false; + for (int index = 0; index < original.tagCount(); index++) { + String before = original.getStringTagAt(index); + String after = before; + if ("poweradvantage:crude_oil".equals(before)) after = "basepower:crude_oil"; + if ("poweradvantage:refined_oil".equals(before)) after = "basepower:refined_oil"; + replacement.appendTag(new NBTTagString(after)); + changed |= !before.equals(after); + } + if (changed) forge.setTag("DefaultFluidList", replacement); + return changed; + } + + public static void migrateWorld(Path worldRoot) throws IOException { + migrateWorld(worldRoot, new HashSet<>(Arrays.asList("basepower", "basesteam", "baseelectric"))); + } + + public static boolean remapModList(NBTTagCompound root, Set loadedReplacements) { + if (!root.hasKey("FML", 10)) return false; + NBTTagList mods = root.getCompoundTag("FML").getTagList("ModList", 10); + Set present = new HashSet<>(); + for (int index = 0; index < mods.tagCount(); index++) present.add(mods.getCompoundTagAt(index).getString("ModId")); + String[][] pairs = { { "poweradvantage", "basepower" }, { "steamadvantage", "basesteam" }, + { "electricadvantage", "baseelectric" } }; + for (String[] pair : pairs) { + if (loadedReplacements.contains(pair[1]) && present.contains(pair[0]) && present.contains(pair[1])) { + throw new IllegalStateException("World header contains both " + pair[0] + " and " + pair[1]); + } + } + boolean changed = false; + for (int index = 0; index < mods.tagCount(); index++) { + NBTTagCompound mod = mods.getCompoundTagAt(index); + for (String[] pair : pairs) { + if (loadedReplacements.contains(pair[1]) && pair[0].equals(mod.getString("ModId"))) { + mod.setString("ModId", pair[1]); + changed = true; + } + } + } + return changed; + } + + public static void migrateWorld(Path worldRoot, Set loadedReplacements) throws IOException { + Path root = worldRoot.toAbsolutePath().normalize(); + for (String name : new String[] { "level.dat", "level.dat_old" }) { + Path file = root.resolve(name); + if (!Files.exists(file, LinkOption.NOFOLLOW_LINKS)) continue; + if (!Files.isRegularFile(file, LinkOption.NOFOLLOW_LINKS) || Files.isSymbolicLink(file) + || Files.size(file) > 64 * 1024 * 1024) { + throw new IOException("Refusing an invalid world header: " + file); + } + byte[] original = Files.readAllBytes(file); + NBTTagCompound document; + try (InputStream input = new java.io.ByteArrayInputStream(original)) { + document = CompressedStreamTools.readCompressed(input); + } + boolean changed = remapFluidDefaults(document); + changed |= remapModList(document, loadedReplacements); + if (!changed) continue; + Path backups = root.resolve("basepower-migration-backups"); + Files.createDirectories(backups); + Path backup = backups.resolve(name + "." + sha256(original) + ".before-base-identity-migration"); + if (!Files.exists(backup)) Files.copy(file, backup); + if (!Arrays.equals(original, Files.readAllBytes(backup))) { + throw new IOException("World-header backup does not match: " + backup); + } + if (!Arrays.equals(original, Files.readAllBytes(file))) { + throw new IOException("World header changed during migration: " + file); + } + ByteArrayOutputStream output = new ByteArrayOutputStream(); + CompressedStreamTools.writeCompressed(document, output); + Path temporary = Files.createTempFile(root, ".basepower-level-", ".tmp"); + try { + Files.write(temporary, output.toByteArray()); + Files.move(temporary, file, StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING); + } finally { Files.deleteIfExists(temporary); } + FMLLog.info("basepower: migrated saved Advantage identities in %s; original header retained at %s", file, backup); + } + } + + private static String sha256(byte[] bytes) { + try { + StringBuilder result = new StringBuilder(); + for (byte value : MessageDigest.getInstance("SHA-256").digest(bytes)) { + result.append(String.format(java.util.Locale.ROOT, "%02x", value & 255)); + } + return result.toString(); + } catch (NoSuchAlgorithmException impossible) { throw new AssertionError(impossible); } + } +} diff --git a/src/main/java/zone/moddev/mc/basepower/compat/LegacyWorldgenIdentity.java b/src/main/java/zone/moddev/mc/basepower/compat/LegacyWorldgenIdentity.java new file mode 100644 index 0000000..9be1790 --- /dev/null +++ b/src/main/java/zone/moddev/mc/basepower/compat/LegacyWorldgenIdentity.java @@ -0,0 +1,620 @@ +package zone.moddev.mc.basepower.compat; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonNull; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import java.io.IOException; +import java.io.StringReader; +import java.math.BigDecimal; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.LinkOption; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.nio.file.StandardOpenOption; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * Bounded identity migration for released Power/Electric 1.10 configurations. + * + *

Call {@link #migrateConfig} during the owning mod's preInit, before + * OreSpawn 4.0.8's init imports OS1/OS3 files and discovers providers. Provider + * IDs MUST become the loaded mod ID: the pinned engine rejects unloaded owners + * and rules outside their owner's namespace. An old OS1 filename must not + * remain discoverable, or the bridge imports it as a standalone OreSpawn rule. + * + *

Call {@link #migrateWorld} only before OreSpawn reads the selected world's + * profile. With required-after:orespawn, an ordinary serverAboutToStart callback + * is too late. Native required-before:orespawn ordering on Power permits Power + * to migrate both loaded identities before OreSpawn's callback, without ASM. + * This helper neither reloads OreSpawn nor discovers/scans worlds. Exceptions + * must abort startup, never fall through to fresh defaults. Validation precedes + * all changes; filesystem failures can leave a partial, backed-up batch that is + * safe to retry, but must not be used to continue the same startup. + */ +public final class LegacyWorldgenIdentity { + private static final Gson GSON = new GsonBuilder().setPrettyPrinting() + .disableHtmlEscaping().serializeNulls().create(); + private static final LinkOption[] NO_LINKS = { LinkOption.NOFOLLOW_LINKS }; + // OreSpawn 4.1 uses distinct global/world schemas; provider files keep their own version. + private static final int MAX_GLOBAL_PROFILE_SCHEMA = 8; + private static final int MAX_WORLD_PROFILE_SCHEMA = 7; + private static final List RULE_MAPS = Arrays.asList("ores", "fluid_deposits", "rocks", + "geomes", "templates", "biome_palettes", "dimension_materials"); + private static final List BLOCK_FIELDS = Arrays.asList("block", "blockID", "top_block", + "filler_block", "underwater_block", "ceiling_block", "snow_block", "ice_block"); + private static final List BLOCK_LISTS = Arrays.asList("blocks", "host_blocks", "outputs"); + private static final List OWNER_FIELDS = Arrays.asList("provider_modid", "source_mod", + "source_provider", "sulfur_source", "lithium_source", "crude_oil_source", + "sulfur_provider", "lithium_provider", "crude_oil_provider"); + + private LegacyWorldgenIdentity() { } + + /** Fixed config filenames only. The return value counts writes and retirements. */ + public static synchronized int migrateConfig(Path configDirectory, String oldModId, + String newModId) throws IOException { + Pair pair = new Pair(oldModId, newModId); + Batch batch = new Batch(configDirectory, pair); + Document oldProvider = batch.read(oldModId + "-orespawn.json", "provider"); + Document newProvider = batch.read(newModId + "-orespawn.json", "provider"); + Document profile = batch.read("orespawn-worldgen.json", "global-profile"); + List legacy = new ArrayList<>(); + for (String directory : Arrays.asList("orespawn", "orespawn3")) { + String kind = "orespawn".equals(directory) ? "os1" : "os3"; + Document old = batch.read(directory + "/" + oldModId + ".json", kind); + Document modern = batch.read(directory + "/" + newModId + ".json", kind); + if (old != null) legacy.add(old); + if (modern != null) legacy.add(modern); + if (old != null && modern != null && !old.migrated.equals(modern.migrated)) { + throw problem(old.path, "different old/new legacy authorities; resolve explicitly"); + } + } + if (oldProvider != null && newProvider != null + && !oldProvider.migrated.equals(newProvider.migrated)) { + throw problem(oldProvider.path, "different old/new provider authorities; resolve explicitly"); + } + // Already-imported standalone rules cannot be claimed by another provider. + Document standalone = batch.read("orespawn-orespawn.json", "standalone"); + if (standalone != null && containsStandalone(standalone.original, pair)) { + throw problem(standalone.path, "owned standalone legacy rules require explicit reconciliation"); + } + Document provider = newProvider != null ? newProvider : oldProvider; + if (provider != null) { + batch.write(newModId + "-orespawn.json", provider.migrated); + if (oldProvider != null) batch.retire(oldProvider); + // The pinned bridge overwrites explicit provider files, so none of + // these owned legacy inputs may remain in its *.json discovery. + for (Document source : legacy) batch.retire(source); + if (profile != null) checkProviderOverlap(profile.migrated, provider.migrated, pair); + } else if (!legacy.isEmpty()) { + if (batch.exists(".orespawn-legacy-bridge-migrated")) { + throw problem(batch.root, "bridge marker exists but owned provider is absent; legacy import would be skipped"); + } + String kind = legacy.get(0).kind; + for (Document source : legacy) { + if (!kind.equals(source.kind)) { + throw problem(source.path, "both OS1 and OS3 authorities exist without an explicit provider"); + } + } + if (profile != null && hasOwnedRules(profile.migrated, pair)) { + throw problem(profile.path, "saved owned rules plus pending legacy import require explicit reconciliation"); + } + String directory = "os1".equals(kind) ? "orespawn" : "orespawn3"; + batch.write(directory + "/" + newModId + ".json", legacy.get(0).migrated); + for (Document source : legacy) { + if (source.path.getFileName().toString().equals(oldModId + ".json")) batch.retire(source); + } + } + if (profile != null) batch.write("orespawn-worldgen.json", profile.migrated); + return batch.commit(); + } + + /** Only serverconfig/orespawn-worldgen.json in the explicitly supplied root. */ + public static synchronized int migrateWorld(Path worldRoot, String oldModId, + String newModId) throws IOException { + Pair pair = new Pair(oldModId, newModId); + Batch batch = new Batch(worldRoot, pair); + Document profile = batch.read("serverconfig/orespawn-worldgen.json", "world-profile"); + if (profile != null) batch.write("serverconfig/orespawn-worldgen.json", profile.migrated); + return batch.commit(); + } + + /** Exact selector values only; useful to the owning Forge configuration code. */ + public static String migrateSelectorValue(String value, String oldModId, String newModId) { + Pair pair = new Pair(oldModId, newModId); + return pair.oldId.equals(value) ? pair.newId : value; + } + + private static final class Pair { + final String oldId; + final String newId; + Pair(String oldId, String newId) { + if (!("poweradvantage".equals(oldId) && "basepower".equals(newId)) + && !("electricadvantage".equals(oldId) && "baseelectric".equals(newId))) { + throw new IllegalArgumentException("Unsupported worldgen identity pair"); + } + this.oldId = oldId; + this.newId = newId; + } + String id(String text) throws IOException { + if (!text.startsWith(oldId + ":")) return text; + if (!text.substring(oldId.length() + 1).matches("[a-z0-9_./-]+")) { + throw new IOException("Invalid owned identifier: " + text); + } + return newId + text.substring(oldId.length()); + } + String rule(String text) throws IOException { + String result = id(text); + // OS1 generates names from output namespace + path + ordinal. + String prefix = newId + ":legacy/" + oldId + "_"; + return result.startsWith(prefix) ? newId + ":legacy/" + newId + "_" + + result.substring(prefix.length()) : result; + } + } + + private static JsonElement rewrite(JsonElement input, Pair pair, String context) throws IOException { + if (input.isJsonArray()) { + JsonArray output = new JsonArray(); + for (JsonElement item : input.getAsJsonArray()) { + if (isString(item) && (BLOCK_LISTS.contains(context) || context.startsWith("known_"))) { + output.add(new JsonPrimitive(context.startsWith("known_") + ? pair.rule(item.getAsString()) : pair.id(item.getAsString()))); + } else output.add(rewrite(item, pair, context)); + } + return output; + } + if (!input.isJsonObject()) return input; + JsonObject output = new JsonObject(); + for (Map.Entry entry : input.getAsJsonObject().entrySet()) { + String key = entry.getKey(); + JsonElement value = entry.getValue(); + String target = RULE_MAPS.contains(context) ? pair.rule(key) + : (("providers".equals(context) || "ore_providers".equals(context)) + && pair.oldId.equals(key) ? pair.newId : key); + JsonElement mapped; + if (BLOCK_FIELDS.contains(key) || ("name".equals(key) && "blocks".equals(context))) { + if (!isString(value)) throw new IOException("Block reference must be a string: " + key); + mapped = new JsonPrimitive(pair.id(value.getAsString())); + } else if (OWNER_FIELDS.contains(key) || ("resource_sources".equals(context) + && Arrays.asList("sulfur", "lithium", "crude_oil").contains(key))) { + if (!isString(value)) throw new IOException("Owner selector must be a string: " + key); + mapped = new JsonPrimitive(pair.oldId.equals(value.getAsString()) ? pair.newId : value.getAsString()); + } else if (Arrays.asList("notes", "description", "comment", "metadata", "host_tags", "tags").contains(key)) { + mapped = value; + } else mapped = rewrite(value, pair, key); + if (output.has(target) && !output.get(target).equals(mapped)) { + throw new IOException("Conflicting identity entries: " + key + " -> " + target); + } + output.add(target, mapped); + } + return output; + } + + private static boolean isString(JsonElement value) { + return value != null && value.isJsonPrimitive() && value.getAsJsonPrimitive().isString(); + } + + private static void validate(JsonObject root, String kind, Pair pair) throws IOException { + if ("os1".equals(kind)) { + if (!root.has("dimensions") || !root.get("dimensions").isJsonArray()) { + throw new IOException("OS1 dimensions must be an array"); + } + for (JsonElement element : root.getAsJsonArray("dimensions")) { + if (!element.isJsonObject()) throw new IOException("Invalid OS1 dimension"); + JsonObject dimension = element.getAsJsonObject(); + JsonElement id = dimension.get("dimension"); + if (id == null || !(isString(id) && "+".equals(id.getAsString()))) { + integer(id, "dimension"); + } + if (!dimension.has("ores") || !dimension.get("ores").isJsonArray()) { + throw new IOException("OS1 ores must be an array"); + } + for (JsonElement ore : dimension.getAsJsonArray("ores")) { + if (!ore.isJsonObject() || !isString(ore.getAsJsonObject().get("blockID"))) { + throw new IOException("OS1 ore must have a blockID string"); + } + JsonObject declaration = ore.getAsJsonObject(); + for (String field : Arrays.asList("size", "variation", "minHeight", "maxHeight", "blockMeta")) { + if (!declaration.has(field)) continue; + int number = integer(declaration.get(field), field); + int minimum = "size".equals(field) || "maxHeight".equals(field) ? 1 : 0; + int maximum = "blockMeta".equals(field) ? 15 : "minHeight".equals(field) ? 255 + : "maxHeight".equals(field) ? 256 : Integer.MAX_VALUE; + if (number < minimum || number > maximum) throw new IOException("Invalid OS1 " + field); + } + if (declaration.has("minHeight") && declaration.has("maxHeight") + && integer(declaration.get("minHeight"), "minHeight") + >= integer(declaration.get("maxHeight"), "maxHeight")) { + throw new IOException("Invalid OS1 exclusive height interval"); + } + if (declaration.has("frequency")) { + JsonElement frequency = declaration.get("frequency"); + if (!frequency.isJsonPrimitive() || !frequency.getAsJsonPrimitive().isNumber() + || !Double.isFinite(frequency.getAsDouble()) || frequency.getAsDouble() < 0) { + throw new IOException("Invalid OS1 frequency"); + } + } + if (declaration.has("biomes") && !declaration.get("biomes").isJsonArray()) { + throw new IOException("Invalid OS1 biome list"); + } + // The pin unconditionally enables OS1 declarations. Do not + // pretend an unsupported user disable will survive import. + if (declaration.has("enabled") && (!declaration.get("enabled").isJsonPrimitive() + || !declaration.get("enabled").getAsJsonPrimitive().isBoolean() + || !declaration.get("enabled").getAsBoolean())) { + throw new IOException("OS1 enabled override requires an explicit provider"); + } + } + } + } else if ("os3".equals(kind)) { + if (!root.has("spawns") || !root.get("spawns").isJsonObject()) { + throw new IOException("OS3 spawns must be an object"); + } + for (Map.Entry spawn : root.getAsJsonObject("spawns").entrySet()) { + if (!spawn.getValue().isJsonObject()) throw new IOException("Invalid OS3 spawn"); + JsonElement blocks = spawn.getValue().getAsJsonObject().get("blocks"); + if (blocks == null || !blocks.isJsonArray() || blocks.getAsJsonArray().size() == 0) { + throw new IOException("OS3 spawn requires output blocks"); + } + for (JsonElement output : blocks.getAsJsonArray()) { + if (!output.isJsonObject() || !isString(output.getAsJsonObject().get("name"))) { + throw new IOException("Invalid OS3 output block"); + } + } + } + } else if ("provider".equals(kind)) { + int schema = integer(root.get("schema_version"), "schema_version"); + if (schema < 1 || schema > 4 || integer(root.get("provider_revision"), "provider_revision") < 1 + || !isString(root.get("provider_modid")) + || !pair.newId.equals(root.get("provider_modid").getAsString())) { + throw new IOException("Invalid provider header"); + } + int entries = 0; + for (String section : RULE_MAPS) { + if (!root.has(section)) continue; + if (!root.get(section).isJsonObject()) throw new IOException("Invalid provider section: " + section); + if ((schema == 1 && !"ores".equals(section)) + || (schema < 3 && "fluid_deposits".equals(section)) + || (schema < 4 && ("biome_palettes".equals(section) || "dimension_materials".equals(section)))) { + throw new IOException("Section not supported by provider schema: " + section); + } + for (Map.Entry rule : root.getAsJsonObject(section).entrySet()) { + if (!rule.getKey().startsWith(pair.newId + ":") || !rule.getValue().isJsonObject()) { + throw new IOException("Provider rule outside owned namespace: " + rule.getKey()); + } + entries++; + } + } + if (entries == 0) throw new IOException("Owned provider declares no rules"); + } else if (root.has("schema_version")) { + int schema = integer(root.get("schema_version"), "schema_version"); + int maximum = "global-profile".equals(kind) ? MAX_GLOBAL_PROFILE_SCHEMA + : "world-profile".equals(kind) ? MAX_WORLD_PROFILE_SCHEMA : 6; + if (schema < 1 || schema > maximum) { + throw new IOException("Unsupported worldgen profile schema " + schema + " for " + kind); + } + } + for (String section : Arrays.asList("ores", "fluid_deposits", "providers", "ore_providers")) { + if (root.has(section) && !root.get(section).isJsonObject()) { + throw new IOException("Invalid worldgen section: " + section); + } + } + } + + private static int integer(JsonElement value, String field) throws IOException { + try { + if (value == null || !value.isJsonPrimitive() || !(value.getAsJsonPrimitive().isNumber() + || "dimension".equals(field) && value.getAsJsonPrimitive().isString())) { + throw new NumberFormatException(); + } + return new BigDecimal(value.getAsString()).intValueExact(); + } catch (RuntimeException error) { throw new IOException("Invalid integer: " + field, error); } + } + + private static boolean containsStandalone(JsonElement value, Pair pair) { + if (value.isJsonObject()) { + for (Map.Entry entry : value.getAsJsonObject().entrySet()) { + if (entry.getKey().startsWith("orespawn:legacy/" + pair.oldId + "/") + || entry.getKey().startsWith("orespawn:legacy/" + pair.newId + "/") + || containsStandalone(entry.getValue(), pair)) return true; + } + } else if (value.isJsonArray()) { + for (JsonElement item : value.getAsJsonArray()) if (containsStandalone(item, pair)) return true; + } + return false; + } + + private static boolean hasOwnedRules(JsonObject root, Pair pair) throws IOException { + if (containsStandalone(root, pair)) throw new IOException("Standalone owned legacy rules require reconciliation"); + for (String section : Arrays.asList("ores", "fluid_deposits")) { + if (!root.has(section)) continue; + for (Map.Entry entry : root.getAsJsonObject(section).entrySet()) { + if (entry.getKey().startsWith(pair.newId + ":")) return true; + } + } + return false; + } + + private static void checkProviderOverlap(JsonObject profile, JsonObject provider, Pair pair) throws IOException { + for (String section : Arrays.asList("ores", "fluid_deposits")) { + if (!provider.has(section)) continue; + for (Map.Entry supplied : provider.getAsJsonObject(section).entrySet()) { + String block = block(supplied.getValue()); + if (block == null || !block.startsWith(pair.newId + ":")) continue; + for (String savedSection : Arrays.asList("ores", "fluid_deposits")) { + if (!profile.has(savedSection)) continue; + for (Map.Entry saved : profile.getAsJsonObject(savedSection).entrySet()) { + if (block.equals(block(saved.getValue())) && !saved.getKey().equals(supplied.getKey()) + && (saved.getKey().contains(":legacy/") || supplied.getKey().contains(":legacy/"))) { + throw new IOException("Saved legacy/modern rule overlap for " + block + "; resolve explicitly"); + } + } + } + } + } + } + + private static String block(JsonElement rule) { + return rule.isJsonObject() && isString(rule.getAsJsonObject().get("block")) + ? rule.getAsJsonObject().get("block").getAsString() : null; + } + + private static void preserveLegacyAuthority(JsonObject profile, Pair pair) throws IOException { + if (containsStandalone(profile, pair)) throw new IOException("Standalone owned legacy rules require reconciliation"); + boolean legacy = false; + boolean modern = false; + for (String section : Arrays.asList("ores", "fluid_deposits")) { + if (!profile.has(section)) continue; + for (Map.Entry rule : profile.getAsJsonObject(section).entrySet()) { + if (!rule.getKey().startsWith(pair.newId + ":")) continue; + if (!rule.getValue().isJsonObject()) throw new IOException("Invalid owned saved rule"); + if (rule.getKey().startsWith(pair.newId + ":legacy/")) legacy = true; + else modern = true; + } + } + if (legacy && modern) throw new IOException("Saved legacy and modern owned rules require explicit reconciliation"); + if (!legacy) return; + // Prevent an API-default rule being added beside retained OS1/OS3 rules. + JsonObject providers = object(profile, "providers"); + JsonObject manifest = object(providers, pair.newId); + manifest.addProperty("profile_defaults_applied", true); + if ("basepower".equals(pair.newId)) { + remember(manifest, "known_fluid_deposits", "basepower:fluid_deposit/desert_crude_oil"); + } else { + remember(manifest, "known_ores", "baseelectric:ore/lithium"); + remember(manifest, "known_ores", "baseelectric:ore/sulfur"); + } + } + + private static JsonObject object(JsonObject parent, String key) throws IOException { + if (!parent.has(key)) parent.add(key, new JsonObject()); + if (!parent.get(key).isJsonObject()) throw new IOException("Expected object: " + key); + return parent.getAsJsonObject(key); + } + + private static void remember(JsonObject parent, String key, String value) throws IOException { + if (!parent.has(key)) parent.add(key, new JsonArray()); + if (!parent.get(key).isJsonArray()) throw new IOException("Expected array: " + key); + JsonArray array = parent.getAsJsonArray(key); + for (JsonElement item : array) { + if (!isString(item)) throw new IOException("Invalid known rule ID"); + if (value.equals(item.getAsString())) return; + } + array.add(new JsonPrimitive(value)); + } + + private static final class Document { + final Path path; + final String kind; + final byte[] bytes; + final JsonObject original; + final JsonObject migrated; + Document(Path path, String kind, byte[] bytes, Pair pair) throws IOException { + this.path = path; + this.kind = kind; + this.bytes = bytes; + try (JsonReader reader = new JsonReader(new StringReader(StandardCharsets.UTF_8.newDecoder() + .decode(ByteBuffer.wrap(bytes)).toString()))) { + reader.setLenient(false); + JsonElement parsed = parse(reader, 0); + if (!parsed.isJsonObject() || reader.peek() != JsonToken.END_DOCUMENT) { + throw problem(path, "expected one JSON object"); + } + original = parsed.getAsJsonObject(); + if ("provider".equals(kind)) { + String expected = path.getFileName().toString().replace("-orespawn.json", ""); + if (!isString(original.get("provider_modid")) + || !expected.equals(original.get("provider_modid").getAsString())) { + throw problem(path, "provider_modid does not match its filename"); + } + } + migrated = rewrite(original, pair, "").getAsJsonObject(); + validate(migrated, kind, pair); + if ("global-profile".equals(kind) || "world-profile".equals(kind)) preserveLegacyAuthority(migrated, pair); + } catch (RuntimeException error) { throw problem(path, "invalid owned JSON", error); } + } + } + + // JsonParser is lenient even with a strict reader in older Gson. Read tokens + // directly so malformed JSON and duplicate authority keys cannot be lost. + private static JsonElement parse(JsonReader reader, int depth) throws IOException { + if (depth > 128) throw new IOException("Worldgen JSON exceeds nesting limit"); + switch (reader.peek()) { + case BEGIN_OBJECT: + JsonObject object = new JsonObject(); + reader.beginObject(); + while (reader.hasNext()) { + String key = reader.nextName(); + if (object.has(key)) throw new IOException("Duplicate JSON key: " + key); + object.add(key, parse(reader, depth + 1)); + } + reader.endObject(); + return object; + case BEGIN_ARRAY: + JsonArray array = new JsonArray(); + reader.beginArray(); + while (reader.hasNext()) array.add(parse(reader, depth + 1)); + reader.endArray(); + return array; + case STRING: return new JsonPrimitive(reader.nextString()); + case NUMBER: return new JsonPrimitive(new BigDecimal(reader.nextString())); + case BOOLEAN: return new JsonPrimitive(reader.nextBoolean()); + case NULL: reader.nextNull(); return JsonNull.INSTANCE; + default: throw new IOException("Invalid JSON token: " + reader.peek()); + } + } + + private static final class Batch { + final Path root; + final Pair pair; + final Map documents = new LinkedHashMap<>(); + final Map writes = new LinkedHashMap<>(); + final List retirements = new ArrayList<>(); + Batch(Path root, Pair pair) throws IOException { + this.root = root.toAbsolutePath().normalize(); + this.pair = pair; + checkPath(this.root); + if (Files.exists(this.root, NO_LINKS) && !Files.isDirectory(this.root, NO_LINKS)) { + throw problem(this.root, "root is not a directory"); + } + } + Path path(String relative) throws IOException { + Path target = root.resolve(relative).normalize(); + if (!target.startsWith(root) || target.equals(root)) throw problem(target, "path escapes root"); + checkPath(target); + return target; + } + boolean exists(String relative) throws IOException { return Files.exists(path(relative), NO_LINKS); } + Document read(String relative, String kind) throws IOException { + Path path = path(relative); + if (!Files.exists(path, NO_LINKS)) return null; + if (!Files.isRegularFile(path, NO_LINKS) || Files.size(path) > 16 * 1024 * 1024) { + throw problem(path, "expected a regular JSON file of at most 16 MiB"); + } + Document document = new Document(path, kind, Files.readAllBytes(path), pair); + documents.put(path, document); + return document; + } + void write(String relative, JsonObject value) throws IOException { + Path path = path(relative); + Document existing = documents.get(path); + if (existing != null && existing.original.equals(value)) return; + writes.put(path, (GSON.toJson(value) + "\n").getBytes(StandardCharsets.UTF_8)); + } + void retire(Document source) { retirements.add(source.path); } + int commit() throws IOException { + // Check every snapshot and backup before the first mutation. + for (Document document : documents.values()) unchanged(document); + for (Path path : writes.keySet()) { + if (!documents.containsKey(path) && Files.exists(path, NO_LINKS)) { + throw problem(path, "destination appeared during migration"); + } + } + Map backups = new LinkedHashMap<>(); + for (Document document : documents.values()) { + if (!writes.containsKey(document.path) && !retirements.contains(document.path)) continue; + Path backup = document.path.resolveSibling(document.path.getFileName() + + ".before-" + pair.newId + "-" + sha256(document.bytes) + ".bak"); + checkPath(backup); + if (Files.exists(backup, NO_LINKS) && (!Files.isRegularFile(backup, NO_LINKS) + || !Arrays.equals(document.bytes, Files.readAllBytes(backup)))) { + throw problem(backup, "backup conflict; original backup will never be overwritten"); + } + backups.put(document.path, backup); + } + for (Map.Entry backup : backups.entrySet()) { + if (!Files.exists(backup.getValue(), NO_LINKS)) { + unchanged(documents.get(backup.getKey())); + atomicWrite(backup.getValue(), documents.get(backup.getKey()).bytes, false); + } + if (!Arrays.equals(documents.get(backup.getKey()).bytes, Files.readAllBytes(backup.getValue()))) { + throw problem(backup.getValue(), "backup verification failed"); + } + } + for (Map.Entry write : writes.entrySet()) { + Document old = documents.get(write.getKey()); + if (old != null) unchanged(old); + atomicWrite(write.getKey(), write.getValue(), old != null); + } + for (Path source : retirements) { + unchanged(documents.get(source)); + // Exact owned filenames only, after byte-verified immutable backup. + Files.delete(source); + } + return writes.size() + retirements.size(); + } + } + + private static void unchanged(Document document) throws IOException { + checkPath(document.path); + if (!Files.isRegularFile(document.path, NO_LINKS) + || !Arrays.equals(document.bytes, Files.readAllBytes(document.path))) { + throw problem(document.path, "source changed during migration"); + } + } + + private static void checkPath(Path path) throws IOException { + for (Path current = path.toAbsolutePath().normalize(); current != null; current = current.getParent()) { + try { + java.nio.file.attribute.BasicFileAttributes attributes = Files.readAttributes(current, + java.nio.file.attribute.BasicFileAttributes.class, NO_LINKS); + if (attributes.isSymbolicLink() || attributes.isOther()) { + throw problem(current, "linked/reparse paths are not permitted"); + } + } catch (java.nio.file.NoSuchFileException absent) { /* Nonexistent leaves are allowed. */ } + } + } + + private static void atomicWrite(Path target, byte[] bytes, boolean replace) throws IOException { + checkPath(target); + Files.createDirectories(target.getParent()); + Path temporary = Files.createTempFile(target.getParent(), ".identity-", ".tmp"); + try { + try (FileChannel channel = FileChannel.open(temporary, StandardOpenOption.WRITE)) { + ByteBuffer buffer = ByteBuffer.wrap(bytes); + while (buffer.hasRemaining()) channel.write(buffer); + channel.force(true); + } + checkPath(target); + if (!replace && Files.exists(target, NO_LINKS)) throw problem(target, "destination appeared"); + if (replace) { + // No non-atomic fallback: unsupported filesystems must stop startup. + Files.move(temporary, target, StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING); + } else { + // ATOMIC_MOVE may replace an existing destination even without + // REPLACE_EXISTING. Publish new files/backups with an atomic, + // no-clobber hard link to independent, fully flushed bytes. + Files.createLink(target, temporary); + } + } finally { Files.deleteIfExists(temporary); } + } + + private static String sha256(byte[] bytes) { + try { + StringBuilder hash = new StringBuilder(); + for (byte value : MessageDigest.getInstance("SHA-256").digest(bytes)) { + hash.append(String.format(java.util.Locale.ROOT, "%02x", value & 255)); + } + return hash.toString(); + } catch (NoSuchAlgorithmException impossible) { throw new AssertionError(impossible); } + } + + private static IOException problem(Path path, String message) { return problem(path, message, null); } + private static IOException problem(Path path, String message, Throwable cause) { + return new IOException("Worldgen identity migration: " + message + " (" + path + ")", cause); + } +} diff --git a/src/main/java/zone/moddev/mc/poweradvantage/conduitnetwork/ConduitNetworkManager.java b/src/main/java/zone/moddev/mc/basepower/conduitnetwork/ConduitNetworkManager.java similarity index 97% rename from src/main/java/zone/moddev/mc/poweradvantage/conduitnetwork/ConduitNetworkManager.java rename to src/main/java/zone/moddev/mc/basepower/conduitnetwork/ConduitNetworkManager.java index 4b06a23..8dc465e 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/conduitnetwork/ConduitNetworkManager.java +++ b/src/main/java/zone/moddev/mc/basepower/conduitnetwork/ConduitNetworkManager.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.conduitnetwork; +package zone.moddev.mc.basepower.conduitnetwork; import java.util.ArrayList; import java.util.Collections; @@ -9,8 +9,8 @@ import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.PowerConnectorContext; -import zone.moddev.mc.poweradvantage.math.BlockPos4D; -import zone.moddev.mc.poweradvantage.util.PowerHelper; +import zone.moddev.mc.basepower.math.BlockPos4D; +import zone.moddev.mc.basepower.util.PowerHelper; import net.minecraft.block.state.IBlockState; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.ChunkPos; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/conduitnetwork/ConduitRegistry.java b/src/main/java/zone/moddev/mc/basepower/conduitnetwork/ConduitRegistry.java similarity index 98% rename from src/main/java/zone/moddev/mc/poweradvantage/conduitnetwork/ConduitRegistry.java rename to src/main/java/zone/moddev/mc/basepower/conduitnetwork/ConduitRegistry.java index 0abf473..b99fa3b 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/conduitnetwork/ConduitRegistry.java +++ b/src/main/java/zone/moddev/mc/basepower/conduitnetwork/ConduitRegistry.java @@ -1,6 +1,6 @@ -package zone.moddev.mc.poweradvantage.conduitnetwork; +package zone.moddev.mc.basepower.conduitnetwork; -import zone.moddev.mc.poweradvantage.PowerAdvantage; +import zone.moddev.mc.basepower.PowerAdvantage; import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.IPowerMachine; import cyano.poweradvantage.api.ITypedConduit; @@ -8,7 +8,7 @@ import cyano.poweradvantage.api.modsupport.ExternalPowerRequest; import cyano.poweradvantage.api.modsupport.LightWeightPowerRegistry; import cyano.poweradvantage.api.modsupport.Wrappers; -import zone.moddev.mc.poweradvantage.math.BlockPos4D; +import zone.moddev.mc.basepower.math.BlockPos4D; import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; import net.minecraft.tileentity.TileEntity; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/conduitnetwork/package-info.java b/src/main/java/zone/moddev/mc/basepower/conduitnetwork/package-info.java similarity index 87% rename from src/main/java/zone/moddev/mc/poweradvantage/conduitnetwork/package-info.java rename to src/main/java/zone/moddev/mc/basepower/conduitnetwork/package-info.java index 0dae2de..e16e94a 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/conduitnetwork/package-info.java +++ b/src/main/java/zone/moddev/mc/basepower/conduitnetwork/package-info.java @@ -4,4 +4,4 @@ the same power type and caching the resulting list of sources and sinks. Every time a conduit block is placed or broken, any adjacent networks are revalidated. */ -package zone.moddev.mc.poweradvantage.conduitnetwork; \ No newline at end of file +package zone.moddev.mc.basepower.conduitnetwork; \ No newline at end of file diff --git a/src/main/java/zone/moddev/mc/poweradvantage/graphics/package-info.java b/src/main/java/zone/moddev/mc/basepower/graphics/package-info.java similarity index 70% rename from src/main/java/zone/moddev/mc/poweradvantage/graphics/package-info.java rename to src/main/java/zone/moddev/mc/basepower/graphics/package-info.java index d75d837..29bc810 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/graphics/package-info.java +++ b/src/main/java/zone/moddev/mc/basepower/graphics/package-info.java @@ -2,4 +2,4 @@ This package contains classes related to on-demand rendering, such as for entities and animated blocks. */ -package zone.moddev.mc.poweradvantage.graphics; \ No newline at end of file +package zone.moddev.mc.basepower.graphics; \ No newline at end of file diff --git a/src/main/java/zone/moddev/mc/poweradvantage/gui/FilteredFluidTankGUI.java b/src/main/java/zone/moddev/mc/basepower/gui/FilteredFluidTankGUI.java similarity index 95% rename from src/main/java/zone/moddev/mc/poweradvantage/gui/FilteredFluidTankGUI.java rename to src/main/java/zone/moddev/mc/basepower/gui/FilteredFluidTankGUI.java index 96997b3..0a34f69 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/gui/FilteredFluidTankGUI.java +++ b/src/main/java/zone/moddev/mc/basepower/gui/FilteredFluidTankGUI.java @@ -1,8 +1,8 @@ -package zone.moddev.mc.poweradvantage.gui; +package zone.moddev.mc.basepower.gui; import cyano.poweradvantage.api.fluid.FluidPoweredEntity; import cyano.poweradvantage.api.simple.SimpleMachineGUI; -import zone.moddev.mc.poweradvantage.math.Integer2D; +import zone.moddev.mc.basepower.math.Integer2D; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.FluidStack; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/gui/FluidTankGUI.java b/src/main/java/zone/moddev/mc/basepower/gui/FluidTankGUI.java similarity index 97% rename from src/main/java/zone/moddev/mc/poweradvantage/gui/FluidTankGUI.java rename to src/main/java/zone/moddev/mc/basepower/gui/FluidTankGUI.java index b3642cd..5f28c52 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/gui/FluidTankGUI.java +++ b/src/main/java/zone/moddev/mc/basepower/gui/FluidTankGUI.java @@ -1,8 +1,8 @@ -package zone.moddev.mc.poweradvantage.gui; +package zone.moddev.mc.basepower.gui; import cyano.poweradvantage.api.fluid.FluidPoweredEntity; import cyano.poweradvantage.api.simple.SimpleMachineGUI; -import zone.moddev.mc.poweradvantage.math.Integer2D; +import zone.moddev.mc.basepower.math.Integer2D; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.VertexBuffer; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/gui/FunctionalCreativeTab.java b/src/main/java/zone/moddev/mc/basepower/gui/FunctionalCreativeTab.java similarity index 98% rename from src/main/java/zone/moddev/mc/poweradvantage/gui/FunctionalCreativeTab.java rename to src/main/java/zone/moddev/mc/basepower/gui/FunctionalCreativeTab.java index 22c64bc..9ca4036 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/gui/FunctionalCreativeTab.java +++ b/src/main/java/zone/moddev/mc/basepower/gui/FunctionalCreativeTab.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.gui; +package zone.moddev.mc.basepower.gui; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/gui/StillGUI.java b/src/main/java/zone/moddev/mc/basepower/gui/StillGUI.java similarity index 90% rename from src/main/java/zone/moddev/mc/poweradvantage/gui/StillGUI.java rename to src/main/java/zone/moddev/mc/basepower/gui/StillGUI.java index e26ce4b..74ae782 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/gui/StillGUI.java +++ b/src/main/java/zone/moddev/mc/basepower/gui/StillGUI.java @@ -1,8 +1,8 @@ -package zone.moddev.mc.poweradvantage.gui; +package zone.moddev.mc.basepower.gui; import cyano.poweradvantage.api.simple.SimpleMachineGUI; -import zone.moddev.mc.poweradvantage.machines.fluidmachines.StillTileEntity; -import zone.moddev.mc.poweradvantage.math.Integer2D; +import zone.moddev.mc.basepower.machines.fluidmachines.StillTileEntity; +import zone.moddev.mc.basepower.math.Integer2D; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.FluidStack; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/items/package-info.java b/src/main/java/zone/moddev/mc/basepower/gui/package-info.java similarity index 76% rename from src/main/java/zone/moddev/mc/poweradvantage/items/package-info.java rename to src/main/java/zone/moddev/mc/basepower/gui/package-info.java index 8478604..e830c8e 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/items/package-info.java +++ b/src/main/java/zone/moddev/mc/basepower/gui/package-info.java @@ -3,10 +3,10 @@ This package contains content that is added by PowerAdvantage implementing the PowerAdvantage API. If you are writing an add-on mod, use the code in this package for reference, but you should not depend on it's implementation details as future updates might change them. For a better way to get -PowerAdvantage content, look in the zone.moddev.mc.poweradvantage.init package. +PowerAdvantage content, look in the zone.moddev.mc.basepower.init package.

Because these classes are not part of the API, they are not well documented. They were only meant for the eyes of the mod author(s).

*/ -package zone.moddev.mc.poweradvantage.items; \ No newline at end of file +package zone.moddev.mc.basepower.gui; \ No newline at end of file diff --git a/src/main/java/zone/moddev/mc/poweradvantage/init/Blocks.java b/src/main/java/zone/moddev/mc/basepower/init/Blocks.java similarity index 93% rename from src/main/java/zone/moddev/mc/poweradvantage/init/Blocks.java rename to src/main/java/zone/moddev/mc/basepower/init/Blocks.java index 45e3fdf..11b0e95 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/init/Blocks.java +++ b/src/main/java/zone/moddev/mc/basepower/init/Blocks.java @@ -1,15 +1,15 @@ -package zone.moddev.mc.poweradvantage.init; +package zone.moddev.mc.basepower.init; -import zone.moddev.mc.poweradvantage.PowerAdvantage; +import zone.moddev.mc.basepower.PowerAdvantage; import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.GUIBlock; import cyano.poweradvantage.api.fluid.InteractiveFluidBlock; -import zone.moddev.mc.poweradvantage.blocks.BlockFrame; -import zone.moddev.mc.poweradvantage.blocks.BlockPowerSwitch; -import zone.moddev.mc.poweradvantage.machines.conveyors.*; -import zone.moddev.mc.poweradvantage.machines.creative.InfiniteEnergyBlock; -import zone.moddev.mc.poweradvantage.machines.fluidmachines.*; -import zone.moddev.mc.poweradvantage.machines.fluidmachines.modsupport.TerminalFluidPipeBlock; +import zone.moddev.mc.basepower.blocks.BlockFrame; +import zone.moddev.mc.basepower.blocks.BlockPowerSwitch; +import zone.moddev.mc.basepower.machines.conveyors.*; +import zone.moddev.mc.basepower.machines.creative.InfiniteEnergyBlock; +import zone.moddev.mc.basepower.machines.fluidmachines.*; +import zone.moddev.mc.basepower.machines.fluidmachines.modsupport.TerminalFluidPipeBlock; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -77,7 +77,7 @@ public static void init() { if (initDone) return; ItemGroups.init(); Fluids.init(); - zone.moddev.mc.poweradvantage.init.Materials.init(); + zone.moddev.mc.basepower.init.Materials.init(); fluid_drain = (GUIBlock) addBlock(new FluidDrainBlock(), "fluid_drain"); diff --git a/src/main/java/zone/moddev/mc/basepower/init/Entities.java b/src/main/java/zone/moddev/mc/basepower/init/Entities.java new file mode 100644 index 0000000..cc5effa --- /dev/null +++ b/src/main/java/zone/moddev/mc/basepower/init/Entities.java @@ -0,0 +1,41 @@ +package zone.moddev.mc.basepower.init; + +import net.minecraftforge.fml.common.registry.GameRegistry; +import zone.moddev.mc.basepower.compat.LegacyIdentity; +import zone.moddev.mc.basepower.PowerAdvantage; +import zone.moddev.mc.basepower.machines.conveyors.*; +import zone.moddev.mc.basepower.machines.creative.InfiniteEnergyTileEntity; +import zone.moddev.mc.basepower.machines.fluidmachines.*; +import zone.moddev.mc.basepower.machines.fluidmachines.modsupport.TerminalFluidPipeTileEntity; + +public abstract class Entities { + + + private static boolean initDone = false; + + public static void init() { + if (initDone) return; + + Blocks.init(); + + LegacyIdentity.registerTileEntity(TerminalFluidPipeTileEntity.class, PowerAdvantage.MODID + ".tileentity." + "pipe_terminal"); + LegacyIdentity.registerTileEntity(FluidDrainTileEntity.class, PowerAdvantage.MODID + ".tileentity." + "fluid_drain"); + LegacyIdentity.registerTileEntity(FluidDischargeTileEntity.class, PowerAdvantage.MODID + ".tileentity." + "fluid_discharge"); + LegacyIdentity.registerTileEntity(StorageTankTileEntity.class, PowerAdvantage.MODID + ".tileentity." + "fluid_storage_tank"); + LegacyIdentity.registerTileEntity(MetalTankTileEntity.class, PowerAdvantage.MODID + ".tileentity." + "fluid_metal_tank"); + LegacyIdentity.registerTileEntity(StillTileEntity.class, PowerAdvantage.MODID + ".tileentity." + "still"); + LegacyIdentity.registerTileEntity(TileEntityConveyor.class, PowerAdvantage.MODID + "." + "item_conveyor"); + LegacyIdentity.registerTileEntity(TileEntityBlockFilter.class, PowerAdvantage.MODID + "." + "item_filter_block"); + LegacyIdentity.registerTileEntity(TileEntityFoodFilter.class, PowerAdvantage.MODID + "." + "item_filter_food"); + LegacyIdentity.registerTileEntity(TileEntityFuelFilter.class, PowerAdvantage.MODID + "." + "item_filter_fuel"); + LegacyIdentity.registerTileEntity(TileEntityInventoryFilter.class, PowerAdvantage.MODID + "." + "item_filter_inventory"); + LegacyIdentity.registerTileEntity(TileEntityOreFilter.class, PowerAdvantage.MODID + "." + "item_filter_ore"); + LegacyIdentity.registerTileEntity(TileEntityPlantFilter.class, PowerAdvantage.MODID + "." + "item_filter_plant"); + LegacyIdentity.registerTileEntity(TileEntitySmeltableFilter.class, PowerAdvantage.MODID + "." + "item_filter_smelt"); + LegacyIdentity.registerTileEntity(TileEntityOverflowFilter.class, PowerAdvantage.MODID + "." + "item_filter_overflow"); + + LegacyIdentity.registerTileEntity(InfiniteEnergyTileEntity.class, PowerAdvantage.MODID + "." + "infinite_energy_source"); + + initDone = true; + } +} \ No newline at end of file diff --git a/src/main/java/zone/moddev/mc/poweradvantage/init/Fluids.java b/src/main/java/zone/moddev/mc/basepower/init/Fluids.java similarity index 94% rename from src/main/java/zone/moddev/mc/poweradvantage/init/Fluids.java rename to src/main/java/zone/moddev/mc/basepower/init/Fluids.java index cb00dac..27fa2d4 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/init/Fluids.java +++ b/src/main/java/zone/moddev/mc/basepower/init/Fluids.java @@ -1,10 +1,10 @@ -package zone.moddev.mc.poweradvantage.init; +package zone.moddev.mc.basepower.init; -import zone.moddev.mc.poweradvantage.PowerAdvantage; +import zone.moddev.mc.basepower.PowerAdvantage; import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.fluid.ColoredFluid; -import zone.moddev.mc.poweradvantage.util.ReversibleHashMap; -import zone.moddev.mc.poweradvantage.util.ReversibleMap; +import zone.moddev.mc.basepower.util.ReversibleHashMap; +import zone.moddev.mc.basepower.util.ReversibleMap; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; @@ -44,7 +44,7 @@ public abstract class Fluids { public static void init() { if (initDone) return; - zone.moddev.mc.poweradvantage.init.Materials.init(); + zone.moddev.mc.basepower.init.Materials.init(); fluidConduit_water = new ConduitType("water"); fluidConduit_lava = new ConduitType("lava"); diff --git a/src/main/java/zone/moddev/mc/poweradvantage/init/Fuels.java b/src/main/java/zone/moddev/mc/basepower/init/Fuels.java similarity index 94% rename from src/main/java/zone/moddev/mc/poweradvantage/init/Fuels.java rename to src/main/java/zone/moddev/mc/basepower/init/Fuels.java index 767e654..200f098 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/init/Fuels.java +++ b/src/main/java/zone/moddev/mc/basepower/init/Fuels.java @@ -1,7 +1,7 @@ -package zone.moddev.mc.poweradvantage.init; +package zone.moddev.mc.basepower.init; -import zone.moddev.mc.poweradvantage.compat.BaseMetalsCompat; -import zone.moddev.mc.poweradvantage.registry.FuelRegistry; +import zone.moddev.mc.basepower.compat.BaseMetalsCompat; +import zone.moddev.mc.basepower.registry.FuelRegistry; import cyano.poweradvantage.api.FluidCategoryRegistry; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/init/GUI.java b/src/main/java/zone/moddev/mc/basepower/init/GUI.java similarity index 93% rename from src/main/java/zone/moddev/mc/poweradvantage/init/GUI.java rename to src/main/java/zone/moddev/mc/basepower/init/GUI.java index 3d845d7..19e1523 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/init/GUI.java +++ b/src/main/java/zone/moddev/mc/basepower/init/GUI.java @@ -1,11 +1,11 @@ -package zone.moddev.mc.poweradvantage.init; +package zone.moddev.mc.basepower.init; import net.minecraft.util.ResourceLocation; -import zone.moddev.mc.poweradvantage.PowerAdvantage; +import zone.moddev.mc.basepower.PowerAdvantage; import cyano.poweradvantage.api.simple.SimpleMachineGUI; -import zone.moddev.mc.poweradvantage.gui.*; -import zone.moddev.mc.poweradvantage.math.Integer2D; -import zone.moddev.mc.poweradvantage.registry.MachineGUIRegistry; +import zone.moddev.mc.basepower.gui.*; +import zone.moddev.mc.basepower.math.Integer2D; +import zone.moddev.mc.basepower.registry.MachineGUIRegistry; public abstract class GUI { diff --git a/src/main/java/zone/moddev/mc/poweradvantage/init/ItemGroups.java b/src/main/java/zone/moddev/mc/basepower/init/ItemGroups.java similarity index 90% rename from src/main/java/zone/moddev/mc/poweradvantage/init/ItemGroups.java rename to src/main/java/zone/moddev/mc/basepower/init/ItemGroups.java index 032ab41..48efb2d 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/init/ItemGroups.java +++ b/src/main/java/zone/moddev/mc/basepower/init/ItemGroups.java @@ -1,7 +1,7 @@ -package zone.moddev.mc.poweradvantage.init; +package zone.moddev.mc.basepower.init; -import zone.moddev.mc.poweradvantage.PowerAdvantage; -import zone.moddev.mc.poweradvantage.gui.FunctionalCreativeTab; +import zone.moddev.mc.basepower.PowerAdvantage; +import zone.moddev.mc.basepower.gui.FunctionalCreativeTab; import net.minecraft.block.ITileEntityProvider; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/init/Items.java b/src/main/java/zone/moddev/mc/basepower/init/Items.java similarity index 94% rename from src/main/java/zone/moddev/mc/poweradvantage/init/Items.java rename to src/main/java/zone/moddev/mc/basepower/init/Items.java index 974a17d..1c820a4 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/init/Items.java +++ b/src/main/java/zone/moddev/mc/basepower/init/Items.java @@ -1,7 +1,7 @@ -package zone.moddev.mc.poweradvantage.init; +package zone.moddev.mc.basepower.init; -import zone.moddev.mc.poweradvantage.PowerAdvantage; -import zone.moddev.mc.poweradvantage.items.RotationTool; +import zone.moddev.mc.basepower.PowerAdvantage; +import zone.moddev.mc.basepower.items.RotationTool; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/init/Materials.java b/src/main/java/zone/moddev/mc/basepower/init/Materials.java similarity index 77% rename from src/main/java/zone/moddev/mc/poweradvantage/init/Materials.java rename to src/main/java/zone/moddev/mc/basepower/init/Materials.java index 4373aac..91af787 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/init/Materials.java +++ b/src/main/java/zone/moddev/mc/basepower/init/Materials.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.init; +package zone.moddev.mc.basepower.init; public class Materials { diff --git a/src/main/java/zone/moddev/mc/poweradvantage/init/ModSupport.java b/src/main/java/zone/moddev/mc/basepower/init/ModSupport.java similarity index 85% rename from src/main/java/zone/moddev/mc/poweradvantage/init/ModSupport.java rename to src/main/java/zone/moddev/mc/basepower/init/ModSupport.java index d2919f5..2bc6bf8 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/init/ModSupport.java +++ b/src/main/java/zone/moddev/mc/basepower/init/ModSupport.java @@ -1,6 +1,6 @@ -package zone.moddev.mc.poweradvantage.init; +package zone.moddev.mc.basepower.init; -import zone.moddev.mc.poweradvantage.PowerAdvantage; +import zone.moddev.mc.basepower.PowerAdvantage; import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.modsupport.rf.BlockRFConverter; import cyano.poweradvantage.api.modsupport.rf.TileEntityRFElectricityConverter; @@ -17,6 +17,7 @@ import net.minecraftforge.fml.common.FMLLog; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.registry.GameRegistry; +import zone.moddev.mc.basepower.compat.LegacyIdentity; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.oredict.ShapedOreRecipe; @@ -48,9 +49,9 @@ public static void init(boolean rfSupport, boolean techRebornSupport) { converter_rf_electricity = addBlock(new BlockRFConverter(defaultMachineMaterial, defaultMachineHardness, new ConduitType("electricity"), TileEntityRFElectricityConverter.class), "converter_rf_electricity"); converter_rf_quantum = addBlock(new BlockRFConverter(defaultMachineMaterial, defaultMachineHardness, new ConduitType("quantum"), TileEntityRFQuantumConverter.class), "converter_rf_quantum"); - GameRegistry.registerTileEntity(TileEntityRFSteamConverter.class, PowerAdvantage.MODID + "." + "rf_steam_converter_tileentity"); - GameRegistry.registerTileEntity(TileEntityRFElectricityConverter.class, PowerAdvantage.MODID + "." + "rf_electricity_converter_tileentity"); - GameRegistry.registerTileEntity(TileEntityRFQuantumConverter.class, PowerAdvantage.MODID + "." + "rf_quantum_converter_tileentity"); + LegacyIdentity.registerTileEntity(TileEntityRFSteamConverter.class, PowerAdvantage.MODID + "." + "rf_steam_converter_tileentity"); + LegacyIdentity.registerTileEntity(TileEntityRFElectricityConverter.class, PowerAdvantage.MODID + "." + "rf_electricity_converter_tileentity"); + LegacyIdentity.registerTileEntity(TileEntityRFQuantumConverter.class, PowerAdvantage.MODID + "." + "rf_quantum_converter_tileentity"); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(converter_rf_steam, 1), "xyz", @@ -67,7 +68,7 @@ public static void init(boolean rfSupport, boolean techRebornSupport) { // first, register transformers in Ore Dictionary converter_tr_electricity = addBlock(new BlockTRConverter(defaultMachineMaterial, defaultMachineHardness, new ConduitType("electricity"), TileEntityTRElectricityConverter.class), "converter_tr_electricity"); - GameRegistry.registerTileEntity(TileEntityTRElectricityConverter.class, PowerAdvantage.MODID + "." + "tr_electricity_converter_tileentity"); + LegacyIdentity.registerTileEntity(TileEntityTRElectricityConverter.class, PowerAdvantage.MODID + "." + "tr_electricity_converter_tileentity"); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(converter_tr_electricity, 1), "XXX", "XZX", "XXX", 'Z', "PSU", 'X', "ingotRefinedIron")); } diff --git a/src/main/java/zone/moddev/mc/poweradvantage/init/OreSpawnWorldGen.java b/src/main/java/zone/moddev/mc/basepower/init/OreSpawnWorldGen.java similarity index 92% rename from src/main/java/zone/moddev/mc/poweradvantage/init/OreSpawnWorldGen.java rename to src/main/java/zone/moddev/mc/basepower/init/OreSpawnWorldGen.java index 7f97172..64bbc4a 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/init/OreSpawnWorldGen.java +++ b/src/main/java/zone/moddev/mc/basepower/init/OreSpawnWorldGen.java @@ -1,6 +1,6 @@ -package zone.moddev.mc.poweradvantage.init; +package zone.moddev.mc.basepower.init; -import zone.moddev.mc.poweradvantage.PowerAdvantage; +import zone.moddev.mc.basepower.PowerAdvantage; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.common.FMLLog; import net.minecraftforge.fml.common.Loader; @@ -27,9 +27,9 @@ public static void register(Path configDirectory) { boolean accepted = OreSpawnApi.enqueue(provider); String override = describeOverride(configDirectory); String defaults = Loader.isModLoaded("mineralogy") - ? "mineralogy:ocean crude oil + poweradvantage:desert crude oil" - : "poweradvantage:desert crude oil"; - FMLLog.info("%s: OreSpawn crude-oil candidates=[mineralogy:ocean, poweradvantage:desert], " + ? "mineralogy:ocean crude oil + basepower:desert crude oil" + : "basepower:desert crude oil"; + FMLLog.info("%s: OreSpawn crude-oil candidates=[mineralogy:ocean, basepower:desert], " + "selected fresh-world defaults=[%s], explicit override=%s", PowerAdvantage.MODID, defaults, override); if (!accepted) { @@ -68,4 +68,4 @@ static String describeOverride(Path configDirectory) { } return "none"; } -} \ No newline at end of file +} diff --git a/src/main/java/zone/moddev/mc/poweradvantage/init/Recipes.java b/src/main/java/zone/moddev/mc/basepower/init/Recipes.java similarity index 96% rename from src/main/java/zone/moddev/mc/poweradvantage/init/Recipes.java rename to src/main/java/zone/moddev/mc/basepower/init/Recipes.java index c009569..e84b24b 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/init/Recipes.java +++ b/src/main/java/zone/moddev/mc/basepower/init/Recipes.java @@ -1,10 +1,10 @@ -package zone.moddev.mc.poweradvantage.init; +package zone.moddev.mc.basepower.init; -import zone.moddev.mc.poweradvantage.PowerAdvantage; +import zone.moddev.mc.basepower.PowerAdvantage; import cyano.poweradvantage.api.FluidCategoryRegistry; -import zone.moddev.mc.poweradvantage.RecipeMode; -import zone.moddev.mc.poweradvantage.compat.BaseMetalsCompat; -import zone.moddev.mc.poweradvantage.registry.still.recipe.DistillationRecipeRegistry; +import zone.moddev.mc.basepower.RecipeMode; +import zone.moddev.mc.basepower.compat.BaseMetalsCompat; +import zone.moddev.mc.basepower.registry.still.recipe.DistillationRecipeRegistry; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.FMLLog; import net.minecraftforge.fluids.Fluid; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/init/TreasureChests.java b/src/main/java/zone/moddev/mc/basepower/init/TreasureChests.java similarity index 88% rename from src/main/java/zone/moddev/mc/poweradvantage/init/TreasureChests.java rename to src/main/java/zone/moddev/mc/basepower/init/TreasureChests.java index 4558051..74966f1 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/init/TreasureChests.java +++ b/src/main/java/zone/moddev/mc/basepower/init/TreasureChests.java @@ -1,6 +1,6 @@ -package zone.moddev.mc.poweradvantage.init; +package zone.moddev.mc.basepower.init; -import zone.moddev.mc.poweradvantage.PowerAdvantage; +import zone.moddev.mc.basepower.PowerAdvantage; import net.minecraftforge.fml.common.FMLLog; import org.apache.logging.log4j.Level; @@ -30,6 +30,7 @@ public static void init(Path configFolder) { private static void writeLootFile(Path file, String content) { try { + if (Files.exists(file)) return; Files.createDirectories(file.getParent()); Files.write(file, Arrays.asList(content), Charset.forName("UTF-8")); } catch (IOException e) { @@ -49,7 +50,7 @@ private static void writeLootFile(Path file, String content) { " },\n" + " {\n" + " \"type\": \"item\",\n" + - " \"name\": \"poweradvantage:sprocket\",\n" + + " \"name\": \"basepower:sprocket\",\n" + " \"weight\": 5,\n" + " \"functions\": [\n" + " {\n" + @@ -63,7 +64,7 @@ private static void writeLootFile(Path file, String content) { " },\n" + " {\n" + " \"type\": \"item\",\n" + - " \"name\": \"poweradvantage:fluid_pipe\",\n" + + " \"name\": \"basepower:fluid_pipe\",\n" + " \"weight\": 5,\n" + " \"functions\": [\n" + " {\n" + @@ -77,22 +78,22 @@ private static void writeLootFile(Path file, String content) { " },\n" + " {\n" + " \"type\": \"item\",\n" + - " \"name\": \"poweradvantage:fluid_storage_tank\",\n" + + " \"name\": \"basepower:fluid_storage_tank\",\n" + " \"weight\": 3\n" + " },\n" + " {\n" + " \"type\": \"item\",\n" + - " \"name\": \"poweradvantage:fluid_drain\",\n" + + " \"name\": \"basepower:fluid_drain\",\n" + " \"weight\": 2\n" + " },\n" + " {\n" + " \"type\": \"item\",\n" + - " \"name\": \"poweradvantage:fluid_discharge\",\n" + + " \"name\": \"basepower:fluid_discharge\",\n" + " \"weight\": 2\n" + " },\n" + " {\n" + " \"type\": \"item\",\n" + - " \"name\": \"poweradvantage:item_conveyor\",\n" + + " \"name\": \"basepower:item_conveyor\",\n" + " \"weight\": 3,\n" + " \"functions\": [\n" + " {\n" + @@ -108,4 +109,4 @@ private static void writeLootFile(Path file, String content) { " }\n" + " ]\n" + "}\n"; -} \ No newline at end of file +} diff --git a/src/main/java/zone/moddev/mc/poweradvantage/init/Villages.java b/src/main/java/zone/moddev/mc/basepower/init/Villages.java similarity index 97% rename from src/main/java/zone/moddev/mc/poweradvantage/init/Villages.java rename to src/main/java/zone/moddev/mc/basepower/init/Villages.java index 2a926dd..ed2b4c6 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/init/Villages.java +++ b/src/main/java/zone/moddev/mc/basepower/init/Villages.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.init; +package zone.moddev.mc.basepower.init; import net.minecraft.entity.passive.EntityVillager; import net.minecraft.util.ResourceLocation; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/init/WorldGen.java b/src/main/java/zone/moddev/mc/basepower/init/WorldGen.java similarity index 85% rename from src/main/java/zone/moddev/mc/poweradvantage/init/WorldGen.java rename to src/main/java/zone/moddev/mc/basepower/init/WorldGen.java index 77cc2cb..e25d91c 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/init/WorldGen.java +++ b/src/main/java/zone/moddev/mc/basepower/init/WorldGen.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.init; +package zone.moddev.mc.basepower.init; public abstract class WorldGen { @@ -20,7 +20,7 @@ public static void init() { + " \"dimension\":\"+\",\n" + " \"ores\":[\n" + " {\n" - + " \"blockID\":\"poweradvantage:crude_oil\",\n" + + " \"blockID\":\"basepower:crude_oil\",\n" + " \"size\":64,\n" + " \"variation\":50,\n" + " \"frequency\":0.25,\n" diff --git a/src/main/java/zone/moddev/mc/poweradvantage/init/package-info.java b/src/main/java/zone/moddev/mc/basepower/init/package-info.java similarity index 77% rename from src/main/java/zone/moddev/mc/poweradvantage/init/package-info.java rename to src/main/java/zone/moddev/mc/basepower/init/package-info.java index 2711107..28a4285 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/init/package-info.java +++ b/src/main/java/zone/moddev/mc/basepower/init/package-info.java @@ -2,4 +2,4 @@ This package contains registries for all of the new content added by PowerAdvantage. Use these classes to interact with the items and blocks. */ -package zone.moddev.mc.poweradvantage.init; \ No newline at end of file +package zone.moddev.mc.basepower.init; \ No newline at end of file diff --git a/src/main/java/zone/moddev/mc/poweradvantage/items/RotationTool.java b/src/main/java/zone/moddev/mc/basepower/items/RotationTool.java similarity index 97% rename from src/main/java/zone/moddev/mc/poweradvantage/items/RotationTool.java rename to src/main/java/zone/moddev/mc/basepower/items/RotationTool.java index 9da1115..265abf8 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/items/RotationTool.java +++ b/src/main/java/zone/moddev/mc/basepower/items/RotationTool.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.items; +package zone.moddev.mc.basepower.items; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/blocks/package-info.java b/src/main/java/zone/moddev/mc/basepower/items/package-info.java similarity index 76% rename from src/main/java/zone/moddev/mc/poweradvantage/blocks/package-info.java rename to src/main/java/zone/moddev/mc/basepower/items/package-info.java index 5af68da..04ef1d7 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/blocks/package-info.java +++ b/src/main/java/zone/moddev/mc/basepower/items/package-info.java @@ -3,10 +3,10 @@ This package contains content that is added by PowerAdvantage implementing the PowerAdvantage API. If you are writing an add-on mod, use the code in this package for reference, but you should not depend on it's implementation details as future updates might change them. For a better way to get -PowerAdvantage content, look in the zone.moddev.mc.poweradvantage.init package. +PowerAdvantage content, look in the zone.moddev.mc.basepower.init package.

Because these classes are not part of the API, they are not well documented. They were only meant for the eyes of the mod author(s).

*/ -package zone.moddev.mc.poweradvantage.blocks; \ No newline at end of file +package zone.moddev.mc.basepower.items; \ No newline at end of file diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/BlockConveyor.java b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/BlockConveyor.java similarity index 97% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/BlockConveyor.java rename to src/main/java/zone/moddev/mc/basepower/machines/conveyors/BlockConveyor.java index 178d63d..c1ef080 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/BlockConveyor.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/BlockConveyor.java @@ -1,7 +1,7 @@ -package zone.moddev.mc.poweradvantage.machines.conveyors; +package zone.moddev.mc.basepower.machines.conveyors; import cyano.poweradvantage.api.GUIBlock; -import zone.moddev.mc.poweradvantage.init.ItemGroups; +import zone.moddev.mc.basepower.init.ItemGroups; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/BlockConveyorFilter.java b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/BlockConveyorFilter.java similarity index 96% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/BlockConveyorFilter.java rename to src/main/java/zone/moddev/mc/basepower/machines/conveyors/BlockConveyorFilter.java index 3ae14e2..30b3aa4 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/BlockConveyorFilter.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/BlockConveyorFilter.java @@ -1,8 +1,8 @@ -package zone.moddev.mc.poweradvantage.machines.conveyors; +package zone.moddev.mc.basepower.machines.conveyors; import com.google.common.base.Predicate; import cyano.poweradvantage.api.GUIBlock; -import zone.moddev.mc.poweradvantage.init.ItemGroups; +import zone.moddev.mc.basepower.init.ItemGroups; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityBlockFilter.java b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityBlockFilter.java similarity index 83% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityBlockFilter.java rename to src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityBlockFilter.java index 9eded62..8a65770 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityBlockFilter.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityBlockFilter.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.machines.conveyors; +package zone.moddev.mc.basepower.machines.conveyors; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityConveyor.java b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityConveyor.java similarity index 99% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityConveyor.java rename to src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityConveyor.java index 12ca3c6..45ccf7f 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityConveyor.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityConveyor.java @@ -1,6 +1,6 @@ -package zone.moddev.mc.poweradvantage.machines.conveyors; +package zone.moddev.mc.basepower.machines.conveyors; -import zone.moddev.mc.poweradvantage.util.InventoryWrapper; +import zone.moddev.mc.basepower.util.InventoryWrapper; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityConveyorFilter.java b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityConveyorFilter.java similarity index 97% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityConveyorFilter.java rename to src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityConveyorFilter.java index 4874ffa..31cc3ee 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityConveyorFilter.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityConveyorFilter.java @@ -1,6 +1,6 @@ -package zone.moddev.mc.poweradvantage.machines.conveyors; +package zone.moddev.mc.basepower.machines.conveyors; -import zone.moddev.mc.poweradvantage.util.InventoryWrapper; +import zone.moddev.mc.basepower.util.InventoryWrapper; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; import net.minecraft.inventory.IInventory; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityFoodFilter.java b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityFoodFilter.java similarity index 83% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityFoodFilter.java rename to src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityFoodFilter.java index db5eae3..2425df8 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityFoodFilter.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityFoodFilter.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.machines.conveyors; +package zone.moddev.mc.basepower.machines.conveyors; import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityFuelFilter.java b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityFuelFilter.java similarity index 83% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityFuelFilter.java rename to src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityFuelFilter.java index d98a6e8..513b828 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityFuelFilter.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityFuelFilter.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.machines.conveyors; +package zone.moddev.mc.basepower.machines.conveyors; import net.minecraft.item.ItemStack; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityInventoryFilter.java b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityInventoryFilter.java similarity index 90% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityInventoryFilter.java rename to src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityInventoryFilter.java index b0b9c23..6875aa0 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityInventoryFilter.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityInventoryFilter.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.machines.conveyors; +package zone.moddev.mc.basepower.machines.conveyors; import net.minecraft.item.ItemStack; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityOreFilter.java b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityOreFilter.java similarity index 91% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityOreFilter.java rename to src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityOreFilter.java index 635f3cd..5573d7f 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityOreFilter.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityOreFilter.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.machines.conveyors; +package zone.moddev.mc.basepower.machines.conveyors; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityOverflowFilter.java b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityOverflowFilter.java similarity index 90% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityOverflowFilter.java rename to src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityOverflowFilter.java index 47edee6..052ba25 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityOverflowFilter.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityOverflowFilter.java @@ -1,6 +1,6 @@ -package zone.moddev.mc.poweradvantage.machines.conveyors; +package zone.moddev.mc.basepower.machines.conveyors; -import zone.moddev.mc.poweradvantage.util.InventoryWrapper; +import zone.moddev.mc.basepower.util.InventoryWrapper; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityPlantFilter.java b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityPlantFilter.java similarity index 91% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityPlantFilter.java rename to src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityPlantFilter.java index 59c50fb..6f6f65c 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntityPlantFilter.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntityPlantFilter.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.machines.conveyors; +package zone.moddev.mc.basepower.machines.conveyors; import net.minecraft.block.Block; import net.minecraft.block.IGrowable; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntitySmeltableFilter.java b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntitySmeltableFilter.java similarity index 85% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntitySmeltableFilter.java rename to src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntitySmeltableFilter.java index dd4ea04..e2203d3 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/TileEntitySmeltableFilter.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/TileEntitySmeltableFilter.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.machines.conveyors; +package zone.moddev.mc.basepower.machines.conveyors; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/package-info.java b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/package-info.java similarity index 75% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/package-info.java rename to src/main/java/zone/moddev/mc/basepower/machines/conveyors/package-info.java index 23e6fb8..f1881ac 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/conveyors/package-info.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/conveyors/package-info.java @@ -3,10 +3,10 @@ This package contains content that is added by PowerAdvantage implementing the PowerAdvantage API. If you are writing an add-on mod, use the code in this package for reference, but you should not depend on it's implementation details as future updates might change them. For a better way to get -PowerAdvantage content, look in the zone.moddev.mc.poweradvantage.init package. +PowerAdvantage content, look in the zone.moddev.mc.basepower.init package.

Because these classes are not part of the API, they are not well documented. They were only meant for the eyes of the mod author(s).

*/ -package zone.moddev.mc.poweradvantage.machines.conveyors; \ No newline at end of file +package zone.moddev.mc.basepower.machines.conveyors; \ No newline at end of file diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/creative/InfiniteEnergyBlock.java b/src/main/java/zone/moddev/mc/basepower/machines/creative/InfiniteEnergyBlock.java similarity index 96% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/creative/InfiniteEnergyBlock.java rename to src/main/java/zone/moddev/mc/basepower/machines/creative/InfiniteEnergyBlock.java index 82e8286..d75ce84 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/creative/InfiniteEnergyBlock.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/creative/InfiniteEnergyBlock.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.machines.creative; +package zone.moddev.mc.basepower.machines.creative; import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.PoweredEntity; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/creative/InfiniteEnergyTileEntity.java b/src/main/java/zone/moddev/mc/basepower/machines/creative/InfiniteEnergyTileEntity.java similarity index 97% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/creative/InfiniteEnergyTileEntity.java rename to src/main/java/zone/moddev/mc/basepower/machines/creative/InfiniteEnergyTileEntity.java index 3b0d77e..76ad9c4 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/creative/InfiniteEnergyTileEntity.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/creative/InfiniteEnergyTileEntity.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.machines.creative; +package zone.moddev.mc.basepower.machines.creative; import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.simple.TileEntitySimplePowerMachine; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/FluidDischargeBlock.java b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidDischargeBlock.java similarity index 96% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/FluidDischargeBlock.java rename to src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidDischargeBlock.java index 57d81d8..88597ef 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/FluidDischargeBlock.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidDischargeBlock.java @@ -1,10 +1,10 @@ -package zone.moddev.mc.poweradvantage.machines.fluidmachines; +package zone.moddev.mc.basepower.machines.fluidmachines; import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.PoweredEntity; import cyano.poweradvantage.api.simple.BlockSimpleFluidMachine; import cyano.poweradvantage.api.simple.TileEntitySimplePowerMachine; -import zone.moddev.mc.poweradvantage.init.ItemGroups; +import zone.moddev.mc.basepower.init.ItemGroups; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/FluidDischargeTileEntity.java b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidDischargeTileEntity.java similarity index 99% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/FluidDischargeTileEntity.java rename to src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidDischargeTileEntity.java index 2ad5bff..104bea0 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/FluidDischargeTileEntity.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidDischargeTileEntity.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.machines.fluidmachines; +package zone.moddev.mc.basepower.machines.fluidmachines; import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.simple.TileEntitySimpleFluidMachine; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/FluidDrainBlock.java b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidDrainBlock.java similarity index 95% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/FluidDrainBlock.java rename to src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidDrainBlock.java index a04ddc2..e48d49d 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/FluidDrainBlock.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidDrainBlock.java @@ -1,9 +1,9 @@ -package zone.moddev.mc.poweradvantage.machines.fluidmachines; +package zone.moddev.mc.basepower.machines.fluidmachines; import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.PoweredEntity; import cyano.poweradvantage.api.simple.BlockSimpleFluidMachine; -import zone.moddev.mc.poweradvantage.init.ItemGroups; +import zone.moddev.mc.basepower.init.ItemGroups; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/FluidDrainTileEntity.java b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidDrainTileEntity.java similarity index 99% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/FluidDrainTileEntity.java rename to src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidDrainTileEntity.java index 7a4efb5..33d1762 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/FluidDrainTileEntity.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidDrainTileEntity.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.machines.fluidmachines; +package zone.moddev.mc.basepower.machines.fluidmachines; import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.simple.TileEntitySimpleFluidMachine; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/FluidPipeBlock.java b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidPipeBlock.java similarity index 94% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/FluidPipeBlock.java rename to src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidPipeBlock.java index 4d98ed1..70c3fde 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/FluidPipeBlock.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidPipeBlock.java @@ -1,7 +1,7 @@ -package zone.moddev.mc.poweradvantage.machines.fluidmachines; +package zone.moddev.mc.basepower.machines.fluidmachines; import cyano.poweradvantage.api.simple.BlockSimpleFluidConduit; -import zone.moddev.mc.poweradvantage.init.Blocks; +import zone.moddev.mc.basepower.init.Blocks; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/MetalTankBlock.java b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/MetalTankBlock.java similarity index 96% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/MetalTankBlock.java rename to src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/MetalTankBlock.java index 8a63526..b376e4f 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/MetalTankBlock.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/MetalTankBlock.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.machines.fluidmachines; +package zone.moddev.mc.basepower.machines.fluidmachines; import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.PoweredEntity; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/MetalTankTileEntity.java b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/MetalTankTileEntity.java similarity index 97% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/MetalTankTileEntity.java rename to src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/MetalTankTileEntity.java index f610fe0..e02d8f0 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/MetalTankTileEntity.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/MetalTankTileEntity.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.machines.fluidmachines; +package zone.moddev.mc.basepower.machines.fluidmachines; import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.PowerRequest; @@ -12,7 +12,7 @@ public class MetalTankTileEntity extends TileEntitySimpleFluidMachine { public MetalTankTileEntity() { - super(FluidContainerRegistry.BUCKET_VOLUME * 10, "tile.poweradvantage.fluid_metal_tank.name"); + super(FluidContainerRegistry.BUCKET_VOLUME * 10, "tile.basepower.fluid_metal_tank.name"); } diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/StillBlock.java b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/StillBlock.java similarity index 98% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/StillBlock.java rename to src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/StillBlock.java index 6d85976..d4b7921 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/StillBlock.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/StillBlock.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.machines.fluidmachines; +package zone.moddev.mc.basepower.machines.fluidmachines; import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.PoweredEntity; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/StillTileEntity.java b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/StillTileEntity.java similarity index 97% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/StillTileEntity.java rename to src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/StillTileEntity.java index a4cb796..b9a9df0 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/StillTileEntity.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/StillTileEntity.java @@ -1,10 +1,10 @@ -package zone.moddev.mc.poweradvantage.machines.fluidmachines; +package zone.moddev.mc.basepower.machines.fluidmachines; import cyano.poweradvantage.api.fluid.FluidRequest; import cyano.poweradvantage.api.simple.TileEntitySimpleFluidMachine; -import zone.moddev.mc.poweradvantage.registry.FuelRegistry; -import zone.moddev.mc.poweradvantage.registry.still.recipe.DistillationRecipe; -import zone.moddev.mc.poweradvantage.registry.still.recipe.DistillationRecipeRegistry; +import zone.moddev.mc.basepower.registry.FuelRegistry; +import zone.moddev.mc.basepower.registry.still.recipe.DistillationRecipe; +import zone.moddev.mc.basepower.registry.still.recipe.DistillationRecipeRegistry; import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/StorageTankBlock.java b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/StorageTankBlock.java similarity index 94% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/StorageTankBlock.java rename to src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/StorageTankBlock.java index 1f11b5e..528df41 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/StorageTankBlock.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/StorageTankBlock.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.machines.fluidmachines; +package zone.moddev.mc.basepower.machines.fluidmachines; import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.PoweredEntity; @@ -119,11 +119,11 @@ public void displayInformation(ItemStack stack) { } if (dataTag.hasKey("Volume") && dataTag.hasKey("FluidID")) { float buckets = (float) dataTag.getInteger("Volume") / (float) FluidContainerRegistry.BUCKET_VOLUME; - message = (I18n.translateToLocal("tooltip.poweradvantage.buckets_of") + message = (I18n.translateToLocal("tooltip.basepower.buckets_of") .replace("%x", String.valueOf(buckets)) .replace("%y", FluidRegistry.getFluid(dataTag.getString("FluidID")).getName())); } else { - message = (I18n.translateToLocal("tooltip.poweradvantage.empty")); + message = (I18n.translateToLocal("tooltip.basepower.empty")); } NBTTagCompound displayTag; @@ -142,7 +142,7 @@ public void displayInformation(ItemStack stack) { } loreTag.appendTag(new NBTTagString(message)); if (!stack.hasTagCompound()) { - stack.setTagCompound(new NBTTagCompound()); + stack.setTagCompound(dataTag); } } -} \ No newline at end of file +} diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/StorageTankTileEntity.java b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/StorageTankTileEntity.java similarity index 95% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/StorageTankTileEntity.java rename to src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/StorageTankTileEntity.java index 57e7ce6..254c812 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/StorageTankTileEntity.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/StorageTankTileEntity.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.machines.fluidmachines; +package zone.moddev.mc.basepower.machines.fluidmachines; import cyano.poweradvantage.api.PowerRequest; import cyano.poweradvantage.api.fluid.FluidRequest; @@ -12,7 +12,7 @@ public class StorageTankTileEntity extends TileEntitySimpleFluidMachine { public StorageTankTileEntity() { - super(FluidContainerRegistry.BUCKET_VOLUME * 4, "tile.poweradvantage.fluid_storage_tank.name"); + super(FluidContainerRegistry.BUCKET_VOLUME * 4, "tile.basepower.fluid_storage_tank.name"); } /** diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/modsupport/TerminalFluidPipeBlock.java b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/modsupport/TerminalFluidPipeBlock.java similarity index 92% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/modsupport/TerminalFluidPipeBlock.java rename to src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/modsupport/TerminalFluidPipeBlock.java index 90db281..1eb0cc5 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/modsupport/TerminalFluidPipeBlock.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/modsupport/TerminalFluidPipeBlock.java @@ -1,8 +1,8 @@ -package zone.moddev.mc.poweradvantage.machines.fluidmachines.modsupport; +package zone.moddev.mc.basepower.machines.fluidmachines.modsupport; import cyano.poweradvantage.api.ConduitType; -import zone.moddev.mc.poweradvantage.init.Blocks; -import zone.moddev.mc.poweradvantage.machines.fluidmachines.FluidPipeBlock; +import zone.moddev.mc.basepower.init.Blocks; +import zone.moddev.mc.basepower.machines.fluidmachines.FluidPipeBlock; import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.state.IBlockState; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/modsupport/TerminalFluidPipeTileEntity.java b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/modsupport/TerminalFluidPipeTileEntity.java similarity index 96% rename from src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/modsupport/TerminalFluidPipeTileEntity.java rename to src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/modsupport/TerminalFluidPipeTileEntity.java index bec3c8a..7758f5e 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/modsupport/TerminalFluidPipeTileEntity.java +++ b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/modsupport/TerminalFluidPipeTileEntity.java @@ -1,12 +1,12 @@ -package zone.moddev.mc.poweradvantage.machines.fluidmachines.modsupport; +package zone.moddev.mc.basepower.machines.fluidmachines.modsupport; import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.PowerConnectorContext; import cyano.poweradvantage.api.PowerRequest; import cyano.poweradvantage.api.PoweredEntity; import cyano.poweradvantage.api.fluid.FluidRequest; -import zone.moddev.mc.poweradvantage.conduitnetwork.ConduitRegistry; -import zone.moddev.mc.poweradvantage.init.Fluids; +import zone.moddev.mc.basepower.conduitnetwork.ConduitRegistry; +import zone.moddev.mc.basepower.init.Fluids; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.world.World; diff --git a/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/package-info.java b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/package-info.java new file mode 100644 index 0000000..58c6c73 --- /dev/null +++ b/src/main/java/zone/moddev/mc/basepower/machines/fluidmachines/package-info.java @@ -0,0 +1,12 @@ +/** +

+This package contains content that is added by PowerAdvantage implementing the PowerAdvantage API. +If you are writing an add-on mod, use the code in this package for reference, but you should not +depend on it's implementation details as future updates might change them. For a better way to get +PowerAdvantage content, look in the zone.moddev.mc.basepower.init package. +

+Because these classes are not part of the API, they are not well documented. They were only meant +for the eyes of the mod author(s). +

+*/ +package zone.moddev.mc.basepower.machines.fluidmachines; \ No newline at end of file diff --git a/src/main/java/zone/moddev/mc/poweradvantage/math/BlockPos4D.java b/src/main/java/zone/moddev/mc/basepower/math/BlockPos4D.java similarity index 99% rename from src/main/java/zone/moddev/mc/poweradvantage/math/BlockPos4D.java rename to src/main/java/zone/moddev/mc/basepower/math/BlockPos4D.java index 034ad95..3d8b797 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/math/BlockPos4D.java +++ b/src/main/java/zone/moddev/mc/basepower/math/BlockPos4D.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.math; +package zone.moddev.mc.basepower.math; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagIntArray; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/math/Integer2D.java b/src/main/java/zone/moddev/mc/basepower/math/Integer2D.java similarity index 93% rename from src/main/java/zone/moddev/mc/poweradvantage/math/Integer2D.java rename to src/main/java/zone/moddev/mc/basepower/math/Integer2D.java index 71dd3ab..c38d137 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/math/Integer2D.java +++ b/src/main/java/zone/moddev/mc/basepower/math/Integer2D.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.math; +package zone.moddev.mc.basepower.math; /** * This class is used to store 2D integer coordinates diff --git a/src/main/java/zone/moddev/mc/poweradvantage/math/package-info.java b/src/main/java/zone/moddev/mc/basepower/math/package-info.java similarity index 55% rename from src/main/java/zone/moddev/mc/poweradvantage/math/package-info.java rename to src/main/java/zone/moddev/mc/basepower/math/package-info.java index 72c1ee2..2ec83a0 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/math/package-info.java +++ b/src/main/java/zone/moddev/mc/basepower/math/package-info.java @@ -3,4 +3,4 @@ This package contains helper classes.

*/ -package zone.moddev.mc.poweradvantage.math; \ No newline at end of file +package zone.moddev.mc.basepower.math; \ No newline at end of file diff --git a/src/main/java/zone/moddev/mc/poweradvantage/package-info.java b/src/main/java/zone/moddev/mc/basepower/package-info.java similarity index 81% rename from src/main/java/zone/moddev/mc/poweradvantage/package-info.java rename to src/main/java/zone/moddev/mc/basepower/package-info.java index b594f49..e4cdd20 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/package-info.java +++ b/src/main/java/zone/moddev/mc/basepower/package-info.java @@ -2,4 +2,4 @@ This package contains the main mod class. If you are making an add-on mod, you probably want to use classes from the cyano.poweradvantage.api.simple package */ -package zone.moddev.mc.poweradvantage; \ No newline at end of file +package zone.moddev.mc.basepower; \ No newline at end of file diff --git a/src/main/java/zone/moddev/mc/poweradvantage/registry/FuelRegistry.java b/src/main/java/zone/moddev/mc/basepower/registry/FuelRegistry.java similarity index 98% rename from src/main/java/zone/moddev/mc/poweradvantage/registry/FuelRegistry.java rename to src/main/java/zone/moddev/mc/basepower/registry/FuelRegistry.java index 5c33b28..d93cbbb 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/registry/FuelRegistry.java +++ b/src/main/java/zone/moddev/mc/basepower/registry/FuelRegistry.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.registry; +package zone.moddev.mc.basepower.registry; import net.minecraft.block.Block; import net.minecraft.item.Item; @@ -13,7 +13,7 @@ /** * The fuel registry keeps track of the cooking time for new burnables added by PowerAdvantage. The - * actual registration of these burnables occurs in zone.moddev.mc.poweradvantage.init.Fuels + * actual registration of these burnables occurs in zone.moddev.mc.basepower.init.Fuels * @author DrCyano * */ diff --git a/src/main/java/zone/moddev/mc/poweradvantage/registry/MachineGUIRegistry.java b/src/main/java/zone/moddev/mc/basepower/registry/MachineGUIRegistry.java similarity index 98% rename from src/main/java/zone/moddev/mc/poweradvantage/registry/MachineGUIRegistry.java rename to src/main/java/zone/moddev/mc/basepower/registry/MachineGUIRegistry.java index 5e27461..39d8181 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/registry/MachineGUIRegistry.java +++ b/src/main/java/zone/moddev/mc/basepower/registry/MachineGUIRegistry.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.registry; +package zone.moddev.mc.basepower.registry; import com.mcmoddev.poweradvantage.registry.ITileEntityGUI; import net.minecraft.block.Block; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/registry/package-info.java b/src/main/java/zone/moddev/mc/basepower/registry/package-info.java similarity index 67% rename from src/main/java/zone/moddev/mc/poweradvantage/registry/package-info.java rename to src/main/java/zone/moddev/mc/basepower/registry/package-info.java index d71055e..d22177c 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/registry/package-info.java +++ b/src/main/java/zone/moddev/mc/basepower/registry/package-info.java @@ -2,4 +2,4 @@ This package contains registry classes for registering content related to PowerAdvantage. */ -package zone.moddev.mc.poweradvantage.registry; \ No newline at end of file +package zone.moddev.mc.basepower.registry; \ No newline at end of file diff --git a/src/main/java/zone/moddev/mc/poweradvantage/registry/still/recipe/DistillationRecipe.java b/src/main/java/zone/moddev/mc/basepower/registry/still/recipe/DistillationRecipe.java similarity index 98% rename from src/main/java/zone/moddev/mc/poweradvantage/registry/still/recipe/DistillationRecipe.java rename to src/main/java/zone/moddev/mc/basepower/registry/still/recipe/DistillationRecipe.java index ff05f5d..3ff6029 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/registry/still/recipe/DistillationRecipe.java +++ b/src/main/java/zone/moddev/mc/basepower/registry/still/recipe/DistillationRecipe.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.registry.still.recipe; +package zone.moddev.mc.basepower.registry.still.recipe; import java.util.Collection; import java.util.LinkedList; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/registry/still/recipe/DistillationRecipeRegistry.java b/src/main/java/zone/moddev/mc/basepower/registry/still/recipe/DistillationRecipeRegistry.java similarity index 98% rename from src/main/java/zone/moddev/mc/poweradvantage/registry/still/recipe/DistillationRecipeRegistry.java rename to src/main/java/zone/moddev/mc/basepower/registry/still/recipe/DistillationRecipeRegistry.java index 7ba51d7..8c9d572 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/registry/still/recipe/DistillationRecipeRegistry.java +++ b/src/main/java/zone/moddev/mc/basepower/registry/still/recipe/DistillationRecipeRegistry.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.registry.still.recipe; +package zone.moddev.mc.basepower.registry.still.recipe; import java.util.ArrayList; import java.util.HashMap; @@ -7,7 +7,7 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; -import zone.moddev.mc.poweradvantage.PowerAdvantage; +import zone.moddev.mc.basepower.PowerAdvantage; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/registry/still/recipe/ExplicitFluidReference.java b/src/main/java/zone/moddev/mc/basepower/registry/still/recipe/ExplicitFluidReference.java similarity index 96% rename from src/main/java/zone/moddev/mc/poweradvantage/registry/still/recipe/ExplicitFluidReference.java rename to src/main/java/zone/moddev/mc/basepower/registry/still/recipe/ExplicitFluidReference.java index 0f1884d..fc1a706 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/registry/still/recipe/ExplicitFluidReference.java +++ b/src/main/java/zone/moddev/mc/basepower/registry/still/recipe/ExplicitFluidReference.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.registry.still.recipe; +package zone.moddev.mc.basepower.registry.still.recipe; import net.minecraftforge.fluids.Fluid; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/registry/still/recipe/FluidReference.java b/src/main/java/zone/moddev/mc/basepower/registry/still/recipe/FluidReference.java similarity index 97% rename from src/main/java/zone/moddev/mc/poweradvantage/registry/still/recipe/FluidReference.java rename to src/main/java/zone/moddev/mc/basepower/registry/still/recipe/FluidReference.java index 76d58c7..e5ef703 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/registry/still/recipe/FluidReference.java +++ b/src/main/java/zone/moddev/mc/basepower/registry/still/recipe/FluidReference.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.registry.still.recipe; +package zone.moddev.mc.basepower.registry.still.recipe; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/registry/still/recipe/RegistryNameFluidReference.java b/src/main/java/zone/moddev/mc/basepower/registry/still/recipe/RegistryNameFluidReference.java similarity index 96% rename from src/main/java/zone/moddev/mc/poweradvantage/registry/still/recipe/RegistryNameFluidReference.java rename to src/main/java/zone/moddev/mc/basepower/registry/still/recipe/RegistryNameFluidReference.java index 3f79a4d..afb9582 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/registry/still/recipe/RegistryNameFluidReference.java +++ b/src/main/java/zone/moddev/mc/basepower/registry/still/recipe/RegistryNameFluidReference.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.registry.still.recipe; +package zone.moddev.mc.basepower.registry.still.recipe; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/util/HashCodeHelper.java b/src/main/java/zone/moddev/mc/basepower/util/HashCodeHelper.java similarity index 96% rename from src/main/java/zone/moddev/mc/poweradvantage/util/HashCodeHelper.java rename to src/main/java/zone/moddev/mc/basepower/util/HashCodeHelper.java index efed636..c7b3a12 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/util/HashCodeHelper.java +++ b/src/main/java/zone/moddev/mc/basepower/util/HashCodeHelper.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.util; +package zone.moddev.mc.basepower.util; public abstract class HashCodeHelper { diff --git a/src/main/java/zone/moddev/mc/poweradvantage/util/InventoryWrapper.java b/src/main/java/zone/moddev/mc/basepower/util/InventoryWrapper.java similarity index 99% rename from src/main/java/zone/moddev/mc/poweradvantage/util/InventoryWrapper.java rename to src/main/java/zone/moddev/mc/basepower/util/InventoryWrapper.java index 3e1ab8a..df56f7c 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/util/InventoryWrapper.java +++ b/src/main/java/zone/moddev/mc/basepower/util/InventoryWrapper.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.util; +package zone.moddev.mc.basepower.util; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/util/PowerHelper.java b/src/main/java/zone/moddev/mc/basepower/util/PowerHelper.java similarity index 94% rename from src/main/java/zone/moddev/mc/poweradvantage/util/PowerHelper.java rename to src/main/java/zone/moddev/mc/basepower/util/PowerHelper.java index 726c661..fe3c9a7 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/util/PowerHelper.java +++ b/src/main/java/zone/moddev/mc/basepower/util/PowerHelper.java @@ -1,7 +1,7 @@ -package zone.moddev.mc.poweradvantage.util; +package zone.moddev.mc.basepower.util; import cofh.api.energy.IEnergyReceiver; -import zone.moddev.mc.poweradvantage.PowerAdvantage; +import zone.moddev.mc.basepower.PowerAdvantage; import cyano.poweradvantage.api.ITypedConduit; import cyano.poweradvantage.api.PowerConnectorContext; import net.minecraft.block.ITileEntityProvider; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/util/ReversibleHashMap.java b/src/main/java/zone/moddev/mc/basepower/util/ReversibleHashMap.java similarity index 97% rename from src/main/java/zone/moddev/mc/poweradvantage/util/ReversibleHashMap.java rename to src/main/java/zone/moddev/mc/basepower/util/ReversibleHashMap.java index 5e386d1..770ff7d 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/util/ReversibleHashMap.java +++ b/src/main/java/zone/moddev/mc/basepower/util/ReversibleHashMap.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.util; +package zone.moddev.mc.basepower.util; import java.util.Collection; import java.util.Map; diff --git a/src/main/java/zone/moddev/mc/poweradvantage/util/ReversibleMap.java b/src/main/java/zone/moddev/mc/basepower/util/ReversibleMap.java similarity index 81% rename from src/main/java/zone/moddev/mc/poweradvantage/util/ReversibleMap.java rename to src/main/java/zone/moddev/mc/basepower/util/ReversibleMap.java index d8b39b0..fce0f4c 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/util/ReversibleMap.java +++ b/src/main/java/zone/moddev/mc/basepower/util/ReversibleMap.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.util; +package zone.moddev.mc.basepower.util; public interface ReversibleMap extends java.util.Map { diff --git a/src/main/java/zone/moddev/mc/poweradvantage/util/package-info.java b/src/main/java/zone/moddev/mc/basepower/util/package-info.java similarity index 55% rename from src/main/java/zone/moddev/mc/poweradvantage/util/package-info.java rename to src/main/java/zone/moddev/mc/basepower/util/package-info.java index 8346da0..e2fb4a0 100644 --- a/src/main/java/zone/moddev/mc/poweradvantage/util/package-info.java +++ b/src/main/java/zone/moddev/mc/basepower/util/package-info.java @@ -3,4 +3,4 @@ This package contains helper classes.

*/ -package zone.moddev.mc.poweradvantage.util; \ No newline at end of file +package zone.moddev.mc.basepower.util; \ No newline at end of file diff --git a/src/main/java/zone/moddev/mc/poweradvantage/init/Entities.java b/src/main/java/zone/moddev/mc/poweradvantage/init/Entities.java deleted file mode 100644 index 0dc2901..0000000 --- a/src/main/java/zone/moddev/mc/poweradvantage/init/Entities.java +++ /dev/null @@ -1,40 +0,0 @@ -package zone.moddev.mc.poweradvantage.init; - -import net.minecraftforge.fml.common.registry.GameRegistry; -import zone.moddev.mc.poweradvantage.PowerAdvantage; -import zone.moddev.mc.poweradvantage.machines.conveyors.*; -import zone.moddev.mc.poweradvantage.machines.creative.InfiniteEnergyTileEntity; -import zone.moddev.mc.poweradvantage.machines.fluidmachines.*; -import zone.moddev.mc.poweradvantage.machines.fluidmachines.modsupport.TerminalFluidPipeTileEntity; - -public abstract class Entities { - - - private static boolean initDone = false; - - public static void init() { - if (initDone) return; - - Blocks.init(); - - GameRegistry.registerTileEntity(TerminalFluidPipeTileEntity.class, PowerAdvantage.MODID + ".tileentity." + "pipe_terminal"); - GameRegistry.registerTileEntity(FluidDrainTileEntity.class, PowerAdvantage.MODID + ".tileentity." + "fluid_drain"); - GameRegistry.registerTileEntity(FluidDischargeTileEntity.class, PowerAdvantage.MODID + ".tileentity." + "fluid_discharge"); - GameRegistry.registerTileEntity(StorageTankTileEntity.class, PowerAdvantage.MODID + ".tileentity." + "fluid_storage_tank"); - GameRegistry.registerTileEntity(MetalTankTileEntity.class, PowerAdvantage.MODID + ".tileentity." + "fluid_metal_tank"); - GameRegistry.registerTileEntity(StillTileEntity.class, PowerAdvantage.MODID + ".tileentity." + "still"); - GameRegistry.registerTileEntity(TileEntityConveyor.class, PowerAdvantage.MODID + "." + "item_conveyor"); - GameRegistry.registerTileEntity(TileEntityBlockFilter.class, PowerAdvantage.MODID + "." + "item_filter_block"); - GameRegistry.registerTileEntity(TileEntityFoodFilter.class, PowerAdvantage.MODID + "." + "item_filter_food"); - GameRegistry.registerTileEntity(TileEntityFuelFilter.class, PowerAdvantage.MODID + "." + "item_filter_fuel"); - GameRegistry.registerTileEntity(TileEntityInventoryFilter.class, PowerAdvantage.MODID + "." + "item_filter_inventory"); - GameRegistry.registerTileEntity(TileEntityOreFilter.class, PowerAdvantage.MODID + "." + "item_filter_ore"); - GameRegistry.registerTileEntity(TileEntityPlantFilter.class, PowerAdvantage.MODID + "." + "item_filter_plant"); - GameRegistry.registerTileEntity(TileEntitySmeltableFilter.class, PowerAdvantage.MODID + "." + "item_filter_smelt"); - GameRegistry.registerTileEntity(TileEntityOverflowFilter.class, PowerAdvantage.MODID + "." + "item_filter_overflow"); - - GameRegistry.registerTileEntity(InfiniteEnergyTileEntity.class, PowerAdvantage.MODID + "." + "infinite_energy_source"); - - initDone = true; - } -} \ No newline at end of file diff --git a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/package-info.java b/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/package-info.java deleted file mode 100644 index 7bde542..0000000 --- a/src/main/java/zone/moddev/mc/poweradvantage/machines/fluidmachines/package-info.java +++ /dev/null @@ -1,12 +0,0 @@ -/** -

-This package contains content that is added by PowerAdvantage implementing the PowerAdvantage API. -If you are writing an add-on mod, use the code in this package for reference, but you should not -depend on it's implementation details as future updates might change them. For a better way to get -PowerAdvantage content, look in the zone.moddev.mc.poweradvantage.init package. -

-Because these classes are not part of the API, they are not well documented. They were only meant -for the eyes of the mod author(s). -

-*/ -package zone.moddev.mc.poweradvantage.machines.fluidmachines; \ No newline at end of file diff --git a/src/main/resources/assets/basepower/blockstates/converter_rf_electricity.json b/src/main/resources/assets/basepower/blockstates/converter_rf_electricity.json new file mode 100644 index 0000000..c1651bf --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/converter_rf_electricity.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=east": { "model": "basepower:converter_rf_electricity", "y": 90 }, + "facing=north": { "model": "basepower:converter_rf_electricity" }, + "facing=south": { "model": "basepower:converter_rf_electricity", "y": 180 }, + "facing=west": { "model": "basepower:converter_rf_electricity", "y": 270 } + } +} diff --git a/src/main/resources/assets/basepower/blockstates/converter_rf_quantum.json b/src/main/resources/assets/basepower/blockstates/converter_rf_quantum.json new file mode 100644 index 0000000..ee86021 --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/converter_rf_quantum.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=east": { "model": "basepower:converter_rf_quantum", "y": 90 }, + "facing=north": { "model": "basepower:converter_rf_quantum" }, + "facing=south": { "model": "basepower:converter_rf_quantum", "y": 180 }, + "facing=west": { "model": "basepower:converter_rf_quantum", "y": 270 } + } +} diff --git a/src/main/resources/assets/basepower/blockstates/converter_rf_steam.json b/src/main/resources/assets/basepower/blockstates/converter_rf_steam.json new file mode 100644 index 0000000..d27391c --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/converter_rf_steam.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=east": { "model": "basepower:converter_rf_steam", "y": 90 }, + "facing=north": { "model": "basepower:converter_rf_steam" }, + "facing=south": { "model": "basepower:converter_rf_steam", "y": 180 }, + "facing=west": { "model": "basepower:converter_rf_steam", "y": 270 } + } +} diff --git a/src/main/resources/assets/basepower/blockstates/converter_tr_electricity.json b/src/main/resources/assets/basepower/blockstates/converter_tr_electricity.json new file mode 100644 index 0000000..499b875 --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/converter_tr_electricity.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=east": { "model": "basepower:converter_tr_electricity", "y": 90 }, + "facing=north": { "model": "basepower:converter_tr_electricity" }, + "facing=south": { "model": "basepower:converter_tr_electricity", "y": 180 }, + "facing=west": { "model": "basepower:converter_tr_electricity", "y": 270 } + } +} diff --git a/src/main/resources/assets/poweradvantage/blockstates/crude_oil.json b/src/main/resources/assets/basepower/blockstates/crude_oil.json similarity index 100% rename from src/main/resources/assets/poweradvantage/blockstates/crude_oil.json rename to src/main/resources/assets/basepower/blockstates/crude_oil.json diff --git a/src/main/resources/assets/basepower/blockstates/fluid_discharge.json b/src/main/resources/assets/basepower/blockstates/fluid_discharge.json new file mode 100644 index 0000000..e8b811c --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/fluid_discharge.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=east": { "model": "basepower:fluid_discharge", "y": 90 }, + "facing=north": { "model": "basepower:fluid_discharge" }, + "facing=south": { "model": "basepower:fluid_discharge", "y": 180 }, + "facing=west": { "model": "basepower:fluid_discharge", "y": 270 } + } +} diff --git a/src/main/resources/assets/basepower/blockstates/fluid_drain.json b/src/main/resources/assets/basepower/blockstates/fluid_drain.json new file mode 100644 index 0000000..7dc40c7 --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/fluid_drain.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=east": { "model": "basepower:fluid_drain", "y": 90 }, + "facing=north": { "model": "basepower:fluid_drain" }, + "facing=south": { "model": "basepower:fluid_drain", "y": 180 }, + "facing=west": { "model": "basepower:fluid_drain", "y": 270 } + } +} diff --git a/src/main/resources/assets/basepower/blockstates/fluid_metal_tank.json b/src/main/resources/assets/basepower/blockstates/fluid_metal_tank.json new file mode 100644 index 0000000..11898d2 --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/fluid_metal_tank.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=east": { "model": "basepower:fluid_metal_tank", "y": 90, "uvlock": true }, + "facing=north": { "model": "basepower:fluid_metal_tank", "uvlock": true }, + "facing=south": { "model": "basepower:fluid_metal_tank", "y": 180, "uvlock": true }, + "facing=west": { "model": "basepower:fluid_metal_tank", "y": 270, "uvlock": true } + } +} diff --git a/src/main/resources/assets/basepower/blockstates/fluid_pipe.json b/src/main/resources/assets/basepower/blockstates/fluid_pipe.json new file mode 100644 index 0000000..846b1b7 --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/fluid_pipe.json @@ -0,0 +1,70 @@ +{ + "__comment": "blockstate parameters MUST be in alphabetical order!", + "variants": { + "down=false,east=false,north=false,south=false,up=false,west=false": { "model": "basepower:fluid_pipe_ensw", "x": 0, "y": 0, "uvlock": false }, + "down=true,east=false,north=false,south=false,up=false,west=false": { "model": "basepower:fluid_pipe_n", "x": 90, "y": 0, "uvlock": false }, + "down=false,east=true,north=false,south=false,up=false,west=false": { "model": "basepower:fluid_pipe_n", "x": 0, "y": 90, "uvlock": false }, + "down=false,east=false,north=true,south=false,up=false,west=false": { "model": "basepower:fluid_pipe_n", "x": 0, "y": 0, "uvlock": false }, + "down=false,east=false,north=false,south=true,up=false,west=false": { "model": "basepower:fluid_pipe_n", "x": 0, "y": 180, "uvlock": false }, + "down=false,east=false,north=false,south=false,up=true,west=false": { "model": "basepower:fluid_pipe_n", "x": 270, "y": 0, "uvlock": false }, + "down=false,east=false,north=false,south=false,up=false,west=true": { "model": "basepower:fluid_pipe_n", "x": 0, "y": 270, "uvlock": false }, + "down=true,east=true,north=false,south=false,up=false,west=false": { "model": "basepower:fluid_pipe_nw", "x": 90, "y": 180, "uvlock": false }, + "down=true,east=false,north=true,south=false,up=false,west=false": { "model": "basepower:fluid_pipe_nw", "x": 90, "y": 90, "uvlock": false }, + "down=true,east=false,north=false,south=true,up=false,west=false": { "model": "basepower:fluid_pipe_nw", "x": 90, "y": 270, "uvlock": false }, + "down=true,east=false,north=false,south=false,up=true,west=false": { "model": "basepower:fluid_pipe_ns", "x": 90, "y": 0, "uvlock": false }, + "down=true,east=false,north=false,south=false,up=false,west=true": { "model": "basepower:fluid_pipe_nw", "x": 90, "y": 0, "uvlock": false }, + "down=false,east=true,north=true,south=false,up=false,west=false": { "model": "basepower:fluid_pipe_nw", "x": 0, "y": 90, "uvlock": false }, + "down=false,east=true,north=false,south=true,up=false,west=false": { "model": "basepower:fluid_pipe_nw", "x": 0, "y": 180, "uvlock": false }, + "down=false,east=true,north=false,south=false,up=true,west=false": { "model": "basepower:fluid_pipe_nw", "x": 270, "y": 180, "uvlock": false }, + "down=false,east=true,north=false,south=false,up=false,west=true": { "model": "basepower:fluid_pipe_ns", "x": 0, "y": 90, "uvlock": false }, + "down=false,east=false,north=true,south=true,up=false,west=false": { "model": "basepower:fluid_pipe_ns", "x": 0, "y": 0, "uvlock": false }, + "down=false,east=false,north=true,south=false,up=true,west=false": { "model": "basepower:fluid_pipe_nw", "x": 270, "y": 90, "uvlock": false }, + "down=false,east=false,north=true,south=false,up=false,west=true": { "model": "basepower:fluid_pipe_nw", "x": 0, "y": 0, "uvlock": false }, + "down=false,east=false,north=false,south=true,up=true,west=false": { "model": "basepower:fluid_pipe_nw", "x": 270, "y": 270, "uvlock": false }, + "down=false,east=false,north=false,south=true,up=false,west=true": { "model": "basepower:fluid_pipe_nw", "x": 0, "y": 270, "uvlock": false }, + "down=false,east=false,north=false,south=false,up=true,west=true": { "model": "basepower:fluid_pipe_nw", "x": 270, "y": 0, "uvlock": false }, + "down=true,east=true,north=true,south=false,up=false,west=false": { "model": "basepower:fluid_pipe_nuw", "x": 90, "y": 90, "uvlock": false }, + "down=true,east=true,north=false,south=true,up=false,west=false": { "model": "basepower:fluid_pipe_nuw", "x": 90, "y": 180, "uvlock": false }, + "down=true,east=true,north=false,south=false,up=true,west=false": { "model": "basepower:fluid_pipe_dnu", "x": 0, "y": 90, "uvlock": false }, + "down=true,east=true,north=false,south=false,up=false,west=true": { "model": "basepower:fluid_pipe_dnu", "x": 90, "y": 90, "uvlock": false }, + "down=true,east=false,north=true,south=true,up=false,west=false": { "model": "basepower:fluid_pipe_dnu", "x": 90, "y": 0, "uvlock": false }, + "down=true,east=false,north=true,south=false,up=true,west=false": { "model": "basepower:fluid_pipe_dnu", "x": 0, "y": 0, "uvlock": false }, + "down=true,east=false,north=true,south=false,up=false,west=true": { "model": "basepower:fluid_pipe_nuw", "x": 90, "y": 0, "uvlock": false }, + "down=true,east=false,north=false,south=true,up=true,west=false": { "model": "basepower:fluid_pipe_dnu", "x": 0, "y": 180, "uvlock": false }, + "down=true,east=false,north=false,south=true,up=false,west=true": { "model": "basepower:fluid_pipe_nuw", "x": 90, "y": 270, "uvlock": false }, + "down=true,east=false,north=false,south=false,up=true,west=true": { "model": "basepower:fluid_pipe_dnu", "x": 0, "y": 270, "uvlock": false }, + "down=false,east=true,north=true,south=true,up=false,west=false": { "model": "basepower:fluid_pipe_nsw", "x": 0, "y": 180, "uvlock": false }, + "down=false,east=true,north=true,south=false,up=true,west=false": { "model": "basepower:fluid_pipe_nuw", "x": 0, "y": 90, "uvlock": false }, + "down=false,east=true,north=true,south=false,up=false,west=true": { "model": "basepower:fluid_pipe_nsw", "x": 0, "y": 90, "uvlock": false }, + "down=false,east=true,north=false,south=true,up=true,west=false": { "model": "basepower:fluid_pipe_nuw", "x": 0, "y": 180, "uvlock": false }, + "down=false,east=true,north=false,south=true,up=false,west=true": { "model": "basepower:fluid_pipe_nsw", "x": 0, "y": 270, "uvlock": false }, + "down=false,east=true,north=false,south=false,up=true,west=true": { "model": "basepower:fluid_pipe_dnu", "x": 270, "y": 90, "uvlock": false }, + "down=false,east=false,north=true,south=true,up=true,west=false": { "model": "basepower:fluid_pipe_dnu", "x": 270, "y": 0, "uvlock": false }, + "down=false,east=false,north=true,south=true,up=false,west=true": { "model": "basepower:fluid_pipe_nsw", "x": 0, "y": 0, "uvlock": false }, + "down=false,east=false,north=true,south=false,up=true,west=true": { "model": "basepower:fluid_pipe_nuw", "x": 0, "y": 0, "uvlock": false }, + "down=false,east=false,north=false,south=true,up=true,west=true": { "model": "basepower:fluid_pipe_nuw", "x": 0, "y": 270, "uvlock": false }, + "down=true,east=true,north=true,south=true,up=false,west=false": { "model": "basepower:fluid_pipe_nsuw", "x": 180, "y": 180, "uvlock": false }, + "down=true,east=true,north=true,south=false,up=true,west=false": { "model": "basepower:fluid_pipe_nsuw", "x": 90, "y": 90, "uvlock": false }, + "down=true,east=true,north=true,south=false,up=false,west=true": { "model": "basepower:fluid_pipe_nsuw", "x": 180, "y": 90, "uvlock": false }, + "down=true,east=true,north=false,south=true,up=true,west=false": { "model": "basepower:fluid_pipe_nsuw", "x": 90, "y": 180, "uvlock": false }, + "down=true,east=true,north=false,south=true,up=false,west=true": { "model": "basepower:fluid_pipe_nsuw", "x": 180, "y": 270, "uvlock": false }, + "down=true,east=true,north=false,south=false,up=true,west=true": { "model": "basepower:fluid_pipe_ensw", "x": 90, "y": 0, "uvlock": false }, + "down=true,east=false,north=true,south=true,up=true,west=false": { "model": "basepower:fluid_pipe_ensw", "x": 90, "y": 90, "uvlock": false }, + "down=true,east=false,north=true,south=true,up=false,west=true": { "model": "basepower:fluid_pipe_nsuw", "x": 180, "y": 0, "uvlock": false }, + "down=true,east=false,north=true,south=false,up=true,west=true": { "model": "basepower:fluid_pipe_nsuw", "x": 90, "y": 0, "uvlock": false }, + "down=true,east=false,north=false,south=true,up=true,west=true": { "model": "basepower:fluid_pipe_nsuw", "x": 90, "y": 270, "uvlock": false }, + "down=false,east=true,north=true,south=true,up=true,west=false": { "model": "basepower:fluid_pipe_nsuw", "x": 0, "y": 180, "uvlock": false }, + "down=false,east=true,north=true,south=true,up=false,west=true": { "model": "basepower:fluid_pipe_ensw", "x": 0, "y": 0, "uvlock": false }, + "down=false,east=true,north=true,south=false,up=true,west=true": { "model": "basepower:fluid_pipe_nsuw", "x": 0, "y": 90, "uvlock": false }, + "down=false,east=true,north=false,south=true,up=true,west=true": { "model": "basepower:fluid_pipe_nsuw", "x": 0, "y": 270, "uvlock": false }, + "down=false,east=false,north=true,south=true,up=true,west=true": { "model": "basepower:fluid_pipe_nsuw", "x": 0, "y": 0, "uvlock": false }, + "down=true,east=true,north=true,south=true,up=true,west=false": { "model": "basepower:fluid_pipe_desuw", "x": 0, "y": 270, "uvlock": false }, + "down=true,east=true,north=true,south=true,up=false,west=true": { "model": "basepower:fluid_pipe_desuw", "x": 270, "y": 0, "uvlock": false }, + "down=true,east=true,north=true,south=false,up=true,west=true": { "model": "basepower:fluid_pipe_desuw", "x": 0, "y": 180, "uvlock": false }, + "down=true,east=true,north=false,south=true,up=true,west=true": { "model": "basepower:fluid_pipe_desuw", "x": 0, "y": 0, "uvlock": false }, + "down=true,east=false,north=true,south=true,up=true,west=true": { "model": "basepower:fluid_pipe_desuw", "x": 0, "y": 90, "uvlock": false }, + "down=false,east=true,north=true,south=true,up=true,west=true": { "model": "basepower:fluid_pipe_desuw", "x": 90, "y": 0, "uvlock": false }, + "down=true,east=true,north=true,south=true,up=true,west=true": { "model": "basepower:fluid_pipe_densuw", "x": 0, "y": 0, "uvlock": false } + + } +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/blockstates/fluid_pipe_terminal.json b/src/main/resources/assets/basepower/blockstates/fluid_pipe_terminal.json new file mode 100644 index 0000000..51f7d5d --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/fluid_pipe_terminal.json @@ -0,0 +1,70 @@ +{ + "__comment": "blockstate parameters MUST be in alphabetical order!", + "variants": { + "down=false,east=false,north=false,south=false,up=false,west=false": { "model": "basepower:fluid_pipe_0", "x": 0, "y": 0, "uvlock": false }, + "down=true,east=false,north=false,south=false,up=false,west=false": { "model": "basepower:fluid_pipe_n", "x": 90, "y": 0, "uvlock": false }, + "down=false,east=true,north=false,south=false,up=false,west=false": { "model": "basepower:fluid_pipe_n", "x": 0, "y": 90, "uvlock": false }, + "down=false,east=false,north=true,south=false,up=false,west=false": { "model": "basepower:fluid_pipe_n", "x": 0, "y": 0, "uvlock": false }, + "down=false,east=false,north=false,south=true,up=false,west=false": { "model": "basepower:fluid_pipe_n", "x": 0, "y": 180, "uvlock": false }, + "down=false,east=false,north=false,south=false,up=true,west=false": { "model": "basepower:fluid_pipe_n", "x": 270, "y": 0, "uvlock": false }, + "down=false,east=false,north=false,south=false,up=false,west=true": { "model": "basepower:fluid_pipe_n", "x": 0, "y": 270, "uvlock": false }, + "down=true,east=true,north=false,south=false,up=false,west=false": { "model": "basepower:fluid_pipe_nw", "x": 90, "y": 180, "uvlock": false }, + "down=true,east=false,north=true,south=false,up=false,west=false": { "model": "basepower:fluid_pipe_nw", "x": 90, "y": 90, "uvlock": false }, + "down=true,east=false,north=false,south=true,up=false,west=false": { "model": "basepower:fluid_pipe_nw", "x": 90, "y": 270, "uvlock": false }, + "down=true,east=false,north=false,south=false,up=true,west=false": { "model": "basepower:fluid_pipe_ns", "x": 90, "y": 0, "uvlock": false }, + "down=true,east=false,north=false,south=false,up=false,west=true": { "model": "basepower:fluid_pipe_nw", "x": 90, "y": 0, "uvlock": false }, + "down=false,east=true,north=true,south=false,up=false,west=false": { "model": "basepower:fluid_pipe_nw", "x": 0, "y": 90, "uvlock": false }, + "down=false,east=true,north=false,south=true,up=false,west=false": { "model": "basepower:fluid_pipe_nw", "x": 0, "y": 180, "uvlock": false }, + "down=false,east=true,north=false,south=false,up=true,west=false": { "model": "basepower:fluid_pipe_nw", "x": 270, "y": 180, "uvlock": false }, + "down=false,east=true,north=false,south=false,up=false,west=true": { "model": "basepower:fluid_pipe_ns", "x": 0, "y": 90, "uvlock": false }, + "down=false,east=false,north=true,south=true,up=false,west=false": { "model": "basepower:fluid_pipe_ns", "x": 0, "y": 0, "uvlock": false }, + "down=false,east=false,north=true,south=false,up=true,west=false": { "model": "basepower:fluid_pipe_nw", "x": 270, "y": 90, "uvlock": false }, + "down=false,east=false,north=true,south=false,up=false,west=true": { "model": "basepower:fluid_pipe_nw", "x": 0, "y": 0, "uvlock": false }, + "down=false,east=false,north=false,south=true,up=true,west=false": { "model": "basepower:fluid_pipe_nw", "x": 270, "y": 270, "uvlock": false }, + "down=false,east=false,north=false,south=true,up=false,west=true": { "model": "basepower:fluid_pipe_nw", "x": 0, "y": 270, "uvlock": false }, + "down=false,east=false,north=false,south=false,up=true,west=true": { "model": "basepower:fluid_pipe_nw", "x": 270, "y": 0, "uvlock": false }, + "down=true,east=true,north=true,south=false,up=false,west=false": { "model": "basepower:fluid_pipe_nuw", "x": 90, "y": 90, "uvlock": false }, + "down=true,east=true,north=false,south=true,up=false,west=false": { "model": "basepower:fluid_pipe_nuw", "x": 90, "y": 180, "uvlock": false }, + "down=true,east=true,north=false,south=false,up=true,west=false": { "model": "basepower:fluid_pipe_dnu", "x": 0, "y": 90, "uvlock": false }, + "down=true,east=true,north=false,south=false,up=false,west=true": { "model": "basepower:fluid_pipe_dnu", "x": 90, "y": 90, "uvlock": false }, + "down=true,east=false,north=true,south=true,up=false,west=false": { "model": "basepower:fluid_pipe_dnu", "x": 90, "y": 0, "uvlock": false }, + "down=true,east=false,north=true,south=false,up=true,west=false": { "model": "basepower:fluid_pipe_dnu", "x": 0, "y": 0, "uvlock": false }, + "down=true,east=false,north=true,south=false,up=false,west=true": { "model": "basepower:fluid_pipe_nuw", "x": 90, "y": 0, "uvlock": false }, + "down=true,east=false,north=false,south=true,up=true,west=false": { "model": "basepower:fluid_pipe_dnu", "x": 0, "y": 180, "uvlock": false }, + "down=true,east=false,north=false,south=true,up=false,west=true": { "model": "basepower:fluid_pipe_nuw", "x": 90, "y": 270, "uvlock": false }, + "down=true,east=false,north=false,south=false,up=true,west=true": { "model": "basepower:fluid_pipe_dnu", "x": 0, "y": 270, "uvlock": false }, + "down=false,east=true,north=true,south=true,up=false,west=false": { "model": "basepower:fluid_pipe_nsw", "x": 0, "y": 180, "uvlock": false }, + "down=false,east=true,north=true,south=false,up=true,west=false": { "model": "basepower:fluid_pipe_nuw", "x": 0, "y": 90, "uvlock": false }, + "down=false,east=true,north=true,south=false,up=false,west=true": { "model": "basepower:fluid_pipe_nsw", "x": 0, "y": 90, "uvlock": false }, + "down=false,east=true,north=false,south=true,up=true,west=false": { "model": "basepower:fluid_pipe_nuw", "x": 0, "y": 180, "uvlock": false }, + "down=false,east=true,north=false,south=true,up=false,west=true": { "model": "basepower:fluid_pipe_nsw", "x": 0, "y": 270, "uvlock": false }, + "down=false,east=true,north=false,south=false,up=true,west=true": { "model": "basepower:fluid_pipe_dnu", "x": 270, "y": 90, "uvlock": false }, + "down=false,east=false,north=true,south=true,up=true,west=false": { "model": "basepower:fluid_pipe_dnu", "x": 270, "y": 0, "uvlock": false }, + "down=false,east=false,north=true,south=true,up=false,west=true": { "model": "basepower:fluid_pipe_nsw", "x": 0, "y": 0, "uvlock": false }, + "down=false,east=false,north=true,south=false,up=true,west=true": { "model": "basepower:fluid_pipe_nuw", "x": 0, "y": 0, "uvlock": false }, + "down=false,east=false,north=false,south=true,up=true,west=true": { "model": "basepower:fluid_pipe_nuw", "x": 0, "y": 270, "uvlock": false }, + "down=true,east=true,north=true,south=true,up=false,west=false": { "model": "basepower:fluid_pipe_nsuw", "x": 180, "y": 180, "uvlock": false }, + "down=true,east=true,north=true,south=false,up=true,west=false": { "model": "basepower:fluid_pipe_nsuw", "x": 90, "y": 90, "uvlock": false }, + "down=true,east=true,north=true,south=false,up=false,west=true": { "model": "basepower:fluid_pipe_nsuw", "x": 180, "y": 90, "uvlock": false }, + "down=true,east=true,north=false,south=true,up=true,west=false": { "model": "basepower:fluid_pipe_nsuw", "x": 90, "y": 180, "uvlock": false }, + "down=true,east=true,north=false,south=true,up=false,west=true": { "model": "basepower:fluid_pipe_nsuw", "x": 180, "y": 270, "uvlock": false }, + "down=true,east=true,north=false,south=false,up=true,west=true": { "model": "basepower:fluid_pipe_ensw", "x": 90, "y": 0, "uvlock": false }, + "down=true,east=false,north=true,south=true,up=true,west=false": { "model": "basepower:fluid_pipe_ensw", "x": 90, "y": 90, "uvlock": false }, + "down=true,east=false,north=true,south=true,up=false,west=true": { "model": "basepower:fluid_pipe_nsuw", "x": 180, "y": 0, "uvlock": false }, + "down=true,east=false,north=true,south=false,up=true,west=true": { "model": "basepower:fluid_pipe_nsuw", "x": 90, "y": 0, "uvlock": false }, + "down=true,east=false,north=false,south=true,up=true,west=true": { "model": "basepower:fluid_pipe_nsuw", "x": 90, "y": 270, "uvlock": false }, + "down=false,east=true,north=true,south=true,up=true,west=false": { "model": "basepower:fluid_pipe_nsuw", "x": 0, "y": 180, "uvlock": false }, + "down=false,east=true,north=true,south=true,up=false,west=true": { "model": "basepower:fluid_pipe_ensw", "x": 0, "y": 0, "uvlock": false }, + "down=false,east=true,north=true,south=false,up=true,west=true": { "model": "basepower:fluid_pipe_nsuw", "x": 0, "y": 90, "uvlock": false }, + "down=false,east=true,north=false,south=true,up=true,west=true": { "model": "basepower:fluid_pipe_nsuw", "x": 0, "y": 270, "uvlock": false }, + "down=false,east=false,north=true,south=true,up=true,west=true": { "model": "basepower:fluid_pipe_nsuw", "x": 0, "y": 0, "uvlock": false }, + "down=true,east=true,north=true,south=true,up=true,west=false": { "model": "basepower:fluid_pipe_desuw", "x": 0, "y": 270, "uvlock": false }, + "down=true,east=true,north=true,south=true,up=false,west=true": { "model": "basepower:fluid_pipe_desuw", "x": 270, "y": 0, "uvlock": false }, + "down=true,east=true,north=true,south=false,up=true,west=true": { "model": "basepower:fluid_pipe_desuw", "x": 0, "y": 180, "uvlock": false }, + "down=true,east=true,north=false,south=true,up=true,west=true": { "model": "basepower:fluid_pipe_desuw", "x": 0, "y": 0, "uvlock": false }, + "down=true,east=false,north=true,south=true,up=true,west=true": { "model": "basepower:fluid_pipe_desuw", "x": 0, "y": 90, "uvlock": false }, + "down=false,east=true,north=true,south=true,up=true,west=true": { "model": "basepower:fluid_pipe_desuw", "x": 90, "y": 0, "uvlock": false }, + "down=true,east=true,north=true,south=true,up=true,west=true": { "model": "basepower:fluid_pipe_densuw", "x": 0, "y": 0, "uvlock": false } + + } +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/blockstates/fluid_storage_tank.json b/src/main/resources/assets/basepower/blockstates/fluid_storage_tank.json new file mode 100644 index 0000000..8de4840 --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/fluid_storage_tank.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=east": { "model": "basepower:fluid_storage_tank", "y": 90 }, + "facing=north": { "model": "basepower:fluid_storage_tank" }, + "facing=south": { "model": "basepower:fluid_storage_tank", "y": 180 }, + "facing=west": { "model": "basepower:fluid_storage_tank", "y": 270 } + } +} diff --git a/src/main/resources/assets/basepower/blockstates/fluid_switch.json b/src/main/resources/assets/basepower/blockstates/fluid_switch.json new file mode 100644 index 0000000..c716e08 --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/fluid_switch.json @@ -0,0 +1,6 @@ +{ + "variants": { + "active=false": { "model": "basepower:fluid_switch_off"}, + "active=true": { "model": "basepower:fluid_switch_on"} + } +} diff --git a/src/main/resources/assets/basepower/blockstates/infinite_electricity.json b/src/main/resources/assets/basepower/blockstates/infinite_electricity.json new file mode 100644 index 0000000..f2d91b3 --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/infinite_electricity.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=east": { "model": "basepower:infinite_electricity", "y": 90 }, + "facing=north": { "model": "basepower:infinite_electricity" }, + "facing=south": { "model": "basepower:infinite_electricity", "y": 180 }, + "facing=west": { "model": "basepower:infinite_electricity", "y": 270 } + } +} diff --git a/src/main/resources/assets/basepower/blockstates/infinite_quantum.json b/src/main/resources/assets/basepower/blockstates/infinite_quantum.json new file mode 100644 index 0000000..4c349cc --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/infinite_quantum.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=east": { "model": "basepower:infinite_quantum", "y": 90 }, + "facing=north": { "model": "basepower:infinite_quantum" }, + "facing=south": { "model": "basepower:infinite_quantum", "y": 180 }, + "facing=west": { "model": "basepower:infinite_quantum", "y": 270 } + } +} diff --git a/src/main/resources/assets/basepower/blockstates/infinite_steam.json b/src/main/resources/assets/basepower/blockstates/infinite_steam.json new file mode 100644 index 0000000..2a5080a --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/infinite_steam.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=east": { "model": "basepower:infinite_steam", "y": 90 }, + "facing=north": { "model": "basepower:infinite_steam" }, + "facing=south": { "model": "basepower:infinite_steam", "y": 180 }, + "facing=west": { "model": "basepower:infinite_steam", "y": 270 } + } +} diff --git a/src/main/resources/assets/basepower/blockstates/item_conveyor.json b/src/main/resources/assets/basepower/blockstates/item_conveyor.json new file mode 100644 index 0000000..f192d11 --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/item_conveyor.json @@ -0,0 +1,10 @@ +{ + "variants": { + "facing=down": { "model": "basepower:item_conveyor", "x": 90 }, + "facing=up": { "model": "basepower:item_conveyor", "x": 270 }, + "facing=north": { "model": "basepower:item_conveyor" }, + "facing=south": { "model": "basepower:item_conveyor", "y": 180 }, + "facing=west": { "model": "basepower:item_conveyor", "y": 270 }, + "facing=east": { "model": "basepower:item_conveyor", "y": 90 } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/blockstates/item_filter_block.json b/src/main/resources/assets/basepower/blockstates/item_filter_block.json new file mode 100644 index 0000000..286caf4 --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/item_filter_block.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "basepower:item_filter_block" }, + "facing=south": { "model": "basepower:item_filter_block", "y": 180 }, + "facing=west": { "model": "basepower:item_filter_block", "y": 270 }, + "facing=east": { "model": "basepower:item_filter_block", "y": 90 } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/blockstates/item_filter_food.json b/src/main/resources/assets/basepower/blockstates/item_filter_food.json new file mode 100644 index 0000000..8b6be87 --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/item_filter_food.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "basepower:item_filter_food" }, + "facing=south": { "model": "basepower:item_filter_food", "y": 180 }, + "facing=west": { "model": "basepower:item_filter_food", "y": 270 }, + "facing=east": { "model": "basepower:item_filter_food", "y": 90 } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/blockstates/item_filter_fuel.json b/src/main/resources/assets/basepower/blockstates/item_filter_fuel.json new file mode 100644 index 0000000..c73e9e6 --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/item_filter_fuel.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "basepower:item_filter_fuel" }, + "facing=south": { "model": "basepower:item_filter_fuel", "y": 180 }, + "facing=west": { "model": "basepower:item_filter_fuel", "y": 270 }, + "facing=east": { "model": "basepower:item_filter_fuel", "y": 90 } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/blockstates/item_filter_inventory.json b/src/main/resources/assets/basepower/blockstates/item_filter_inventory.json new file mode 100644 index 0000000..d446b80 --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/item_filter_inventory.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "basepower:item_filter_inventory" }, + "facing=south": { "model": "basepower:item_filter_inventory", "y": 180 }, + "facing=west": { "model": "basepower:item_filter_inventory", "y": 270 }, + "facing=east": { "model": "basepower:item_filter_inventory", "y": 90 } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/blockstates/item_filter_ore.json b/src/main/resources/assets/basepower/blockstates/item_filter_ore.json new file mode 100644 index 0000000..48007b4 --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/item_filter_ore.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "basepower:item_filter_ore" }, + "facing=south": { "model": "basepower:item_filter_ore", "y": 180 }, + "facing=west": { "model": "basepower:item_filter_ore", "y": 270 }, + "facing=east": { "model": "basepower:item_filter_ore", "y": 90 } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/blockstates/item_filter_overflow.json b/src/main/resources/assets/basepower/blockstates/item_filter_overflow.json new file mode 100644 index 0000000..3e7aaa3 --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/item_filter_overflow.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "basepower:item_filter_overflow" }, + "facing=south": { "model": "basepower:item_filter_overflow", "y": 180 }, + "facing=west": { "model": "basepower:item_filter_overflow", "y": 270 }, + "facing=east": { "model": "basepower:item_filter_overflow", "y": 90 } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/blockstates/item_filter_plant.json b/src/main/resources/assets/basepower/blockstates/item_filter_plant.json new file mode 100644 index 0000000..b1a03d5 --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/item_filter_plant.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "basepower:item_filter_plant" }, + "facing=south": { "model": "basepower:item_filter_plant", "y": 180 }, + "facing=west": { "model": "basepower:item_filter_plant", "y": 270 }, + "facing=east": { "model": "basepower:item_filter_plant", "y": 90 } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/blockstates/item_filter_smelt.json b/src/main/resources/assets/basepower/blockstates/item_filter_smelt.json new file mode 100644 index 0000000..9a740fb --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/item_filter_smelt.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "basepower:item_filter_smelt" }, + "facing=south": { "model": "basepower:item_filter_smelt", "y": 180 }, + "facing=west": { "model": "basepower:item_filter_smelt", "y": 270 }, + "facing=east": { "model": "basepower:item_filter_smelt", "y": 90 } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/blockstates/refined_oil.json b/src/main/resources/assets/basepower/blockstates/refined_oil.json similarity index 100% rename from src/main/resources/assets/poweradvantage/blockstates/refined_oil.json rename to src/main/resources/assets/basepower/blockstates/refined_oil.json diff --git a/src/main/resources/assets/basepower/blockstates/steel_frame.json b/src/main/resources/assets/basepower/blockstates/steel_frame.json new file mode 100644 index 0000000..7b402a8 --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/steel_frame.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "basepower:steel_frame" } + } +} diff --git a/src/main/resources/assets/basepower/blockstates/still.json b/src/main/resources/assets/basepower/blockstates/still.json new file mode 100644 index 0000000..4856ead --- /dev/null +++ b/src/main/resources/assets/basepower/blockstates/still.json @@ -0,0 +1,12 @@ +{ + "variants": { + "active=false,facing=east": { "model": "basepower:still_off", "y": 90 }, + "active=false,facing=north": { "model": "basepower:still_off"}, + "active=false,facing=south": { "model": "basepower:still_off", "y": 180}, + "active=false,facing=west": { "model": "basepower:still_off", "y": 270}, + "active=true,facing=east": { "model": "basepower:still_on", "y": 90 }, + "active=true,facing=north": { "model": "basepower:still_on"}, + "active=true,facing=south": { "model": "basepower:still_on", "y": 180}, + "active=true,facing=west": { "model": "basepower:still_on", "y": 270} + } +} diff --git a/src/main/resources/assets/basepower/lang/de_DE.lang b/src/main/resources/assets/basepower/lang/de_DE.lang new file mode 100644 index 0000000..beab6a8 --- /dev/null +++ b/src/main/resources/assets/basepower/lang/de_DE.lang @@ -0,0 +1,55 @@ +language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) +nei.basepower.recipehandler.shapelessfurnace.name=Große Ofen (formlos) +nei.basepower.recipehandler.shapedfurnace.name=Große Ofen (geformt) + +tooltip.basepower.empty=Leer +tooltip.basepower.buckets_of=%x Eimer %y + +itemGroup.basepower=Leistungsvorteil + +tile.basepower.fluid_drain.name=Ablauf +tile.basepower.fluid_discharge.name=Austragsrost +tile.basepower.fluid_storage_tank.name=Lagertank +item.basepower.fluid_storage_tank_item.name=Speicher +tile.basepower.fluid_pipe.name=Rohr + +tile.basepower.item_conveyor.name=Förderer +tile.basepower.item_filter_block.name=Block Auswahl Förder +tile.basepower.item_filter_food.name=Lebensmittel Auswahl Förder +tile.basepower.item_filter_fuel.name=Brennstoff Auswahl Förder +tile.basepower.item_filter_inventory.name=Anpassbare Auswahl Förder +tile.basepower.item_filter_ore.name=Erz Auswahl Förder +tile.basepower.item_filter_plant.name=Pflanze Auswahl Förder +tile.basepower.item_filter_smelt.name=Kochbare Auswahl Förder +tile.basepower.item_filter_overflow.name=Überlauf Auswahl Förder +tile.basepower.steel_frame.name=Stahlrahmen + + +item.basepower.starch.name=Kartoffelstärke +item.basepower.bioplastic_ingot.name=Biokunststoff-Barren +item.basepower.sprocket.name=Kettenrad + + +tile.basepower.fluid_metal_tank.name=Metall-Lagertank +item.basepower.rotator_tool.name=Drehwerkzeug + +tile.basepower.infinite_steam.name=Unendlichen Dampfkraft +tile.basepower.infinite_electricity.name=Unendliche Elektrische Leistung +tile.basepower.infinite_quantum.name=Unendliche Quanten Leistung + +tile.basepower.crude_oil.name=Rohöl +fluid.basepower.crude_oil=Rohöl +item.bucket.crude_oil=Eimer Rohöl + + +tile.basepower.still.name=Brennerei + +tile.basepower.refined_oil.name=Raffiniertes Öl +fluid.basepower.refined_oil=Raffiniertes Öl +item.bucket.refined_oil=Eimer für Raffiniertes Öl +tile.basepower.fluid_switch.name=Ventil + +tile.basepower.converter_rf_steam.name=Dampf-RF Leistungstransformator +tile.basepower.converter_rf_electricity.name=Elektrizität-RF Leistungstransformator +tile.basepower.converter_rf_quantum.name=Quant-RF Leistungstransformator +tile.basepower.converter_tr_electricity.name=Elektrizität-EU Leistungstransformator diff --git a/src/main/resources/assets/basepower/lang/en_AU.lang b/src/main/resources/assets/basepower/lang/en_AU.lang new file mode 100644 index 0000000..650bf54 --- /dev/null +++ b/src/main/resources/assets/basepower/lang/en_AU.lang @@ -0,0 +1,54 @@ +language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) +nei.basepower.recipehandler.shapelessfurnace.name=Large Furnace (Shapeless) +nei.basepower.recipehandler.shapedfurnace.name=Large Furnace (Shaped) + +tooltip.basepower.empty=Empty +tooltip.basepower.buckets_of=%x buckets of %y + +itemGroup.basepower=basePower + +tile.basepower.fluid_drain.name=Drain +tile.basepower.fluid_discharge.name=Discharge Grate +tile.basepower.fluid_storage_tank.name=Portable Fluid Tank +item.basepower.fluid_storage_tank_item.name=Storage Tank +tile.basepower.fluid_pipe.name=Pipe + +tile.basepower.item_conveyor.name=Conveyor +tile.basepower.item_filter_block.name=Block Filter Conveyor +tile.basepower.item_filter_food.name=Food Filter Conveyor +tile.basepower.item_filter_fuel.name=Fuel Filter Conveyor +tile.basepower.item_filter_inventory.name=Filter Conveyor +tile.basepower.item_filter_ore.name=Ore Filter Conveyor +tile.basepower.item_filter_plant.name=Plantable Filter Conveyor +tile.basepower.item_filter_smelt.name=Furnace Filter Conveyor +tile.basepower.item_filter_overflow.name=Overflow Filter Conveyor +tile.basepower.steel_frame.name=Steel Frame + + +item.basepower.starch.name=Starch +item.basepower.bioplastic_ingot.name=Bioplastic Ingot +item.basepower.sprocket.name=Sprocket + +tile.basepower.fluid_metal_tank.name=Metal Fluid Tank +item.basepower.rotator_tool.name=Rotation Wrench + +tile.basepower.infinite_steam.name=Unlimited Steam Power +tile.basepower.infinite_electricity.name=Unlimited Electrical Power +tile.basepower.infinite_quantum.name=Unlimited Quantum Power + +tile.basepower.crude_oil.name=Crude Oil +fluid.basepower.crude_oil=Crude Oil +item.bucket.crude_oil=Bucket of Crude Oil + + +tile.basepower.still.name=Distillation Furnace + +tile.basepower.refined_oil.name=Refined Oil +fluid.basepower.refined_oil=Refined Oil +item.bucket.refined_oil=Bucket of Refined Oil +tile.basepower.fluid_switch.name=Fluid Switch Valve + +tile.basepower.converter_rf_steam.name=Steam-RF Transformer +tile.basepower.converter_rf_electricity.name=Electricity-RF Transformer +tile.basepower.converter_rf_quantum.name=Quantum-RF Transformer +tile.basepower.converter_tr_electricity.name=Electricity-EU Transformer diff --git a/src/main/resources/assets/basepower/lang/en_CA.lang b/src/main/resources/assets/basepower/lang/en_CA.lang new file mode 100644 index 0000000..650bf54 --- /dev/null +++ b/src/main/resources/assets/basepower/lang/en_CA.lang @@ -0,0 +1,54 @@ +language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) +nei.basepower.recipehandler.shapelessfurnace.name=Large Furnace (Shapeless) +nei.basepower.recipehandler.shapedfurnace.name=Large Furnace (Shaped) + +tooltip.basepower.empty=Empty +tooltip.basepower.buckets_of=%x buckets of %y + +itemGroup.basepower=basePower + +tile.basepower.fluid_drain.name=Drain +tile.basepower.fluid_discharge.name=Discharge Grate +tile.basepower.fluid_storage_tank.name=Portable Fluid Tank +item.basepower.fluid_storage_tank_item.name=Storage Tank +tile.basepower.fluid_pipe.name=Pipe + +tile.basepower.item_conveyor.name=Conveyor +tile.basepower.item_filter_block.name=Block Filter Conveyor +tile.basepower.item_filter_food.name=Food Filter Conveyor +tile.basepower.item_filter_fuel.name=Fuel Filter Conveyor +tile.basepower.item_filter_inventory.name=Filter Conveyor +tile.basepower.item_filter_ore.name=Ore Filter Conveyor +tile.basepower.item_filter_plant.name=Plantable Filter Conveyor +tile.basepower.item_filter_smelt.name=Furnace Filter Conveyor +tile.basepower.item_filter_overflow.name=Overflow Filter Conveyor +tile.basepower.steel_frame.name=Steel Frame + + +item.basepower.starch.name=Starch +item.basepower.bioplastic_ingot.name=Bioplastic Ingot +item.basepower.sprocket.name=Sprocket + +tile.basepower.fluid_metal_tank.name=Metal Fluid Tank +item.basepower.rotator_tool.name=Rotation Wrench + +tile.basepower.infinite_steam.name=Unlimited Steam Power +tile.basepower.infinite_electricity.name=Unlimited Electrical Power +tile.basepower.infinite_quantum.name=Unlimited Quantum Power + +tile.basepower.crude_oil.name=Crude Oil +fluid.basepower.crude_oil=Crude Oil +item.bucket.crude_oil=Bucket of Crude Oil + + +tile.basepower.still.name=Distillation Furnace + +tile.basepower.refined_oil.name=Refined Oil +fluid.basepower.refined_oil=Refined Oil +item.bucket.refined_oil=Bucket of Refined Oil +tile.basepower.fluid_switch.name=Fluid Switch Valve + +tile.basepower.converter_rf_steam.name=Steam-RF Transformer +tile.basepower.converter_rf_electricity.name=Electricity-RF Transformer +tile.basepower.converter_rf_quantum.name=Quantum-RF Transformer +tile.basepower.converter_tr_electricity.name=Electricity-EU Transformer diff --git a/src/main/resources/assets/basepower/lang/en_EN.lang b/src/main/resources/assets/basepower/lang/en_EN.lang new file mode 100644 index 0000000..650bf54 --- /dev/null +++ b/src/main/resources/assets/basepower/lang/en_EN.lang @@ -0,0 +1,54 @@ +language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) +nei.basepower.recipehandler.shapelessfurnace.name=Large Furnace (Shapeless) +nei.basepower.recipehandler.shapedfurnace.name=Large Furnace (Shaped) + +tooltip.basepower.empty=Empty +tooltip.basepower.buckets_of=%x buckets of %y + +itemGroup.basepower=basePower + +tile.basepower.fluid_drain.name=Drain +tile.basepower.fluid_discharge.name=Discharge Grate +tile.basepower.fluid_storage_tank.name=Portable Fluid Tank +item.basepower.fluid_storage_tank_item.name=Storage Tank +tile.basepower.fluid_pipe.name=Pipe + +tile.basepower.item_conveyor.name=Conveyor +tile.basepower.item_filter_block.name=Block Filter Conveyor +tile.basepower.item_filter_food.name=Food Filter Conveyor +tile.basepower.item_filter_fuel.name=Fuel Filter Conveyor +tile.basepower.item_filter_inventory.name=Filter Conveyor +tile.basepower.item_filter_ore.name=Ore Filter Conveyor +tile.basepower.item_filter_plant.name=Plantable Filter Conveyor +tile.basepower.item_filter_smelt.name=Furnace Filter Conveyor +tile.basepower.item_filter_overflow.name=Overflow Filter Conveyor +tile.basepower.steel_frame.name=Steel Frame + + +item.basepower.starch.name=Starch +item.basepower.bioplastic_ingot.name=Bioplastic Ingot +item.basepower.sprocket.name=Sprocket + +tile.basepower.fluid_metal_tank.name=Metal Fluid Tank +item.basepower.rotator_tool.name=Rotation Wrench + +tile.basepower.infinite_steam.name=Unlimited Steam Power +tile.basepower.infinite_electricity.name=Unlimited Electrical Power +tile.basepower.infinite_quantum.name=Unlimited Quantum Power + +tile.basepower.crude_oil.name=Crude Oil +fluid.basepower.crude_oil=Crude Oil +item.bucket.crude_oil=Bucket of Crude Oil + + +tile.basepower.still.name=Distillation Furnace + +tile.basepower.refined_oil.name=Refined Oil +fluid.basepower.refined_oil=Refined Oil +item.bucket.refined_oil=Bucket of Refined Oil +tile.basepower.fluid_switch.name=Fluid Switch Valve + +tile.basepower.converter_rf_steam.name=Steam-RF Transformer +tile.basepower.converter_rf_electricity.name=Electricity-RF Transformer +tile.basepower.converter_rf_quantum.name=Quantum-RF Transformer +tile.basepower.converter_tr_electricity.name=Electricity-EU Transformer diff --git a/src/main/resources/assets/basepower/lang/en_GB.lang b/src/main/resources/assets/basepower/lang/en_GB.lang new file mode 100644 index 0000000..2490aec --- /dev/null +++ b/src/main/resources/assets/basepower/lang/en_GB.lang @@ -0,0 +1,53 @@ +language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) +nei.basepower.recipehandler.shapelessfurnace.name=Large Furnace (Shapeless) +nei.basepower.recipehandler.shapedfurnace.name=Large Furnace (Shaped) + +tooltip.basepower.empty=Empty +tooltip.basepower.buckets_of=%x buckets of %y + +itemGroup.basepower=basePower + +tile.basepower.fluid_drain.name=Drain +tile.basepower.fluid_discharge.name=Discharge Grate +tile.basepower.fluid_storage_tank.name=Portable Fluid Tank +item.basepower.fluid_storage_tank_item.name=Storage Tank +tile.basepower.fluid_pipe.name=Pipe + +tile.basepower.item_conveyor.name=Conveyor +tile.basepower.item_filter_block.name=Block Filter Conveyor +tile.basepower.item_filter_food.name=Food Filter Conveyor +tile.basepower.item_filter_fuel.name=Fuel Filter Conveyor +tile.basepower.item_filter_inventory.name=Filter Conveyor +tile.basepower.item_filter_ore.name=Ore Filter Conveyor +tile.basepower.item_filter_plant.name=Plantable Filter Conveyor +tile.basepower.item_filter_smelt.name=Furnace Filter Conveyor +tile.basepower.item_filter_overflow.name=Overflow Filter Conveyor +tile.basepower.steel_frame.name=Steel Frame + + +item.basepower.starch.name=Starch +item.basepower.bioplastic_ingot.name=Bioplastic Ingot +item.basepower.sprocket.name=Sprocket + +tile.basepower.fluid_metal_tank.name=Metal Fluid Tank +item.basepower.rotator_tool.name=Rotation Wrench + +tile.basepower.infinite_steam.name=Unlimited Steam Power +tile.basepower.infinite_electricity.name=Unlimited Electrical Power +tile.basepower.infinite_quantum.name=Unlimited Quantum Power + +tile.basepower.crude_oil.name=Crude Oil +fluid.basepower.crude_oil=Crude Oil +item.bucket.crude_oil=Bucket of Crude Oil + +tile.basepower.still.name=Distillation Furnace + +tile.basepower.refined_oil.name=Refined Oil +fluid.basepower.refined_oil=Refined Oil +item.bucket.refined_oil=Bucket of Refined Oil +tile.basepower.fluid_switch.name=Fluid Switch Valve + +tile.basepower.converter_rf_steam.name=Steam-RF Transformer +tile.basepower.converter_rf_electricity.name=Electricity-RF Transformer +tile.basepower.converter_rf_quantum.name=Quantum-RF Transformer +tile.basepower.converter_tr_electricity.name=Electricity-EU Transformer diff --git a/src/main/resources/assets/basepower/lang/en_PT.lang b/src/main/resources/assets/basepower/lang/en_PT.lang new file mode 100644 index 0000000..8b463e8 --- /dev/null +++ b/src/main/resources/assets/basepower/lang/en_PT.lang @@ -0,0 +1,53 @@ +language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) +nei.basepower.recipehandler.shapelessfurnace.name=Large Furnace (Shapeless) +nei.basepower.recipehandler.shapedfurnace.name=Large Furnace (Shaped) + +tooltip.basepower.empty=Empty +tooltip.basepower.buckets_of=%x buckets of %y + +itemGroup.basepower=basePower + +tile.basepower.fluid_drain.name=Drain +tile.basepower.fluid_discharge.name=Discharge Grate +tile.basepower.fluid_storage_tank.name=Portable Fluid Tank +item.basepower.fluid_storage_tank_item.name=Storage Tank +tile.basepower.fluid_pipe.name=Pipe + +tile.basepower.item_conveyor.name=Conveyor +tile.basepower.item_filter_block.name=Block Filter Conveyor +tile.basepower.item_filter_food.name=Food Filter Conveyor +tile.basepower.item_filter_fuel.name=Fuel Filter Conveyor +tile.basepower.item_filter_inventory.name=Filter Conveyor +tile.basepower.item_filter_ore.name=Ore Filter Conveyor +tile.basepower.item_filter_plant.name=Plantable Filter Conveyor +tile.basepower.item_filter_smelt.name=Furnace Filter Conveyor +tile.basepower.item_filter_overflow.name=Overflow Filter Conveyor +tile.basepower.steel_frame.name=Steel Frame + + +item.basepower.starch.name=Starch +item.basepower.bioplastic_ingot.name=Bioplastic Ingot +item.basepower.sprocket.name=Sprocket + +tile.basepower.fluid_metal_tank.name=Metal Fluid Tank +item.basepower.rotator_tool.name=Rotation Wrench + +tile.basepower.infinite_steam.name=Unlimited Steam Power +tile.basepower.infinite_electricity.name=Unlimited Electrical Power +tile.basepower.infinite_quantum.name=Unlimited Quantum Power + +tile.basepower.crude_oil.name=Black Gold +fluid.basepower.crude_oil=Black Gold +item.bucket.crude_oil=Bucket o' Black Gold + +tile.basepower.still.name='Stillery + +tile.basepower.refined_oil.name=Lamp Oil +fluid.basepower.refined_oil=Lamp Oil +item.bucket.refined_oil=Bucket o' Lamp Oil +tile.basepower.fluid_switch.name=Big Red Valve + +tile.basepower.converter_rf_steam.name=Steam-RF Transformer +tile.basepower.converter_rf_electricity.name=Electricity-RF Transformer +tile.basepower.converter_rf_quantum.name=Quantum-RF Transformer +tile.basepower.converter_tr_electricity.name=Electricity-EU Transformer diff --git a/src/main/resources/assets/basepower/lang/en_US.lang b/src/main/resources/assets/basepower/lang/en_US.lang new file mode 100644 index 0000000..453959e --- /dev/null +++ b/src/main/resources/assets/basepower/lang/en_US.lang @@ -0,0 +1,52 @@ +language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) +nei.basepower.recipehandler.shapelessfurnace.name=Large Furnace (Shapeless) +nei.basepower.recipehandler.shapedfurnace.name=Large Furnace (Shaped) + +tooltip.basepower.empty=Empty +tooltip.basepower.buckets_of=%x buckets of %y + +itemGroup.basepower=basePower + +tile.basepower.fluid_drain.name=Drain +tile.basepower.fluid_discharge.name=Discharge Grate +tile.basepower.fluid_storage_tank.name=Portable Fluid Tank +tile.basepower.fluid_pipe.name=Pipe + +tile.basepower.item_conveyor.name=Conveyor +tile.basepower.item_filter_block.name=Block Filter Conveyor +tile.basepower.item_filter_food.name=Food Filter Conveyor +tile.basepower.item_filter_fuel.name=Fuel Filter Conveyor +tile.basepower.item_filter_inventory.name=Filter Conveyor +tile.basepower.item_filter_ore.name=Ore Filter Conveyor +tile.basepower.item_filter_plant.name=Plantable Filter Conveyor +tile.basepower.item_filter_smelt.name=Furnace Filter Conveyor +tile.basepower.item_filter_overflow.name=Overflow Filter Conveyor +tile.basepower.steel_frame.name=Steel Frame + + +item.basepower.starch.name=Starch +item.basepower.bioplastic_ingot.name=Bioplastic Ingot +item.basepower.sprocket.name=Sprocket + + +tile.basepower.fluid_metal_tank.name=Metal Fluid Tank +item.basepower.rotator_tool.name=Rotation Wrench + +tile.basepower.infinite_steam.name=Unlimited Steam Power +tile.basepower.infinite_electricity.name=Unlimited Electrical Power +tile.basepower.infinite_quantum.name=Unlimited Quantum Power + +tile.basepower.crude_oil.name=Crude Oil +fluid.basepower.crude_oil=Crude Oil +item.bucket.crude_oil=Bucket of Crude Oil + +tile.basepower.still.name=Distillation Furnace +tile.basepower.refined_oil.name=Refined Oil +fluid.basepower.refined_oil=Refined Oil +item.bucket.refined_oil=Bucket of Refined Oil +tile.basepower.fluid_switch.name=Fluid Switch Valve + +tile.basepower.converter_rf_steam.name=Steam-RF Transformer +tile.basepower.converter_rf_electricity.name=Electricity-RF Transformer +tile.basepower.converter_rf_quantum.name=Quantum-RF Transformer +tile.basepower.converter_tr_electricity.name=Electricity-EU Transformer diff --git a/src/main/resources/assets/basepower/lang/es_ES.lang b/src/main/resources/assets/basepower/lang/es_ES.lang new file mode 100644 index 0000000..673795a --- /dev/null +++ b/src/main/resources/assets/basepower/lang/es_ES.lang @@ -0,0 +1,56 @@ +language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) +nei.basepower.recipehandler.shapelessfurnace.name=Gran Horno (no forma) +nei.basepower.recipehandler.shapedfurnace.name=Gran Horno (en forma) + +tooltip.basepower.empty=Vacío +tooltip.basepower.buckets_of =%x cubos de %y + +itemGroup.basepower=Ventaja de Energía + +tile.basepower.fluid_drain.name=Drenaje +tile.basepower.fluid_discharge.name=Descarga Grate +tile.basepower.fluid_storage_tank.name=Tanque de almacenamiento +item.basepower.fluid_storage_tank_item.name=Tanque de almacenamiento +tile.basepower.fluid_pipe.name=Tubo + +tile.basepower.item_conveyor.name=Transportadores +tile.basepower.item_filter_block.name=Bloquear Filtro Transportadores +tile.basepower.item_filter_food.name=Filtro Alimentos Transportadores +tile.basepower.item_filter_fuel.name=Filtro de combustible Transportadores +tile.basepower.item_filter_inventory.name=Filtro Transportadores +tile.basepower.item_filter_ore.name=Ore Transportadores Filtro +tile.basepower.item_filter_plant.name=Plantable Transportadores Filtro +tile.basepower.item_filter_smelt.name=Horno Filtro Transportadores +tile.basepower.item_filter_overflow.name=Desbordamiento Filtro Transportadores +tile.basepower.steel_frame.name=Marco de Acero + + +item.basepower.starch.name=Almidón +item.basepower.bioplastic_ingot.name=Bioplástico Lingote +item.basepower.sprocket.name=Piñón + + +tile.basepower.fluid_metal_tank.name=Tanque de Almacenamiento de Acero +item.basepower.rotator_tool.name=Herramienta de Rotación + +tile.basepower.infinite_steam.name=La Energía de Vapor Infinito +tile.basepower.infinite_electricity.name=Energía Eléctrica Infinito +tile.basepower.infinite_quantum.name=Cuántica Infinito + +tile.basepower.crude_oil.name=Petróleo Crudo +fluid.basepower.crude_oil=Petróleo Crudo +item.bucket.crude_oil.name=Cubo de Crudo + + +tile.basepower.still.name=Destilería + +tile.basepower.refined_oil.name=Refinado de Petróleo +fluid.basepower.refined_oil=Refinado de Petróleo +item.bucket.refined_oil.name=Cubo de Refinado de Petróleo +tile.basepower.fluid_switch.name=Válvula + + +tile.basepower.converter_rf_steam.name=Vapor-RF Transformador +tile.basepower.converter_rf_electricity.name=Electricidad-RF Transformador +tile.basepower.converter_rf_quantum.name=Cuántico-RF Transformador +tile.basepower.converter_tr_electricity.name=Electricidad-EU Transformador diff --git a/src/main/resources/assets/basepower/lang/es_MX.lang b/src/main/resources/assets/basepower/lang/es_MX.lang new file mode 100644 index 0000000..2a0ea30 --- /dev/null +++ b/src/main/resources/assets/basepower/lang/es_MX.lang @@ -0,0 +1,56 @@ +language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) +nei.basepower.recipehandler.shapelessfurnace.name=Gran Horno (no forma) +nei.basepower.recipehandler.shapedfurnace.name=Gran Horno (en forma) + +tooltip.basepower.empty=Vacío +tooltip.basepower.buckets_of=%x cubos de %y + +itemGroup.basepower=Ventaja de Energía + +tile.basepower.fluid_drain.name=Drenaje +tile.basepower.fluid_discharge.name=Descarga Grate +tile.basepower.fluid_storage_tank.name=Tanque de almacenamiento +item.basepower.fluid_storage_tank_item.name=Tanque de almacenamiento +tile.basepower.fluid_pipe.name=Tubo + +tile.basepower.item_conveyor.name=Transportadores +tile.basepower.item_filter_block.name=Bloquear Filtro Transportadores +tile.basepower.item_filter_food.name=Filtro Alimentos Transportadores +tile.basepower.item_filter_fuel.name=Filtro de combustible Transportadores +tile.basepower.item_filter_inventory.name=Filtro Transportadores +tile.basepower.item_filter_ore.name=Ore Transportadores Filtro +tile.basepower.item_filter_plant.name=Plantable Transportadores Filtro +tile.basepower.item_filter_smelt.name=Horno Filtro Transportadores +tile.basepower.item_filter_overflow.name=Desbordamiento Filtro Transportadores +tile.basepower.steel_frame.name=Marco de Acero + + +item.basepower.starch.name=Almidón +item.basepower.bioplastic_ingot.name=Bioplástico Lingote +item.basepower.sprocket.name=Piñón + + +tile.basepower.fluid_metal_tank.name=Tanque de Almacenamiento de Acero +item.basepower.rotator_tool.name=Herramienta de Rotación + +tile.basepower.infinite_steam.name=La Energía de Vapor Infinito +tile.basepower.infinite_electricity.name=Energía Eléctrica Infinito +tile.basepower.infinite_quantum.name=Cuántica Infinito + +tile.basepower.crude_oil.name=Petróleo Crudo +fluid.basepower.crude_oil=Petróleo Crudo +item.bucket.crude_oil.name=Cubo de Crudo + + +tile.basepower.still.name=Destilería + +tile.basepower.refined_oil.name=Refinado de Petróleo +fluid.basepower.refined_oil=Refinado de Petróleo +item.bucket.refined_oil.name=Cubo de Refinado de Petróleo +tile.basepower.fluid_switch.name=Válvula + + +tile.basepower.converter_rf_steam.name=Vapor-RF Transformador +tile.basepower.converter_rf_electricity.name=Electricidad-RF Transformador +tile.basepower.converter_rf_quantum.name=Cuántico-RF Transformador +tile.basepower.converter_tr_electricity.name=Electricidad-EU Transformador diff --git a/src/main/resources/assets/basepower/lang/it_IT.lang b/src/main/resources/assets/basepower/lang/it_IT.lang new file mode 100644 index 0000000..a8b04ef --- /dev/null +++ b/src/main/resources/assets/basepower/lang/it_IT.lang @@ -0,0 +1,55 @@ +language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) +nei.basepower.recipehandler.shapelessfurnace.name=Grande Fornace (informe) +nei.basepower.recipehandler.shapedfurnace.name=Grande Fornace (forma) + +tooltip.basepower.empty=vuoto +tooltip.basepower.buckets_of=%x secchi d'%y + +itemGroup.basepower=Potenza Advantage + +tile.basepower.fluid_drain.name=Scarico +tile.basepower.fluid_discharge.name=Griglia di scarico +tile.basepower.fluid_storage_tank.name=Serbatoio +item.basepower.fluid_storage_tank_item.name=Serbatoio +tile.basepower.fluid_pipe.name=Tubo + +tile.basepower.item_conveyor.name=Trasportatore +tile.basepower.item_filter_block.name=Filtro di blocco trasportatore +tile.basepower.item_filter_food.name=Filtro alimentare Conveyor +tile.basepower.item_filter_fuel.name=carburante Filtro Conveyor +tile.basepower.item_filter_inventory.name=Filtro Conveyor +tile.basepower.item_filter_ore.name=Ore Filtro Conveyor +tile.basepower.item_filter_plant.name=Plantable Filtro Conveyor +tile.basepower.item_filter_smelt.name=Forno Filtro Conveyor +tile.basepower.item_filter_overflow.name=Straripamento Filtro Conveyor +tile.basepower.steel_frame.name=Steel Frame + + +item.basepower.starch.name=Amido +item.basepower.bioplastic_ingot.name=Bioplastica Lingotto +item.basepower.sprocket.name=Sprocket + + +tile.basepower.fluid_metal_tank.name=Serbatoio in Metallo +item.basepower.rotator_tool.name=Strumento di Rotazione + +tile.basepower.infinite_steam.name=Forza Vapore Infinite +tile.basepower.infinite_electricity.name=Elettricità Infinite +tile.basepower.infinite_quantum.name=Atomica Infinite + +tile.basepower.crude_oil.name=Olio a Crudo +fluid.basepower.crude_oil=Olio a Crudo +item.bucket.crude_oil.name=Secchio di Greggio + + +tile.basepower.still.name=Distilleria +tile.basepower.refined_oil.name=Olio Raffinato +fluid.basepower.refined_oil=Olio Raffinato +item.bucket.refined_oil.name=Secchio di Olio Raffinato +tile.basepower.fluid_switch.name=Valvola + + +tile.basepower.converter_rf_steam.name=Vapore-RF Trasformatore +tile.basepower.converter_rf_electricity.name=Elettricità-RF Trasformatore +tile.basepower.converter_rf_quantum.name=Quantistico-RF Trasformatore +tile.basepower.converter_tr_electricity.name=Elettricità-EU Trasformatore diff --git a/src/main/resources/assets/basepower/lang/ja_JP.lang b/src/main/resources/assets/basepower/lang/ja_JP.lang new file mode 100644 index 0000000..0c47868 --- /dev/null +++ b/src/main/resources/assets/basepower/lang/ja_JP.lang @@ -0,0 +1,56 @@ +language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) +Translate +nei.basepower.recipehandler.shapelessfurnace.name=大型炉(型崩れ) +nei.basepower.recipehandler.shapedfurnace.name=大型炉(形) + +tooltip.basepower.empty=空 +tooltip.basepower.buckets_of=%yの%xバケット + +itemGroup.basepower=パワー·アドバンテージ + +tile.basepower.fluid_drain.name=ドレン +tile.basepower.fluid_discharge.name=放電グレート +tile.basepower.fluid_storage_tank.name=貯蔵タンク +item.basepower.fluid_storage_tank_item.name=貯蔵タンク +tile.basepower.fluid_pipe.name=パイプ + +tile.basepower.item_conveyor.name=コンベア +tile.basepower.item_filter_block.name=ブロックフィルタコンベア +tile.basepower.item_filter_food.name=フードフィルターコンベア +tile.basepower.item_filter_fuel.name=燃料フィルターコンベア +tile.basepower.item_filter_inventory.name=フィルタコンベヤー +tile.basepower.item_filter_ore.name=鉱石フィルターコンベア +tile.basepower.item_filter_plant.name=プラントフィルタコンベヤー +tile.basepower.item_filter_smelt.name=炉フィルターコンベア +tile.basepower.item_filter_overflow.name=オーバーフローフィルタコンベヤー +tile.basepower.steel_frame.name=鉄骨 + + +item.basepower.starch.name=デンプン +item.basepower.bioplastic_ingot.name=は、バイオプラスチックインゴットを +item.basepower.sprocket.name=スプロケット + +tile.basepower.infinite_steam.name=無限の蒸気動力 +tile.basepower.infinite_electricity.name=無限の電力 +tile.basepower.infinite_quantum.name=無限の量子パワー + + +tile.basepower.fluid_metal_tank.name=金属製貯蔵タンク +item.basepower.rotator_tool.name=回転ツール + +tile.basepower.crude_oil.name=原油 +fluid.basepower.crude_oil=原油 +item.bucket.crude_oil.name=原油のバケット + + +tile.basepower.still.name=蒸留酒製造所 +tile.basepower.refined_oil.name=精製油 +fluid.basepower.refined_oil=精製油 +item.bucket.refined_oil.name=精製油のバケツ +tile.basepower.fluid_switch.name=バルブ + + +tile.basepower.converter_rf_steam.name=蒸気-RFトランス +tile.basepower.converter_rf_electricity.name=電気-RFトランス +tile.basepower.converter_rf_quantum.name=量子-RFトランス +tile.basepower.converter_tr_electricity.name=電気-EUトランス diff --git a/src/main/resources/assets/basepower/lang/ko_KR.lang b/src/main/resources/assets/basepower/lang/ko_KR.lang new file mode 100644 index 0000000..b9d1b83 --- /dev/null +++ b/src/main/resources/assets/basepower/lang/ko_KR.lang @@ -0,0 +1,56 @@ +language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) +nei.basepower.recipehandler.shapelessfurnace.name=대형 전기로 (못생긴) +nei.basepower.recipehandler.shapedfurnace.name=대형 전기로 (모양) + +tooltip.basepower.empty=빈 +tooltip.tooltip.basepower.buckets_of=%는 X 버킷 + +itemGroup.basepower=전원의 장점을 + +tile.basepower.fluid_drain.name=드레인 +tile.basepower.fluid_discharge.name=방전 화격자 +tile.basepower.fluid_storage_tank.name=저장 탱크 +item.basepower.fluid_storage_tank_item.name=는 저장 탱크를 +tile.basepower.fluid_pipe.name=파이프 + +tile.basepower.item_conveyor.name=컨베이어 +tile.basepower.item_filter_block.name=블록 필터 컨베이어 +tile.basepower.item_filter_food.name=식품 필터 컨베이어 +tile.basepower.item_filter_fuel.name=연료 필터 컨베이어 +tile.basepower.item_filter_inventory.name=필터 컨베이어 +tile.basepower.item_filter_ore.name=광석 필터 컨베이어 +tile.basepower.item_filter_plant.name=물만 주면 식물이 필터 컨베이어 +tile.basepower.item_filter_smelt.name=노 필터 컨베이어 +tile.basepower.item_filter_overflow.name=오버 플로우필터 컨베이어 +tile.basepower.steel_frame.name=스틸 프레임 + + +item.basepower.starch.name=전분 +item.basepower.bioplastic_ingot.name=는 바이오 플라스틱 잉곳을 +item.basepower.sprocket.name=스프로킷 + + +tile.basepower.fluid_metal_tank.name=금속 저장조 +item.basepower.rotator_tool.name=회전 도구 + + +tile.basepower.infinite_steam.name=무한 증기 력 +tile.basepower.infinite_electricity.name=무한 전력 +tile.basepower.infinite_quantum.name=무한 양자 전력 + +tile.basepower.crude_oil.name=원유 +fluid.basepower.crude_oil=원유 +item.bucket.crude_oil.name=원유의 버킷 + + +tile.basepower.still.name=증류소 +tile.basepower.refined_oil.name=정유 +fluid.basepower.refined_oil=정유 +item.bucket.refined_oil.name=정유의 통 +tile.basepower.fluid_switch.name=판막 + + +tile.basepower.converter_rf_steam.name=증기-RF 전원 트랜스 +tile.basepower.converter_rf_electricity.name=전기-RF 전원 트랜스 +tile.basepower.converter_rf_quantum.name=양자-RF 전원 트랜스 +tile.basepower.converter_tr_electricity.name=전기-EU 전원 트랜스 diff --git a/src/main/resources/assets/basepower/lang/pt_BR.lang b/src/main/resources/assets/basepower/lang/pt_BR.lang new file mode 100644 index 0000000..48f51d3 --- /dev/null +++ b/src/main/resources/assets/basepower/lang/pt_BR.lang @@ -0,0 +1,54 @@ +language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) +nei.basepower.recipehandler.shapelessfurnace.name=Forno Grande (no forma) +nei.basepower.recipehandler.shapedfurnace.name=Forno Grande (em forma) + +tooltip.basepower.empty=vazio +tooltip.basepower.buckets_of=%x baldes de %y + +itemGroup.basepower=Vantagem de Poder + +tile.basepower.fluid_drain.name=Dreno +tile.basepower.fluid_discharge.name=Grate Discharge +tile.basepower.fluid_storage_tank.name=Tanque de armazenamento +item.basepower.fluid_storage_tank_item.name=Tanque de armazenamento +tile.basepower.fluid_pipe.name=Tubulação + +tile.basepower.item_conveyor.name=Transportador +tile.basepower.item_filter_block.name=Bloquear filtro transportador +tile.basepower.item_filter_food.name=Transportador Filtro de Alimentos +tile.basepower.item_filter_fuel.name=Filtro de combustível Transportador +tile.basepower.item_filter_inventory.name=Transportador Filtro +tile.basepower.item_filter_ore.name=Ore Transportadora Filtro +tile.basepower.item_filter_plant.name=Plantable Transportadora Filtro +tile.basepower.item_filter_smelt.name=Fornalha Filtro Transportador +tile.basepower.item_filter_overflow.name=Transbordamento Transportador Filtro +tile.basepower.steel_frame.name=Armação de Aço + + +item.basepower.starch.name=Amido +item.basepower.bioplastic_ingot.name=Bioplastic lingote +item.basepower.sprocket.name=Roda Dentada + + +tile.basepower.fluid_metal_tank.name=Tanque de Armazenamento de Aço +item.basepower.rotator_tool.name=Ferramenta de Rotação + +tile.basepower.infinite_steam.name=Energia a Vapor Infinito +tile.basepower.infinite_electricity.name=Energia Elétrica Infinito +tile.basepower.infinite_quantum.name=Energia Quantum Infinito + +tile.basepower.crude_oil.name=Óleo Cru +fluid.basepower.crude_oil=Óleo Cru +item.bucket.crude_oil.name=Balde de Óleo Cru + + +tile.basepower.still.name=Destilaria +tile.basepower.refined_oil.name=Óleo Refinado +fluid.basepower.refined_oil=Óleo Refinado +item.bucket.refined_oil.name=Balde de Óleo Refinado +tile.basepower.fluid_switch.name=Válvula + +tile.basepower.converter_rf_steam.name=Vapor-RF Transformador +tile.basepower.converter_rf_electricity.name=Electricidade-RF Transformador +tile.basepower.converter_rf_quantum.name=Quantidade-RF Transformador +tile.basepower.converter_tr_electricity.name=Electricidade-EU Transformador diff --git a/src/main/resources/assets/basepower/lang/zh_CN.lang b/src/main/resources/assets/basepower/lang/zh_CN.lang new file mode 100644 index 0000000..611540f --- /dev/null +++ b/src/main/resources/assets/basepower/lang/zh_CN.lang @@ -0,0 +1,57 @@ +language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) + +nei.basepower.recipehandler.shapelessfurnace.name=大熔炉(无形的) +nei.basepower.recipehandler.shapedfurnace.name=大熔炉(有形的) + +tooltip.basepower.empty=空 +tooltip.basepower.buckets_of=%x水桶的%y + +itemGroup.basepower=能量优势 + +tile.basepower.fluid_drain.name=抽水机 +tile.basepower.fluid_discharge.name=排液器 +tile.basepower.fluid_storage_tank.name=便携式液体储罐 +item.basepower.fluid_storage_tank_item.name=便携式液体储罐 +tile.basepower.fluid_pipe.name=液体管 + +tile.basepower.item_conveyor.name=输送机 +tile.basepower.item_filter_block.name=方块过滤输送机 +tile.basepower.item_filter_food.name=食品过滤输送机 +tile.basepower.item_filter_fuel.name=燃料过滤输送机 +tile.basepower.item_filter_inventory.name=选择过滤输送机 +tile.basepower.item_filter_ore.name=矿物过滤输送机 +tile.basepower.item_filter_plant.name=种子过滤输送机 +tile.basepower.item_filter_smelt.name=熔炉过滤输送机 +tile.basepower.item_filter_overflow.name=溢出过滤输送机 +tile.basepower.steel_frame.name=钢框架 + + +item.basepower.starch.name=淀粉 +item.basepower.bioplastic_ingot.name=生物塑料锭 +item.basepower.sprocket.name=链轮 + + +tile.basepower.fluid_metal_tank.name=金属液罐 +item.basepower.rotator_tool.name=旋转扳手 + +tile.basepower.infinite_steam.name=无限蒸汽动力 +tile.basepower.infinite_electricity.name=无限电力 +tile.basepower.infinite_quantum.name=无限量子动力 + +tile.basepower.crude_oil.name=原油 +fluid.basepower.crude_oil=原油 +item.bucket.crude_oil.name=原油桶 + + +tile.basepower.still.name=酒廠 + +tile.basepower.refined_oil.name=成品油 +fluid.basepower.refined_oil=成品油 +item.bucket.refined_oil.name=成品油的桶 +tile.basepower.fluid_switch.name=閥 + + +tile.basepower.converter_rf_steam.name=蒸汽-RF 變壓器 +tile.basepower.converter_rf_electricity.name=電力-RF 變壓器 +tile.basepower.converter_rf_quantum.name=量子-RF 變壓器 +tile.basepower.converter_tr_electricity.name=電力-EU 變壓器 diff --git a/src/main/resources/assets/poweradvantage/models/block/converter_rf_electricity.json b/src/main/resources/assets/basepower/models/block/converter_rf_electricity.json similarity index 94% rename from src/main/resources/assets/poweradvantage/models/block/converter_rf_electricity.json rename to src/main/resources/assets/basepower/models/block/converter_rf_electricity.json index 01a03f6..dbdf82a 100644 --- a/src/main/resources/assets/poweradvantage/models/block/converter_rf_electricity.json +++ b/src/main/resources/assets/basepower/models/block/converter_rf_electricity.json @@ -1,10 +1,10 @@ { "parent": "block/block", "textures": { - "face": "poweradvantage:blocks/steel_frame", - "core": "poweradvantage:materials/plastic", - "plug": "poweradvantage:blocks/filter_bottom", - "particle": "poweradvantage:materials/steel" + "face": "basepower:blocks/steel_frame", + "core": "basepower:materials/plastic", + "plug": "basepower:blocks/filter_bottom", + "particle": "basepower:materials/steel" }, "elements": [ { diff --git a/src/main/resources/assets/poweradvantage/models/block/converter_rf_quantum.json b/src/main/resources/assets/basepower/models/block/converter_rf_quantum.json similarity index 96% rename from src/main/resources/assets/poweradvantage/models/block/converter_rf_quantum.json rename to src/main/resources/assets/basepower/models/block/converter_rf_quantum.json index 82f513c..5a534f0 100644 --- a/src/main/resources/assets/poweradvantage/models/block/converter_rf_quantum.json +++ b/src/main/resources/assets/basepower/models/block/converter_rf_quantum.json @@ -1,10 +1,10 @@ { "parent": "block/block", "textures": { - "face": "poweradvantage:blocks/steel_frame", + "face": "basepower:blocks/steel_frame", "core": "minecraft:blocks/ice_packed", - "plug": "poweradvantage:blocks/filter_bottom", - "particle": "poweradvantage:materials/steel" + "plug": "basepower:blocks/filter_bottom", + "particle": "basepower:materials/steel" }, "elements": [ { diff --git a/src/main/resources/assets/poweradvantage/models/block/converter_rf_steam.json b/src/main/resources/assets/basepower/models/block/converter_rf_steam.json similarity index 95% rename from src/main/resources/assets/poweradvantage/models/block/converter_rf_steam.json rename to src/main/resources/assets/basepower/models/block/converter_rf_steam.json index a831250..b1fe2c8 100644 --- a/src/main/resources/assets/poweradvantage/models/block/converter_rf_steam.json +++ b/src/main/resources/assets/basepower/models/block/converter_rf_steam.json @@ -1,10 +1,10 @@ { "parent": "block/block", "textures": { - "face": "poweradvantage:blocks/steel_frame", - "core": "poweradvantage:materials/brass", - "plug": "poweradvantage:blocks/filter_bottom", - "particle": "poweradvantage:materials/steel" + "face": "basepower:blocks/steel_frame", + "core": "basepower:materials/brass", + "plug": "basepower:blocks/filter_bottom", + "particle": "basepower:materials/steel" }, "elements": [ { diff --git a/src/main/resources/assets/basepower/models/block/converter_tr_electricity.json b/src/main/resources/assets/basepower/models/block/converter_tr_electricity.json new file mode 100644 index 0000000..102f107 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/converter_tr_electricity.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "basepower:blocks/techreborn_converter" + } +} diff --git a/src/main/resources/assets/poweradvantage/models/block/conveyor_base.json b/src/main/resources/assets/basepower/models/block/conveyor_base.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/conveyor_base.json rename to src/main/resources/assets/basepower/models/block/conveyor_base.json diff --git a/src/main/resources/assets/basepower/models/block/fluid_discharge.json b/src/main/resources/assets/basepower/models/block/fluid_discharge.json new file mode 100644 index 0000000..2ee7970 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/fluid_discharge.json @@ -0,0 +1,8 @@ +{ + "parent": "block/cube_bottom_top", + "textures": { + "top": "basepower:blocks/fluid_discharge_side", + "bottom": "basepower:blocks/fluid_discharge_face", + "side": "basepower:blocks/fluid_discharge_side" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/block/fluid_drain.json b/src/main/resources/assets/basepower/models/block/fluid_drain.json new file mode 100644 index 0000000..b076dd0 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/fluid_drain.json @@ -0,0 +1,8 @@ +{ + "parent": "block/cube_bottom_top", + "textures": { + "top": "basepower:blocks/fluid_drain_face", + "bottom": "basepower:blocks/fluid_drain_side", + "side": "basepower:blocks/fluid_drain_side" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/block/fluid_metal_tank.json b/src/main/resources/assets/basepower/models/block/fluid_metal_tank.json similarity index 94% rename from src/main/resources/assets/poweradvantage/models/block/fluid_metal_tank.json rename to src/main/resources/assets/basepower/models/block/fluid_metal_tank.json index 3342841..85fc4ab 100644 --- a/src/main/resources/assets/poweradvantage/models/block/fluid_metal_tank.json +++ b/src/main/resources/assets/basepower/models/block/fluid_metal_tank.json @@ -1,10 +1,10 @@ { "parent": "block/block", "textures": { - "top": "poweradvantage:blocks/fluid_metal_tank_top", - "bottom": "poweradvantage:blocks/fluid_metal_tank_top", - "side": "poweradvantage:blocks/fluid_metal_tank_side", - "particle": "poweradvantage:blocks/fluid_metal_tank_side" + "top": "basepower:blocks/fluid_metal_tank_top", + "bottom": "basepower:blocks/fluid_metal_tank_top", + "side": "basepower:blocks/fluid_metal_tank_side", + "particle": "basepower:blocks/fluid_metal_tank_side" }, "elements": [ { diff --git a/src/main/resources/assets/basepower/models/block/fluid_pipe_0.json b/src/main/resources/assets/basepower/models/block/fluid_pipe_0.json new file mode 100644 index 0000000..9d3f723 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/fluid_pipe_0.json @@ -0,0 +1,8 @@ +{ + "parent": "block/block", + "parent": "basepower:block/pipe4_0", + "textures": { + "texture": "basepower:blocks/fluid_pipe", + "particle": "basepower:materials/iron" + } +} diff --git a/src/main/resources/assets/basepower/models/block/fluid_pipe_densuw.json b/src/main/resources/assets/basepower/models/block/fluid_pipe_densuw.json new file mode 100644 index 0000000..6d07fd4 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/fluid_pipe_densuw.json @@ -0,0 +1,8 @@ +{ + "parent": "block/block", + "parent": "basepower:block/pipe4_densuw", + "textures": { + "texture": "basepower:blocks/fluid_pipe", + "particle": "basepower:materials/iron" + } +} diff --git a/src/main/resources/assets/basepower/models/block/fluid_pipe_desuw.json b/src/main/resources/assets/basepower/models/block/fluid_pipe_desuw.json new file mode 100644 index 0000000..3311cb3 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/fluid_pipe_desuw.json @@ -0,0 +1,8 @@ +{ + "parent": "block/block", + "parent": "basepower:block/pipe4_desuw", + "textures": { + "texture": "basepower:blocks/fluid_pipe", + "particle": "basepower:materials/iron" + } +} diff --git a/src/main/resources/assets/basepower/models/block/fluid_pipe_dnu.json b/src/main/resources/assets/basepower/models/block/fluid_pipe_dnu.json new file mode 100644 index 0000000..cc3d8f6 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/fluid_pipe_dnu.json @@ -0,0 +1,8 @@ +{ + "parent": "block/block", + "parent": "basepower:block/pipe4_dnu", + "textures": { + "texture": "basepower:blocks/fluid_pipe", + "particle": "basepower:materials/iron" + } +} diff --git a/src/main/resources/assets/basepower/models/block/fluid_pipe_ensw.json b/src/main/resources/assets/basepower/models/block/fluid_pipe_ensw.json new file mode 100644 index 0000000..f31a841 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/fluid_pipe_ensw.json @@ -0,0 +1,8 @@ +{ + "parent": "block/block", + "parent": "basepower:block/pipe4_ensw", + "textures": { + "texture": "basepower:blocks/fluid_pipe", + "particle": "basepower:materials/iron" + } +} diff --git a/src/main/resources/assets/basepower/models/block/fluid_pipe_n.json b/src/main/resources/assets/basepower/models/block/fluid_pipe_n.json new file mode 100644 index 0000000..11a2c6d --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/fluid_pipe_n.json @@ -0,0 +1,8 @@ +{ + "parent": "block/block", + "parent": "basepower:block/pipe4_n", + "textures": { + "texture": "basepower:blocks/fluid_pipe", + "particle": "basepower:materials/iron" + } +} diff --git a/src/main/resources/assets/basepower/models/block/fluid_pipe_ns.json b/src/main/resources/assets/basepower/models/block/fluid_pipe_ns.json new file mode 100644 index 0000000..aa64b8a --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/fluid_pipe_ns.json @@ -0,0 +1,8 @@ +{ + "parent": "block/block", + "parent": "basepower:block/pipe4_ns", + "textures": { + "texture": "basepower:blocks/fluid_pipe", + "particle": "basepower:materials/iron" + } +} diff --git a/src/main/resources/assets/basepower/models/block/fluid_pipe_nsuw.json b/src/main/resources/assets/basepower/models/block/fluid_pipe_nsuw.json new file mode 100644 index 0000000..95c3367 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/fluid_pipe_nsuw.json @@ -0,0 +1,8 @@ +{ + "parent": "block/block", + "parent": "basepower:block/pipe4_nsuw", + "textures": { + "texture": "basepower:blocks/fluid_pipe", + "particle": "basepower:materials/iron" + } +} diff --git a/src/main/resources/assets/basepower/models/block/fluid_pipe_nsw.json b/src/main/resources/assets/basepower/models/block/fluid_pipe_nsw.json new file mode 100644 index 0000000..60ec039 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/fluid_pipe_nsw.json @@ -0,0 +1,8 @@ +{ + "parent": "block/block", + "parent": "basepower:block/pipe4_nsw", + "textures": { + "texture": "basepower:blocks/fluid_pipe", + "particle": "basepower:materials/iron" + } +} diff --git a/src/main/resources/assets/basepower/models/block/fluid_pipe_nuw.json b/src/main/resources/assets/basepower/models/block/fluid_pipe_nuw.json new file mode 100644 index 0000000..5b0dbb1 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/fluid_pipe_nuw.json @@ -0,0 +1,8 @@ +{ + "parent": "block/block", + "parent": "basepower:block/pipe4_nuw", + "textures": { + "texture": "basepower:blocks/fluid_pipe", + "particle": "basepower:materials/iron" + } +} diff --git a/src/main/resources/assets/basepower/models/block/fluid_pipe_nw.json b/src/main/resources/assets/basepower/models/block/fluid_pipe_nw.json new file mode 100644 index 0000000..2f87ee8 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/fluid_pipe_nw.json @@ -0,0 +1,8 @@ +{ + "parent": "block/block", + "parent": "basepower:block/pipe4_nw", + "textures": { + "texture": "basepower:blocks/fluid_pipe", + "particle": "basepower:materials/iron" + } +} diff --git a/src/main/resources/assets/poweradvantage/models/block/fluid_storage_tank.json b/src/main/resources/assets/basepower/models/block/fluid_storage_tank.json similarity index 97% rename from src/main/resources/assets/poweradvantage/models/block/fluid_storage_tank.json rename to src/main/resources/assets/basepower/models/block/fluid_storage_tank.json index c8daff3..70f1e28 100644 --- a/src/main/resources/assets/poweradvantage/models/block/fluid_storage_tank.json +++ b/src/main/resources/assets/basepower/models/block/fluid_storage_tank.json @@ -1,9 +1,9 @@ { "parent": "block/block", "textures": { - "walls": "poweradvantage:materials/plastic", - "supports": "poweradvantage:materials/steel", - "particle": "poweradvantage:materials/plastic" + "walls": "basepower:materials/plastic", + "supports": "basepower:materials/steel", + "particle": "basepower:materials/plastic" }, "elements": [ { diff --git a/src/main/resources/assets/basepower/models/block/fluid_switch_off.json b/src/main/resources/assets/basepower/models/block/fluid_switch_off.json new file mode 100644 index 0000000..53991a6 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/fluid_switch_off.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "basepower:blocks/fluid_switch_off", + "particle": "basepower:materials/steel" + } +} diff --git a/src/main/resources/assets/basepower/models/block/fluid_switch_on.json b/src/main/resources/assets/basepower/models/block/fluid_switch_on.json new file mode 100644 index 0000000..b132b59 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/fluid_switch_on.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "basepower:blocks/fluid_switch_on", + "particle": "basepower:materials/steel" + } +} diff --git a/src/main/resources/assets/poweradvantage/models/block/infinite_electricity.json b/src/main/resources/assets/basepower/models/block/infinite_electricity.json similarity index 52% rename from src/main/resources/assets/poweradvantage/models/block/infinite_electricity.json rename to src/main/resources/assets/basepower/models/block/infinite_electricity.json index 40f79af..8300510 100644 --- a/src/main/resources/assets/poweradvantage/models/block/infinite_electricity.json +++ b/src/main/resources/assets/basepower/models/block/infinite_electricity.json @@ -1,6 +1,6 @@ { "parent": "block/cube_all", "textures": { - "all": "poweradvantage:materials/metal_panel" + "all": "basepower:materials/metal_panel" } } \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/block/infinite_quantum.json b/src/main/resources/assets/basepower/models/block/infinite_quantum.json similarity index 52% rename from src/main/resources/assets/poweradvantage/models/block/infinite_quantum.json rename to src/main/resources/assets/basepower/models/block/infinite_quantum.json index 40f79af..8300510 100644 --- a/src/main/resources/assets/poweradvantage/models/block/infinite_quantum.json +++ b/src/main/resources/assets/basepower/models/block/infinite_quantum.json @@ -1,6 +1,6 @@ { "parent": "block/cube_all", "textures": { - "all": "poweradvantage:materials/metal_panel" + "all": "basepower:materials/metal_panel" } } \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/block/infinite_steam.json b/src/main/resources/assets/basepower/models/block/infinite_steam.json similarity index 52% rename from src/main/resources/assets/poweradvantage/models/block/infinite_steam.json rename to src/main/resources/assets/basepower/models/block/infinite_steam.json index 40f79af..8300510 100644 --- a/src/main/resources/assets/poweradvantage/models/block/infinite_steam.json +++ b/src/main/resources/assets/basepower/models/block/infinite_steam.json @@ -1,6 +1,6 @@ { "parent": "block/cube_all", "textures": { - "all": "poweradvantage:materials/metal_panel" + "all": "basepower:materials/metal_panel" } } \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/block/item_conveyor.json b/src/main/resources/assets/basepower/models/block/item_conveyor.json new file mode 100644 index 0000000..9da9824 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/item_conveyor.json @@ -0,0 +1,10 @@ +{ + "parent": "basepower:block/conveyor_base", + "textures": { + "top": "basepower:blocks/item_conveyor_top", + "bottom": "basepower:blocks/item_conveyor_top", + "side": "basepower:blocks/item_conveyor_side", + "end": "basepower:blocks/item_conveyor_end", + "rim": "basepower:materials/steel" + } +} diff --git a/src/main/resources/assets/basepower/models/block/item_filter_block.json b/src/main/resources/assets/basepower/models/block/item_filter_block.json new file mode 100644 index 0000000..fadbf83 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/item_filter_block.json @@ -0,0 +1,10 @@ +{ + "parent": "basepower:block/conveyor_base", + "textures": { + "top": "basepower:blocks/item_conveyor_top", + "bottom": "basepower:blocks/filter_bottom", + "side": "basepower:blocks/filter_side_block", + "end": "basepower:blocks/item_conveyor_end", + "rim": "basepower:materials/steel" + } +} diff --git a/src/main/resources/assets/basepower/models/block/item_filter_food.json b/src/main/resources/assets/basepower/models/block/item_filter_food.json new file mode 100644 index 0000000..67b14ad --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/item_filter_food.json @@ -0,0 +1,10 @@ +{ + "parent": "basepower:block/conveyor_base", + "textures": { + "top": "basepower:blocks/item_conveyor_top", + "bottom": "basepower:blocks/filter_bottom", + "side": "basepower:blocks/filter_side_food", + "end": "basepower:blocks/item_conveyor_end", + "rim": "basepower:materials/steel" + } +} diff --git a/src/main/resources/assets/basepower/models/block/item_filter_fuel.json b/src/main/resources/assets/basepower/models/block/item_filter_fuel.json new file mode 100644 index 0000000..41c8e92 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/item_filter_fuel.json @@ -0,0 +1,10 @@ +{ + "parent": "basepower:block/conveyor_base", + "textures": { + "top": "basepower:blocks/item_conveyor_top", + "bottom": "basepower:blocks/filter_bottom", + "side": "basepower:blocks/filter_side_fuel", + "end": "basepower:blocks/item_conveyor_end", + "rim": "basepower:materials/steel" + } +} diff --git a/src/main/resources/assets/basepower/models/block/item_filter_inventory.json b/src/main/resources/assets/basepower/models/block/item_filter_inventory.json new file mode 100644 index 0000000..cbec1c3 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/item_filter_inventory.json @@ -0,0 +1,10 @@ +{ + "parent": "basepower:block/conveyor_base", + "textures": { + "top": "basepower:blocks/item_conveyor_top", + "bottom": "basepower:blocks/filter_bottom", + "side": "basepower:blocks/filter_side_inventory", + "end": "basepower:blocks/item_conveyor_end", + "rim": "basepower:materials/steel" + } +} diff --git a/src/main/resources/assets/basepower/models/block/item_filter_ore.json b/src/main/resources/assets/basepower/models/block/item_filter_ore.json new file mode 100644 index 0000000..040a4fd --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/item_filter_ore.json @@ -0,0 +1,10 @@ +{ + "parent": "basepower:block/conveyor_base", + "textures": { + "top": "basepower:blocks/item_conveyor_top", + "bottom": "basepower:blocks/filter_bottom", + "side": "basepower:blocks/filter_side_ore", + "end": "basepower:blocks/item_conveyor_end", + "rim": "basepower:materials/steel" + } +} diff --git a/src/main/resources/assets/basepower/models/block/item_filter_overflow.json b/src/main/resources/assets/basepower/models/block/item_filter_overflow.json new file mode 100644 index 0000000..4f71669 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/item_filter_overflow.json @@ -0,0 +1,10 @@ +{ + "parent": "basepower:block/conveyor_base", + "textures": { + "top": "basepower:blocks/item_conveyor_top", + "bottom": "basepower:blocks/filter_bottom", + "side": "basepower:blocks/filter_side_overflow", + "end": "basepower:blocks/item_conveyor_end", + "rim": "basepower:materials/steel" + } +} diff --git a/src/main/resources/assets/basepower/models/block/item_filter_plant.json b/src/main/resources/assets/basepower/models/block/item_filter_plant.json new file mode 100644 index 0000000..1e097b1 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/item_filter_plant.json @@ -0,0 +1,10 @@ +{ + "parent": "basepower:block/conveyor_base", + "textures": { + "top": "basepower:blocks/item_conveyor_top", + "bottom": "basepower:blocks/filter_bottom", + "side": "basepower:blocks/filter_side_plantable", + "end": "basepower:blocks/item_conveyor_end", + "rim": "basepower:materials/steel" + } +} diff --git a/src/main/resources/assets/basepower/models/block/item_filter_smelt.json b/src/main/resources/assets/basepower/models/block/item_filter_smelt.json new file mode 100644 index 0000000..ee43633 --- /dev/null +++ b/src/main/resources/assets/basepower/models/block/item_filter_smelt.json @@ -0,0 +1,10 @@ +{ + "parent": "basepower:block/conveyor_base", + "textures": { + "top": "basepower:blocks/item_conveyor_top", + "bottom": "basepower:blocks/filter_bottom", + "side": "basepower:blocks/filter_side_smeltable", + "end": "basepower:blocks/item_conveyor_end", + "rim": "basepower:materials/steel" + } +} diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe1_0.json b/src/main/resources/assets/basepower/models/block/pipe1_0.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe1_0.json rename to src/main/resources/assets/basepower/models/block/pipe1_0.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe1_densuw.json b/src/main/resources/assets/basepower/models/block/pipe1_densuw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe1_densuw.json rename to src/main/resources/assets/basepower/models/block/pipe1_densuw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe1_desuw.json b/src/main/resources/assets/basepower/models/block/pipe1_desuw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe1_desuw.json rename to src/main/resources/assets/basepower/models/block/pipe1_desuw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe1_dnu.json b/src/main/resources/assets/basepower/models/block/pipe1_dnu.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe1_dnu.json rename to src/main/resources/assets/basepower/models/block/pipe1_dnu.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe1_ensw.json b/src/main/resources/assets/basepower/models/block/pipe1_ensw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe1_ensw.json rename to src/main/resources/assets/basepower/models/block/pipe1_ensw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe1_n.json b/src/main/resources/assets/basepower/models/block/pipe1_n.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe1_n.json rename to src/main/resources/assets/basepower/models/block/pipe1_n.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe1_ns.json b/src/main/resources/assets/basepower/models/block/pipe1_ns.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe1_ns.json rename to src/main/resources/assets/basepower/models/block/pipe1_ns.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe1_nsuw.json b/src/main/resources/assets/basepower/models/block/pipe1_nsuw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe1_nsuw.json rename to src/main/resources/assets/basepower/models/block/pipe1_nsuw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe1_nsw.json b/src/main/resources/assets/basepower/models/block/pipe1_nsw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe1_nsw.json rename to src/main/resources/assets/basepower/models/block/pipe1_nsw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe1_nuw.json b/src/main/resources/assets/basepower/models/block/pipe1_nuw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe1_nuw.json rename to src/main/resources/assets/basepower/models/block/pipe1_nuw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe1_nw.json b/src/main/resources/assets/basepower/models/block/pipe1_nw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe1_nw.json rename to src/main/resources/assets/basepower/models/block/pipe1_nw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe2_0.json b/src/main/resources/assets/basepower/models/block/pipe2_0.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe2_0.json rename to src/main/resources/assets/basepower/models/block/pipe2_0.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe2_densuw.json b/src/main/resources/assets/basepower/models/block/pipe2_densuw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe2_densuw.json rename to src/main/resources/assets/basepower/models/block/pipe2_densuw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe2_desuw.json b/src/main/resources/assets/basepower/models/block/pipe2_desuw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe2_desuw.json rename to src/main/resources/assets/basepower/models/block/pipe2_desuw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe2_dnu.json b/src/main/resources/assets/basepower/models/block/pipe2_dnu.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe2_dnu.json rename to src/main/resources/assets/basepower/models/block/pipe2_dnu.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe2_ensw.json b/src/main/resources/assets/basepower/models/block/pipe2_ensw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe2_ensw.json rename to src/main/resources/assets/basepower/models/block/pipe2_ensw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe2_n.json b/src/main/resources/assets/basepower/models/block/pipe2_n.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe2_n.json rename to src/main/resources/assets/basepower/models/block/pipe2_n.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe2_ns.json b/src/main/resources/assets/basepower/models/block/pipe2_ns.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe2_ns.json rename to src/main/resources/assets/basepower/models/block/pipe2_ns.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe2_nsuw.json b/src/main/resources/assets/basepower/models/block/pipe2_nsuw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe2_nsuw.json rename to src/main/resources/assets/basepower/models/block/pipe2_nsuw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe2_nsw.json b/src/main/resources/assets/basepower/models/block/pipe2_nsw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe2_nsw.json rename to src/main/resources/assets/basepower/models/block/pipe2_nsw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe2_nuw.json b/src/main/resources/assets/basepower/models/block/pipe2_nuw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe2_nuw.json rename to src/main/resources/assets/basepower/models/block/pipe2_nuw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe2_nw.json b/src/main/resources/assets/basepower/models/block/pipe2_nw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe2_nw.json rename to src/main/resources/assets/basepower/models/block/pipe2_nw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe3_0.json b/src/main/resources/assets/basepower/models/block/pipe3_0.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe3_0.json rename to src/main/resources/assets/basepower/models/block/pipe3_0.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe3_densuw.json b/src/main/resources/assets/basepower/models/block/pipe3_densuw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe3_densuw.json rename to src/main/resources/assets/basepower/models/block/pipe3_densuw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe3_desuw.json b/src/main/resources/assets/basepower/models/block/pipe3_desuw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe3_desuw.json rename to src/main/resources/assets/basepower/models/block/pipe3_desuw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe3_dnu.json b/src/main/resources/assets/basepower/models/block/pipe3_dnu.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe3_dnu.json rename to src/main/resources/assets/basepower/models/block/pipe3_dnu.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe3_ensw.json b/src/main/resources/assets/basepower/models/block/pipe3_ensw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe3_ensw.json rename to src/main/resources/assets/basepower/models/block/pipe3_ensw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe3_n.json b/src/main/resources/assets/basepower/models/block/pipe3_n.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe3_n.json rename to src/main/resources/assets/basepower/models/block/pipe3_n.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe3_ns.json b/src/main/resources/assets/basepower/models/block/pipe3_ns.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe3_ns.json rename to src/main/resources/assets/basepower/models/block/pipe3_ns.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe3_nsuw.json b/src/main/resources/assets/basepower/models/block/pipe3_nsuw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe3_nsuw.json rename to src/main/resources/assets/basepower/models/block/pipe3_nsuw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe3_nsw.json b/src/main/resources/assets/basepower/models/block/pipe3_nsw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe3_nsw.json rename to src/main/resources/assets/basepower/models/block/pipe3_nsw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe3_nuw.json b/src/main/resources/assets/basepower/models/block/pipe3_nuw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe3_nuw.json rename to src/main/resources/assets/basepower/models/block/pipe3_nuw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe3_nw.json b/src/main/resources/assets/basepower/models/block/pipe3_nw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe3_nw.json rename to src/main/resources/assets/basepower/models/block/pipe3_nw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe4_0.json b/src/main/resources/assets/basepower/models/block/pipe4_0.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe4_0.json rename to src/main/resources/assets/basepower/models/block/pipe4_0.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe4_densuw.json b/src/main/resources/assets/basepower/models/block/pipe4_densuw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe4_densuw.json rename to src/main/resources/assets/basepower/models/block/pipe4_densuw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe4_desuw.json b/src/main/resources/assets/basepower/models/block/pipe4_desuw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe4_desuw.json rename to src/main/resources/assets/basepower/models/block/pipe4_desuw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe4_dnu.json b/src/main/resources/assets/basepower/models/block/pipe4_dnu.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe4_dnu.json rename to src/main/resources/assets/basepower/models/block/pipe4_dnu.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe4_ensw.json b/src/main/resources/assets/basepower/models/block/pipe4_ensw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe4_ensw.json rename to src/main/resources/assets/basepower/models/block/pipe4_ensw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe4_n.json b/src/main/resources/assets/basepower/models/block/pipe4_n.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe4_n.json rename to src/main/resources/assets/basepower/models/block/pipe4_n.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe4_ns.json b/src/main/resources/assets/basepower/models/block/pipe4_ns.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe4_ns.json rename to src/main/resources/assets/basepower/models/block/pipe4_ns.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe4_nsuw.json b/src/main/resources/assets/basepower/models/block/pipe4_nsuw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe4_nsuw.json rename to src/main/resources/assets/basepower/models/block/pipe4_nsuw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe4_nsw.json b/src/main/resources/assets/basepower/models/block/pipe4_nsw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe4_nsw.json rename to src/main/resources/assets/basepower/models/block/pipe4_nsw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe4_nuw.json b/src/main/resources/assets/basepower/models/block/pipe4_nuw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe4_nuw.json rename to src/main/resources/assets/basepower/models/block/pipe4_nuw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/pipe4_nw.json b/src/main/resources/assets/basepower/models/block/pipe4_nw.json similarity index 100% rename from src/main/resources/assets/poweradvantage/models/block/pipe4_nw.json rename to src/main/resources/assets/basepower/models/block/pipe4_nw.json diff --git a/src/main/resources/assets/poweradvantage/models/block/steel_frame.json b/src/main/resources/assets/basepower/models/block/steel_frame.json similarity index 94% rename from src/main/resources/assets/poweradvantage/models/block/steel_frame.json rename to src/main/resources/assets/basepower/models/block/steel_frame.json index 6e5ef04..a423e34 100644 --- a/src/main/resources/assets/poweradvantage/models/block/steel_frame.json +++ b/src/main/resources/assets/basepower/models/block/steel_frame.json @@ -1,8 +1,8 @@ { "parent": "block/block", "textures": { - "face": "poweradvantage:blocks/steel_frame", - "particle": "poweradvantage:materials/steel" + "face": "basepower:blocks/steel_frame", + "particle": "basepower:materials/steel" }, "elements": [ { diff --git a/src/main/resources/assets/poweradvantage/models/block/still_off.json b/src/main/resources/assets/basepower/models/block/still_off.json similarity index 96% rename from src/main/resources/assets/poweradvantage/models/block/still_off.json rename to src/main/resources/assets/basepower/models/block/still_off.json index 132b402..8918690 100644 --- a/src/main/resources/assets/poweradvantage/models/block/still_off.json +++ b/src/main/resources/assets/basepower/models/block/still_off.json @@ -4,8 +4,8 @@ "top": "blocks/furnace_top", "front": "blocks/furnace_front_off", "side": "blocks/furnace_side", - "tank": "poweradvantage:materials/steel", - "particle": "poweradvantage:materials/steel" + "tank": "basepower:materials/steel", + "particle": "basepower:materials/steel" }, "elements": [ { diff --git a/src/main/resources/assets/poweradvantage/models/block/still_on.json b/src/main/resources/assets/basepower/models/block/still_on.json similarity index 96% rename from src/main/resources/assets/poweradvantage/models/block/still_on.json rename to src/main/resources/assets/basepower/models/block/still_on.json index 399a8e4..2e3bb66 100644 --- a/src/main/resources/assets/poweradvantage/models/block/still_on.json +++ b/src/main/resources/assets/basepower/models/block/still_on.json @@ -4,8 +4,8 @@ "top": "blocks/furnace_top", "front": "blocks/furnace_front_on", "side": "blocks/furnace_side", - "tank": "poweradvantage:materials/steel", - "particle": "poweradvantage:materials/steel" + "tank": "basepower:materials/steel", + "particle": "basepower:materials/steel" }, "elements": [ { diff --git a/src/main/resources/assets/basepower/models/item/bioplastic_ingot.json b/src/main/resources/assets/basepower/models/item/bioplastic_ingot.json new file mode 100644 index 0000000..96b8cfd --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/bioplastic_ingot.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "basepower:items/bioplastic_ingot" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/bucket_crude_oil.json b/src/main/resources/assets/basepower/models/item/bucket_crude_oil.json new file mode 100644 index 0000000..bc0182f --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/bucket_crude_oil.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "basepower:items/bucket_crude_oil" + } +} diff --git a/src/main/resources/assets/basepower/models/item/bucket_refined_oil.json b/src/main/resources/assets/basepower/models/item/bucket_refined_oil.json new file mode 100644 index 0000000..145160a --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/bucket_refined_oil.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "basepower:items/bucket_refined_oil" + } +} diff --git a/src/main/resources/assets/basepower/models/item/converter_rf_electricity.json b/src/main/resources/assets/basepower/models/item/converter_rf_electricity.json new file mode 100644 index 0000000..8016dd4 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/converter_rf_electricity.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/converter_rf_electricity" +} diff --git a/src/main/resources/assets/basepower/models/item/converter_rf_quantum.json b/src/main/resources/assets/basepower/models/item/converter_rf_quantum.json new file mode 100644 index 0000000..20bffbe --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/converter_rf_quantum.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/converter_rf_quantum" +} diff --git a/src/main/resources/assets/basepower/models/item/converter_rf_steam.json b/src/main/resources/assets/basepower/models/item/converter_rf_steam.json new file mode 100644 index 0000000..77e6147 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/converter_rf_steam.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/converter_rf_steam" +} diff --git a/src/main/resources/assets/basepower/models/item/converter_tr_electricity.json b/src/main/resources/assets/basepower/models/item/converter_tr_electricity.json new file mode 100644 index 0000000..8c54bb8 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/converter_tr_electricity.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/converter_tr_electricity" +} diff --git a/src/main/resources/assets/basepower/models/item/fluid_discharge.json b/src/main/resources/assets/basepower/models/item/fluid_discharge.json new file mode 100644 index 0000000..d9af146 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/fluid_discharge.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/fluid_discharge" +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/fluid_drain.json b/src/main/resources/assets/basepower/models/item/fluid_drain.json new file mode 100644 index 0000000..60de5a6 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/fluid_drain.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/fluid_drain" +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/fluid_metal_tank.json b/src/main/resources/assets/basepower/models/item/fluid_metal_tank.json new file mode 100644 index 0000000..cc8c605 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/fluid_metal_tank.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/fluid_metal_tank" +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/fluid_pipe.json b/src/main/resources/assets/basepower/models/item/fluid_pipe.json new file mode 100644 index 0000000..2cfca62 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/fluid_pipe.json @@ -0,0 +1,4 @@ +{ + "parent": "basepower:block/fluid_pipe_ns", + "ambientocclusion": false +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/fluid_pipe_terminal.json b/src/main/resources/assets/basepower/models/item/fluid_pipe_terminal.json new file mode 100644 index 0000000..2cfca62 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/fluid_pipe_terminal.json @@ -0,0 +1,4 @@ +{ + "parent": "basepower:block/fluid_pipe_ns", + "ambientocclusion": false +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/fluid_storage_tank.json b/src/main/resources/assets/basepower/models/item/fluid_storage_tank.json new file mode 100644 index 0000000..33831e3 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/fluid_storage_tank.json @@ -0,0 +1,4 @@ +{ + "parent": "basepower:block/fluid_storage_tank", + "ambientocclusion": false +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/fluid_switch.json b/src/main/resources/assets/basepower/models/item/fluid_switch.json new file mode 100644 index 0000000..e62bd15 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/fluid_switch.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/fluid_switch_on" +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/infinite_electricity.json b/src/main/resources/assets/basepower/models/item/infinite_electricity.json new file mode 100644 index 0000000..a1abf24 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/infinite_electricity.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/infinite_electricity" +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/infinite_quantum.json b/src/main/resources/assets/basepower/models/item/infinite_quantum.json new file mode 100644 index 0000000..53b56dd --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/infinite_quantum.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/infinite_quantum" +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/infinite_steam.json b/src/main/resources/assets/basepower/models/item/infinite_steam.json new file mode 100644 index 0000000..e8f9061 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/infinite_steam.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/infinite_steam" +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/item_conveyor.json b/src/main/resources/assets/basepower/models/item/item_conveyor.json new file mode 100644 index 0000000..f042d83 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/item_conveyor.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/item_conveyor" +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/item_filter_block.json b/src/main/resources/assets/basepower/models/item/item_filter_block.json new file mode 100644 index 0000000..e820da7 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/item_filter_block.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/item_filter_block" +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/item_filter_food.json b/src/main/resources/assets/basepower/models/item/item_filter_food.json new file mode 100644 index 0000000..96db616 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/item_filter_food.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/item_filter_food" +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/item_filter_fuel.json b/src/main/resources/assets/basepower/models/item/item_filter_fuel.json new file mode 100644 index 0000000..1399fb3 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/item_filter_fuel.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/item_filter_fuel" +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/item_filter_inventory.json b/src/main/resources/assets/basepower/models/item/item_filter_inventory.json new file mode 100644 index 0000000..03a135d --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/item_filter_inventory.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/item_filter_inventory" +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/item_filter_ore.json b/src/main/resources/assets/basepower/models/item/item_filter_ore.json new file mode 100644 index 0000000..7a44c34 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/item_filter_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/item_filter_ore" +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/item_filter_overflow.json b/src/main/resources/assets/basepower/models/item/item_filter_overflow.json new file mode 100644 index 0000000..caac642 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/item_filter_overflow.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/item_filter_overflow" +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/item_filter_plant.json b/src/main/resources/assets/basepower/models/item/item_filter_plant.json new file mode 100644 index 0000000..40beb7a --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/item_filter_plant.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/item_filter_plant" +} \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/item_filter_smelt.json b/src/main/resources/assets/basepower/models/item/item_filter_smelt.json new file mode 100644 index 0000000..5386d84 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/item_filter_smelt.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/item_filter_smelt" +} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/rotator_tool.json b/src/main/resources/assets/basepower/models/item/rotator_tool.json similarity index 50% rename from src/main/resources/assets/poweradvantage/models/item/rotator_tool.json rename to src/main/resources/assets/basepower/models/item/rotator_tool.json index 498abaf..e096fa4 100644 --- a/src/main/resources/assets/poweradvantage/models/item/rotator_tool.json +++ b/src/main/resources/assets/basepower/models/item/rotator_tool.json @@ -1,6 +1,6 @@ { "parent": "item/handheld", "textures": { - "layer0": "poweradvantage:items/rotator_tool" + "layer0": "basepower:items/rotator_tool" } } \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/sprocket.json b/src/main/resources/assets/basepower/models/item/sprocket.json similarity index 53% rename from src/main/resources/assets/poweradvantage/models/item/sprocket.json rename to src/main/resources/assets/basepower/models/item/sprocket.json index f26d464..8555e9f 100644 --- a/src/main/resources/assets/poweradvantage/models/item/sprocket.json +++ b/src/main/resources/assets/basepower/models/item/sprocket.json @@ -1,6 +1,6 @@ { "parent": "item/generated", "textures": { - "layer0": "poweradvantage:items/sprocket" + "layer0": "basepower:items/sprocket" } } \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/starch.json b/src/main/resources/assets/basepower/models/item/starch.json similarity index 54% rename from src/main/resources/assets/poweradvantage/models/item/starch.json rename to src/main/resources/assets/basepower/models/item/starch.json index ac3db87..5e9dbcf 100644 --- a/src/main/resources/assets/poweradvantage/models/item/starch.json +++ b/src/main/resources/assets/basepower/models/item/starch.json @@ -1,6 +1,6 @@ { "parent": "item/generated", "textures": { - "layer0": "poweradvantage:items/starch" + "layer0": "basepower:items/starch" } } \ No newline at end of file diff --git a/src/main/resources/assets/basepower/models/item/steel_frame.json b/src/main/resources/assets/basepower/models/item/steel_frame.json new file mode 100644 index 0000000..78e655e --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/steel_frame.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/steel_frame" +} diff --git a/src/main/resources/assets/basepower/models/item/still.json b/src/main/resources/assets/basepower/models/item/still.json new file mode 100644 index 0000000..74f0491 --- /dev/null +++ b/src/main/resources/assets/basepower/models/item/still.json @@ -0,0 +1,3 @@ +{ + "parent": "basepower:block/still_off" +} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/crude_oil_flow.png b/src/main/resources/assets/basepower/textures/blocks/crude_oil_flow.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/crude_oil_flow.png rename to src/main/resources/assets/basepower/textures/blocks/crude_oil_flow.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/crude_oil_flow.png.mcmeta b/src/main/resources/assets/basepower/textures/blocks/crude_oil_flow.png.mcmeta similarity index 91% rename from src/main/resources/assets/poweradvantage/textures/blocks/crude_oil_flow.png.mcmeta rename to src/main/resources/assets/basepower/textures/blocks/crude_oil_flow.png.mcmeta index de3267f..4f0718a 100644 --- a/src/main/resources/assets/poweradvantage/textures/blocks/crude_oil_flow.png.mcmeta +++ b/src/main/resources/assets/basepower/textures/blocks/crude_oil_flow.png.mcmeta @@ -1,3 +1,3 @@ -{ - "animation": {} +{ + "animation": {} } \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/crude_oil_still.png b/src/main/resources/assets/basepower/textures/blocks/crude_oil_still.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/crude_oil_still.png rename to src/main/resources/assets/basepower/textures/blocks/crude_oil_still.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/crude_oil_still.png.mcmeta b/src/main/resources/assets/basepower/textures/blocks/crude_oil_still.png.mcmeta similarity index 89% rename from src/main/resources/assets/poweradvantage/textures/blocks/crude_oil_still.png.mcmeta rename to src/main/resources/assets/basepower/textures/blocks/crude_oil_still.png.mcmeta index 4b721e0..0645f48 100644 --- a/src/main/resources/assets/poweradvantage/textures/blocks/crude_oil_still.png.mcmeta +++ b/src/main/resources/assets/basepower/textures/blocks/crude_oil_still.png.mcmeta @@ -1,5 +1,5 @@ -{ - "animation": { - "frametime": 2 - } -} +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/filter_bottom.png b/src/main/resources/assets/basepower/textures/blocks/filter_bottom.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/filter_bottom.png rename to src/main/resources/assets/basepower/textures/blocks/filter_bottom.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/filter_side_block.png b/src/main/resources/assets/basepower/textures/blocks/filter_side_block.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/filter_side_block.png rename to src/main/resources/assets/basepower/textures/blocks/filter_side_block.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/filter_side_food.png b/src/main/resources/assets/basepower/textures/blocks/filter_side_food.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/filter_side_food.png rename to src/main/resources/assets/basepower/textures/blocks/filter_side_food.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/filter_side_fuel.png b/src/main/resources/assets/basepower/textures/blocks/filter_side_fuel.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/filter_side_fuel.png rename to src/main/resources/assets/basepower/textures/blocks/filter_side_fuel.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/filter_side_inventory.png b/src/main/resources/assets/basepower/textures/blocks/filter_side_inventory.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/filter_side_inventory.png rename to src/main/resources/assets/basepower/textures/blocks/filter_side_inventory.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/filter_side_ore.png b/src/main/resources/assets/basepower/textures/blocks/filter_side_ore.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/filter_side_ore.png rename to src/main/resources/assets/basepower/textures/blocks/filter_side_ore.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/filter_side_overflow.png b/src/main/resources/assets/basepower/textures/blocks/filter_side_overflow.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/filter_side_overflow.png rename to src/main/resources/assets/basepower/textures/blocks/filter_side_overflow.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/filter_side_plantable.png b/src/main/resources/assets/basepower/textures/blocks/filter_side_plantable.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/filter_side_plantable.png rename to src/main/resources/assets/basepower/textures/blocks/filter_side_plantable.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/filter_side_smeltable.png b/src/main/resources/assets/basepower/textures/blocks/filter_side_smeltable.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/filter_side_smeltable.png rename to src/main/resources/assets/basepower/textures/blocks/filter_side_smeltable.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/fluid_discharge_face.png b/src/main/resources/assets/basepower/textures/blocks/fluid_discharge_face.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/fluid_discharge_face.png rename to src/main/resources/assets/basepower/textures/blocks/fluid_discharge_face.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/fluid_discharge_side.png b/src/main/resources/assets/basepower/textures/blocks/fluid_discharge_side.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/fluid_discharge_side.png rename to src/main/resources/assets/basepower/textures/blocks/fluid_discharge_side.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/fluid_drain_face.png b/src/main/resources/assets/basepower/textures/blocks/fluid_drain_face.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/fluid_drain_face.png rename to src/main/resources/assets/basepower/textures/blocks/fluid_drain_face.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/fluid_drain_side.png b/src/main/resources/assets/basepower/textures/blocks/fluid_drain_side.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/fluid_drain_side.png rename to src/main/resources/assets/basepower/textures/blocks/fluid_drain_side.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/fluid_metal_tank_side.png b/src/main/resources/assets/basepower/textures/blocks/fluid_metal_tank_side.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/fluid_metal_tank_side.png rename to src/main/resources/assets/basepower/textures/blocks/fluid_metal_tank_side.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/fluid_metal_tank_top.png b/src/main/resources/assets/basepower/textures/blocks/fluid_metal_tank_top.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/fluid_metal_tank_top.png rename to src/main/resources/assets/basepower/textures/blocks/fluid_metal_tank_top.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/fluid_pipe.png b/src/main/resources/assets/basepower/textures/blocks/fluid_pipe.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/fluid_pipe.png rename to src/main/resources/assets/basepower/textures/blocks/fluid_pipe.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/fluid_switch_off.png b/src/main/resources/assets/basepower/textures/blocks/fluid_switch_off.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/fluid_switch_off.png rename to src/main/resources/assets/basepower/textures/blocks/fluid_switch_off.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/fluid_switch_on.png b/src/main/resources/assets/basepower/textures/blocks/fluid_switch_on.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/fluid_switch_on.png rename to src/main/resources/assets/basepower/textures/blocks/fluid_switch_on.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/item_conveyor_end.png b/src/main/resources/assets/basepower/textures/blocks/item_conveyor_end.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/item_conveyor_end.png rename to src/main/resources/assets/basepower/textures/blocks/item_conveyor_end.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/item_conveyor_side.png b/src/main/resources/assets/basepower/textures/blocks/item_conveyor_side.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/item_conveyor_side.png rename to src/main/resources/assets/basepower/textures/blocks/item_conveyor_side.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/item_conveyor_top.png b/src/main/resources/assets/basepower/textures/blocks/item_conveyor_top.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/item_conveyor_top.png rename to src/main/resources/assets/basepower/textures/blocks/item_conveyor_top.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/metal_panel.png b/src/main/resources/assets/basepower/textures/blocks/metal_panel.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/metal_panel.png rename to src/main/resources/assets/basepower/textures/blocks/metal_panel.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/powercable.png b/src/main/resources/assets/basepower/textures/blocks/powercable.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/powercable.png rename to src/main/resources/assets/basepower/textures/blocks/powercable.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/refined_oil_flow.png b/src/main/resources/assets/basepower/textures/blocks/refined_oil_flow.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/refined_oil_flow.png rename to src/main/resources/assets/basepower/textures/blocks/refined_oil_flow.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/refined_oil_flow.png.mcmeta b/src/main/resources/assets/basepower/textures/blocks/refined_oil_flow.png.mcmeta similarity index 91% rename from src/main/resources/assets/poweradvantage/textures/blocks/refined_oil_flow.png.mcmeta rename to src/main/resources/assets/basepower/textures/blocks/refined_oil_flow.png.mcmeta index de3267f..4f0718a 100644 --- a/src/main/resources/assets/poweradvantage/textures/blocks/refined_oil_flow.png.mcmeta +++ b/src/main/resources/assets/basepower/textures/blocks/refined_oil_flow.png.mcmeta @@ -1,3 +1,3 @@ -{ - "animation": {} +{ + "animation": {} } \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/refined_oil_still.png b/src/main/resources/assets/basepower/textures/blocks/refined_oil_still.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/refined_oil_still.png rename to src/main/resources/assets/basepower/textures/blocks/refined_oil_still.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/refined_oil_still.png.mcmeta b/src/main/resources/assets/basepower/textures/blocks/refined_oil_still.png.mcmeta similarity index 89% rename from src/main/resources/assets/poweradvantage/textures/blocks/refined_oil_still.png.mcmeta rename to src/main/resources/assets/basepower/textures/blocks/refined_oil_still.png.mcmeta index 4b721e0..0645f48 100644 --- a/src/main/resources/assets/poweradvantage/textures/blocks/refined_oil_still.png.mcmeta +++ b/src/main/resources/assets/basepower/textures/blocks/refined_oil_still.png.mcmeta @@ -1,5 +1,5 @@ -{ - "animation": { - "frametime": 2 - } -} +{ + "animation": { + "frametime": 2 + } +} diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/steel_frame.png b/src/main/resources/assets/basepower/textures/blocks/steel_frame.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/steel_frame.png rename to src/main/resources/assets/basepower/textures/blocks/steel_frame.png diff --git a/src/main/resources/assets/poweradvantage/textures/blocks/techreborn_converter.png b/src/main/resources/assets/basepower/textures/blocks/techreborn_converter.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/blocks/techreborn_converter.png rename to src/main/resources/assets/basepower/textures/blocks/techreborn_converter.png diff --git a/src/main/resources/assets/poweradvantage/textures/gui/container/fluid_discharge_gui.png b/src/main/resources/assets/basepower/textures/gui/container/fluid_discharge_gui.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/gui/container/fluid_discharge_gui.png rename to src/main/resources/assets/basepower/textures/gui/container/fluid_discharge_gui.png diff --git a/src/main/resources/assets/poweradvantage/textures/gui/container/fluid_drain_gui.png b/src/main/resources/assets/basepower/textures/gui/container/fluid_drain_gui.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/gui/container/fluid_drain_gui.png rename to src/main/resources/assets/basepower/textures/gui/container/fluid_drain_gui.png diff --git a/src/main/resources/assets/poweradvantage/textures/gui/container/fluid_metal_tank_gui.png b/src/main/resources/assets/basepower/textures/gui/container/fluid_metal_tank_gui.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/gui/container/fluid_metal_tank_gui.png rename to src/main/resources/assets/basepower/textures/gui/container/fluid_metal_tank_gui.png diff --git a/src/main/resources/assets/poweradvantage/textures/gui/container/fluid_storage_tank_gui.png b/src/main/resources/assets/basepower/textures/gui/container/fluid_storage_tank_gui.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/gui/container/fluid_storage_tank_gui.png rename to src/main/resources/assets/basepower/textures/gui/container/fluid_storage_tank_gui.png diff --git a/src/main/resources/assets/poweradvantage/textures/gui/container/item_conveyor.png b/src/main/resources/assets/basepower/textures/gui/container/item_conveyor.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/gui/container/item_conveyor.png rename to src/main/resources/assets/basepower/textures/gui/container/item_conveyor.png diff --git a/src/main/resources/assets/poweradvantage/textures/gui/container/item_conveyor_block.png b/src/main/resources/assets/basepower/textures/gui/container/item_conveyor_block.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/gui/container/item_conveyor_block.png rename to src/main/resources/assets/basepower/textures/gui/container/item_conveyor_block.png diff --git a/src/main/resources/assets/poweradvantage/textures/gui/container/item_conveyor_food.png b/src/main/resources/assets/basepower/textures/gui/container/item_conveyor_food.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/gui/container/item_conveyor_food.png rename to src/main/resources/assets/basepower/textures/gui/container/item_conveyor_food.png diff --git a/src/main/resources/assets/poweradvantage/textures/gui/container/item_conveyor_fuel.png b/src/main/resources/assets/basepower/textures/gui/container/item_conveyor_fuel.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/gui/container/item_conveyor_fuel.png rename to src/main/resources/assets/basepower/textures/gui/container/item_conveyor_fuel.png diff --git a/src/main/resources/assets/poweradvantage/textures/gui/container/item_conveyor_inventory.png b/src/main/resources/assets/basepower/textures/gui/container/item_conveyor_inventory.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/gui/container/item_conveyor_inventory.png rename to src/main/resources/assets/basepower/textures/gui/container/item_conveyor_inventory.png diff --git a/src/main/resources/assets/poweradvantage/textures/gui/container/item_conveyor_ore.png b/src/main/resources/assets/basepower/textures/gui/container/item_conveyor_ore.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/gui/container/item_conveyor_ore.png rename to src/main/resources/assets/basepower/textures/gui/container/item_conveyor_ore.png diff --git a/src/main/resources/assets/poweradvantage/textures/gui/container/item_conveyor_overflow.png b/src/main/resources/assets/basepower/textures/gui/container/item_conveyor_overflow.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/gui/container/item_conveyor_overflow.png rename to src/main/resources/assets/basepower/textures/gui/container/item_conveyor_overflow.png diff --git a/src/main/resources/assets/poweradvantage/textures/gui/container/item_conveyor_plant.png b/src/main/resources/assets/basepower/textures/gui/container/item_conveyor_plant.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/gui/container/item_conveyor_plant.png rename to src/main/resources/assets/basepower/textures/gui/container/item_conveyor_plant.png diff --git a/src/main/resources/assets/poweradvantage/textures/gui/container/item_conveyor_smelt.png b/src/main/resources/assets/basepower/textures/gui/container/item_conveyor_smelt.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/gui/container/item_conveyor_smelt.png rename to src/main/resources/assets/basepower/textures/gui/container/item_conveyor_smelt.png diff --git a/src/main/resources/assets/poweradvantage/textures/gui/container/machineGUI_template.png b/src/main/resources/assets/basepower/textures/gui/container/machineGUI_template.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/gui/container/machineGUI_template.png rename to src/main/resources/assets/basepower/textures/gui/container/machineGUI_template.png diff --git a/src/main/resources/assets/poweradvantage/textures/gui/container/player_inventory.png b/src/main/resources/assets/basepower/textures/gui/container/player_inventory.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/gui/container/player_inventory.png rename to src/main/resources/assets/basepower/textures/gui/container/player_inventory.png diff --git a/src/main/resources/assets/poweradvantage/textures/gui/container/still_gui.png b/src/main/resources/assets/basepower/textures/gui/container/still_gui.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/gui/container/still_gui.png rename to src/main/resources/assets/basepower/textures/gui/container/still_gui.png diff --git a/src/main/resources/assets/poweradvantage/textures/items/bioplastic_ingot.png b/src/main/resources/assets/basepower/textures/items/bioplastic_ingot.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/items/bioplastic_ingot.png rename to src/main/resources/assets/basepower/textures/items/bioplastic_ingot.png diff --git a/src/main/resources/assets/poweradvantage/textures/items/bucket_crude_oil.png b/src/main/resources/assets/basepower/textures/items/bucket_crude_oil.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/items/bucket_crude_oil.png rename to src/main/resources/assets/basepower/textures/items/bucket_crude_oil.png diff --git a/src/main/resources/assets/poweradvantage/textures/items/bucket_refined_oil.png b/src/main/resources/assets/basepower/textures/items/bucket_refined_oil.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/items/bucket_refined_oil.png rename to src/main/resources/assets/basepower/textures/items/bucket_refined_oil.png diff --git a/src/main/resources/assets/poweradvantage/textures/items/rotator_tool.png b/src/main/resources/assets/basepower/textures/items/rotator_tool.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/items/rotator_tool.png rename to src/main/resources/assets/basepower/textures/items/rotator_tool.png diff --git a/src/main/resources/assets/poweradvantage/textures/items/sprocket.png b/src/main/resources/assets/basepower/textures/items/sprocket.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/items/sprocket.png rename to src/main/resources/assets/basepower/textures/items/sprocket.png diff --git a/src/main/resources/assets/poweradvantage/textures/items/starch.png b/src/main/resources/assets/basepower/textures/items/starch.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/items/starch.png rename to src/main/resources/assets/basepower/textures/items/starch.png diff --git a/src/main/resources/assets/poweradvantage/textures/materials/brass.png b/src/main/resources/assets/basepower/textures/materials/brass.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/materials/brass.png rename to src/main/resources/assets/basepower/textures/materials/brass.png diff --git a/src/main/resources/assets/poweradvantage/textures/materials/copper.png b/src/main/resources/assets/basepower/textures/materials/copper.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/materials/copper.png rename to src/main/resources/assets/basepower/textures/materials/copper.png diff --git a/src/main/resources/assets/poweradvantage/textures/materials/invar.png b/src/main/resources/assets/basepower/textures/materials/invar.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/materials/invar.png rename to src/main/resources/assets/basepower/textures/materials/invar.png diff --git a/src/main/resources/assets/poweradvantage/textures/materials/iron.png b/src/main/resources/assets/basepower/textures/materials/iron.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/materials/iron.png rename to src/main/resources/assets/basepower/textures/materials/iron.png diff --git a/src/main/resources/assets/poweradvantage/textures/materials/metal_panel.png b/src/main/resources/assets/basepower/textures/materials/metal_panel.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/materials/metal_panel.png rename to src/main/resources/assets/basepower/textures/materials/metal_panel.png diff --git a/src/main/resources/assets/poweradvantage/textures/materials/plastic.png b/src/main/resources/assets/basepower/textures/materials/plastic.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/materials/plastic.png rename to src/main/resources/assets/basepower/textures/materials/plastic.png diff --git a/src/main/resources/assets/poweradvantage/textures/materials/steel.png b/src/main/resources/assets/basepower/textures/materials/steel.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/materials/steel.png rename to src/main/resources/assets/basepower/textures/materials/steel.png diff --git a/src/main/resources/assets/poweradvantage/textures/materials/steel_dark.png b/src/main/resources/assets/basepower/textures/materials/steel_dark.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/materials/steel_dark.png rename to src/main/resources/assets/basepower/textures/materials/steel_dark.png diff --git a/src/main/resources/assets/poweradvantage/textures/materials/stone.png b/src/main/resources/assets/basepower/textures/materials/stone.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/materials/stone.png rename to src/main/resources/assets/basepower/textures/materials/stone.png diff --git a/src/main/resources/assets/poweradvantage/textures/materials/stone_brick.png b/src/main/resources/assets/basepower/textures/materials/stone_brick.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/materials/stone_brick.png rename to src/main/resources/assets/basepower/textures/materials/stone_brick.png diff --git a/src/main/resources/assets/poweradvantage/textures/materials/wood.png b/src/main/resources/assets/basepower/textures/materials/wood.png similarity index 100% rename from src/main/resources/assets/poweradvantage/textures/materials/wood.png rename to src/main/resources/assets/basepower/textures/materials/wood.png diff --git a/src/main/resources/assets/poweradvantage/blockstates/converter_rf_electricity.json b/src/main/resources/assets/poweradvantage/blockstates/converter_rf_electricity.json deleted file mode 100644 index 97d881e..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/converter_rf_electricity.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=east": { "model": "poweradvantage:converter_rf_electricity", "y": 90 }, - "facing=north": { "model": "poweradvantage:converter_rf_electricity" }, - "facing=south": { "model": "poweradvantage:converter_rf_electricity", "y": 180 }, - "facing=west": { "model": "poweradvantage:converter_rf_electricity", "y": 270 } - } -} diff --git a/src/main/resources/assets/poweradvantage/blockstates/converter_rf_quantum.json b/src/main/resources/assets/poweradvantage/blockstates/converter_rf_quantum.json deleted file mode 100644 index 5e28590..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/converter_rf_quantum.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=east": { "model": "poweradvantage:converter_rf_quantum", "y": 90 }, - "facing=north": { "model": "poweradvantage:converter_rf_quantum" }, - "facing=south": { "model": "poweradvantage:converter_rf_quantum", "y": 180 }, - "facing=west": { "model": "poweradvantage:converter_rf_quantum", "y": 270 } - } -} diff --git a/src/main/resources/assets/poweradvantage/blockstates/converter_rf_steam.json b/src/main/resources/assets/poweradvantage/blockstates/converter_rf_steam.json deleted file mode 100644 index 110dd84..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/converter_rf_steam.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=east": { "model": "poweradvantage:converter_rf_steam", "y": 90 }, - "facing=north": { "model": "poweradvantage:converter_rf_steam" }, - "facing=south": { "model": "poweradvantage:converter_rf_steam", "y": 180 }, - "facing=west": { "model": "poweradvantage:converter_rf_steam", "y": 270 } - } -} diff --git a/src/main/resources/assets/poweradvantage/blockstates/converter_tr_electricity.json b/src/main/resources/assets/poweradvantage/blockstates/converter_tr_electricity.json deleted file mode 100644 index f3c6942..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/converter_tr_electricity.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=east": { "model": "poweradvantage:converter_tr_electricity", "y": 90 }, - "facing=north": { "model": "poweradvantage:converter_tr_electricity" }, - "facing=south": { "model": "poweradvantage:converter_tr_electricity", "y": 180 }, - "facing=west": { "model": "poweradvantage:converter_tr_electricity", "y": 270 } - } -} diff --git a/src/main/resources/assets/poweradvantage/blockstates/fluid_discharge.json b/src/main/resources/assets/poweradvantage/blockstates/fluid_discharge.json deleted file mode 100644 index 33f9842..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/fluid_discharge.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=east": { "model": "poweradvantage:fluid_discharge", "y": 90 }, - "facing=north": { "model": "poweradvantage:fluid_discharge" }, - "facing=south": { "model": "poweradvantage:fluid_discharge", "y": 180 }, - "facing=west": { "model": "poweradvantage:fluid_discharge", "y": 270 } - } -} diff --git a/src/main/resources/assets/poweradvantage/blockstates/fluid_drain.json b/src/main/resources/assets/poweradvantage/blockstates/fluid_drain.json deleted file mode 100644 index 3997fee..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/fluid_drain.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=east": { "model": "poweradvantage:fluid_drain", "y": 90 }, - "facing=north": { "model": "poweradvantage:fluid_drain" }, - "facing=south": { "model": "poweradvantage:fluid_drain", "y": 180 }, - "facing=west": { "model": "poweradvantage:fluid_drain", "y": 270 } - } -} diff --git a/src/main/resources/assets/poweradvantage/blockstates/fluid_metal_tank.json b/src/main/resources/assets/poweradvantage/blockstates/fluid_metal_tank.json deleted file mode 100644 index 167fb81..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/fluid_metal_tank.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=east": { "model": "poweradvantage:fluid_metal_tank", "y": 90, "uvlock": true }, - "facing=north": { "model": "poweradvantage:fluid_metal_tank", "uvlock": true }, - "facing=south": { "model": "poweradvantage:fluid_metal_tank", "y": 180, "uvlock": true }, - "facing=west": { "model": "poweradvantage:fluid_metal_tank", "y": 270, "uvlock": true } - } -} diff --git a/src/main/resources/assets/poweradvantage/blockstates/fluid_pipe.json b/src/main/resources/assets/poweradvantage/blockstates/fluid_pipe.json deleted file mode 100644 index 3d94554..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/fluid_pipe.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "__comment": "blockstate parameters MUST be in alphabetical order!", - "variants": { - "down=false,east=false,north=false,south=false,up=false,west=false": { "model": "poweradvantage:fluid_pipe_ensw", "x": 0, "y": 0, "uvlock": false }, - "down=true,east=false,north=false,south=false,up=false,west=false": { "model": "poweradvantage:fluid_pipe_n", "x": 90, "y": 0, "uvlock": false }, - "down=false,east=true,north=false,south=false,up=false,west=false": { "model": "poweradvantage:fluid_pipe_n", "x": 0, "y": 90, "uvlock": false }, - "down=false,east=false,north=true,south=false,up=false,west=false": { "model": "poweradvantage:fluid_pipe_n", "x": 0, "y": 0, "uvlock": false }, - "down=false,east=false,north=false,south=true,up=false,west=false": { "model": "poweradvantage:fluid_pipe_n", "x": 0, "y": 180, "uvlock": false }, - "down=false,east=false,north=false,south=false,up=true,west=false": { "model": "poweradvantage:fluid_pipe_n", "x": 270, "y": 0, "uvlock": false }, - "down=false,east=false,north=false,south=false,up=false,west=true": { "model": "poweradvantage:fluid_pipe_n", "x": 0, "y": 270, "uvlock": false }, - "down=true,east=true,north=false,south=false,up=false,west=false": { "model": "poweradvantage:fluid_pipe_nw", "x": 90, "y": 180, "uvlock": false }, - "down=true,east=false,north=true,south=false,up=false,west=false": { "model": "poweradvantage:fluid_pipe_nw", "x": 90, "y": 90, "uvlock": false }, - "down=true,east=false,north=false,south=true,up=false,west=false": { "model": "poweradvantage:fluid_pipe_nw", "x": 90, "y": 270, "uvlock": false }, - "down=true,east=false,north=false,south=false,up=true,west=false": { "model": "poweradvantage:fluid_pipe_ns", "x": 90, "y": 0, "uvlock": false }, - "down=true,east=false,north=false,south=false,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nw", "x": 90, "y": 0, "uvlock": false }, - "down=false,east=true,north=true,south=false,up=false,west=false": { "model": "poweradvantage:fluid_pipe_nw", "x": 0, "y": 90, "uvlock": false }, - "down=false,east=true,north=false,south=true,up=false,west=false": { "model": "poweradvantage:fluid_pipe_nw", "x": 0, "y": 180, "uvlock": false }, - "down=false,east=true,north=false,south=false,up=true,west=false": { "model": "poweradvantage:fluid_pipe_nw", "x": 270, "y": 180, "uvlock": false }, - "down=false,east=true,north=false,south=false,up=false,west=true": { "model": "poweradvantage:fluid_pipe_ns", "x": 0, "y": 90, "uvlock": false }, - "down=false,east=false,north=true,south=true,up=false,west=false": { "model": "poweradvantage:fluid_pipe_ns", "x": 0, "y": 0, "uvlock": false }, - "down=false,east=false,north=true,south=false,up=true,west=false": { "model": "poweradvantage:fluid_pipe_nw", "x": 270, "y": 90, "uvlock": false }, - "down=false,east=false,north=true,south=false,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nw", "x": 0, "y": 0, "uvlock": false }, - "down=false,east=false,north=false,south=true,up=true,west=false": { "model": "poweradvantage:fluid_pipe_nw", "x": 270, "y": 270, "uvlock": false }, - "down=false,east=false,north=false,south=true,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nw", "x": 0, "y": 270, "uvlock": false }, - "down=false,east=false,north=false,south=false,up=true,west=true": { "model": "poweradvantage:fluid_pipe_nw", "x": 270, "y": 0, "uvlock": false }, - "down=true,east=true,north=true,south=false,up=false,west=false": { "model": "poweradvantage:fluid_pipe_nuw", "x": 90, "y": 90, "uvlock": false }, - "down=true,east=true,north=false,south=true,up=false,west=false": { "model": "poweradvantage:fluid_pipe_nuw", "x": 90, "y": 180, "uvlock": false }, - "down=true,east=true,north=false,south=false,up=true,west=false": { "model": "poweradvantage:fluid_pipe_dnu", "x": 0, "y": 90, "uvlock": false }, - "down=true,east=true,north=false,south=false,up=false,west=true": { "model": "poweradvantage:fluid_pipe_dnu", "x": 90, "y": 90, "uvlock": false }, - "down=true,east=false,north=true,south=true,up=false,west=false": { "model": "poweradvantage:fluid_pipe_dnu", "x": 90, "y": 0, "uvlock": false }, - "down=true,east=false,north=true,south=false,up=true,west=false": { "model": "poweradvantage:fluid_pipe_dnu", "x": 0, "y": 0, "uvlock": false }, - "down=true,east=false,north=true,south=false,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nuw", "x": 90, "y": 0, "uvlock": false }, - "down=true,east=false,north=false,south=true,up=true,west=false": { "model": "poweradvantage:fluid_pipe_dnu", "x": 0, "y": 180, "uvlock": false }, - "down=true,east=false,north=false,south=true,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nuw", "x": 90, "y": 270, "uvlock": false }, - "down=true,east=false,north=false,south=false,up=true,west=true": { "model": "poweradvantage:fluid_pipe_dnu", "x": 0, "y": 270, "uvlock": false }, - "down=false,east=true,north=true,south=true,up=false,west=false": { "model": "poweradvantage:fluid_pipe_nsw", "x": 0, "y": 180, "uvlock": false }, - "down=false,east=true,north=true,south=false,up=true,west=false": { "model": "poweradvantage:fluid_pipe_nuw", "x": 0, "y": 90, "uvlock": false }, - "down=false,east=true,north=true,south=false,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nsw", "x": 0, "y": 90, "uvlock": false }, - "down=false,east=true,north=false,south=true,up=true,west=false": { "model": "poweradvantage:fluid_pipe_nuw", "x": 0, "y": 180, "uvlock": false }, - "down=false,east=true,north=false,south=true,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nsw", "x": 0, "y": 270, "uvlock": false }, - "down=false,east=true,north=false,south=false,up=true,west=true": { "model": "poweradvantage:fluid_pipe_dnu", "x": 270, "y": 90, "uvlock": false }, - "down=false,east=false,north=true,south=true,up=true,west=false": { "model": "poweradvantage:fluid_pipe_dnu", "x": 270, "y": 0, "uvlock": false }, - "down=false,east=false,north=true,south=true,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nsw", "x": 0, "y": 0, "uvlock": false }, - "down=false,east=false,north=true,south=false,up=true,west=true": { "model": "poweradvantage:fluid_pipe_nuw", "x": 0, "y": 0, "uvlock": false }, - "down=false,east=false,north=false,south=true,up=true,west=true": { "model": "poweradvantage:fluid_pipe_nuw", "x": 0, "y": 270, "uvlock": false }, - "down=true,east=true,north=true,south=true,up=false,west=false": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 180, "y": 180, "uvlock": false }, - "down=true,east=true,north=true,south=false,up=true,west=false": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 90, "y": 90, "uvlock": false }, - "down=true,east=true,north=true,south=false,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 180, "y": 90, "uvlock": false }, - "down=true,east=true,north=false,south=true,up=true,west=false": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 90, "y": 180, "uvlock": false }, - "down=true,east=true,north=false,south=true,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 180, "y": 270, "uvlock": false }, - "down=true,east=true,north=false,south=false,up=true,west=true": { "model": "poweradvantage:fluid_pipe_ensw", "x": 90, "y": 0, "uvlock": false }, - "down=true,east=false,north=true,south=true,up=true,west=false": { "model": "poweradvantage:fluid_pipe_ensw", "x": 90, "y": 90, "uvlock": false }, - "down=true,east=false,north=true,south=true,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 180, "y": 0, "uvlock": false }, - "down=true,east=false,north=true,south=false,up=true,west=true": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 90, "y": 0, "uvlock": false }, - "down=true,east=false,north=false,south=true,up=true,west=true": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 90, "y": 270, "uvlock": false }, - "down=false,east=true,north=true,south=true,up=true,west=false": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 0, "y": 180, "uvlock": false }, - "down=false,east=true,north=true,south=true,up=false,west=true": { "model": "poweradvantage:fluid_pipe_ensw", "x": 0, "y": 0, "uvlock": false }, - "down=false,east=true,north=true,south=false,up=true,west=true": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 0, "y": 90, "uvlock": false }, - "down=false,east=true,north=false,south=true,up=true,west=true": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 0, "y": 270, "uvlock": false }, - "down=false,east=false,north=true,south=true,up=true,west=true": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 0, "y": 0, "uvlock": false }, - "down=true,east=true,north=true,south=true,up=true,west=false": { "model": "poweradvantage:fluid_pipe_desuw", "x": 0, "y": 270, "uvlock": false }, - "down=true,east=true,north=true,south=true,up=false,west=true": { "model": "poweradvantage:fluid_pipe_desuw", "x": 270, "y": 0, "uvlock": false }, - "down=true,east=true,north=true,south=false,up=true,west=true": { "model": "poweradvantage:fluid_pipe_desuw", "x": 0, "y": 180, "uvlock": false }, - "down=true,east=true,north=false,south=true,up=true,west=true": { "model": "poweradvantage:fluid_pipe_desuw", "x": 0, "y": 0, "uvlock": false }, - "down=true,east=false,north=true,south=true,up=true,west=true": { "model": "poweradvantage:fluid_pipe_desuw", "x": 0, "y": 90, "uvlock": false }, - "down=false,east=true,north=true,south=true,up=true,west=true": { "model": "poweradvantage:fluid_pipe_desuw", "x": 90, "y": 0, "uvlock": false }, - "down=true,east=true,north=true,south=true,up=true,west=true": { "model": "poweradvantage:fluid_pipe_densuw", "x": 0, "y": 0, "uvlock": false } - - } -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/blockstates/fluid_pipe_terminal.json b/src/main/resources/assets/poweradvantage/blockstates/fluid_pipe_terminal.json deleted file mode 100644 index a6e7720..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/fluid_pipe_terminal.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "__comment": "blockstate parameters MUST be in alphabetical order!", - "variants": { - "down=false,east=false,north=false,south=false,up=false,west=false": { "model": "poweradvantage:fluid_pipe_0", "x": 0, "y": 0, "uvlock": false }, - "down=true,east=false,north=false,south=false,up=false,west=false": { "model": "poweradvantage:fluid_pipe_n", "x": 90, "y": 0, "uvlock": false }, - "down=false,east=true,north=false,south=false,up=false,west=false": { "model": "poweradvantage:fluid_pipe_n", "x": 0, "y": 90, "uvlock": false }, - "down=false,east=false,north=true,south=false,up=false,west=false": { "model": "poweradvantage:fluid_pipe_n", "x": 0, "y": 0, "uvlock": false }, - "down=false,east=false,north=false,south=true,up=false,west=false": { "model": "poweradvantage:fluid_pipe_n", "x": 0, "y": 180, "uvlock": false }, - "down=false,east=false,north=false,south=false,up=true,west=false": { "model": "poweradvantage:fluid_pipe_n", "x": 270, "y": 0, "uvlock": false }, - "down=false,east=false,north=false,south=false,up=false,west=true": { "model": "poweradvantage:fluid_pipe_n", "x": 0, "y": 270, "uvlock": false }, - "down=true,east=true,north=false,south=false,up=false,west=false": { "model": "poweradvantage:fluid_pipe_nw", "x": 90, "y": 180, "uvlock": false }, - "down=true,east=false,north=true,south=false,up=false,west=false": { "model": "poweradvantage:fluid_pipe_nw", "x": 90, "y": 90, "uvlock": false }, - "down=true,east=false,north=false,south=true,up=false,west=false": { "model": "poweradvantage:fluid_pipe_nw", "x": 90, "y": 270, "uvlock": false }, - "down=true,east=false,north=false,south=false,up=true,west=false": { "model": "poweradvantage:fluid_pipe_ns", "x": 90, "y": 0, "uvlock": false }, - "down=true,east=false,north=false,south=false,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nw", "x": 90, "y": 0, "uvlock": false }, - "down=false,east=true,north=true,south=false,up=false,west=false": { "model": "poweradvantage:fluid_pipe_nw", "x": 0, "y": 90, "uvlock": false }, - "down=false,east=true,north=false,south=true,up=false,west=false": { "model": "poweradvantage:fluid_pipe_nw", "x": 0, "y": 180, "uvlock": false }, - "down=false,east=true,north=false,south=false,up=true,west=false": { "model": "poweradvantage:fluid_pipe_nw", "x": 270, "y": 180, "uvlock": false }, - "down=false,east=true,north=false,south=false,up=false,west=true": { "model": "poweradvantage:fluid_pipe_ns", "x": 0, "y": 90, "uvlock": false }, - "down=false,east=false,north=true,south=true,up=false,west=false": { "model": "poweradvantage:fluid_pipe_ns", "x": 0, "y": 0, "uvlock": false }, - "down=false,east=false,north=true,south=false,up=true,west=false": { "model": "poweradvantage:fluid_pipe_nw", "x": 270, "y": 90, "uvlock": false }, - "down=false,east=false,north=true,south=false,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nw", "x": 0, "y": 0, "uvlock": false }, - "down=false,east=false,north=false,south=true,up=true,west=false": { "model": "poweradvantage:fluid_pipe_nw", "x": 270, "y": 270, "uvlock": false }, - "down=false,east=false,north=false,south=true,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nw", "x": 0, "y": 270, "uvlock": false }, - "down=false,east=false,north=false,south=false,up=true,west=true": { "model": "poweradvantage:fluid_pipe_nw", "x": 270, "y": 0, "uvlock": false }, - "down=true,east=true,north=true,south=false,up=false,west=false": { "model": "poweradvantage:fluid_pipe_nuw", "x": 90, "y": 90, "uvlock": false }, - "down=true,east=true,north=false,south=true,up=false,west=false": { "model": "poweradvantage:fluid_pipe_nuw", "x": 90, "y": 180, "uvlock": false }, - "down=true,east=true,north=false,south=false,up=true,west=false": { "model": "poweradvantage:fluid_pipe_dnu", "x": 0, "y": 90, "uvlock": false }, - "down=true,east=true,north=false,south=false,up=false,west=true": { "model": "poweradvantage:fluid_pipe_dnu", "x": 90, "y": 90, "uvlock": false }, - "down=true,east=false,north=true,south=true,up=false,west=false": { "model": "poweradvantage:fluid_pipe_dnu", "x": 90, "y": 0, "uvlock": false }, - "down=true,east=false,north=true,south=false,up=true,west=false": { "model": "poweradvantage:fluid_pipe_dnu", "x": 0, "y": 0, "uvlock": false }, - "down=true,east=false,north=true,south=false,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nuw", "x": 90, "y": 0, "uvlock": false }, - "down=true,east=false,north=false,south=true,up=true,west=false": { "model": "poweradvantage:fluid_pipe_dnu", "x": 0, "y": 180, "uvlock": false }, - "down=true,east=false,north=false,south=true,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nuw", "x": 90, "y": 270, "uvlock": false }, - "down=true,east=false,north=false,south=false,up=true,west=true": { "model": "poweradvantage:fluid_pipe_dnu", "x": 0, "y": 270, "uvlock": false }, - "down=false,east=true,north=true,south=true,up=false,west=false": { "model": "poweradvantage:fluid_pipe_nsw", "x": 0, "y": 180, "uvlock": false }, - "down=false,east=true,north=true,south=false,up=true,west=false": { "model": "poweradvantage:fluid_pipe_nuw", "x": 0, "y": 90, "uvlock": false }, - "down=false,east=true,north=true,south=false,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nsw", "x": 0, "y": 90, "uvlock": false }, - "down=false,east=true,north=false,south=true,up=true,west=false": { "model": "poweradvantage:fluid_pipe_nuw", "x": 0, "y": 180, "uvlock": false }, - "down=false,east=true,north=false,south=true,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nsw", "x": 0, "y": 270, "uvlock": false }, - "down=false,east=true,north=false,south=false,up=true,west=true": { "model": "poweradvantage:fluid_pipe_dnu", "x": 270, "y": 90, "uvlock": false }, - "down=false,east=false,north=true,south=true,up=true,west=false": { "model": "poweradvantage:fluid_pipe_dnu", "x": 270, "y": 0, "uvlock": false }, - "down=false,east=false,north=true,south=true,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nsw", "x": 0, "y": 0, "uvlock": false }, - "down=false,east=false,north=true,south=false,up=true,west=true": { "model": "poweradvantage:fluid_pipe_nuw", "x": 0, "y": 0, "uvlock": false }, - "down=false,east=false,north=false,south=true,up=true,west=true": { "model": "poweradvantage:fluid_pipe_nuw", "x": 0, "y": 270, "uvlock": false }, - "down=true,east=true,north=true,south=true,up=false,west=false": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 180, "y": 180, "uvlock": false }, - "down=true,east=true,north=true,south=false,up=true,west=false": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 90, "y": 90, "uvlock": false }, - "down=true,east=true,north=true,south=false,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 180, "y": 90, "uvlock": false }, - "down=true,east=true,north=false,south=true,up=true,west=false": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 90, "y": 180, "uvlock": false }, - "down=true,east=true,north=false,south=true,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 180, "y": 270, "uvlock": false }, - "down=true,east=true,north=false,south=false,up=true,west=true": { "model": "poweradvantage:fluid_pipe_ensw", "x": 90, "y": 0, "uvlock": false }, - "down=true,east=false,north=true,south=true,up=true,west=false": { "model": "poweradvantage:fluid_pipe_ensw", "x": 90, "y": 90, "uvlock": false }, - "down=true,east=false,north=true,south=true,up=false,west=true": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 180, "y": 0, "uvlock": false }, - "down=true,east=false,north=true,south=false,up=true,west=true": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 90, "y": 0, "uvlock": false }, - "down=true,east=false,north=false,south=true,up=true,west=true": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 90, "y": 270, "uvlock": false }, - "down=false,east=true,north=true,south=true,up=true,west=false": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 0, "y": 180, "uvlock": false }, - "down=false,east=true,north=true,south=true,up=false,west=true": { "model": "poweradvantage:fluid_pipe_ensw", "x": 0, "y": 0, "uvlock": false }, - "down=false,east=true,north=true,south=false,up=true,west=true": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 0, "y": 90, "uvlock": false }, - "down=false,east=true,north=false,south=true,up=true,west=true": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 0, "y": 270, "uvlock": false }, - "down=false,east=false,north=true,south=true,up=true,west=true": { "model": "poweradvantage:fluid_pipe_nsuw", "x": 0, "y": 0, "uvlock": false }, - "down=true,east=true,north=true,south=true,up=true,west=false": { "model": "poweradvantage:fluid_pipe_desuw", "x": 0, "y": 270, "uvlock": false }, - "down=true,east=true,north=true,south=true,up=false,west=true": { "model": "poweradvantage:fluid_pipe_desuw", "x": 270, "y": 0, "uvlock": false }, - "down=true,east=true,north=true,south=false,up=true,west=true": { "model": "poweradvantage:fluid_pipe_desuw", "x": 0, "y": 180, "uvlock": false }, - "down=true,east=true,north=false,south=true,up=true,west=true": { "model": "poweradvantage:fluid_pipe_desuw", "x": 0, "y": 0, "uvlock": false }, - "down=true,east=false,north=true,south=true,up=true,west=true": { "model": "poweradvantage:fluid_pipe_desuw", "x": 0, "y": 90, "uvlock": false }, - "down=false,east=true,north=true,south=true,up=true,west=true": { "model": "poweradvantage:fluid_pipe_desuw", "x": 90, "y": 0, "uvlock": false }, - "down=true,east=true,north=true,south=true,up=true,west=true": { "model": "poweradvantage:fluid_pipe_densuw", "x": 0, "y": 0, "uvlock": false } - - } -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/blockstates/fluid_storage_tank.json b/src/main/resources/assets/poweradvantage/blockstates/fluid_storage_tank.json deleted file mode 100644 index 1becb1c..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/fluid_storage_tank.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=east": { "model": "poweradvantage:fluid_storage_tank", "y": 90 }, - "facing=north": { "model": "poweradvantage:fluid_storage_tank" }, - "facing=south": { "model": "poweradvantage:fluid_storage_tank", "y": 180 }, - "facing=west": { "model": "poweradvantage:fluid_storage_tank", "y": 270 } - } -} diff --git a/src/main/resources/assets/poweradvantage/blockstates/fluid_switch.json b/src/main/resources/assets/poweradvantage/blockstates/fluid_switch.json deleted file mode 100644 index a3e5b65..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/fluid_switch.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "variants": { - "active=false": { "model": "poweradvantage:fluid_switch_off"}, - "active=true": { "model": "poweradvantage:fluid_switch_on"} - } -} diff --git a/src/main/resources/assets/poweradvantage/blockstates/infinite_electricity.json b/src/main/resources/assets/poweradvantage/blockstates/infinite_electricity.json deleted file mode 100644 index 8cc55cc..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/infinite_electricity.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=east": { "model": "poweradvantage:infinite_electricity", "y": 90 }, - "facing=north": { "model": "poweradvantage:infinite_electricity" }, - "facing=south": { "model": "poweradvantage:infinite_electricity", "y": 180 }, - "facing=west": { "model": "poweradvantage:infinite_electricity", "y": 270 } - } -} diff --git a/src/main/resources/assets/poweradvantage/blockstates/infinite_quantum.json b/src/main/resources/assets/poweradvantage/blockstates/infinite_quantum.json deleted file mode 100644 index 7ba2ae4..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/infinite_quantum.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=east": { "model": "poweradvantage:infinite_quantum", "y": 90 }, - "facing=north": { "model": "poweradvantage:infinite_quantum" }, - "facing=south": { "model": "poweradvantage:infinite_quantum", "y": 180 }, - "facing=west": { "model": "poweradvantage:infinite_quantum", "y": 270 } - } -} diff --git a/src/main/resources/assets/poweradvantage/blockstates/infinite_steam.json b/src/main/resources/assets/poweradvantage/blockstates/infinite_steam.json deleted file mode 100644 index ea59a65..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/infinite_steam.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=east": { "model": "poweradvantage:infinite_steam", "y": 90 }, - "facing=north": { "model": "poweradvantage:infinite_steam" }, - "facing=south": { "model": "poweradvantage:infinite_steam", "y": 180 }, - "facing=west": { "model": "poweradvantage:infinite_steam", "y": 270 } - } -} diff --git a/src/main/resources/assets/poweradvantage/blockstates/item_conveyor.json b/src/main/resources/assets/poweradvantage/blockstates/item_conveyor.json deleted file mode 100644 index f000863..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/item_conveyor.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "facing=down": { "model": "poweradvantage:item_conveyor", "x": 90 }, - "facing=up": { "model": "poweradvantage:item_conveyor", "x": 270 }, - "facing=north": { "model": "poweradvantage:item_conveyor" }, - "facing=south": { "model": "poweradvantage:item_conveyor", "y": 180 }, - "facing=west": { "model": "poweradvantage:item_conveyor", "y": 270 }, - "facing=east": { "model": "poweradvantage:item_conveyor", "y": 90 } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/blockstates/item_filter_block.json b/src/main/resources/assets/poweradvantage/blockstates/item_filter_block.json deleted file mode 100644 index 9ac2714..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/item_filter_block.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=north": { "model": "poweradvantage:item_filter_block" }, - "facing=south": { "model": "poweradvantage:item_filter_block", "y": 180 }, - "facing=west": { "model": "poweradvantage:item_filter_block", "y": 270 }, - "facing=east": { "model": "poweradvantage:item_filter_block", "y": 90 } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/blockstates/item_filter_food.json b/src/main/resources/assets/poweradvantage/blockstates/item_filter_food.json deleted file mode 100644 index f3d0201..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/item_filter_food.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=north": { "model": "poweradvantage:item_filter_food" }, - "facing=south": { "model": "poweradvantage:item_filter_food", "y": 180 }, - "facing=west": { "model": "poweradvantage:item_filter_food", "y": 270 }, - "facing=east": { "model": "poweradvantage:item_filter_food", "y": 90 } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/blockstates/item_filter_fuel.json b/src/main/resources/assets/poweradvantage/blockstates/item_filter_fuel.json deleted file mode 100644 index e3ddd50..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/item_filter_fuel.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=north": { "model": "poweradvantage:item_filter_fuel" }, - "facing=south": { "model": "poweradvantage:item_filter_fuel", "y": 180 }, - "facing=west": { "model": "poweradvantage:item_filter_fuel", "y": 270 }, - "facing=east": { "model": "poweradvantage:item_filter_fuel", "y": 90 } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/blockstates/item_filter_inventory.json b/src/main/resources/assets/poweradvantage/blockstates/item_filter_inventory.json deleted file mode 100644 index cb50460..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/item_filter_inventory.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=north": { "model": "poweradvantage:item_filter_inventory" }, - "facing=south": { "model": "poweradvantage:item_filter_inventory", "y": 180 }, - "facing=west": { "model": "poweradvantage:item_filter_inventory", "y": 270 }, - "facing=east": { "model": "poweradvantage:item_filter_inventory", "y": 90 } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/blockstates/item_filter_ore.json b/src/main/resources/assets/poweradvantage/blockstates/item_filter_ore.json deleted file mode 100644 index 9983ebc..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/item_filter_ore.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=north": { "model": "poweradvantage:item_filter_ore" }, - "facing=south": { "model": "poweradvantage:item_filter_ore", "y": 180 }, - "facing=west": { "model": "poweradvantage:item_filter_ore", "y": 270 }, - "facing=east": { "model": "poweradvantage:item_filter_ore", "y": 90 } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/blockstates/item_filter_overflow.json b/src/main/resources/assets/poweradvantage/blockstates/item_filter_overflow.json deleted file mode 100644 index cae43ed..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/item_filter_overflow.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=north": { "model": "poweradvantage:item_filter_overflow" }, - "facing=south": { "model": "poweradvantage:item_filter_overflow", "y": 180 }, - "facing=west": { "model": "poweradvantage:item_filter_overflow", "y": 270 }, - "facing=east": { "model": "poweradvantage:item_filter_overflow", "y": 90 } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/blockstates/item_filter_plant.json b/src/main/resources/assets/poweradvantage/blockstates/item_filter_plant.json deleted file mode 100644 index ac947ea..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/item_filter_plant.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=north": { "model": "poweradvantage:item_filter_plant" }, - "facing=south": { "model": "poweradvantage:item_filter_plant", "y": 180 }, - "facing=west": { "model": "poweradvantage:item_filter_plant", "y": 270 }, - "facing=east": { "model": "poweradvantage:item_filter_plant", "y": 90 } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/blockstates/item_filter_smelt.json b/src/main/resources/assets/poweradvantage/blockstates/item_filter_smelt.json deleted file mode 100644 index 072ae29..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/item_filter_smelt.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=north": { "model": "poweradvantage:item_filter_smelt" }, - "facing=south": { "model": "poweradvantage:item_filter_smelt", "y": 180 }, - "facing=west": { "model": "poweradvantage:item_filter_smelt", "y": 270 }, - "facing=east": { "model": "poweradvantage:item_filter_smelt", "y": 90 } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/blockstates/steel_frame.json b/src/main/resources/assets/poweradvantage/blockstates/steel_frame.json deleted file mode 100644 index c39fa3b..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/steel_frame.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "poweradvantage:steel_frame" } - } -} diff --git a/src/main/resources/assets/poweradvantage/blockstates/still.json b/src/main/resources/assets/poweradvantage/blockstates/still.json deleted file mode 100644 index bcd36cb..0000000 --- a/src/main/resources/assets/poweradvantage/blockstates/still.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "variants": { - "active=false,facing=east": { "model": "poweradvantage:still_off", "y": 90 }, - "active=false,facing=north": { "model": "poweradvantage:still_off"}, - "active=false,facing=south": { "model": "poweradvantage:still_off", "y": 180}, - "active=false,facing=west": { "model": "poweradvantage:still_off", "y": 270}, - "active=true,facing=east": { "model": "poweradvantage:still_on", "y": 90 }, - "active=true,facing=north": { "model": "poweradvantage:still_on"}, - "active=true,facing=south": { "model": "poweradvantage:still_on", "y": 180}, - "active=true,facing=west": { "model": "poweradvantage:still_on", "y": 270} - } -} diff --git a/src/main/resources/assets/poweradvantage/lang/de_DE.lang b/src/main/resources/assets/poweradvantage/lang/de_DE.lang deleted file mode 100644 index 4ad6bc1..0000000 --- a/src/main/resources/assets/poweradvantage/lang/de_DE.lang +++ /dev/null @@ -1,55 +0,0 @@ -language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) -nei.poweradvantage.recipehandler.shapelessfurnace.name=Große Ofen (formlos) -nei.poweradvantage.recipehandler.shapedfurnace.name=Große Ofen (geformt) - -tooltip.poweradvantage.empty=Leer -tooltip.poweradvantage.buckets_of=%x Eimer %y - -itemGroup.poweradvantage=Leistungsvorteil - -tile.poweradvantage.fluid_drain.name=Ablauf -tile.poweradvantage.fluid_discharge.name=Austragsrost -tile.poweradvantage.fluid_storage_tank.name=Lagertank -item.poweradvantage.fluid_storage_tank_item.name=Speicher -tile.poweradvantage.fluid_pipe.name=Rohr - -tile.poweradvantage.item_conveyor.name=Förderer -tile.poweradvantage.item_filter_block.name=Block Auswahl Förder -tile.poweradvantage.item_filter_food.name=Lebensmittel Auswahl Förder -tile.poweradvantage.item_filter_fuel.name=Brennstoff Auswahl Förder -tile.poweradvantage.item_filter_inventory.name=Anpassbare Auswahl Förder -tile.poweradvantage.item_filter_ore.name=Erz Auswahl Förder -tile.poweradvantage.item_filter_plant.name=Pflanze Auswahl Förder -tile.poweradvantage.item_filter_smelt.name=Kochbare Auswahl Förder -tile.poweradvantage.item_filter_overflow.name=Überlauf Auswahl Förder -tile.poweradvantage.steel_frame.name=Stahlrahmen - - -item.poweradvantage.starch.name=Kartoffelstärke -item.poweradvantage.bioplastic_ingot.name=Biokunststoff-Barren -item.poweradvantage.sprocket.name=Kettenrad - - -tile.poweradvantage.fluid_metal_tank.name=Metall-Lagertank -item.poweradvantage.rotator_tool.name=Drehwerkzeug - -tile.poweradvantage.infinite_steam.name=Unendlichen Dampfkraft -tile.poweradvantage.infinite_electricity.name=Unendliche Elektrische Leistung -tile.poweradvantage.infinite_quantum.name=Unendliche Quanten Leistung - -tile.poweradvantage.crude_oil.name=Rohöl -fluid.poweradvantage.crude_oil=Rohöl -item.bucket.crude_oil=Eimer Rohöl - - -tile.poweradvantage.still.name=Brennerei - -tile.poweradvantage.refined_oil.name=Raffiniertes Öl -fluid.poweradvantage.refined_oil=Raffiniertes Öl -item.bucket.refined_oil=Eimer für Raffiniertes Öl -tile.poweradvantage.fluid_switch.name=Ventil - -tile.poweradvantage.converter_rf_steam.name=Dampf-RF Leistungstransformator -tile.poweradvantage.converter_rf_electricity.name=Elektrizität-RF Leistungstransformator -tile.poweradvantage.converter_rf_quantum.name=Quant-RF Leistungstransformator -tile.poweradvantage.converter_tr_electricity.name=Elektrizität-EU Leistungstransformator diff --git a/src/main/resources/assets/poweradvantage/lang/en_AU.lang b/src/main/resources/assets/poweradvantage/lang/en_AU.lang deleted file mode 100644 index 4009dfa..0000000 --- a/src/main/resources/assets/poweradvantage/lang/en_AU.lang +++ /dev/null @@ -1,54 +0,0 @@ -language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) -nei.poweradvantage.recipehandler.shapelessfurnace.name=Large Furnace (Shapeless) -nei.poweradvantage.recipehandler.shapedfurnace.name=Large Furnace (Shaped) - -tooltip.poweradvantage.empty=Empty -tooltip.poweradvantage.buckets_of=%x buckets of %y - -itemGroup.poweradvantage=Power Advantage - -tile.poweradvantage.fluid_drain.name=Drain -tile.poweradvantage.fluid_discharge.name=Discharge Grate -tile.poweradvantage.fluid_storage_tank.name=Portable Fluid Tank -item.poweradvantage.fluid_storage_tank_item.name=Storage Tank -tile.poweradvantage.fluid_pipe.name=Pipe - -tile.poweradvantage.item_conveyor.name=Conveyor -tile.poweradvantage.item_filter_block.name=Block Filter Conveyor -tile.poweradvantage.item_filter_food.name=Food Filter Conveyor -tile.poweradvantage.item_filter_fuel.name=Fuel Filter Conveyor -tile.poweradvantage.item_filter_inventory.name=Filter Conveyor -tile.poweradvantage.item_filter_ore.name=Ore Filter Conveyor -tile.poweradvantage.item_filter_plant.name=Plantable Filter Conveyor -tile.poweradvantage.item_filter_smelt.name=Furnace Filter Conveyor -tile.poweradvantage.item_filter_overflow.name=Overflow Filter Conveyor -tile.poweradvantage.steel_frame.name=Steel Frame - - -item.poweradvantage.starch.name=Starch -item.poweradvantage.bioplastic_ingot.name=Bioplastic Ingot -item.poweradvantage.sprocket.name=Sprocket - -tile.poweradvantage.fluid_metal_tank.name=Metal Fluid Tank -item.poweradvantage.rotator_tool.name=Rotation Wrench - -tile.poweradvantage.infinite_steam.name=Unlimited Steam Power -tile.poweradvantage.infinite_electricity.name=Unlimited Electrical Power -tile.poweradvantage.infinite_quantum.name=Unlimited Quantum Power - -tile.poweradvantage.crude_oil.name=Crude Oil -fluid.poweradvantage.crude_oil=Crude Oil -item.bucket.crude_oil=Bucket of Crude Oil - - -tile.poweradvantage.still.name=Distillation Furnace - -tile.poweradvantage.refined_oil.name=Refined Oil -fluid.poweradvantage.refined_oil=Refined Oil -item.bucket.refined_oil=Bucket of Refined Oil -tile.poweradvantage.fluid_switch.name=Fluid Switch Valve - -tile.poweradvantage.converter_rf_steam.name=Steam-RF Transformer -tile.poweradvantage.converter_rf_electricity.name=Electricity-RF Transformer -tile.poweradvantage.converter_rf_quantum.name=Quantum-RF Transformer -tile.poweradvantage.converter_tr_electricity.name=Electricity-EU Transformer diff --git a/src/main/resources/assets/poweradvantage/lang/en_CA.lang b/src/main/resources/assets/poweradvantage/lang/en_CA.lang deleted file mode 100644 index 4009dfa..0000000 --- a/src/main/resources/assets/poweradvantage/lang/en_CA.lang +++ /dev/null @@ -1,54 +0,0 @@ -language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) -nei.poweradvantage.recipehandler.shapelessfurnace.name=Large Furnace (Shapeless) -nei.poweradvantage.recipehandler.shapedfurnace.name=Large Furnace (Shaped) - -tooltip.poweradvantage.empty=Empty -tooltip.poweradvantage.buckets_of=%x buckets of %y - -itemGroup.poweradvantage=Power Advantage - -tile.poweradvantage.fluid_drain.name=Drain -tile.poweradvantage.fluid_discharge.name=Discharge Grate -tile.poweradvantage.fluid_storage_tank.name=Portable Fluid Tank -item.poweradvantage.fluid_storage_tank_item.name=Storage Tank -tile.poweradvantage.fluid_pipe.name=Pipe - -tile.poweradvantage.item_conveyor.name=Conveyor -tile.poweradvantage.item_filter_block.name=Block Filter Conveyor -tile.poweradvantage.item_filter_food.name=Food Filter Conveyor -tile.poweradvantage.item_filter_fuel.name=Fuel Filter Conveyor -tile.poweradvantage.item_filter_inventory.name=Filter Conveyor -tile.poweradvantage.item_filter_ore.name=Ore Filter Conveyor -tile.poweradvantage.item_filter_plant.name=Plantable Filter Conveyor -tile.poweradvantage.item_filter_smelt.name=Furnace Filter Conveyor -tile.poweradvantage.item_filter_overflow.name=Overflow Filter Conveyor -tile.poweradvantage.steel_frame.name=Steel Frame - - -item.poweradvantage.starch.name=Starch -item.poweradvantage.bioplastic_ingot.name=Bioplastic Ingot -item.poweradvantage.sprocket.name=Sprocket - -tile.poweradvantage.fluid_metal_tank.name=Metal Fluid Tank -item.poweradvantage.rotator_tool.name=Rotation Wrench - -tile.poweradvantage.infinite_steam.name=Unlimited Steam Power -tile.poweradvantage.infinite_electricity.name=Unlimited Electrical Power -tile.poweradvantage.infinite_quantum.name=Unlimited Quantum Power - -tile.poweradvantage.crude_oil.name=Crude Oil -fluid.poweradvantage.crude_oil=Crude Oil -item.bucket.crude_oil=Bucket of Crude Oil - - -tile.poweradvantage.still.name=Distillation Furnace - -tile.poweradvantage.refined_oil.name=Refined Oil -fluid.poweradvantage.refined_oil=Refined Oil -item.bucket.refined_oil=Bucket of Refined Oil -tile.poweradvantage.fluid_switch.name=Fluid Switch Valve - -tile.poweradvantage.converter_rf_steam.name=Steam-RF Transformer -tile.poweradvantage.converter_rf_electricity.name=Electricity-RF Transformer -tile.poweradvantage.converter_rf_quantum.name=Quantum-RF Transformer -tile.poweradvantage.converter_tr_electricity.name=Electricity-EU Transformer diff --git a/src/main/resources/assets/poweradvantage/lang/en_EN.lang b/src/main/resources/assets/poweradvantage/lang/en_EN.lang deleted file mode 100644 index 4009dfa..0000000 --- a/src/main/resources/assets/poweradvantage/lang/en_EN.lang +++ /dev/null @@ -1,54 +0,0 @@ -language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) -nei.poweradvantage.recipehandler.shapelessfurnace.name=Large Furnace (Shapeless) -nei.poweradvantage.recipehandler.shapedfurnace.name=Large Furnace (Shaped) - -tooltip.poweradvantage.empty=Empty -tooltip.poweradvantage.buckets_of=%x buckets of %y - -itemGroup.poweradvantage=Power Advantage - -tile.poweradvantage.fluid_drain.name=Drain -tile.poweradvantage.fluid_discharge.name=Discharge Grate -tile.poweradvantage.fluid_storage_tank.name=Portable Fluid Tank -item.poweradvantage.fluid_storage_tank_item.name=Storage Tank -tile.poweradvantage.fluid_pipe.name=Pipe - -tile.poweradvantage.item_conveyor.name=Conveyor -tile.poweradvantage.item_filter_block.name=Block Filter Conveyor -tile.poweradvantage.item_filter_food.name=Food Filter Conveyor -tile.poweradvantage.item_filter_fuel.name=Fuel Filter Conveyor -tile.poweradvantage.item_filter_inventory.name=Filter Conveyor -tile.poweradvantage.item_filter_ore.name=Ore Filter Conveyor -tile.poweradvantage.item_filter_plant.name=Plantable Filter Conveyor -tile.poweradvantage.item_filter_smelt.name=Furnace Filter Conveyor -tile.poweradvantage.item_filter_overflow.name=Overflow Filter Conveyor -tile.poweradvantage.steel_frame.name=Steel Frame - - -item.poweradvantage.starch.name=Starch -item.poweradvantage.bioplastic_ingot.name=Bioplastic Ingot -item.poweradvantage.sprocket.name=Sprocket - -tile.poweradvantage.fluid_metal_tank.name=Metal Fluid Tank -item.poweradvantage.rotator_tool.name=Rotation Wrench - -tile.poweradvantage.infinite_steam.name=Unlimited Steam Power -tile.poweradvantage.infinite_electricity.name=Unlimited Electrical Power -tile.poweradvantage.infinite_quantum.name=Unlimited Quantum Power - -tile.poweradvantage.crude_oil.name=Crude Oil -fluid.poweradvantage.crude_oil=Crude Oil -item.bucket.crude_oil=Bucket of Crude Oil - - -tile.poweradvantage.still.name=Distillation Furnace - -tile.poweradvantage.refined_oil.name=Refined Oil -fluid.poweradvantage.refined_oil=Refined Oil -item.bucket.refined_oil=Bucket of Refined Oil -tile.poweradvantage.fluid_switch.name=Fluid Switch Valve - -tile.poweradvantage.converter_rf_steam.name=Steam-RF Transformer -tile.poweradvantage.converter_rf_electricity.name=Electricity-RF Transformer -tile.poweradvantage.converter_rf_quantum.name=Quantum-RF Transformer -tile.poweradvantage.converter_tr_electricity.name=Electricity-EU Transformer diff --git a/src/main/resources/assets/poweradvantage/lang/en_GB.lang b/src/main/resources/assets/poweradvantage/lang/en_GB.lang deleted file mode 100644 index 4c44e61..0000000 --- a/src/main/resources/assets/poweradvantage/lang/en_GB.lang +++ /dev/null @@ -1,53 +0,0 @@ -language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) -nei.poweradvantage.recipehandler.shapelessfurnace.name=Large Furnace (Shapeless) -nei.poweradvantage.recipehandler.shapedfurnace.name=Large Furnace (Shaped) - -tooltip.poweradvantage.empty=Empty -tooltip.poweradvantage.buckets_of=%x buckets of %y - -itemGroup.poweradvantage=Power Advantage - -tile.poweradvantage.fluid_drain.name=Drain -tile.poweradvantage.fluid_discharge.name=Discharge Grate -tile.poweradvantage.fluid_storage_tank.name=Portable Fluid Tank -item.poweradvantage.fluid_storage_tank_item.name=Storage Tank -tile.poweradvantage.fluid_pipe.name=Pipe - -tile.poweradvantage.item_conveyor.name=Conveyor -tile.poweradvantage.item_filter_block.name=Block Filter Conveyor -tile.poweradvantage.item_filter_food.name=Food Filter Conveyor -tile.poweradvantage.item_filter_fuel.name=Fuel Filter Conveyor -tile.poweradvantage.item_filter_inventory.name=Filter Conveyor -tile.poweradvantage.item_filter_ore.name=Ore Filter Conveyor -tile.poweradvantage.item_filter_plant.name=Plantable Filter Conveyor -tile.poweradvantage.item_filter_smelt.name=Furnace Filter Conveyor -tile.poweradvantage.item_filter_overflow.name=Overflow Filter Conveyor -tile.poweradvantage.steel_frame.name=Steel Frame - - -item.poweradvantage.starch.name=Starch -item.poweradvantage.bioplastic_ingot.name=Bioplastic Ingot -item.poweradvantage.sprocket.name=Sprocket - -tile.poweradvantage.fluid_metal_tank.name=Metal Fluid Tank -item.poweradvantage.rotator_tool.name=Rotation Wrench - -tile.poweradvantage.infinite_steam.name=Unlimited Steam Power -tile.poweradvantage.infinite_electricity.name=Unlimited Electrical Power -tile.poweradvantage.infinite_quantum.name=Unlimited Quantum Power - -tile.poweradvantage.crude_oil.name=Crude Oil -fluid.poweradvantage.crude_oil=Crude Oil -item.bucket.crude_oil=Bucket of Crude Oil - -tile.poweradvantage.still.name=Distillation Furnace - -tile.poweradvantage.refined_oil.name=Refined Oil -fluid.poweradvantage.refined_oil=Refined Oil -item.bucket.refined_oil=Bucket of Refined Oil -tile.poweradvantage.fluid_switch.name=Fluid Switch Valve - -tile.poweradvantage.converter_rf_steam.name=Steam-RF Transformer -tile.poweradvantage.converter_rf_electricity.name=Electricity-RF Transformer -tile.poweradvantage.converter_rf_quantum.name=Quantum-RF Transformer -tile.poweradvantage.converter_tr_electricity.name=Electricity-EU Transformer diff --git a/src/main/resources/assets/poweradvantage/lang/en_PT.lang b/src/main/resources/assets/poweradvantage/lang/en_PT.lang deleted file mode 100644 index 9d8cfee..0000000 --- a/src/main/resources/assets/poweradvantage/lang/en_PT.lang +++ /dev/null @@ -1,53 +0,0 @@ -language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) -nei.poweradvantage.recipehandler.shapelessfurnace.name=Large Furnace (Shapeless) -nei.poweradvantage.recipehandler.shapedfurnace.name=Large Furnace (Shaped) - -tooltip.poweradvantage.empty=Empty -tooltip.poweradvantage.buckets_of=%x buckets of %y - -itemGroup.poweradvantage=Power Advantage - -tile.poweradvantage.fluid_drain.name=Drain -tile.poweradvantage.fluid_discharge.name=Discharge Grate -tile.poweradvantage.fluid_storage_tank.name=Portable Fluid Tank -item.poweradvantage.fluid_storage_tank_item.name=Storage Tank -tile.poweradvantage.fluid_pipe.name=Pipe - -tile.poweradvantage.item_conveyor.name=Conveyor -tile.poweradvantage.item_filter_block.name=Block Filter Conveyor -tile.poweradvantage.item_filter_food.name=Food Filter Conveyor -tile.poweradvantage.item_filter_fuel.name=Fuel Filter Conveyor -tile.poweradvantage.item_filter_inventory.name=Filter Conveyor -tile.poweradvantage.item_filter_ore.name=Ore Filter Conveyor -tile.poweradvantage.item_filter_plant.name=Plantable Filter Conveyor -tile.poweradvantage.item_filter_smelt.name=Furnace Filter Conveyor -tile.poweradvantage.item_filter_overflow.name=Overflow Filter Conveyor -tile.poweradvantage.steel_frame.name=Steel Frame - - -item.poweradvantage.starch.name=Starch -item.poweradvantage.bioplastic_ingot.name=Bioplastic Ingot -item.poweradvantage.sprocket.name=Sprocket - -tile.poweradvantage.fluid_metal_tank.name=Metal Fluid Tank -item.poweradvantage.rotator_tool.name=Rotation Wrench - -tile.poweradvantage.infinite_steam.name=Unlimited Steam Power -tile.poweradvantage.infinite_electricity.name=Unlimited Electrical Power -tile.poweradvantage.infinite_quantum.name=Unlimited Quantum Power - -tile.poweradvantage.crude_oil.name=Black Gold -fluid.poweradvantage.crude_oil=Black Gold -item.bucket.crude_oil=Bucket o' Black Gold - -tile.poweradvantage.still.name='Stillery - -tile.poweradvantage.refined_oil.name=Lamp Oil -fluid.poweradvantage.refined_oil=Lamp Oil -item.bucket.refined_oil=Bucket o' Lamp Oil -tile.poweradvantage.fluid_switch.name=Big Red Valve - -tile.poweradvantage.converter_rf_steam.name=Steam-RF Transformer -tile.poweradvantage.converter_rf_electricity.name=Electricity-RF Transformer -tile.poweradvantage.converter_rf_quantum.name=Quantum-RF Transformer -tile.poweradvantage.converter_tr_electricity.name=Electricity-EU Transformer diff --git a/src/main/resources/assets/poweradvantage/lang/en_US.lang b/src/main/resources/assets/poweradvantage/lang/en_US.lang deleted file mode 100644 index f4fe620..0000000 --- a/src/main/resources/assets/poweradvantage/lang/en_US.lang +++ /dev/null @@ -1,52 +0,0 @@ -language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) -nei.poweradvantage.recipehandler.shapelessfurnace.name=Large Furnace (Shapeless) -nei.poweradvantage.recipehandler.shapedfurnace.name=Large Furnace (Shaped) - -tooltip.poweradvantage.empty=Empty -tooltip.poweradvantage.buckets_of=%x buckets of %y - -itemGroup.poweradvantage=Power Advantage - -tile.poweradvantage.fluid_drain.name=Drain -tile.poweradvantage.fluid_discharge.name=Discharge Grate -tile.poweradvantage.fluid_storage_tank.name=Portable Fluid Tank -tile.poweradvantage.fluid_pipe.name=Pipe - -tile.poweradvantage.item_conveyor.name=Conveyor -tile.poweradvantage.item_filter_block.name=Block Filter Conveyor -tile.poweradvantage.item_filter_food.name=Food Filter Conveyor -tile.poweradvantage.item_filter_fuel.name=Fuel Filter Conveyor -tile.poweradvantage.item_filter_inventory.name=Filter Conveyor -tile.poweradvantage.item_filter_ore.name=Ore Filter Conveyor -tile.poweradvantage.item_filter_plant.name=Plantable Filter Conveyor -tile.poweradvantage.item_filter_smelt.name=Furnace Filter Conveyor -tile.poweradvantage.item_filter_overflow.name=Overflow Filter Conveyor -tile.poweradvantage.steel_frame.name=Steel Frame - - -item.poweradvantage.starch.name=Starch -item.poweradvantage.bioplastic_ingot.name=Bioplastic Ingot -item.poweradvantage.sprocket.name=Sprocket - - -tile.poweradvantage.fluid_metal_tank.name=Metal Fluid Tank -item.poweradvantage.rotator_tool.name=Rotation Wrench - -tile.poweradvantage.infinite_steam.name=Unlimited Steam Power -tile.poweradvantage.infinite_electricity.name=Unlimited Electrical Power -tile.poweradvantage.infinite_quantum.name=Unlimited Quantum Power - -tile.poweradvantage.crude_oil.name=Crude Oil -fluid.poweradvantage.crude_oil=Crude Oil -item.bucket.crude_oil=Bucket of Crude Oil - -tile.poweradvantage.still.name=Distillation Furnace -tile.poweradvantage.refined_oil.name=Refined Oil -fluid.poweradvantage.refined_oil=Refined Oil -item.bucket.refined_oil=Bucket of Refined Oil -tile.poweradvantage.fluid_switch.name=Fluid Switch Valve - -tile.poweradvantage.converter_rf_steam.name=Steam-RF Transformer -tile.poweradvantage.converter_rf_electricity.name=Electricity-RF Transformer -tile.poweradvantage.converter_rf_quantum.name=Quantum-RF Transformer -tile.poweradvantage.converter_tr_electricity.name=Electricity-EU Transformer diff --git a/src/main/resources/assets/poweradvantage/lang/es_ES.lang b/src/main/resources/assets/poweradvantage/lang/es_ES.lang deleted file mode 100644 index cd391ff..0000000 --- a/src/main/resources/assets/poweradvantage/lang/es_ES.lang +++ /dev/null @@ -1,56 +0,0 @@ -language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) -nei.poweradvantage.recipehandler.shapelessfurnace.name=Gran Horno (no forma) -nei.poweradvantage.recipehandler.shapedfurnace.name=Gran Horno (en forma) - -tooltip.poweradvantage.empty=Vacío -tooltip.poweradvantage.buckets_of =%x cubos de %y - -itemGroup.poweradvantage=Ventaja de Energía - -tile.poweradvantage.fluid_drain.name=Drenaje -tile.poweradvantage.fluid_discharge.name=Descarga Grate -tile.poweradvantage.fluid_storage_tank.name=Tanque de almacenamiento -item.poweradvantage.fluid_storage_tank_item.name=Tanque de almacenamiento -tile.poweradvantage.fluid_pipe.name=Tubo - -tile.poweradvantage.item_conveyor.name=Transportadores -tile.poweradvantage.item_filter_block.name=Bloquear Filtro Transportadores -tile.poweradvantage.item_filter_food.name=Filtro Alimentos Transportadores -tile.poweradvantage.item_filter_fuel.name=Filtro de combustible Transportadores -tile.poweradvantage.item_filter_inventory.name=Filtro Transportadores -tile.poweradvantage.item_filter_ore.name=Ore Transportadores Filtro -tile.poweradvantage.item_filter_plant.name=Plantable Transportadores Filtro -tile.poweradvantage.item_filter_smelt.name=Horno Filtro Transportadores -tile.poweradvantage.item_filter_overflow.name=Desbordamiento Filtro Transportadores -tile.poweradvantage.steel_frame.name=Marco de Acero - - -item.poweradvantage.starch.name=Almidón -item.poweradvantage.bioplastic_ingot.name=Bioplástico Lingote -item.poweradvantage.sprocket.name=Piñón - - -tile.poweradvantage.fluid_metal_tank.name=Tanque de Almacenamiento de Acero -item.poweradvantage.rotator_tool.name=Herramienta de Rotación - -tile.poweradvantage.infinite_steam.name=La Energía de Vapor Infinito -tile.poweradvantage.infinite_electricity.name=Energía Eléctrica Infinito -tile.poweradvantage.infinite_quantum.name=Cuántica Infinito - -tile.poweradvantage.crude_oil.name=Petróleo Crudo -fluid.poweradvantage.crude_oil=Petróleo Crudo -item.bucket.crude_oil.name=Cubo de Crudo - - -tile.poweradvantage.still.name=Destilería - -tile.poweradvantage.refined_oil.name=Refinado de Petróleo -fluid.poweradvantage.refined_oil=Refinado de Petróleo -item.bucket.refined_oil.name=Cubo de Refinado de Petróleo -tile.poweradvantage.fluid_switch.name=Válvula - - -tile.poweradvantage.converter_rf_steam.name=Vapor-RF Transformador -tile.poweradvantage.converter_rf_electricity.name=Electricidad-RF Transformador -tile.poweradvantage.converter_rf_quantum.name=Cuántico-RF Transformador -tile.poweradvantage.converter_tr_electricity.name=Electricidad-EU Transformador diff --git a/src/main/resources/assets/poweradvantage/lang/es_MX.lang b/src/main/resources/assets/poweradvantage/lang/es_MX.lang deleted file mode 100644 index 775e4ea..0000000 --- a/src/main/resources/assets/poweradvantage/lang/es_MX.lang +++ /dev/null @@ -1,56 +0,0 @@ -language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) -nei.poweradvantage.recipehandler.shapelessfurnace.name=Gran Horno (no forma) -nei.poweradvantage.recipehandler.shapedfurnace.name=Gran Horno (en forma) - -tooltip.poweradvantage.empty=Vacío -tooltip.poweradvantage.buckets_of=%x cubos de %y - -itemGroup.poweradvantage=Ventaja de Energía - -tile.poweradvantage.fluid_drain.name=Drenaje -tile.poweradvantage.fluid_discharge.name=Descarga Grate -tile.poweradvantage.fluid_storage_tank.name=Tanque de almacenamiento -item.poweradvantage.fluid_storage_tank_item.name=Tanque de almacenamiento -tile.poweradvantage.fluid_pipe.name=Tubo - -tile.poweradvantage.item_conveyor.name=Transportadores -tile.poweradvantage.item_filter_block.name=Bloquear Filtro Transportadores -tile.poweradvantage.item_filter_food.name=Filtro Alimentos Transportadores -tile.poweradvantage.item_filter_fuel.name=Filtro de combustible Transportadores -tile.poweradvantage.item_filter_inventory.name=Filtro Transportadores -tile.poweradvantage.item_filter_ore.name=Ore Transportadores Filtro -tile.poweradvantage.item_filter_plant.name=Plantable Transportadores Filtro -tile.poweradvantage.item_filter_smelt.name=Horno Filtro Transportadores -tile.poweradvantage.item_filter_overflow.name=Desbordamiento Filtro Transportadores -tile.poweradvantage.steel_frame.name=Marco de Acero - - -item.poweradvantage.starch.name=Almidón -item.poweradvantage.bioplastic_ingot.name=Bioplástico Lingote -item.poweradvantage.sprocket.name=Piñón - - -tile.poweradvantage.fluid_metal_tank.name=Tanque de Almacenamiento de Acero -item.poweradvantage.rotator_tool.name=Herramienta de Rotación - -tile.poweradvantage.infinite_steam.name=La Energía de Vapor Infinito -tile.poweradvantage.infinite_electricity.name=Energía Eléctrica Infinito -tile.poweradvantage.infinite_quantum.name=Cuántica Infinito - -tile.poweradvantage.crude_oil.name=Petróleo Crudo -fluid.poweradvantage.crude_oil=Petróleo Crudo -item.bucket.crude_oil.name=Cubo de Crudo - - -tile.poweradvantage.still.name=Destilería - -tile.poweradvantage.refined_oil.name=Refinado de Petróleo -fluid.poweradvantage.refined_oil=Refinado de Petróleo -item.bucket.refined_oil.name=Cubo de Refinado de Petróleo -tile.poweradvantage.fluid_switch.name=Válvula - - -tile.poweradvantage.converter_rf_steam.name=Vapor-RF Transformador -tile.poweradvantage.converter_rf_electricity.name=Electricidad-RF Transformador -tile.poweradvantage.converter_rf_quantum.name=Cuántico-RF Transformador -tile.poweradvantage.converter_tr_electricity.name=Electricidad-EU Transformador diff --git a/src/main/resources/assets/poweradvantage/lang/it_IT.lang b/src/main/resources/assets/poweradvantage/lang/it_IT.lang deleted file mode 100644 index bae57a5..0000000 --- a/src/main/resources/assets/poweradvantage/lang/it_IT.lang +++ /dev/null @@ -1,55 +0,0 @@ -language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) -nei.poweradvantage.recipehandler.shapelessfurnace.name=Grande Fornace (informe) -nei.poweradvantage.recipehandler.shapedfurnace.name=Grande Fornace (forma) - -tooltip.poweradvantage.empty=vuoto -tooltip.poweradvantage.buckets_of=%x secchi d'%y - -itemGroup.poweradvantage=Potenza Advantage - -tile.poweradvantage.fluid_drain.name=Scarico -tile.poweradvantage.fluid_discharge.name=Griglia di scarico -tile.poweradvantage.fluid_storage_tank.name=Serbatoio -item.poweradvantage.fluid_storage_tank_item.name=Serbatoio -tile.poweradvantage.fluid_pipe.name=Tubo - -tile.poweradvantage.item_conveyor.name=Trasportatore -tile.poweradvantage.item_filter_block.name=Filtro di blocco trasportatore -tile.poweradvantage.item_filter_food.name=Filtro alimentare Conveyor -tile.poweradvantage.item_filter_fuel.name=carburante Filtro Conveyor -tile.poweradvantage.item_filter_inventory.name=Filtro Conveyor -tile.poweradvantage.item_filter_ore.name=Ore Filtro Conveyor -tile.poweradvantage.item_filter_plant.name=Plantable Filtro Conveyor -tile.poweradvantage.item_filter_smelt.name=Forno Filtro Conveyor -tile.poweradvantage.item_filter_overflow.name=Straripamento Filtro Conveyor -tile.poweradvantage.steel_frame.name=Steel Frame - - -item.poweradvantage.starch.name=Amido -item.poweradvantage.bioplastic_ingot.name=Bioplastica Lingotto -item.poweradvantage.sprocket.name=Sprocket - - -tile.poweradvantage.fluid_metal_tank.name=Serbatoio in Metallo -item.poweradvantage.rotator_tool.name=Strumento di Rotazione - -tile.poweradvantage.infinite_steam.name=Forza Vapore Infinite -tile.poweradvantage.infinite_electricity.name=Elettricità Infinite -tile.poweradvantage.infinite_quantum.name=Atomica Infinite - -tile.poweradvantage.crude_oil.name=Olio a Crudo -fluid.poweradvantage.crude_oil=Olio a Crudo -item.bucket.crude_oil.name=Secchio di Greggio - - -tile.poweradvantage.still.name=Distilleria -tile.poweradvantage.refined_oil.name=Olio Raffinato -fluid.poweradvantage.refined_oil=Olio Raffinato -item.bucket.refined_oil.name=Secchio di Olio Raffinato -tile.poweradvantage.fluid_switch.name=Valvola - - -tile.poweradvantage.converter_rf_steam.name=Vapore-RF Trasformatore -tile.poweradvantage.converter_rf_electricity.name=Elettricità-RF Trasformatore -tile.poweradvantage.converter_rf_quantum.name=Quantistico-RF Trasformatore -tile.poweradvantage.converter_tr_electricity.name=Elettricità-EU Trasformatore diff --git a/src/main/resources/assets/poweradvantage/lang/ja_JP.lang b/src/main/resources/assets/poweradvantage/lang/ja_JP.lang deleted file mode 100644 index fdb19de..0000000 --- a/src/main/resources/assets/poweradvantage/lang/ja_JP.lang +++ /dev/null @@ -1,56 +0,0 @@ -language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) -Translate -nei.poweradvantage.recipehandler.shapelessfurnace.name=大型炉(型崩れ) -nei.poweradvantage.recipehandler.shapedfurnace.name=大型炉(形) - -tooltip.poweradvantage.empty=空 -tooltip.poweradvantage.buckets_of=%yの%xバケット - -itemGroup.poweradvantage=パワー·アドバンテージ - -tile.poweradvantage.fluid_drain.name=ドレン -tile.poweradvantage.fluid_discharge.name=放電グレート -tile.poweradvantage.fluid_storage_tank.name=貯蔵タンク -item.poweradvantage.fluid_storage_tank_item.name=貯蔵タンク -tile.poweradvantage.fluid_pipe.name=パイプ - -tile.poweradvantage.item_conveyor.name=コンベア -tile.poweradvantage.item_filter_block.name=ブロックフィルタコンベア -tile.poweradvantage.item_filter_food.name=フードフィルターコンベア -tile.poweradvantage.item_filter_fuel.name=燃料フィルターコンベア -tile.poweradvantage.item_filter_inventory.name=フィルタコンベヤー -tile.poweradvantage.item_filter_ore.name=鉱石フィルターコンベア -tile.poweradvantage.item_filter_plant.name=プラントフィルタコンベヤー -tile.poweradvantage.item_filter_smelt.name=炉フィルターコンベア -tile.poweradvantage.item_filter_overflow.name=オーバーフローフィルタコンベヤー -tile.poweradvantage.steel_frame.name=鉄骨 - - -item.poweradvantage.starch.name=デンプン -item.poweradvantage.bioplastic_ingot.name=は、バイオプラスチックインゴットを -item.poweradvantage.sprocket.name=スプロケット - -tile.poweradvantage.infinite_steam.name=無限の蒸気動力 -tile.poweradvantage.infinite_electricity.name=無限の電力 -tile.poweradvantage.infinite_quantum.name=無限の量子パワー - - -tile.poweradvantage.fluid_metal_tank.name=金属製貯蔵タンク -item.poweradvantage.rotator_tool.name=回転ツール - -tile.poweradvantage.crude_oil.name=原油 -fluid.poweradvantage.crude_oil=原油 -item.bucket.crude_oil.name=原油のバケット - - -tile.poweradvantage.still.name=蒸留酒製造所 -tile.poweradvantage.refined_oil.name=精製油 -fluid.poweradvantage.refined_oil=精製油 -item.bucket.refined_oil.name=精製油のバケツ -tile.poweradvantage.fluid_switch.name=バルブ - - -tile.poweradvantage.converter_rf_steam.name=蒸気-RFトランス -tile.poweradvantage.converter_rf_electricity.name=電気-RFトランス -tile.poweradvantage.converter_rf_quantum.name=量子-RFトランス -tile.poweradvantage.converter_tr_electricity.name=電気-EUトランス diff --git a/src/main/resources/assets/poweradvantage/lang/ko_KR.lang b/src/main/resources/assets/poweradvantage/lang/ko_KR.lang deleted file mode 100644 index e3aba15..0000000 --- a/src/main/resources/assets/poweradvantage/lang/ko_KR.lang +++ /dev/null @@ -1,56 +0,0 @@ -language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) -nei.poweradvantage.recipehandler.shapelessfurnace.name=대형 전기로 (못생긴) -nei.poweradvantage.recipehandler.shapedfurnace.name=대형 전기로 (모양) - -tooltip.poweradvantage.empty=빈 -tooltip.tooltip.poweradvantage.buckets_of=%는 X 버킷 - -itemGroup.poweradvantage=전원의 장점을 - -tile.poweradvantage.fluid_drain.name=드레인 -tile.poweradvantage.fluid_discharge.name=방전 화격자 -tile.poweradvantage.fluid_storage_tank.name=저장 탱크 -item.poweradvantage.fluid_storage_tank_item.name=는 저장 탱크를 -tile.poweradvantage.fluid_pipe.name=파이프 - -tile.poweradvantage.item_conveyor.name=컨베이어 -tile.poweradvantage.item_filter_block.name=블록 필터 컨베이어 -tile.poweradvantage.item_filter_food.name=식품 필터 컨베이어 -tile.poweradvantage.item_filter_fuel.name=연료 필터 컨베이어 -tile.poweradvantage.item_filter_inventory.name=필터 컨베이어 -tile.poweradvantage.item_filter_ore.name=광석 필터 컨베이어 -tile.poweradvantage.item_filter_plant.name=물만 주면 식물이 필터 컨베이어 -tile.poweradvantage.item_filter_smelt.name=노 필터 컨베이어 -tile.poweradvantage.item_filter_overflow.name=오버 플로우필터 컨베이어 -tile.poweradvantage.steel_frame.name=스틸 프레임 - - -item.poweradvantage.starch.name=전분 -item.poweradvantage.bioplastic_ingot.name=는 바이오 플라스틱 잉곳을 -item.poweradvantage.sprocket.name=스프로킷 - - -tile.poweradvantage.fluid_metal_tank.name=금속 저장조 -item.poweradvantage.rotator_tool.name=회전 도구 - - -tile.poweradvantage.infinite_steam.name=무한 증기 력 -tile.poweradvantage.infinite_electricity.name=무한 전력 -tile.poweradvantage.infinite_quantum.name=무한 양자 전력 - -tile.poweradvantage.crude_oil.name=원유 -fluid.poweradvantage.crude_oil=원유 -item.bucket.crude_oil.name=원유의 버킷 - - -tile.poweradvantage.still.name=증류소 -tile.poweradvantage.refined_oil.name=정유 -fluid.poweradvantage.refined_oil=정유 -item.bucket.refined_oil.name=정유의 통 -tile.poweradvantage.fluid_switch.name=판막 - - -tile.poweradvantage.converter_rf_steam.name=증기-RF 전원 트랜스 -tile.poweradvantage.converter_rf_electricity.name=전기-RF 전원 트랜스 -tile.poweradvantage.converter_rf_quantum.name=양자-RF 전원 트랜스 -tile.poweradvantage.converter_tr_electricity.name=전기-EU 전원 트랜스 diff --git a/src/main/resources/assets/poweradvantage/lang/pt_BR.lang b/src/main/resources/assets/poweradvantage/lang/pt_BR.lang deleted file mode 100644 index 7dcb668..0000000 --- a/src/main/resources/assets/poweradvantage/lang/pt_BR.lang +++ /dev/null @@ -1,54 +0,0 @@ -language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) -nei.poweradvantage.recipehandler.shapelessfurnace.name=Forno Grande (no forma) -nei.poweradvantage.recipehandler.shapedfurnace.name=Forno Grande (em forma) - -tooltip.poweradvantage.empty=vazio -tooltip.poweradvantage.buckets_of=%x baldes de %y - -itemGroup.poweradvantage=Vantagem de Poder - -tile.poweradvantage.fluid_drain.name=Dreno -tile.poweradvantage.fluid_discharge.name=Grate Discharge -tile.poweradvantage.fluid_storage_tank.name=Tanque de armazenamento -item.poweradvantage.fluid_storage_tank_item.name=Tanque de armazenamento -tile.poweradvantage.fluid_pipe.name=Tubulação - -tile.poweradvantage.item_conveyor.name=Transportador -tile.poweradvantage.item_filter_block.name=Bloquear filtro transportador -tile.poweradvantage.item_filter_food.name=Transportador Filtro de Alimentos -tile.poweradvantage.item_filter_fuel.name=Filtro de combustível Transportador -tile.poweradvantage.item_filter_inventory.name=Transportador Filtro -tile.poweradvantage.item_filter_ore.name=Ore Transportadora Filtro -tile.poweradvantage.item_filter_plant.name=Plantable Transportadora Filtro -tile.poweradvantage.item_filter_smelt.name=Fornalha Filtro Transportador -tile.poweradvantage.item_filter_overflow.name=Transbordamento Transportador Filtro -tile.poweradvantage.steel_frame.name=Armação de Aço - - -item.poweradvantage.starch.name=Amido -item.poweradvantage.bioplastic_ingot.name=Bioplastic lingote -item.poweradvantage.sprocket.name=Roda Dentada - - -tile.poweradvantage.fluid_metal_tank.name=Tanque de Armazenamento de Aço -item.poweradvantage.rotator_tool.name=Ferramenta de Rotação - -tile.poweradvantage.infinite_steam.name=Energia a Vapor Infinito -tile.poweradvantage.infinite_electricity.name=Energia Elétrica Infinito -tile.poweradvantage.infinite_quantum.name=Energia Quantum Infinito - -tile.poweradvantage.crude_oil.name=Óleo Cru -fluid.poweradvantage.crude_oil=Óleo Cru -item.bucket.crude_oil.name=Balde de Óleo Cru - - -tile.poweradvantage.still.name=Destilaria -tile.poweradvantage.refined_oil.name=Óleo Refinado -fluid.poweradvantage.refined_oil=Óleo Refinado -item.bucket.refined_oil.name=Balde de Óleo Refinado -tile.poweradvantage.fluid_switch.name=Válvula - -tile.poweradvantage.converter_rf_steam.name=Vapor-RF Transformador -tile.poweradvantage.converter_rf_electricity.name=Electricidade-RF Transformador -tile.poweradvantage.converter_rf_quantum.name=Quantidade-RF Transformador -tile.poweradvantage.converter_tr_electricity.name=Electricidade-EU Transformador diff --git a/src/main/resources/assets/poweradvantage/lang/zh_CN.lang b/src/main/resources/assets/poweradvantage/lang/zh_CN.lang deleted file mode 100644 index bbe2b0d..0000000 --- a/src/main/resources/assets/poweradvantage/lang/zh_CN.lang +++ /dev/null @@ -1,57 +0,0 @@ -language_support_goals=english (en_US,en_EN,en_CA,en_GB, en_AU, en_PT), spanish (es_MX,es_ES), chinese (zh_CN), japanese (ja_JA), portugese (pt_BR), german (de_DE), italian (it_IT), korean (ko_KR) - -nei.poweradvantage.recipehandler.shapelessfurnace.name=大熔炉(无形的) -nei.poweradvantage.recipehandler.shapedfurnace.name=大熔炉(有形的) - -tooltip.poweradvantage.empty=空 -tooltip.poweradvantage.buckets_of=%x水桶的%y - -itemGroup.poweradvantage=能量优势 - -tile.poweradvantage.fluid_drain.name=抽水机 -tile.poweradvantage.fluid_discharge.name=排液器 -tile.poweradvantage.fluid_storage_tank.name=便携式液体储罐 -item.poweradvantage.fluid_storage_tank_item.name=便携式液体储罐 -tile.poweradvantage.fluid_pipe.name=液体管 - -tile.poweradvantage.item_conveyor.name=输送机 -tile.poweradvantage.item_filter_block.name=方块过滤输送机 -tile.poweradvantage.item_filter_food.name=食品过滤输送机 -tile.poweradvantage.item_filter_fuel.name=燃料过滤输送机 -tile.poweradvantage.item_filter_inventory.name=选择过滤输送机 -tile.poweradvantage.item_filter_ore.name=矿物过滤输送机 -tile.poweradvantage.item_filter_plant.name=种子过滤输送机 -tile.poweradvantage.item_filter_smelt.name=熔炉过滤输送机 -tile.poweradvantage.item_filter_overflow.name=溢出过滤输送机 -tile.poweradvantage.steel_frame.name=钢框架 - - -item.poweradvantage.starch.name=淀粉 -item.poweradvantage.bioplastic_ingot.name=生物塑料锭 -item.poweradvantage.sprocket.name=链轮 - - -tile.poweradvantage.fluid_metal_tank.name=金属液罐 -item.poweradvantage.rotator_tool.name=旋转扳手 - -tile.poweradvantage.infinite_steam.name=无限蒸汽动力 -tile.poweradvantage.infinite_electricity.name=无限电力 -tile.poweradvantage.infinite_quantum.name=无限量子动力 - -tile.poweradvantage.crude_oil.name=原油 -fluid.poweradvantage.crude_oil=原油 -item.bucket.crude_oil.name=原油桶 - - -tile.poweradvantage.still.name=酒廠 - -tile.poweradvantage.refined_oil.name=成品油 -fluid.poweradvantage.refined_oil=成品油 -item.bucket.refined_oil.name=成品油的桶 -tile.poweradvantage.fluid_switch.name=閥 - - -tile.poweradvantage.converter_rf_steam.name=蒸汽-RF 變壓器 -tile.poweradvantage.converter_rf_electricity.name=電力-RF 變壓器 -tile.poweradvantage.converter_rf_quantum.name=量子-RF 變壓器 -tile.poweradvantage.converter_tr_electricity.name=電力-EU 變壓器 diff --git a/src/main/resources/assets/poweradvantage/models/block/converter_tr_electricity.json b/src/main/resources/assets/poweradvantage/models/block/converter_tr_electricity.json deleted file mode 100644 index 7dff7e5..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/converter_tr_electricity.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "poweradvantage:blocks/techreborn_converter" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/fluid_discharge.json b/src/main/resources/assets/poweradvantage/models/block/fluid_discharge.json deleted file mode 100644 index df0fc23..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/fluid_discharge.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/cube_bottom_top", - "textures": { - "top": "poweradvantage:blocks/fluid_discharge_side", - "bottom": "poweradvantage:blocks/fluid_discharge_face", - "side": "poweradvantage:blocks/fluid_discharge_side" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/block/fluid_drain.json b/src/main/resources/assets/poweradvantage/models/block/fluid_drain.json deleted file mode 100644 index 93445c1..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/fluid_drain.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/cube_bottom_top", - "textures": { - "top": "poweradvantage:blocks/fluid_drain_face", - "bottom": "poweradvantage:blocks/fluid_drain_side", - "side": "poweradvantage:blocks/fluid_drain_side" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_0.json b/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_0.json deleted file mode 100644 index 51edd2d..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_0.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/block", - "parent": "poweradvantage:block/pipe4_0", - "textures": { - "texture": "poweradvantage:blocks/fluid_pipe", - "particle": "poweradvantage:materials/iron" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_densuw.json b/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_densuw.json deleted file mode 100644 index c5e1f92..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_densuw.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/block", - "parent": "poweradvantage:block/pipe4_densuw", - "textures": { - "texture": "poweradvantage:blocks/fluid_pipe", - "particle": "poweradvantage:materials/iron" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_desuw.json b/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_desuw.json deleted file mode 100644 index f6e67de..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_desuw.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/block", - "parent": "poweradvantage:block/pipe4_desuw", - "textures": { - "texture": "poweradvantage:blocks/fluid_pipe", - "particle": "poweradvantage:materials/iron" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_dnu.json b/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_dnu.json deleted file mode 100644 index 5ba85dc..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_dnu.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/block", - "parent": "poweradvantage:block/pipe4_dnu", - "textures": { - "texture": "poweradvantage:blocks/fluid_pipe", - "particle": "poweradvantage:materials/iron" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_ensw.json b/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_ensw.json deleted file mode 100644 index b334234..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_ensw.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/block", - "parent": "poweradvantage:block/pipe4_ensw", - "textures": { - "texture": "poweradvantage:blocks/fluid_pipe", - "particle": "poweradvantage:materials/iron" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_n.json b/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_n.json deleted file mode 100644 index da4dd3c..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_n.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/block", - "parent": "poweradvantage:block/pipe4_n", - "textures": { - "texture": "poweradvantage:blocks/fluid_pipe", - "particle": "poweradvantage:materials/iron" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_ns.json b/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_ns.json deleted file mode 100644 index c02fff4..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_ns.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/block", - "parent": "poweradvantage:block/pipe4_ns", - "textures": { - "texture": "poweradvantage:blocks/fluid_pipe", - "particle": "poweradvantage:materials/iron" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_nsuw.json b/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_nsuw.json deleted file mode 100644 index b5778cc..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_nsuw.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/block", - "parent": "poweradvantage:block/pipe4_nsuw", - "textures": { - "texture": "poweradvantage:blocks/fluid_pipe", - "particle": "poweradvantage:materials/iron" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_nsw.json b/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_nsw.json deleted file mode 100644 index 1e3e253..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_nsw.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/block", - "parent": "poweradvantage:block/pipe4_nsw", - "textures": { - "texture": "poweradvantage:blocks/fluid_pipe", - "particle": "poweradvantage:materials/iron" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_nuw.json b/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_nuw.json deleted file mode 100644 index 9506607..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_nuw.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/block", - "parent": "poweradvantage:block/pipe4_nuw", - "textures": { - "texture": "poweradvantage:blocks/fluid_pipe", - "particle": "poweradvantage:materials/iron" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_nw.json b/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_nw.json deleted file mode 100644 index 3f87031..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/fluid_pipe_nw.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/block", - "parent": "poweradvantage:block/pipe4_nw", - "textures": { - "texture": "poweradvantage:blocks/fluid_pipe", - "particle": "poweradvantage:materials/iron" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/fluid_switch_off.json b/src/main/resources/assets/poweradvantage/models/block/fluid_switch_off.json deleted file mode 100644 index 99376fe..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/fluid_switch_off.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "poweradvantage:blocks/fluid_switch_off", - "particle": "poweradvantage:materials/steel" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/fluid_switch_on.json b/src/main/resources/assets/poweradvantage/models/block/fluid_switch_on.json deleted file mode 100644 index a09edb7..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/fluid_switch_on.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "poweradvantage:blocks/fluid_switch_on", - "particle": "poweradvantage:materials/steel" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/item_conveyor.json b/src/main/resources/assets/poweradvantage/models/block/item_conveyor.json deleted file mode 100644 index f176d90..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/item_conveyor.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "poweradvantage:block/conveyor_base", - "textures": { - "top": "poweradvantage:blocks/item_conveyor_top", - "bottom": "poweradvantage:blocks/item_conveyor_top", - "side": "poweradvantage:blocks/item_conveyor_side", - "end": "poweradvantage:blocks/item_conveyor_end", - "rim": "poweradvantage:materials/steel" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/item_filter_block.json b/src/main/resources/assets/poweradvantage/models/block/item_filter_block.json deleted file mode 100644 index 0d2c3a6..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/item_filter_block.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "poweradvantage:block/conveyor_base", - "textures": { - "top": "poweradvantage:blocks/item_conveyor_top", - "bottom": "poweradvantage:blocks/filter_bottom", - "side": "poweradvantage:blocks/filter_side_block", - "end": "poweradvantage:blocks/item_conveyor_end", - "rim": "poweradvantage:materials/steel" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/item_filter_food.json b/src/main/resources/assets/poweradvantage/models/block/item_filter_food.json deleted file mode 100644 index 2c1f658..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/item_filter_food.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "poweradvantage:block/conveyor_base", - "textures": { - "top": "poweradvantage:blocks/item_conveyor_top", - "bottom": "poweradvantage:blocks/filter_bottom", - "side": "poweradvantage:blocks/filter_side_food", - "end": "poweradvantage:blocks/item_conveyor_end", - "rim": "poweradvantage:materials/steel" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/item_filter_fuel.json b/src/main/resources/assets/poweradvantage/models/block/item_filter_fuel.json deleted file mode 100644 index d12bdef..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/item_filter_fuel.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "poweradvantage:block/conveyor_base", - "textures": { - "top": "poweradvantage:blocks/item_conveyor_top", - "bottom": "poweradvantage:blocks/filter_bottom", - "side": "poweradvantage:blocks/filter_side_fuel", - "end": "poweradvantage:blocks/item_conveyor_end", - "rim": "poweradvantage:materials/steel" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/item_filter_inventory.json b/src/main/resources/assets/poweradvantage/models/block/item_filter_inventory.json deleted file mode 100644 index 45200ce..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/item_filter_inventory.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "poweradvantage:block/conveyor_base", - "textures": { - "top": "poweradvantage:blocks/item_conveyor_top", - "bottom": "poweradvantage:blocks/filter_bottom", - "side": "poweradvantage:blocks/filter_side_inventory", - "end": "poweradvantage:blocks/item_conveyor_end", - "rim": "poweradvantage:materials/steel" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/item_filter_ore.json b/src/main/resources/assets/poweradvantage/models/block/item_filter_ore.json deleted file mode 100644 index 26dbe01..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/item_filter_ore.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "poweradvantage:block/conveyor_base", - "textures": { - "top": "poweradvantage:blocks/item_conveyor_top", - "bottom": "poweradvantage:blocks/filter_bottom", - "side": "poweradvantage:blocks/filter_side_ore", - "end": "poweradvantage:blocks/item_conveyor_end", - "rim": "poweradvantage:materials/steel" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/item_filter_overflow.json b/src/main/resources/assets/poweradvantage/models/block/item_filter_overflow.json deleted file mode 100644 index 8abd3a4..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/item_filter_overflow.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "poweradvantage:block/conveyor_base", - "textures": { - "top": "poweradvantage:blocks/item_conveyor_top", - "bottom": "poweradvantage:blocks/filter_bottom", - "side": "poweradvantage:blocks/filter_side_overflow", - "end": "poweradvantage:blocks/item_conveyor_end", - "rim": "poweradvantage:materials/steel" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/item_filter_plant.json b/src/main/resources/assets/poweradvantage/models/block/item_filter_plant.json deleted file mode 100644 index 4d16d31..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/item_filter_plant.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "poweradvantage:block/conveyor_base", - "textures": { - "top": "poweradvantage:blocks/item_conveyor_top", - "bottom": "poweradvantage:blocks/filter_bottom", - "side": "poweradvantage:blocks/filter_side_plantable", - "end": "poweradvantage:blocks/item_conveyor_end", - "rim": "poweradvantage:materials/steel" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/block/item_filter_smelt.json b/src/main/resources/assets/poweradvantage/models/block/item_filter_smelt.json deleted file mode 100644 index 49deac1..0000000 --- a/src/main/resources/assets/poweradvantage/models/block/item_filter_smelt.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "poweradvantage:block/conveyor_base", - "textures": { - "top": "poweradvantage:blocks/item_conveyor_top", - "bottom": "poweradvantage:blocks/filter_bottom", - "side": "poweradvantage:blocks/filter_side_smeltable", - "end": "poweradvantage:blocks/item_conveyor_end", - "rim": "poweradvantage:materials/steel" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/item/bioplastic_ingot.json b/src/main/resources/assets/poweradvantage/models/item/bioplastic_ingot.json deleted file mode 100644 index 8c08c41..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/bioplastic_ingot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "poweradvantage:items/bioplastic_ingot" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/bucket_crude_oil.json b/src/main/resources/assets/poweradvantage/models/item/bucket_crude_oil.json deleted file mode 100644 index 2d78353..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/bucket_crude_oil.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "poweradvantage:items/bucket_crude_oil" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/item/bucket_refined_oil.json b/src/main/resources/assets/poweradvantage/models/item/bucket_refined_oil.json deleted file mode 100644 index eb64682..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/bucket_refined_oil.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "poweradvantage:items/bucket_refined_oil" - } -} diff --git a/src/main/resources/assets/poweradvantage/models/item/converter_rf_electricity.json b/src/main/resources/assets/poweradvantage/models/item/converter_rf_electricity.json deleted file mode 100644 index b9b0429..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/converter_rf_electricity.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/converter_rf_electricity" -} diff --git a/src/main/resources/assets/poweradvantage/models/item/converter_rf_quantum.json b/src/main/resources/assets/poweradvantage/models/item/converter_rf_quantum.json deleted file mode 100644 index ca2c0b8..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/converter_rf_quantum.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/converter_rf_quantum" -} diff --git a/src/main/resources/assets/poweradvantage/models/item/converter_rf_steam.json b/src/main/resources/assets/poweradvantage/models/item/converter_rf_steam.json deleted file mode 100644 index 1ca73e4..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/converter_rf_steam.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/converter_rf_steam" -} diff --git a/src/main/resources/assets/poweradvantage/models/item/converter_tr_electricity.json b/src/main/resources/assets/poweradvantage/models/item/converter_tr_electricity.json deleted file mode 100644 index 9a7a15f..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/converter_tr_electricity.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/converter_tr_electricity" -} diff --git a/src/main/resources/assets/poweradvantage/models/item/fluid_discharge.json b/src/main/resources/assets/poweradvantage/models/item/fluid_discharge.json deleted file mode 100644 index e0bcaee..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/fluid_discharge.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/fluid_discharge" -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/fluid_drain.json b/src/main/resources/assets/poweradvantage/models/item/fluid_drain.json deleted file mode 100644 index fc98745..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/fluid_drain.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/fluid_drain" -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/fluid_metal_tank.json b/src/main/resources/assets/poweradvantage/models/item/fluid_metal_tank.json deleted file mode 100644 index 97ecaa9..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/fluid_metal_tank.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/fluid_metal_tank" -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/fluid_pipe.json b/src/main/resources/assets/poweradvantage/models/item/fluid_pipe.json deleted file mode 100644 index 097b735..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/fluid_pipe.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "parent": "poweradvantage:block/fluid_pipe_ns", - "ambientocclusion": false -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/fluid_pipe_terminal.json b/src/main/resources/assets/poweradvantage/models/item/fluid_pipe_terminal.json deleted file mode 100644 index 097b735..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/fluid_pipe_terminal.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "parent": "poweradvantage:block/fluid_pipe_ns", - "ambientocclusion": false -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/fluid_storage_tank.json b/src/main/resources/assets/poweradvantage/models/item/fluid_storage_tank.json deleted file mode 100644 index a337b20..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/fluid_storage_tank.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "parent": "poweradvantage:block/fluid_storage_tank", - "ambientocclusion": false -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/fluid_switch.json b/src/main/resources/assets/poweradvantage/models/item/fluid_switch.json deleted file mode 100644 index f00c542..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/fluid_switch.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/fluid_switch_on" -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/infinite_electricity.json b/src/main/resources/assets/poweradvantage/models/item/infinite_electricity.json deleted file mode 100644 index 5b216c8..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/infinite_electricity.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/infinite_electricity" -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/infinite_quantum.json b/src/main/resources/assets/poweradvantage/models/item/infinite_quantum.json deleted file mode 100644 index 03aab32..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/infinite_quantum.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/infinite_quantum" -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/infinite_steam.json b/src/main/resources/assets/poweradvantage/models/item/infinite_steam.json deleted file mode 100644 index 231eb2c..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/infinite_steam.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/infinite_steam" -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/item_conveyor.json b/src/main/resources/assets/poweradvantage/models/item/item_conveyor.json deleted file mode 100644 index 4fa32a5..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/item_conveyor.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/item_conveyor" -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/item_filter_block.json b/src/main/resources/assets/poweradvantage/models/item/item_filter_block.json deleted file mode 100644 index 0e5aca2..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/item_filter_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/item_filter_block" -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/item_filter_food.json b/src/main/resources/assets/poweradvantage/models/item/item_filter_food.json deleted file mode 100644 index f238e13..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/item_filter_food.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/item_filter_food" -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/item_filter_fuel.json b/src/main/resources/assets/poweradvantage/models/item/item_filter_fuel.json deleted file mode 100644 index 4fb288b..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/item_filter_fuel.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/item_filter_fuel" -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/item_filter_inventory.json b/src/main/resources/assets/poweradvantage/models/item/item_filter_inventory.json deleted file mode 100644 index 1e3a770..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/item_filter_inventory.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/item_filter_inventory" -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/item_filter_ore.json b/src/main/resources/assets/poweradvantage/models/item/item_filter_ore.json deleted file mode 100644 index ba5c859..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/item_filter_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/item_filter_ore" -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/item_filter_overflow.json b/src/main/resources/assets/poweradvantage/models/item/item_filter_overflow.json deleted file mode 100644 index 92ae073..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/item_filter_overflow.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/item_filter_overflow" -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/item_filter_plant.json b/src/main/resources/assets/poweradvantage/models/item/item_filter_plant.json deleted file mode 100644 index 74d9811..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/item_filter_plant.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/item_filter_plant" -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/item_filter_smelt.json b/src/main/resources/assets/poweradvantage/models/item/item_filter_smelt.json deleted file mode 100644 index d4f0bc2..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/item_filter_smelt.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/item_filter_smelt" -} \ No newline at end of file diff --git a/src/main/resources/assets/poweradvantage/models/item/steel_frame.json b/src/main/resources/assets/poweradvantage/models/item/steel_frame.json deleted file mode 100644 index e87a33b..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/steel_frame.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/steel_frame" -} diff --git a/src/main/resources/assets/poweradvantage/models/item/still.json b/src/main/resources/assets/poweradvantage/models/item/still.json deleted file mode 100644 index e70ea2a..0000000 --- a/src/main/resources/assets/poweradvantage/models/item/still.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "poweradvantage:block/still_off" -} \ No newline at end of file diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index a78e751..611a5e3 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -1,11 +1,11 @@ [ { - "modid": "poweradvantage", - "name": "Power Advantage", + "modid": "basepower", + "name": "basePower", "description": "API for power DrCyano's power systems mods.", "version": "${version}", "mcversion": "${mcversion}", - "url": "https://github.com/MinecraftModDevelopmentMods/PowerAdvantage", + "url": "https://github.com/MinecraftModDevelopmentMods/basePower", "updateUrl": "", "authorList": ["DrCyano (aka Cyanobacterium)"], "credits": "The Forge and FML guys, for making the Forge modding API (you guys are awesome), engineers everywhere, and the mod author DrCyano (aka Cyanobacterium)", diff --git a/src/test/java/zone/moddev/mc/poweradvantage/UniversalBucketStartupTest.java b/src/test/java/zone/moddev/mc/basepower/UniversalBucketStartupTest.java similarity index 97% rename from src/test/java/zone/moddev/mc/poweradvantage/UniversalBucketStartupTest.java rename to src/test/java/zone/moddev/mc/basepower/UniversalBucketStartupTest.java index f52f34a..a7096ab 100644 --- a/src/test/java/zone/moddev/mc/poweradvantage/UniversalBucketStartupTest.java +++ b/src/test/java/zone/moddev/mc/basepower/UniversalBucketStartupTest.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage; +package zone.moddev.mc.basepower; import java.nio.charset.StandardCharsets; import java.nio.file.Files; diff --git a/src/test/java/zone/moddev/mc/basepower/compat/LegacyIdentityTest.java b/src/test/java/zone/moddev/mc/basepower/compat/LegacyIdentityTest.java new file mode 100644 index 0000000..708a540 --- /dev/null +++ b/src/test/java/zone/moddev/mc/basepower/compat/LegacyIdentityTest.java @@ -0,0 +1,124 @@ +package zone.moddev.mc.basepower.compat; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.ListMultimap; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import net.minecraft.init.Bootstrap; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.common.event.FMLMissingMappingsEvent; +import net.minecraftforge.fml.common.registry.GameRegistry; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; + +import static org.junit.Assert.*; + +public class LegacyIdentityTest { + @Rule public final TemporaryFolder temporary = new TemporaryFolder(); + @BeforeClass public static void bootstrap() { Bootstrap.register(); } + + @Test public void originalConfigIsCopiedOnceAndNewConfigWins() throws Exception { + Path config = temporary.newFolder().toPath(); + Path old = config.resolve("poweradvantage.cfg"), current = config.resolve("basepower.cfg"); + byte[] original = "options { S:recipe_mode=APOCALYPTIC }".getBytes(StandardCharsets.UTF_8); + Files.write(old, original); + LegacyIdentity.migrateConfiguration(current.toFile(), "poweradvantage"); + assertArrayEquals(original, Files.readAllBytes(current)); + byte[] edited = "new user authority".getBytes(StandardCharsets.UTF_8); + Files.write(current, edited); + LegacyIdentity.migrateConfiguration(current.toFile(), "poweradvantage"); + assertArrayEquals(edited, Files.readAllBytes(current)); + assertArrayEquals(original, Files.readAllBytes(old)); + } + + @Test public void originalTileLoadsAndSavesUnderTheNewCanonicalIdentity() { + LegacyIdentity.registerTileEntity(MigrationTile.class, "basepower.test_migration_tile"); + NBTTagCompound source = new NBTTagCompound(); + source.setString("id", "poweradvantage.test_migration_tile"); + source.setInteger("x", 7); source.setInteger("y", 64); source.setInteger("z", -11); + TileEntity loaded = TileEntity.create(null, source); + assertTrue(loaded instanceof MigrationTile); + NBTTagCompound saved = loaded.writeToNBT(new NBTTagCompound()); + assertEquals("basepower.test_migration_tile", saved.getString("id")); + assertEquals(7, saved.getInteger("x")); + assertEquals(-11, saved.getInteger("z")); + assertTrue(TileEntity.create(null, saved) instanceof MigrationTile); + } + + @Test public void unknownOwnedMappingsFailInsteadOfBeingDiscarded() { + ListMultimap missing = ArrayListMultimap.create(); + FMLMissingMappingsEvent.MissingMapping owned = new FMLMissingMappingsEvent.MissingMapping( + GameRegistry.Type.ITEM, new ResourceLocation("poweradvantage", "not_a_real_component"), 30000); + FMLMissingMappingsEvent.MissingMapping foreign = new FMLMissingMappingsEvent.MissingMapping( + GameRegistry.Type.ITEM, new ResourceLocation("unrelated", "not_a_real_component"), 30001); + missing.put("poweradvantage", owned); missing.put("unrelated", foreign); + LegacyIdentity.remapMissingMappings(new FMLMissingMappingsEvent(missing), "poweradvantage", "basepower"); + assertEquals(FMLMissingMappingsEvent.Action.FAIL, owned.getAction()); + assertEquals(FMLMissingMappingsEvent.Action.DEFAULT, foreign.getAction()); + } + + @Test public void bothBlockAndItemMappingsResolveTheExactRegisteredObject() { + ListMultimap missing = ArrayListMultimap.create(); + FMLMissingMappingsEvent.MissingMapping block = new FMLMissingMappingsEvent.MissingMapping( + GameRegistry.Type.BLOCK, new ResourceLocation("legacy_minecraft", "stone"), 2000); + FMLMissingMappingsEvent.MissingMapping item = new FMLMissingMappingsEvent.MissingMapping( + GameRegistry.Type.ITEM, new ResourceLocation("legacy_minecraft", "diamond"), 2001); + missing.put("legacy_minecraft", block); missing.put("legacy_minecraft", item); + LegacyIdentity.remapMissingMappings(new FMLMissingMappingsEvent(missing), "legacy_minecraft", "minecraft"); + assertEquals(FMLMissingMappingsEvent.Action.REMAP, block.getAction()); + assertEquals(FMLMissingMappingsEvent.Action.REMAP, item.getAction()); + assertSame(net.minecraft.init.Blocks.STONE, block.getTarget()); + assertSame(net.minecraft.init.Items.DIAMOND, item.getTarget()); + } + + @Test public void lootMigrationPreservesCustomValuesAndDoesNotActivateTwoCopies() throws Exception { + Path config = temporary.newFolder().toPath(); + Path old = config.resolve("additional-loot-tables/poweradvantage/chests/custom.json"); + Files.createDirectories(old.getParent()); + byte[] original = "{\"name\":\"poweradvantage:sprocket\",\"weight\":17,\"foreign\":\"basemetals:steel_ingot\"}" + .getBytes(StandardCharsets.UTF_8); + Files.write(old, original); + LegacyIdentity.migrateAdditionalLootTables(config, "poweradvantage", "basepower"); + Path current = config.resolve("additional-loot-tables/basepower/chests/custom.json"); + String migrated = new String(Files.readAllBytes(current), StandardCharsets.UTF_8); + assertTrue(migrated.contains("basepower:sprocket")); + assertTrue(migrated.contains("17")); assertTrue(migrated.contains("basemetals:steel_ingot")); + assertFalse(Files.exists(old)); + assertArrayEquals(original, Files.readAllBytes(old.resolveSibling("custom.json.before-basepower"))); + LegacyIdentity.migrateAdditionalLootTables(config, "poweradvantage", "basepower"); + assertEquals(migrated, new String(Files.readAllBytes(current), StandardCharsets.UTF_8)); + } + + @Test public void onlyExactNamespacePrefixesAreRewritten() { + assertEquals("basepower:sprocket", LegacyIdentity.remapIdentifier("poweradvantage:sprocket", "poweradvantage", "basepower")); + assertEquals("otherpoweradvantage:sprocket", LegacyIdentity.remapIdentifier("otherpoweradvantage:sprocket", "poweradvantage", "basepower")); + } + + @Test public void oldAndNewJarsCannotBeLoadedTogether() { + LegacyIdentity.requireReplacementsOnly(id -> false); + for (String name : new String[] { "poweradvantage", "steamadvantage", "electricadvantage" }) { + try { + LegacyIdentity.requireReplacementsOnly(name::equals); + fail("Mixed old/new mod sets must stop before configuration or world migration"); + } catch (IllegalStateException expected) { + assertTrue(expected.getMessage().contains(name)); + assertTrue(expected.getMessage().contains("Remove")); + } + } + } + + @Test public void steamLootKeepsTheFourPersistedEnchantmentKeysButRenamesItems() { + for (String name : new String[] { "rapid_reload", "powderless", "high_explosive", "recoil" }) { + assertEquals("steamadvantage:" + name, + LegacyIdentity.remapIdentifier("steamadvantage:" + name, "steamadvantage", "basesteam")); + } + assertEquals("basesteam:musket", LegacyIdentity.remapIdentifier("steamadvantage:musket", "steamadvantage", "basesteam")); + } + + public static class MigrationTile extends TileEntity { } +} diff --git a/src/test/java/zone/moddev/mc/basepower/compat/LegacyLevelDataTest.java b/src/test/java/zone/moddev/mc/basepower/compat/LegacyLevelDataTest.java new file mode 100644 index 0000000..97d9608 --- /dev/null +++ b/src/test/java/zone/moddev/mc/basepower/compat/LegacyLevelDataTest.java @@ -0,0 +1,120 @@ +package zone.moddev.mc.basepower.compat; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.io.OutputStream; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import static org.junit.Assert.*; + +public class LegacyLevelDataTest { + @Rule public final TemporaryFolder temporary = new TemporaryFolder(); + + private NBTTagCompound original() { + NBTTagCompound root = new NBTTagCompound(), forge = new NBTTagCompound(); + NBTTagList fluids = new NBTTagList(); + for (String id : new String[] { "poweradvantage:crude_oil", "minecraft:water", "basemetals:mercury", + "poweradvantage:refined_oil", "othermod:crude_oil" }) fluids.appendTag(new NBTTagString(id)); + forge.setTag("DefaultFluidList", fluids); + forge.setInteger("Unrelated", 12345); + root.setTag("Forge", forge); + root.setString("PlayerCustomText", "poweradvantage:crude_oil"); + root.setIntArray("Energy", new int[] { 0x3f800001, 0x44a00000 }); + return root; + } + + @Test public void onlyTheTwoOwnedFluidOwnerNamesChange() { + NBTTagCompound root = original(); + assertTrue(LegacyLevelData.remapFluidDefaults(root)); + NBTTagList fluids = root.getCompoundTag("Forge").getTagList("DefaultFluidList", 8); + assertEquals(5, fluids.tagCount()); + assertEquals("basepower:crude_oil", fluids.getStringTagAt(0)); + assertEquals("minecraft:water", fluids.getStringTagAt(1)); + assertEquals("basemetals:mercury", fluids.getStringTagAt(2)); + assertEquals("basepower:refined_oil", fluids.getStringTagAt(3)); + assertEquals("othermod:crude_oil", fluids.getStringTagAt(4)); + assertEquals("poweradvantage:crude_oil", root.getString("PlayerCustomText")); + assertEquals(12345, root.getCompoundTag("Forge").getInteger("Unrelated")); + assertArrayEquals(new int[] {0x3f800001, 0x44a00000}, root.getIntArray("Energy")); + assertFalse(LegacyLevelData.remapFluidDefaults(root)); + } + + @Test public void bothHeadersHaveExactBackupsAndAByteStableSecondPass() throws Exception { + Path world = temporary.newFolder().toPath(); + for (String name : new String[] { "level.dat", "level.dat_old" }) { + try (OutputStream output = Files.newOutputStream(world.resolve(name))) { + CompressedStreamTools.writeCompressed(original(), output); + } + } + byte[] before = Files.readAllBytes(world.resolve("level.dat")); + LegacyLevelData.migrateWorld(world); + byte[] migrated = Files.readAllBytes(world.resolve("level.dat")); + assertFalse(java.util.Arrays.equals(before, migrated)); + try (java.util.stream.Stream backups = Files.list(world.resolve("basepower-migration-backups"))) { + Path[] files = backups.toArray(Path[]::new); + assertEquals(2, files.length); + for (Path backup : files) assertArrayEquals(before, Files.readAllBytes(backup)); + } + LegacyLevelData.migrateWorld(world); + assertArrayEquals(migrated, Files.readAllBytes(world.resolve("level.dat"))); + assertArrayEquals(migrated, Files.readAllBytes(world.resolve("level.dat_old"))); + } + + @Test public void aWorldWithoutOwnedDefaultsIsNotRewritten() throws Exception { + Path world = temporary.newFolder().toPath(); + NBTTagCompound root = new NBTTagCompound(); root.setString("Untouched", "value"); + try (OutputStream output = Files.newOutputStream(world.resolve("level.dat"))) { + CompressedStreamTools.writeCompressed(root, output); + } + byte[] before = Files.readAllBytes(world.resolve("level.dat")); + LegacyLevelData.migrateWorld(world); + assertArrayEquals(before, Files.readAllBytes(world.resolve("level.dat"))); + assertFalse(Files.exists(world.resolve("basepower-migration-backups"))); + } + + @Test public void savedModOwnersChangeOnlyForInstalledReplacements() { + NBTTagCompound root = new NBTTagCompound(), fml = new NBTTagCompound(); + NBTTagList mods = new NBTTagList(); + for (String name : new String[] { "poweradvantage", "steamadvantage", "electricadvantage", "basemetals" }) { + NBTTagCompound mod = new NBTTagCompound(); mod.setString("ModId", name); mod.setString("ModVersion", "old-version"); + mods.appendTag(mod); + } + fml.setTag("ModList", mods); root.setTag("FML", fml); + java.util.Set installed = new java.util.HashSet<>(java.util.Arrays.asList("basepower", "basesteam")); + assertTrue(LegacyLevelData.remapModList(root, installed)); + assertEquals("basepower", mods.getCompoundTagAt(0).getString("ModId")); + assertEquals("basesteam", mods.getCompoundTagAt(1).getString("ModId")); + assertEquals("electricadvantage", mods.getCompoundTagAt(2).getString("ModId")); + assertEquals("basemetals", mods.getCompoundTagAt(3).getString("ModId")); + for (int index = 0; index < 4; index++) assertEquals("old-version", mods.getCompoundTagAt(index).getString("ModVersion")); + assertFalse(LegacyLevelData.remapModList(root, installed)); + } + + @Test public void ambiguousOldAndNewOwnersFailBeforeChangingTheHeader() throws Exception { + Path world = temporary.newFolder().toPath(); + NBTTagCompound root = original(), fml = new NBTTagCompound(); + NBTTagList mods = new NBTTagList(); + for (String name : new String[] { "poweradvantage", "basepower" }) { + NBTTagCompound mod = new NBTTagCompound(); mod.setString("ModId", name); mods.appendTag(mod); + } + fml.setTag("ModList", mods); root.setTag("FML", fml); + Path header = world.resolve("level.dat"); + try (OutputStream output = Files.newOutputStream(header)) { + CompressedStreamTools.writeCompressed(root, output); + } + byte[] before = Files.readAllBytes(header); + try { + LegacyLevelData.migrateWorld(world); + fail("An ambiguous old/new installation must not be silently accepted"); + } catch (IllegalStateException expected) { + assertTrue(expected.getMessage().contains("both poweradvantage and basepower")); + } + assertArrayEquals(before, Files.readAllBytes(header)); + assertFalse(Files.exists(world.resolve("basepower-migration-backups"))); + } +} diff --git a/src/test/java/zone/moddev/mc/basepower/compat/LegacyWorldgenIdentityTest.java b/src/test/java/zone/moddev/mc/basepower/compat/LegacyWorldgenIdentityTest.java new file mode 100644 index 0000000..4445015 --- /dev/null +++ b/src/test/java/zone/moddev/mc/basepower/compat/LegacyWorldgenIdentityTest.java @@ -0,0 +1,440 @@ +package zone.moddev.mc.basepower.compat; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import static org.junit.Assert.*; + +public class LegacyWorldgenIdentityTest { + @Rule public final TemporaryFolder temporary = new TemporaryFolder(); + + private Path root() throws IOException { return temporary.newFolder().toPath(); } + private Path put(Path root, String relative, String json) throws IOException { + Path path = root.resolve(relative); + Files.createDirectories(path.getParent()); + Files.write(path, json.getBytes(StandardCharsets.UTF_8)); + return path; + } + private JsonObject read(Path path) throws IOException { + return new JsonParser().parse(new String(Files.readAllBytes(path), StandardCharsets.UTF_8)).getAsJsonObject(); + } + private String os1(String owner) { + return "{\"dimensions\":[{\"dimension\":0,\"ores\":[{\"blockID\":\"" + owner + + ":crude_oil\",\"frequency\":0.25,\"minHeight\":16,\"maxHeight\":64}]}]}"; + } + private String provider(String owner, String block) { + return "{\"schema_version\":3,\"provider_revision\":1,\"provider_modid\":\"" + owner + + "\",\"fluid_deposits\":{\"" + owner + ":fluid_deposit/desert_crude_oil\":{\"block\":\"" + + block + "\",\"enabled\":false}}}"; + } + private List backups(Path root) throws IOException { + try (Stream walk = Files.walk(root)) { + return walk.filter(path -> path.getFileName().toString().endsWith(".bak")).collect(Collectors.toList()); + } + } + private void fails(Path root) throws Exception { + try { + LegacyWorldgenIdentity.migrateConfig(root, "poweradvantage", "basepower"); + fail("Expected fail-closed migration"); + } catch (IOException expected) { assertFalse(expected.getMessage().isEmpty()); } + } + + @Test public void oldOs1FilenameIsRetiredAndParametersAreUnchanged() throws Exception { + Path root = root(); + String original = os1("poweradvantage"); + Path old = put(root, "orespawn/poweradvantage.json", original); + assertEquals(2, LegacyWorldgenIdentity.migrateConfig(root, "poweradvantage", "basepower")); + assertFalse(Files.exists(old)); + JsonObject ore = read(root.resolve("orespawn/basepower.json")).getAsJsonArray("dimensions") + .get(0).getAsJsonObject().getAsJsonArray("ores").get(0).getAsJsonObject(); + assertEquals("basepower:crude_oil", ore.get("blockID").getAsString()); + assertEquals(0.25, ore.get("frequency").getAsDouble(), 0); + assertEquals(64, ore.get("maxHeight").getAsInt()); + assertEquals(original, new String(Files.readAllBytes(backups(root).get(0)), StandardCharsets.UTF_8)); + assertEquals(0, LegacyWorldgenIdentity.migrateConfig(root, "poweradvantage", "basepower")); + assertEquals(1, backups(root).size()); + } + + @Test public void explicitProviderPreventsBridgeOverwritingItFromEitherLegacyFilename() throws Exception { + Path root = root(); + Path explicit = put(root, "basepower-orespawn.json", provider("basepower", "othermod:oil")); + byte[] authority = Files.readAllBytes(explicit); + put(root, "orespawn/poweradvantage.json", os1("poweradvantage")); + put(root, "orespawn/basepower.json", os1("basepower")); + assertEquals(2, LegacyWorldgenIdentity.migrateConfig(root, "poweradvantage", "basepower")); + assertArrayEquals(authority, Files.readAllBytes(explicit)); + assertFalse(Files.exists(root.resolve("orespawn/poweradvantage.json"))); + assertFalse(Files.exists(root.resolve("orespawn/basepower.json"))); + assertEquals(2, backups(root).size()); + } + + @Test public void oldProviderBecomesLoadedOwnerWithoutEnablingUserDisabledRule() throws Exception { + Path root = root(); + put(root, "poweradvantage-orespawn.json", provider("poweradvantage", "poweradvantage:crude_oil")); + assertEquals(2, LegacyWorldgenIdentity.migrateConfig(root, "poweradvantage", "basepower")); + JsonObject migrated = read(root.resolve("basepower-orespawn.json")); + assertEquals("basepower", migrated.get("provider_modid").getAsString()); + JsonObject rule = migrated.getAsJsonObject("fluid_deposits") + .getAsJsonObject("basepower:fluid_deposit/desert_crude_oil"); + assertEquals("basepower:crude_oil", rule.get("block").getAsString()); + assertFalse(rule.get("enabled").getAsBoolean()); + assertEquals(0, LegacyWorldgenIdentity.migrateConfig(root, "poweradvantage", "basepower")); + } + + @Test public void conflictingAuthoritiesFailBeforeAnyWriteOrBackup() throws Exception { + Path root = root(); + Path old = put(root, "poweradvantage-orespawn.json", provider("poweradvantage", "poweradvantage:crude_oil")); + put(root, "basepower-orespawn.json", provider("basepower", "othermod:oil")); + byte[] before = Files.readAllBytes(old); + fails(root); + assertArrayEquals(before, Files.readAllBytes(old)); + assertTrue(backups(root).isEmpty()); + } + + @Test public void savedWorldRewritesIdsManifestsAndSelectorsButNotTagsOrText() throws Exception { + Path world = root(); + Path profile = put(world, "serverconfig/orespawn-worldgen.json", "{\"schema_version\":5," + + "\"ores\":{\"electricadvantage:ore/lithium\":{\"block\":\"electricadvantage:li_ore\"," + + "\"enabled\":false,\"source_provider\":\"electricadvantage\",\"host_tags\":[\"electricadvantage:stone\"]," + + "\"host_blocks\":[\"electricadvantage:steel_frame\",{\"block\":\"other:stone\"}]," + + "\"notes\":\"electricadvantage:li_ore\"}},\"providers\":{\"electricadvantage\":{" + + "\"profile_defaults_applied\":true,\"known_ores\":[\"electricadvantage:ore/lithium\"]}}," + + "\"resource_sources\":{\"lithium\":\"electricadvantage\",\"sulfur\":\"none\"}," + + "\"description\":\"electricadvantage:li_ore\"}"); + Path unrelated = put(world, "another/serverconfig/orespawn-worldgen.json", "not JSON"); + assertEquals(1, LegacyWorldgenIdentity.migrateWorld(world, "electricadvantage", "baseelectric")); + JsonObject migrated = read(profile); + JsonObject rule = migrated.getAsJsonObject("ores").getAsJsonObject("baseelectric:ore/lithium"); + assertEquals("baseelectric:li_ore", rule.get("block").getAsString()); + assertEquals("baseelectric", rule.get("source_provider").getAsString()); + assertEquals("electricadvantage:stone", rule.getAsJsonArray("host_tags").get(0).getAsString()); + assertEquals("baseelectric:steel_frame", rule.getAsJsonArray("host_blocks").get(0).getAsString()); + assertEquals("electricadvantage:li_ore", rule.get("notes").getAsString()); + assertEquals("baseelectric", migrated.getAsJsonObject("resource_sources").get("lithium").getAsString()); + assertEquals("none", migrated.getAsJsonObject("resource_sources").get("sulfur").getAsString()); + assertFalse(migrated.getAsJsonObject("providers").has("electricadvantage")); + assertEquals("not JSON", new String(Files.readAllBytes(unrelated), StandardCharsets.UTF_8)); + assertEquals(0, LegacyWorldgenIdentity.migrateWorld(world, "electricadvantage", "baseelectric")); + } + + @Test public void legacyWorldRulesRememberModernDefaultsSoTheyCannotBeAddedAlongside() throws Exception { + Path world = root(); + Path profile = put(world, "serverconfig/orespawn-worldgen.json", "{\"schema_version\":5,\"ores\":{" + + "\"poweradvantage:legacy/poweradvantage_crude_oil_0\":{\"block\":\"poweradvantage:crude_oil\"," + + "\"enabled\":false}}}"); + LegacyWorldgenIdentity.migrateWorld(world, "poweradvantage", "basepower"); + JsonObject migrated = read(profile); + assertTrue(migrated.getAsJsonObject("ores").has("basepower:legacy/basepower_crude_oil_0")); + JsonObject manifest = migrated.getAsJsonObject("providers").getAsJsonObject("basepower"); + assertTrue(manifest.get("profile_defaults_applied").getAsBoolean()); + assertEquals("basepower:fluid_deposit/desert_crude_oil", manifest.getAsJsonArray("known_fluid_deposits") + .get(0).getAsString()); + assertEquals(0, LegacyWorldgenIdentity.migrateWorld(world, "poweradvantage", "basepower")); + } + + @Test public void malformedOrDuplicateOwnedJsonFailsWithoutImportingDefaults() throws Exception { + for (String invalid : new String[] { "[]", "{unquoted:true}", "{\"dimensions\":[],\"dimensions\":[]}", + "{\"dimensions\":[]} {}", "{\"dimensions\":[{\"dimension\":null,\"ores\":[]}]}", + "{\"dimensions\":[{\"dimension\":0,\"ores\":[{\"blockID\":null}]}]}" }) { + Path root = root(); + Path old = put(root, "orespawn/poweradvantage.json", invalid); + fails(root); + assertEquals(invalid, new String(Files.readAllBytes(old), StandardCharsets.UTF_8)); + assertFalse(Files.exists(root.resolve("orespawn/basepower.json"))); + assertTrue(backups(root).isEmpty()); + } + } + + @Test public void keyCollisionsInWorldAreNotSilentlyMerged() throws Exception { + Path world = root(); + Path profile = put(world, "serverconfig/orespawn-worldgen.json", "{\"ores\":{" + + "\"poweradvantage:ore/custom\":{\"block\":\"poweradvantage:crude_oil\",\"enabled\":false}," + + "\"basepower:ore/custom\":{\"block\":\"basepower:crude_oil\",\"enabled\":true}}}"); + byte[] before = Files.readAllBytes(profile); + try { LegacyWorldgenIdentity.migrateWorld(world, "poweradvantage", "basepower"); fail(); } + catch (IOException expected) { assertTrue(expected.getMessage().contains("Conflicting")); } + assertArrayEquals(before, Files.readAllBytes(profile)); + assertTrue(backups(world).isEmpty()); + } + + @Test public void existingBridgeMarkerCannotSilentlySkipLegacyAuthority() throws Exception { + Path root = root(); + put(root, "orespawn/poweradvantage.json", os1("poweradvantage")); + put(root, ".orespawn-legacy-bridge-migrated", "provider_schema=4"); + fails(root); + assertTrue(backups(root).isEmpty()); + } + + @Test public void standaloneOldImportsRequireReconciliationInsteadOfDuplicatingNewProvider() throws Exception { + Path root = root(); + put(root, "orespawn/poweradvantage.json", os1("poweradvantage")); + put(root, "orespawn-orespawn.json", "{\"ores\":{\"orespawn:legacy/poweradvantage/poweradvantage_crude_oil_0\":{" + + "\"block\":\"poweradvantage:crude_oil\"}}}"); + fails(root); + assertTrue(Files.exists(root.resolve("orespawn/poweradvantage.json"))); + assertTrue(backups(root).isEmpty()); + } + + @Test public void originalBackupSurvivesFurtherUserEditsAndSecondMigration() throws Exception { + Path world = root(); + Path profile = put(world, "serverconfig/orespawn-worldgen.json", "{\"ores\":{\"poweradvantage:ore/custom\":{" + + "\"block\":\"poweradvantage:crude_oil\",\"enabled\":false}}}"); + byte[] original = Files.readAllBytes(profile); + LegacyWorldgenIdentity.migrateWorld(world, "poweradvantage", "basepower"); + Path backup = backups(world).get(0); + put(world, "serverconfig/orespawn-worldgen.json", "{\"ores\":{\"poweradvantage:ore/custom\":{" + + "\"block\":\"poweradvantage:crude_oil\",\"enabled\":true}}}"); + LegacyWorldgenIdentity.migrateWorld(world, "poweradvantage", "basepower"); + assertArrayEquals(original, Files.readAllBytes(backup)); + assertEquals(2, backups(world).size()); + assertTrue(read(profile).getAsJsonObject("ores").getAsJsonObject("basepower:ore/custom") + .get("enabled").getAsBoolean()); + } + + @Test public void unsupportedPairsCannotBecomePathsAndMissingFilesAreNoOps() throws Exception { + Path root = root(); + try { LegacyWorldgenIdentity.migrateConfig(root, "../escape", "basepower"); fail(); } + catch (IllegalArgumentException expected) { assertTrue(backups(root).isEmpty()); } + assertEquals(0, LegacyWorldgenIdentity.migrateConfig(root, "poweradvantage", "basepower")); + assertEquals(0, LegacyWorldgenIdentity.migrateWorld(root, "poweradvantage", "basepower")); + assertEquals("baseelectric", LegacyWorldgenIdentity.migrateSelectorValue("electricadvantage", + "electricadvantage", "baseelectric")); + assertEquals("other", LegacyWorldgenIdentity.migrateSelectorValue("other", "electricadvantage", "baseelectric")); + } + + @Test public void invalidLegacyNumbersAndUnsupportedDisableFailClosed() throws Exception { + for (String extra : new String[] { "\"frequency\":\"oops\"", "\"frequency\":-1", "\"size\":1.5", + "\"minHeight\":-1", "\"maxHeight\":257", "\"blockMeta\":16", "\"enabled\":false" }) { + Path root = root(); + put(root, "orespawn/poweradvantage.json", "{\"dimensions\":[{\"dimension\":0,\"ores\":[{" + + "\"blockID\":\"poweradvantage:crude_oil\"," + extra + "}]}]}"); + fails(root); + assertTrue(backups(root).isEmpty()); + } + } + + @Test public void os3BlockNamesAreScopedAndCustomGeneratorNamesAreNotRewritten() throws Exception { + Path root = root(); + put(root, "orespawn3/poweradvantage.json", "{\"version\":\"1.0\",\"spawns\":{\"custom\":{" + + "\"feature\":\"poweradvantage:generator\",\"blocks\":[{\"name\":\"poweradvantage:crude_oil\"," + + "\"chance\":100,\"metadata\":0}]}}}"); + assertEquals(2, LegacyWorldgenIdentity.migrateConfig(root, "poweradvantage", "basepower")); + JsonObject spawn = read(root.resolve("orespawn3/basepower.json")).getAsJsonObject("spawns").getAsJsonObject("custom"); + assertEquals("basepower:crude_oil", spawn.getAsJsonArray("blocks").get(0).getAsJsonObject().get("name").getAsString()); + assertEquals("poweradvantage:generator", spawn.get("feature").getAsString()); + } + + @Test public void preexistingCorruptBackupIsNeverOverwritten() throws Exception { + Path world = root(); + String json = "{\"ores\":{\"poweradvantage:ore/custom\":{\"block\":\"poweradvantage:crude_oil\"}}}"; + Path profile = put(world, "serverconfig/orespawn-worldgen.json", json); + LegacyWorldgenIdentity.migrateWorld(world, "poweradvantage", "basepower"); + Path backup = backups(world).get(0); + Files.write(backup, "corrupt".getBytes(StandardCharsets.UTF_8)); + Files.write(profile, json.getBytes(StandardCharsets.UTF_8)); + try { LegacyWorldgenIdentity.migrateWorld(world, "poweradvantage", "basepower"); fail(); } + catch (IOException expected) { assertTrue(expected.getMessage().contains("backup conflict")); } + assertEquals("corrupt", new String(Files.readAllBytes(backup), StandardCharsets.UTF_8)); + assertEquals(json, new String(Files.readAllBytes(profile), StandardCharsets.UTF_8)); + } + + @Test public void wrongProviderFilenameAndPendingImportBesideSavedRulesAreRejected() throws Exception { + Path root = root(); + put(root, "poweradvantage-orespawn.json", provider("basepower", "basepower:crude_oil")); + fails(root); + assertTrue(backups(root).isEmpty()); + Path other = root(); + put(other, "orespawn/poweradvantage.json", os1("poweradvantage")); + put(other, "orespawn-worldgen.json", "{\"fluid_deposits\":{\"poweradvantage:fluid_deposit/desert_crude_oil\":{" + + "\"block\":\"poweradvantage:crude_oil\"}}}"); + fails(other); + assertTrue(backups(other).isEmpty()); + } + + @Test public void linkedAncestorCannotRedirectWorldMigration() throws Exception { + Path world = root(); + Path outside = root(); + Path original = put(outside, "orespawn-worldgen.json", "{\"block\":\"poweradvantage:crude_oil\"}"); + try { Files.createSymbolicLink(world.resolve("serverconfig"), outside); } + catch (IOException | UnsupportedOperationException | SecurityException unavailable) { + org.junit.Assume.assumeNoException(unavailable); + } + byte[] before = Files.readAllBytes(original); + try { LegacyWorldgenIdentity.migrateWorld(world, "poweradvantage", "basepower"); fail(); } + catch (IOException expected) { assertTrue(expected.getMessage().contains("linked/reparse")); } + assertArrayEquals(before, Files.readAllBytes(original)); + } + + @Test public void bothOwnedPairsMigrateOneGlobalProfileWithoutLosingEitherAuthority() throws Exception { + Path config = root(); + Path global = put(config, "orespawn-worldgen.json", "{\"schema_version\":6," + + "\"fluid_deposits\":{\"poweradvantage:fluid_deposit/desert_crude_oil\":{" + + "\"block\":\"poweradvantage:crude_oil\",\"enabled\":false,\"source_provider\":\"poweradvantage\"}}," + + "\"ores\":{\"electricadvantage:ore/lithium\":{\"block\":\"electricadvantage:li_ore\"," + + "\"enabled\":false,\"source_mod\":\"electricadvantage\"},\"electricadvantage:ore/sulfur\":{" + + "\"block\":\"othermod:sulfur\",\"enabled\":true}},\"providers\":{" + + "\"poweradvantage\":{\"provider_revision\":3,\"profile_defaults_applied\":true," + + "\"known_fluid_deposits\":[\"poweradvantage:fluid_deposit/desert_crude_oil\"]}," + + "\"electricadvantage\":{\"provider_revision\":7,\"profile_defaults_applied\":true," + + "\"known_ores\":[\"electricadvantage:ore/lithium\",\"electricadvantage:ore/sulfur\"]}}," + + "\"ore_providers\":{\"electricadvantage\":{\"provider_revision\":7," + + "\"known_ores\":[\"electricadvantage:ore/lithium\"]}}," + + "\"resource_sources\":{\"crude_oil\":\"poweradvantage\",\"lithium\":\"electricadvantage\",\"sulfur\":\"none\"}," + + "\"retrogen\":{\"enabled\":false,\"force\":false,\"revision\":17},\"notes\":null}"); + assertEquals(1, LegacyWorldgenIdentity.migrateConfig(config, "poweradvantage", "basepower")); + assertEquals(1, LegacyWorldgenIdentity.migrateConfig(config, "electricadvantage", "baseelectric")); + JsonObject migrated = read(global); + JsonObject oil = migrated.getAsJsonObject("fluid_deposits").getAsJsonObject("basepower:fluid_deposit/desert_crude_oil"); + assertEquals("basepower:crude_oil", oil.get("block").getAsString()); + assertFalse(oil.get("enabled").getAsBoolean()); + JsonObject lithium = migrated.getAsJsonObject("ores").getAsJsonObject("baseelectric:ore/lithium"); + assertEquals("baseelectric:li_ore", lithium.get("block").getAsString()); + assertFalse(lithium.get("enabled").getAsBoolean()); + assertEquals("othermod:sulfur", migrated.getAsJsonObject("ores").getAsJsonObject("baseelectric:ore/sulfur") + .get("block").getAsString()); + assertEquals(3, migrated.getAsJsonObject("providers").getAsJsonObject("basepower").get("provider_revision").getAsInt()); + assertEquals(7, migrated.getAsJsonObject("providers").getAsJsonObject("baseelectric").get("provider_revision").getAsInt()); + assertTrue(migrated.getAsJsonObject("ore_providers").has("baseelectric")); + assertEquals("basepower", migrated.getAsJsonObject("resource_sources").get("crude_oil").getAsString()); + assertEquals("baseelectric", migrated.getAsJsonObject("resource_sources").get("lithium").getAsString()); + assertEquals("none", migrated.getAsJsonObject("resource_sources").get("sulfur").getAsString()); + assertEquals(17, migrated.getAsJsonObject("retrogen").get("revision").getAsInt()); + assertFalse(migrated.getAsJsonObject("retrogen").get("force").getAsBoolean()); + assertTrue(migrated.get("notes").isJsonNull()); + byte[] firstPass = Files.readAllBytes(global); + List beforeBackups = backups(config); + assertEquals(0, LegacyWorldgenIdentity.migrateConfig(config, "poweradvantage", "basepower")); + assertEquals(0, LegacyWorldgenIdentity.migrateConfig(config, "electricadvantage", "baseelectric")); + assertArrayEquals(firstPass, Files.readAllBytes(global)); + assertEquals(beforeBackups, backups(config)); + } + + @Test public void maintainedGlobalProfileIsAnExactNoOpOnRestart() throws Exception { + Path config = root(); + Path profile = put(config, "orespawn-worldgen.json", currentProfile(8, "basepower")); + byte[] before = Files.readAllBytes(profile); + assertEquals(0, LegacyWorldgenIdentity.migrateConfig(config, "poweradvantage", "basepower")); + assertEquals(0, LegacyWorldgenIdentity.migrateConfig(config, "electricadvantage", "baseelectric")); + assertArrayEquals(before, Files.readAllBytes(profile)); + assertTrue(backups(config).isEmpty()); + } + + @Test public void maintainedWorldProfileIsAnExactNoOpOnRestart() throws Exception { + Path world = root(); + Path profile = put(world, "serverconfig/orespawn-worldgen.json", currentProfile(7, "basepower")); + byte[] before = Files.readAllBytes(profile); + assertEquals(0, LegacyWorldgenIdentity.migrateWorld(world, "poweradvantage", "basepower")); + assertEquals(0, LegacyWorldgenIdentity.migrateWorld(world, "electricadvantage", "baseelectric")); + assertArrayEquals(before, Files.readAllBytes(profile)); + assertTrue(backups(world).isEmpty()); + } + + @Test public void maintainedProfilesMigrateIdentityWithoutChangingGenerationChoices() throws Exception { + Path config = root(); + Path world = root(); + Path global = put(config, "orespawn-worldgen.json", currentProfile(8, "poweradvantage")); + Path saved = put(world, "serverconfig/orespawn-worldgen.json", currentProfile(7, "poweradvantage")); + byte[] globalBefore = Files.readAllBytes(global), worldBefore = Files.readAllBytes(saved); + assertEquals(1, LegacyWorldgenIdentity.migrateConfig(config, "poweradvantage", "basepower")); + assertEquals(1, LegacyWorldgenIdentity.migrateWorld(world, "poweradvantage", "basepower")); + for (Path path : new Path[] { global, saved }) { + JsonObject expected = new JsonParser().parse(currentProfile(path.equals(global) ? 8 : 7, "basepower")).getAsJsonObject(); + assertEquals(expected, read(path)); + } + assertArrayEquals(globalBefore, Files.readAllBytes(backups(config).get(0))); + assertArrayEquals(worldBefore, Files.readAllBytes(backups(world).get(0))); + byte[] globalAfter = Files.readAllBytes(global), worldAfter = Files.readAllBytes(saved); + assertEquals(0, LegacyWorldgenIdentity.migrateConfig(config, "poweradvantage", "basepower")); + assertEquals(0, LegacyWorldgenIdentity.migrateWorld(world, "poweradvantage", "basepower")); + assertArrayEquals(globalAfter, Files.readAllBytes(global)); + assertArrayEquals(worldAfter, Files.readAllBytes(saved)); + assertEquals(1, backups(config).size()); + assertEquals(1, backups(world).size()); + } + + @Test public void unknownGlobalAndWorldSchemasStillFailBeforeAnyWrite() throws Exception { + for (boolean global : new boolean[] { true, false }) { + Path root = root(); + Path profile = put(root, global ? "orespawn-worldgen.json" : "serverconfig/orespawn-worldgen.json", + currentProfile(global ? 9 : 8, "poweradvantage")); + byte[] before = Files.readAllBytes(profile); + try { + if (global) LegacyWorldgenIdentity.migrateConfig(root, "poweradvantage", "basepower"); + else LegacyWorldgenIdentity.migrateWorld(root, "poweradvantage", "basepower"); + fail("Unknown schema must not be rewritten or downgraded"); + } catch (IOException expected) { assertTrue(expected.getMessage().contains("Unsupported worldgen profile schema")); } + assertArrayEquals(before, Files.readAllBytes(profile)); + assertTrue(backups(root).isEmpty()); + } + } + + private String currentProfile(int schema, String owner) { + return "{\"schema_version\":" + schema + ",\"biome_defaults_revision\":3,\"ore_defaults_revision\":10," + + "\"geology_mode\":\"legacy\",\"manage_vanilla_ores\":false,\"suppress_all_ore_features\":true," + + "\"fluid_deposits\":{\"" + owner + ":fluid_deposit/desert_crude_oil\":{" + + "\"block\":\"" + owner + ":crude_oil\",\"enabled\":false,\"source_provider\":\"" + owner + "\"}}," + + "\"providers\":{\"" + owner + "\":{\"provider_revision\":3,\"profile_defaults_applied\":true," + + "\"known_fluid_deposits\":[\"" + owner + ":fluid_deposit/desert_crude_oil\"]}}," + + "\"resource_sources\":{\"crude_oil\":\"" + owner + "\",\"sulfur\":\"mineralogy\"}," + + "\"retrogen\":{\"enabled\":false,\"force\":false,\"revision\":17}," + + "\"worldgen_aliases\":{\"example:stone\":\"minecraft:stone\"}," + + "\"formations\":{\"algorithm\":\"stable_layers\",\"custom\":{\"waviness_amplitude\":60}}," + + "\"notes\":\"poweradvantage:crude_oil\"}\n"; + } + + @Test public void bothLegacyAuthoritiesShareGlobalAndWorldProfilesWithNoFreshDefaultReinsertion() throws Exception { + Path config = root(); + Path world = root(); + String json = "{\"schema_version\":5,\"ores\":{" + + "\"poweradvantage:legacy/poweradvantage_crude_oil_0\":{\"block\":\"poweradvantage:crude_oil\",\"enabled\":false}," + + "\"electricadvantage:legacy/electricadvantage_li_ore_0\":{\"block\":\"electricadvantage:li_ore\",\"enabled\":true}," + + "\"electricadvantage:legacy/electricadvantage_sulfur_ore_1\":{\"block\":\"electricadvantage:sulfur_ore\",\"enabled\":false}}}"; + Path global = put(config, "orespawn-worldgen.json", json); + Path saved = put(world, "serverconfig/orespawn-worldgen.json", json); + for (String[] pair : new String[][] { { "poweradvantage", "basepower" }, { "electricadvantage", "baseelectric" } }) { + assertEquals(1, LegacyWorldgenIdentity.migrateConfig(config, pair[0], pair[1])); + assertEquals(1, LegacyWorldgenIdentity.migrateWorld(world, pair[0], pair[1])); + } + assertEquals(read(global), read(saved)); + JsonObject profile = read(saved); + assertEquals(3, profile.getAsJsonObject("ores").entrySet().size()); + assertFalse(profile.has("fluid_deposits")); + JsonObject manifests = profile.getAsJsonObject("providers"); + assertEquals("basepower:fluid_deposit/desert_crude_oil", manifests.getAsJsonObject("basepower") + .getAsJsonArray("known_fluid_deposits").get(0).getAsString()); + assertEquals(2, manifests.getAsJsonObject("baseelectric").getAsJsonArray("known_ores").size()); + byte[] globalBefore = Files.readAllBytes(global); + byte[] worldBefore = Files.readAllBytes(saved); + for (String[] pair : new String[][] { { "poweradvantage", "basepower" }, { "electricadvantage", "baseelectric" } }) { + assertEquals(0, LegacyWorldgenIdentity.migrateConfig(config, pair[0], pair[1])); + assertEquals(0, LegacyWorldgenIdentity.migrateWorld(world, pair[0], pair[1])); + } + assertArrayEquals(globalBefore, Files.readAllBytes(global)); + assertArrayEquals(worldBefore, Files.readAllBytes(saved)); + assertEquals(2, backups(config).size()); + assertEquals(2, backups(world).size()); + } + + @Test public void electricOs1PlusDimensionsAndTwoOutputsSurviveFilenameMigration() throws Exception { + Path config = root(); + put(config, "orespawn/electricadvantage.json", "{\"dimensions\":[{\"dimension\":\"+\",\"ores\":[" + + "{\"blockID\":\"electricadvantage:li_ore\",\"size\":8,\"variation\":2,\"frequency\":0.125,\"minHeight\":1,\"maxHeight\":32}," + + "{\"blockID\":\"electricadvantage:sulfur_ore\",\"size\":16,\"variation\":8,\"frequency\":1,\"minHeight\":1,\"maxHeight\":32}]}]}"); + assertEquals(2, LegacyWorldgenIdentity.migrateConfig(config, "electricadvantage", "baseelectric")); + JsonObject dimension = read(config.resolve("orespawn/baseelectric.json")).getAsJsonArray("dimensions").get(0).getAsJsonObject(); + assertEquals("+", dimension.get("dimension").getAsString()); + assertEquals(2, dimension.getAsJsonArray("ores").size()); + assertEquals("baseelectric:li_ore", dimension.getAsJsonArray("ores").get(0).getAsJsonObject().get("blockID").getAsString()); + assertEquals("baseelectric:sulfur_ore", dimension.getAsJsonArray("ores").get(1).getAsJsonObject().get("blockID").getAsString()); + assertEquals(0, LegacyWorldgenIdentity.migrateConfig(config, "electricadvantage", "baseelectric")); + } +} diff --git a/src/test/java/zone/moddev/mc/poweradvantage/compat/OreDictionaryFallbackTest.java b/src/test/java/zone/moddev/mc/basepower/compat/OreDictionaryFallbackTest.java similarity index 95% rename from src/test/java/zone/moddev/mc/poweradvantage/compat/OreDictionaryFallbackTest.java rename to src/test/java/zone/moddev/mc/basepower/compat/OreDictionaryFallbackTest.java index abccd97..1aec96a 100644 --- a/src/test/java/zone/moddev/mc/poweradvantage/compat/OreDictionaryFallbackTest.java +++ b/src/test/java/zone/moddev/mc/basepower/compat/OreDictionaryFallbackTest.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.compat; +package zone.moddev.mc.basepower.compat; import java.nio.charset.StandardCharsets; import java.nio.file.Files; @@ -126,8 +126,8 @@ private static ItemBlock steelBlock(String itemName, String blockName) { Item plain = new Item(); plain.setRegistryName(new ResourceLocation("basemetals", "steel_block")); for (Item candidate : new Item[]{plain, - steelBlock("poweradvantage:steel_frame", "poweradvantage:steel_frame"), - steelBlock("basemetals:steel_block", "poweradvantage:steel_frame"), + steelBlock("basepower:steel_frame", "basepower:steel_frame"), + steelBlock("basemetals:steel_block", "basepower:steel_frame"), steelBlock("basemetals:steel", "basemetals:steel")}) { Registry registry = new Registry(); registry.steel = candidate; @@ -173,13 +173,14 @@ private static ItemBlock steelBlock(String itemName, String blockName) { } @Test public void lifecycleHookPrecedesFuelAndRecipeInitialization() throws Exception { - String source = new String(Files.readAllBytes(Paths.get("src/main/java/zone/moddev/mc/poweradvantage/PowerAdvantage.java")), StandardCharsets.UTF_8); + String source = new String(Files.readAllBytes(Paths.get("src/main/java/zone/moddev/mc/basepower/PowerAdvantage.java")), StandardCharsets.UTF_8); String init = source.substring(source.indexOf("public void init(FMLInitializationEvent event)"), source.indexOf("private void clientInit")); String hook = "BaseMetalsCompat.registerOreDictionaryFallbacks();"; assertTrue(init.indexOf(hook) >= 0); assertEquals(init.indexOf(hook), init.lastIndexOf(hook)); assertTrue(init.indexOf(hook) < init.indexOf("init.Fuels.init();")); assertTrue(init.indexOf(hook) < init.indexOf("init.Recipes.init();")); - assertTrue(source.contains("after:basemetals")); + assertTrue("Saved generation settings must migrate before OreSpawn reads them", + source.contains("required-before:orespawn@[4.0.6,5.0.0)")); } } diff --git a/src/test/java/zone/moddev/mc/poweradvantage/conduitnetwork/ConduitNetworkManagerTest.java b/src/test/java/zone/moddev/mc/basepower/conduitnetwork/ConduitNetworkManagerTest.java similarity index 96% rename from src/test/java/zone/moddev/mc/poweradvantage/conduitnetwork/ConduitNetworkManagerTest.java rename to src/test/java/zone/moddev/mc/basepower/conduitnetwork/ConduitNetworkManagerTest.java index 89633b9..a034120 100644 --- a/src/test/java/zone/moddev/mc/poweradvantage/conduitnetwork/ConduitNetworkManagerTest.java +++ b/src/test/java/zone/moddev/mc/basepower/conduitnetwork/ConduitNetworkManagerTest.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.conduitnetwork; +package zone.moddev.mc.basepower.conduitnetwork; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -7,7 +7,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; import org.junit.Test; -import zone.moddev.mc.poweradvantage.math.BlockPos4D; +import zone.moddev.mc.basepower.math.BlockPos4D; public class ConduitNetworkManagerTest { private final ConduitNetworkManager manager = new ConduitNetworkManager(new ConduitType("test")); diff --git a/src/test/java/zone/moddev/mc/poweradvantage/conduitnetwork/LoadedConduitNetworkTest.java b/src/test/java/zone/moddev/mc/basepower/conduitnetwork/LoadedConduitNetworkTest.java similarity index 99% rename from src/test/java/zone/moddev/mc/poweradvantage/conduitnetwork/LoadedConduitNetworkTest.java rename to src/test/java/zone/moddev/mc/basepower/conduitnetwork/LoadedConduitNetworkTest.java index 06ee70f..ba5baad 100644 --- a/src/test/java/zone/moddev/mc/poweradvantage/conduitnetwork/LoadedConduitNetworkTest.java +++ b/src/test/java/zone/moddev/mc/basepower/conduitnetwork/LoadedConduitNetworkTest.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.conduitnetwork; +package zone.moddev.mc.basepower.conduitnetwork; import static org.junit.Assert.*; @@ -29,7 +29,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import org.junit.BeforeClass; import org.junit.Test; -import zone.moddev.mc.poweradvantage.math.BlockPos4D; +import zone.moddev.mc.basepower.math.BlockPos4D; public class LoadedConduitNetworkTest { private static final ConduitType TYPE = new ConduitType("test-chunk-boundary"); diff --git a/src/test/java/zone/moddev/mc/poweradvantage/conduitnetwork/PowerTransferAccountingTest.java b/src/test/java/zone/moddev/mc/basepower/conduitnetwork/PowerTransferAccountingTest.java similarity index 97% rename from src/test/java/zone/moddev/mc/poweradvantage/conduitnetwork/PowerTransferAccountingTest.java rename to src/test/java/zone/moddev/mc/basepower/conduitnetwork/PowerTransferAccountingTest.java index 070739c..709e594 100644 --- a/src/test/java/zone/moddev/mc/poweradvantage/conduitnetwork/PowerTransferAccountingTest.java +++ b/src/test/java/zone/moddev/mc/basepower/conduitnetwork/PowerTransferAccountingTest.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.conduitnetwork; +package zone.moddev.mc.basepower.conduitnetwork; import cyano.poweradvantage.api.*; import java.util.Arrays; diff --git a/src/test/java/zone/moddev/mc/poweradvantage/init/LegacyOreSpawnMigrationTest.java b/src/test/java/zone/moddev/mc/basepower/init/LegacyOreSpawnMigrationTest.java similarity index 92% rename from src/test/java/zone/moddev/mc/poweradvantage/init/LegacyOreSpawnMigrationTest.java rename to src/test/java/zone/moddev/mc/basepower/init/LegacyOreSpawnMigrationTest.java index 6cf56ff..a902bda 100644 --- a/src/test/java/zone/moddev/mc/poweradvantage/init/LegacyOreSpawnMigrationTest.java +++ b/src/test/java/zone/moddev/mc/basepower/init/LegacyOreSpawnMigrationTest.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.init; +package zone.moddev.mc.basepower.init; import com.google.gson.JsonObject; import com.google.gson.JsonParser; @@ -30,7 +30,7 @@ public void legacyOilIsOneRetainedRuleAndOverridesFreshApiDefaults() throws Exce Class bridge = Class.forName("com.mcmoddev.orespawn.compat.LegacyOs3Bridge"); Method translate = bridge.getDeclaredMethod("translateOs1ForTests", String.class, JsonObject.class); translate.setAccessible(true); - JsonObject converted = (JsonObject) translate.invoke(null, "poweradvantage", legacy); + JsonObject converted = (JsonObject) translate.invoke(null, "basepower", legacy); assertEquals(1, converted.getAsJsonObject("spawns").entrySet().size()); assertEquals(1, OreSpawnWorldGen.createProvider().toJson() .getAsJsonObject("fluid_deposits").entrySet().size()); @@ -38,7 +38,7 @@ public void legacyOilIsOneRetainedRuleAndOverridesFreshApiDefaults() throws Exce Path config = temporary.newFolder("config").toPath(); Path legacyDirectory = Files.createDirectories(config.resolve("orespawn")); Files.copy(getClass().getResourceAsStream("/orespawn-legacy/poweradvantage.json"), - legacyDirectory.resolve("poweradvantage.json")); + legacyDirectory.resolve("basepower.json")); assertTrue(OreSpawnWorldGen.describeOverride(config).contains("legacy importer authority")); } } \ No newline at end of file diff --git a/src/test/java/zone/moddev/mc/poweradvantage/init/OreSpawnWorldGenTest.java b/src/test/java/zone/moddev/mc/basepower/init/OreSpawnWorldGenTest.java similarity index 83% rename from src/test/java/zone/moddev/mc/poweradvantage/init/OreSpawnWorldGenTest.java rename to src/test/java/zone/moddev/mc/basepower/init/OreSpawnWorldGenTest.java index 45eff7a..a53fb95 100644 --- a/src/test/java/zone/moddev/mc/poweradvantage/init/OreSpawnWorldGenTest.java +++ b/src/test/java/zone/moddev/mc/basepower/init/OreSpawnWorldGenTest.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.init; +package zone.moddev.mc.basepower.init; import com.google.gson.JsonObject; import org.junit.Test; @@ -11,12 +11,12 @@ public class OreSpawnWorldGenTest { public void desertOilProviderUsesStableIdentityAndCoveredLakeGeometry() { JsonObject root = OreSpawnWorldGen.createProvider().toJson(); assertEquals(4, root.get("schema_version").getAsInt()); - assertEquals("poweradvantage", root.get("provider_modid").getAsString()); + assertEquals("basepower", root.get("provider_modid").getAsString()); JsonObject deposits = root.getAsJsonObject("fluid_deposits"); assertEquals(1, deposits.entrySet().size()); JsonObject deposit = deposits.getAsJsonObject( - "poweradvantage:fluid_deposit/desert_crude_oil"); - assertEquals("poweradvantage:crude_oil", deposit.get("block").getAsString()); + "basepower:fluid_deposit/desert_crude_oil"); + assertEquals("basepower:crude_oil", deposit.get("block").getAsString()); assertTrue(deposit.get("enabled").getAsBoolean()); JsonObject overworld = deposit.getAsJsonObject("dimensions") .getAsJsonObject("minecraft:overworld"); diff --git a/src/test/java/zone/moddev/mc/poweradvantage/machines/conveyors/ConveyorTransferTest.java b/src/test/java/zone/moddev/mc/basepower/machines/conveyors/ConveyorTransferTest.java similarity index 95% rename from src/test/java/zone/moddev/mc/poweradvantage/machines/conveyors/ConveyorTransferTest.java rename to src/test/java/zone/moddev/mc/basepower/machines/conveyors/ConveyorTransferTest.java index f0b4d91..0632749 100644 --- a/src/test/java/zone/moddev/mc/poweradvantage/machines/conveyors/ConveyorTransferTest.java +++ b/src/test/java/zone/moddev/mc/basepower/machines/conveyors/ConveyorTransferTest.java @@ -1,4 +1,4 @@ -package zone.moddev.mc.poweradvantage.machines.conveyors; +package zone.moddev.mc.basepower.machines.conveyors; import net.minecraft.inventory.InventoryBasic; import net.minecraft.item.ItemStack; @@ -6,7 +6,7 @@ import net.minecraft.util.EnumFacing; import org.junit.BeforeClass; import org.junit.Test; -import zone.moddev.mc.poweradvantage.util.InventoryWrapper; +import zone.moddev.mc.basepower.util.InventoryWrapper; import static org.junit.Assert.*; public class ConveyorTransferTest { diff --git a/src/test/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidCapabilityRoutingTest.java b/src/test/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidCapabilityRoutingTest.java new file mode 100644 index 0000000..95a15ba --- /dev/null +++ b/src/test/java/zone/moddev/mc/basepower/machines/fluidmachines/FluidCapabilityRoutingTest.java @@ -0,0 +1,78 @@ +package zone.moddev.mc.basepower.machines.fluidmachines; + +import cyano.poweradvantage.api.simple.TileEntitySimpleFluidMachine; +import cyano.poweradvantage.api.fluid.FluidRequest; +import java.lang.reflect.Constructor; +import java.util.concurrent.Callable; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.*; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import org.junit.*; +import static org.junit.Assert.*; + +public class FluidCapabilityRoutingTest { + private static Capability original; + + @BeforeClass public static void bootstrap() throws Exception { + net.minecraft.init.Bootstrap.register(); + original=CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY; + if(original==null) { + // Unit tests do not run FML's capability-field injection. + Constructor constructor=Capability.class.getDeclaredConstructor(String.class,Capability.IStorage.class,Callable.class); + constructor.setAccessible(true); + CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY=constructor.newInstance("fluid-routing-test",null,null); + } + } + @AfterClass public static void restore() { CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY=original; } + + private static final class TwoTank extends TileEntitySimpleFluidMachine { + final FluidTank input=new FluidTank(1000); + TwoTank() { super(1000,"test"); } + @Override protected ItemStack[] getInventory() { return new ItemStack[0]; } + @Override public void tickUpdate(boolean server) {} + @Override public FluidTank getTank() { return tank; } + @Override public boolean isFluidSource() { return true; } + @Override public boolean isFluidSink() { return true; } + @Override public FluidRequest getFluidRequest(Fluid offer) { return FluidRequest.REQUEST_NOTHING; } + @Override public boolean canAccept(Fluid offer) { return offer==FluidRegistry.WATER; } + @Override public int fill(EnumFacing face,FluidStack packet,boolean execute) { + return packet!=null && canFill(face,packet.getFluid()) ? input.fill(packet,execute) : 0; + } + @Override public boolean canFill(EnumFacing face,Fluid fluid) { return face==EnumFacing.UP && fluid==FluidRegistry.WATER; } + @Override public FluidTankInfo[] getTankInfo(EnumFacing face) { return new FluidTankInfo[]{input.getInfo(),tank.getInfo()}; } + } + + @Test public void capabilityFillsTheOverriddenInputRatherThanExposingOutputTank() { + TwoTank tile=new TwoTank(); + IFluidHandler port=tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY,EnumFacing.UP); + assertEquals(1000,port.fill(new FluidStack(FluidRegistry.WATER,1000),true)); + assertEquals(1000,tile.input.getFluidAmount()); + assertEquals(0,tile.getTank().getFluidAmount()); + } + @Test public void capabilityHonorsFluidAndSideRestrictions() { + TwoTank tile=new TwoTank(); + assertEquals(0,tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY,EnumFacing.UP).fill(new FluidStack(FluidRegistry.LAVA,1000),true)); + assertEquals(0,tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY,EnumFacing.DOWN).fill(new FluidStack(FluidRegistry.WATER,1000),true)); + assertEquals(0,tile.input.getFluidAmount());assertEquals(0,tile.getTank().getFluidAmount()); + } + @Test public void simulationCapacityAndBothTankPropertiesRemainAccurate() { + TwoTank tile=new TwoTank();IFluidHandler port=tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY,EnumFacing.UP); + assertEquals(1000,port.fill(new FluidStack(FluidRegistry.WATER,1000),false)); + assertEquals(0,tile.input.getFluidAmount());assertEquals(0,tile.getTank().getFluidAmount()); + tile.input.fill(new FluidStack(FluidRegistry.WATER,999),true); + assertEquals(1,port.fill(new FluidStack(FluidRegistry.WATER,10),true)); + assertEquals(0,port.fill(new FluidStack(FluidRegistry.WATER,1),true)); + assertEquals(2,port.getTankProperties().length); + } + @Test public void drainStillReturnsOnlyOutputAndNeverTheInputReserve() { + TwoTank tile=new TwoTank();tile.input.fill(new FluidStack(FluidRegistry.WATER,1000),true); + tile.getTank().fill(new FluidStack(FluidRegistry.LAVA,500),true); + IFluidHandler port=tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY,EnumFacing.UP); + assertEquals(250,port.drain(250,false).amount);assertEquals(500,tile.getTank().getFluidAmount()); + assertEquals(500,port.drain(600,true).amount);assertNull(port.drain(1,true)); + assertEquals(1000,tile.input.getFluidAmount()); + } +} diff --git a/src/test/java/zone/moddev/mc/basepower/machines/fluidmachines/StorageTankDescriptionTest.java b/src/test/java/zone/moddev/mc/basepower/machines/fluidmachines/StorageTankDescriptionTest.java new file mode 100644 index 0000000..61f425e --- /dev/null +++ b/src/test/java/zone/moddev/mc/basepower/machines/fluidmachines/StorageTankDescriptionTest.java @@ -0,0 +1,40 @@ +package zone.moddev.mc.basepower.machines.fluidmachines; + +import java.io.InputStream; +import net.minecraft.init.Bootstrap; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.text.translation.LanguageMap; +import org.junit.BeforeClass; +import org.junit.Test; +import static org.junit.Assert.*; + +/** Actual item-description generation, not just the presence of language keys. */ +public class StorageTankDescriptionTest { + @BeforeClass public static void bootstrap() throws Exception { + Bootstrap.register(); + try (InputStream input = StorageTankDescriptionTest.class.getResourceAsStream("/assets/basepower/lang/en_US.lang")) { + assertNotNull(input); + LanguageMap.inject(input); + } + } + + @Test public void anEmptyTankItemActuallyRetainsItsTranslatedDescription() { + ItemStack item = new ItemStack(Items.PAPER); + new StorageTankBlock().displayInformation(item); + assertNotNull("Generated description must be attached to the item", item.getTagCompound()); + assertEquals("Empty", item.getTagCompound().getCompoundTag("display").getTagList("Lore", 8).getStringTagAt(0)); + } + + @Test public void aFilledTankUsesTheNewTranslationWithoutChangingItsContents() { + ItemStack item = new ItemStack(Items.PAPER); + NBTTagCompound tag = new NBTTagCompound(); tag.setInteger("Volume", 2500); tag.setString("FluidID", "water"); + item.setTagCompound(tag); + new StorageTankBlock().displayInformation(item); + assertEquals("2.5 buckets of water", tag.getCompoundTag("display").getTagList("Lore", 8).getStringTagAt(0)); + assertEquals(2500, tag.getInteger("Volume")); + assertEquals("water", tag.getString("FluidID")); + assertEquals(1, item.stackSize); + } +} diff --git a/src/test/java/zone/moddev/mc/poweradvantage/registry/MachineGuiTitleTest.java b/src/test/java/zone/moddev/mc/basepower/registry/MachineGuiTitleTest.java similarity index 82% rename from src/test/java/zone/moddev/mc/poweradvantage/registry/MachineGuiTitleTest.java rename to src/test/java/zone/moddev/mc/basepower/registry/MachineGuiTitleTest.java index d56b772..697e441 100644 --- a/src/test/java/zone/moddev/mc/poweradvantage/registry/MachineGuiTitleTest.java +++ b/src/test/java/zone/moddev/mc/basepower/registry/MachineGuiTitleTest.java @@ -1,7 +1,7 @@ -package zone.moddev.mc.poweradvantage.registry; +package zone.moddev.mc.basepower.registry; -import zone.moddev.mc.poweradvantage.machines.fluidmachines.MetalTankTileEntity; -import zone.moddev.mc.poweradvantage.machines.fluidmachines.StorageTankTileEntity; +import zone.moddev.mc.basepower.machines.fluidmachines.MetalTankTileEntity; +import zone.moddev.mc.basepower.machines.fluidmachines.StorageTankTileEntity; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; @@ -21,9 +21,9 @@ public class MachineGuiTitleTest { } @Test public void tankNamesUseTheirPublishedTranslationsRatherThanJavaClassNames() throws Exception { - assertCaption(new StorageTankTileEntity(), "tile.poweradvantage.fluid_storage_tank.name", + assertCaption(new StorageTankTileEntity(), "tile.basepower.fluid_storage_tank.name", "Portable Fluid Tank"); - assertCaption(new MetalTankTileEntity(), "tile.poweradvantage.fluid_metal_tank.name", + assertCaption(new MetalTankTileEntity(), "tile.basepower.fluid_metal_tank.name", "Metal Fluid Tank"); } @@ -46,7 +46,7 @@ private static void assertCaption(IInventory tank, String key, String literal) t assertEquals(key, ((TextComponentTranslation) caption).getKey()); Properties english = new Properties(); try (InputStream stream = MachineGuiTitleTest.class.getResourceAsStream( - "/assets/poweradvantage/lang/en_US.lang")) { + "/assets/basepower/lang/en_US.lang")) { assertNotNull("Published Power Advantage English language resource", stream); english.load(new InputStreamReader(stream, StandardCharsets.UTF_8)); } diff --git a/src/test/resources/orespawn-legacy/poweradvantage.json b/src/test/resources/orespawn-legacy/poweradvantage.json index 70899f3..861b8d1 100644 --- a/src/test/resources/orespawn-legacy/poweradvantage.json +++ b/src/test/resources/orespawn-legacy/poweradvantage.json @@ -15,4 +15,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/test-rig/README.md b/test-rig/README.md index 64a1952..b93cf61 100644 --- a/test-rig/README.md +++ b/test-rig/README.md @@ -1,6 +1,10 @@ # Advantage Works 1.10.2 Test Rig -> **Commissioning notice:** This harness builds disposable works. It is not a gameplay mod, registers no content, and must never be shipped inside a PowerAdvantage jar. +The current targets are basePower, baseSteam and baseElectric. Station IDs and operator commands stay unchanged. Original-release Advantage fixtures are read-only migration sources, not interchangeable runtime dependencies. See [Moving From Advantage To basePower](../docs/1.10/base-migration.md) before testing an existing world. + +See [Recipe Progression Checks](../docs/1.10/recipe-progression-checks.md) for finite-material native crafting, hammer and merchant transactions, and the connected oil/plastic and steam starter plant. This is separate from the older recipe-registration audit, whose partial results are retained. + +> **Commissioning notice:** This harness builds disposable works. It is not a gameplay mod, registers no content, and must never be shipped inside a basePower jar. The rig turns the 20 cards in the [Advantage Works handbook](../docs/1.10/README.md) plus a public-API fixture into one walkable superflat server world. Power Works lies west of the central concourse, Steam Works north, Electric Works east, and the drill, lift, turbine, pumping, musket, and turret proving grounds south. @@ -67,7 +71,7 @@ gradlew.bat -p test-rig verifyWorksPackagedCurrent -PworksStations=E-01 -PworksS Every machinery profile still builds and checks the complete works; the selection controls which stations are started, stopped, and checkpointed around the full process restart. Normal-world generation profiles deliberately skip station construction. The configured run duration is also used as a post-restart settle interval before assertions, allowing an eight-tick distribution cycle to complete. Use `worksServerPort` when another local server occupies the profile's default port. The effective station list, duration, and port are recorded in `run-manifest.json`. -The development profile uses current PowerAdvantage source plus the sibling SteamAdvantage and ElectricAdvantage deobf jars. PowerAdvantage supplies the pinned OreSpawn 4 development runtime; BaseMetals and Mineralogy remain absent so their integrations are visibly skipped. +The development profile uses current basePower source plus the sibling baseSteam and baseElectric deobf jars. basePower supplies the pinned OreSpawn 4 development runtime; BaseMetals and Mineralogy remain absent so their integrations are visibly skipped. ## Run matrix @@ -127,4 +131,14 @@ The sampler records block counts, sampled biome centers, any deposit-producing c ## Release isolation -`verifyHarnessIsolation` opens the PowerAdvantage release jar and rejects any `zone/moddev/mc/advantageworks` class or `assets/advantageworkstest` resource. The normal PowerAdvantage build never includes the nested `test-rig` source set. +`verifyHarnessIsolation` opens the basePower release jar and rejects any `zone/moddev/mc/advantageworks` class or `assets/advantageworkstest` resource. The normal basePower build never includes the nested `test-rig` source set. + +## Migration Evidence + +The native migration runners distinguish three kinds of evidence: + +- Connected original-release worlds prove saved-state preservation and paid work without replacing machines, followed by a full server restart. +- The larger passive original-release fixture checks saved blocks, metadata, inventories and typed NBT before machinery can tick. +- Newly constructed nested inventory and entity fixtures test additional migration cases. They are synthetic tests, not evidence that a historical player used that exact arrangement. + +Each run pins the candidate jars, server code, fixture and test protocol. Failed receipts remain available. A known dependency warning may only be classified after a fresh, hash-bound dependency-only control and candidate behaviour check; it is not a blanket permission to ignore startup errors. Endurance means a measured 30-minute finite-resource operating run, not a shortened smoke run. diff --git a/test-rig/build.gradle b/test-rig/build.gradle index 04d5bb0..61dd764 100644 --- a/test-rig/build.gradle +++ b/test-rig/build.gradle @@ -59,7 +59,7 @@ dependencies { runnerImplementation 'com.google.code.gson:gson:2.8.0' testImplementation 'junit:junit:4.13.2' compileOnly files(project.findProperty('powerAdvantageDeobfJar') - ?: '../build/libs-dev/PowerAdvantage-2.4.3.110021-deobf.jar') + ?: '../build/libs-dev/basePower-2.4.4.110021-deobf.jar') } tasks.named('processResources', ProcessResources) { @@ -160,7 +160,7 @@ tasks.register('verifyHarnessIsolation') { group = 'verification' description = 'Confirms the PowerAdvantage release contains no test-harness content.' doLast { - File powerJar = file('../build/libs/PowerAdvantage-2.4.3.110021.jar') + File powerJar = file('../build/libs/basePower-2.4.4.110021.jar') if (!powerJar.isFile()) { throw new GradleException("Build PowerAdvantage first: ${powerJar}") } @@ -180,3 +180,8 @@ tasks.register('verifyHarnessIsolation') { tasks.named('check') { dependsOn tasks.named('verifyHarnessIsolation') } + +tasks.named('test', Test) { + inputs.dir('profiles') + inputs.file('src/main/java/zone/moddev/mc/advantageworks/NativeSurvivalProgressionProbe.java') +} diff --git a/test-rig/client-resources/java/zone/moddev/mc/advantageworks/client/ClientResourceProbe.java b/test-rig/client-resources/java/zone/moddev/mc/advantageworks/client/ClientResourceProbe.java index f39effa..53f5575 100644 --- a/test-rig/client-resources/java/zone/moddev/mc/advantageworks/client/ClientResourceProbe.java +++ b/test-rig/client-resources/java/zone/moddev/mc/advantageworks/client/ClientResourceProbe.java @@ -19,7 +19,7 @@ /** Native, worldless GUI capture only; no operating or migration claims. */ @Mod(modid = ClientResourceProbe.MODID, name = "Advantage GUI Capture", version = "1.0.0.110021", clientSideOnly = true, acceptedMinecraftVersions = "[1.10.2]", - dependencies = "required-after:poweradvantage;required-after:steamadvantage;required-after:electricadvantage") + dependencies = "required-after:basepower;required-after:basesteam;required-after:baseelectric") @Mod.EventBusSubscriber(value = Side.CLIENT) public final class ClientResourceProbe { static final String MODID = "advantageclientresources"; @@ -44,7 +44,7 @@ public final class ClientResourceProbe { && Boolean.getBoolean("advantageworks.machineGuiLayouts"), "All three mods and the GUI audit are required"); JsonArray mods = new JsonArray(); JsonObject versions = new JsonObject(); - for (String id : new String[]{"poweradvantage", "steamadvantage", "electricadvantage"}) { + for (String id : new String[]{"basepower", "basesteam", "baseelectric"}) { ModContainer mod = Loader.instance().getIndexedModList().get(id); require(mod != null, "Combined launch omitted " + id); String expected = System.getProperty("advantageworks.expectedVersion." + id); diff --git a/test-rig/client-resources/java/zone/moddev/mc/advantageworks/client/MachineGuiLayoutProbe.java b/test-rig/client-resources/java/zone/moddev/mc/advantageworks/client/MachineGuiLayoutProbe.java index c8a901e..e7e760b 100644 --- a/test-rig/client-resources/java/zone/moddev/mc/advantageworks/client/MachineGuiLayoutProbe.java +++ b/test-rig/client-resources/java/zone/moddev/mc/advantageworks/client/MachineGuiLayoutProbe.java @@ -36,7 +36,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextComponentTranslation; import net.minecraftforge.fml.common.registry.ForgeRegistries; -import zone.moddev.mc.poweradvantage.registry.MachineGUIRegistry; +import zone.moddev.mc.basepower.registry.MachineGUIRegistry; /** Renders every registered machine screen, not just its detached decorations. */ final class MachineGuiLayoutProbe { @@ -161,11 +161,11 @@ static void verify(Minecraft minecraft, JsonObject result) { require(screen.hovered() == menu.inventorySlots.get(menu.inventorySlots.size() - 9), "Inventory hitbox is misaligned"); ImageIO.write(tooltip, "png", new File("machine-gui-layouts/" + id.replace(':', '-') + "-tooltip.png")); inventory.setInventorySlotContents(0, null); - if (block == zone.moddev.mc.poweradvantage.init.Blocks.metal_storage_tank) { + if (block == zone.moddev.mc.basepower.init.Blocks.metal_storage_tank) { negativeControls += verifyMissingLabelControls(minecraft, screen); verifyLongName(minecraft, (SimpleMachineGUI) definition, menu, inventory); } - if (block == zone.moddev.mc.poweradvantage.init.Blocks.metal_storage_tank) { + if (block == zone.moddev.mc.basepower.init.Blocks.metal_storage_tank) { verifyHelperLimits(screen); } row.addProperty("renders", renders); @@ -387,10 +387,10 @@ private static void require(boolean value, String message) { } private static void verifyHelperLimits(RecordingScreen screen) throws Exception { - for (String name : new String[]{"zone.moddev.mc.electricadvantage.gui.GUIHelper", - "zone.moddev.mc.steamadvantage.gui.GUIHelper"}) { - if (!net.minecraftforge.fml.common.Loader.isModLoaded(name.contains("electricadvantage") ? "electricadvantage" : "steamadvantage")) continue; - String[] methods = name.contains("electricadvantage") ? new String[]{"drawProgressBar"} + for (String name : new String[]{"zone.moddev.mc.baseelectric.gui.GUIHelper", + "zone.moddev.mc.basesteam.gui.GUIHelper"}) { + if (!net.minecraftforge.fml.common.Loader.isModLoaded(name.contains("baseelectric") ? "baseelectric" : "basesteam")) continue; + String[] methods = name.contains("baseelectric") ? new String[]{"drawProgressBar"} : new String[]{"drawDownArrowProgress", "drawFlameProgress"}; for (String method : methods) { Method draw = Class.forName(name).getMethod(method, int.class, int.class, float.class, SimpleMachineGUI.GUIContainer.class); diff --git a/test-rig/client-resources/resources/gui-label-expectations.json b/test-rig/client-resources/resources/gui-label-expectations.json index 2f82b82..bdbb23d 100644 --- a/test-rig/client-resources/resources/gui-label-expectations.json +++ b/test-rig/client-resources/resources/gui-label-expectations.json @@ -3,44 +3,44 @@ "inventory": "Inventory", "layout": { "height": 240, "machineTop": 12, "machineHeight": 128, "inventoryTop": 150, "titleY": 1, "inventoryLabelY": 140, "inventoryRows": [158, 176, 194, 216] }, "machines": { - "poweradvantage:fluid_drain": "Drain", - "poweradvantage:fluid_discharge": "Discharge Grate", - "poweradvantage:fluid_storage_tank": "Portable Fluid Tank", - "poweradvantage:fluid_metal_tank": "Metal Fluid Tank", - "poweradvantage:still": "Distillation Furnace", - "poweradvantage:item_conveyor": "Conveyor", - "poweradvantage:item_filter_block": "Block Filter Conveyor", - "poweradvantage:item_filter_food": "Food Filter Conveyor", - "poweradvantage:item_filter_fuel": "Fuel Filter Conveyor", - "poweradvantage:item_filter_inventory": "Filter Conveyor", - "poweradvantage:item_filter_ore": "Ore Filter Conveyor", - "poweradvantage:item_filter_plant": "Plantable Filter Conveyor", - "poweradvantage:item_filter_smelt": "Furnace Filter Conveyor", - "poweradvantage:item_filter_overflow": "Overflow Filter Conveyor", - "steamadvantage:steam_boiler_coal": "Coal-Fired Steam Boiler", - "steamadvantage:steam_boiler_electric": "Electric Steam Boiler", - "steamadvantage:steam_boiler_geothermal": "Geothermal Steam Boiler", - "steamadvantage:steam_boiler_oil": "Oil-Burning Steam Boiler", - "steamadvantage:steam_tank": "Steam Boiler Tank", - "steamadvantage:steam_furnace": "Steam-Powered Furnace", - "steamadvantage:steam_crusher": "Steam-Powered Rock Crusher", - "steamadvantage:steam_drill": "Steam-Powered Drill", - "steamadvantage:steam_still": "Steam-Powered Still", - "steamadvantage:steam_pump": "Steam-Powered Pump", - "electricadvantage:electric_battery_array": "Battery Array", - "electricadvantage:electric_crusher": "Electric Rock Crusher", - "electricadvantage:electric_drill": "Electric Mining Drill", - "electricadvantage:electric_fabricator": "Automated Assembler", - "electricadvantage:electric_furnace": "Electric Arc Furnace", - "electricadvantage:electric_oven": "Electric Oven", - "electricadvantage:electric_pump": "Electric Pump", - "electricadvantage:electric_still": "Electric Distiller", - "electricadvantage:growth_chamber": "Growth Chamber", - "electricadvantage:growth_chamber_controller": "Growth Chamber Control Unit", - "electricadvantage:hydroelectric_generator": "Hydroelectric Generator", - "electricadvantage:laser_turret": "Laser Turret", - "electricadvantage:photovoltaic_generator": "Photovoltaic Generator", - "electricadvantage:plastic_refinery": "Petro-Plastic Refinery", - "electricadvantage:steam_powered_generator": "Steam-Powered Electric Generator" + "basepower:fluid_drain": "Drain", + "basepower:fluid_discharge": "Discharge Grate", + "basepower:fluid_storage_tank": "Portable Fluid Tank", + "basepower:fluid_metal_tank": "Metal Fluid Tank", + "basepower:still": "Distillation Furnace", + "basepower:item_conveyor": "Conveyor", + "basepower:item_filter_block": "Block Filter Conveyor", + "basepower:item_filter_food": "Food Filter Conveyor", + "basepower:item_filter_fuel": "Fuel Filter Conveyor", + "basepower:item_filter_inventory": "Filter Conveyor", + "basepower:item_filter_ore": "Ore Filter Conveyor", + "basepower:item_filter_plant": "Plantable Filter Conveyor", + "basepower:item_filter_smelt": "Furnace Filter Conveyor", + "basepower:item_filter_overflow": "Overflow Filter Conveyor", + "basesteam:steam_boiler_coal": "Coal-Fired Steam Boiler", + "basesteam:steam_boiler_electric": "Electric Steam Boiler", + "basesteam:steam_boiler_geothermal": "Geothermal Steam Boiler", + "basesteam:steam_boiler_oil": "Oil-Burning Steam Boiler", + "basesteam:steam_tank": "Steam Boiler Tank", + "basesteam:steam_furnace": "Steam-Powered Furnace", + "basesteam:steam_crusher": "Steam-Powered Rock Crusher", + "basesteam:steam_drill": "Steam-Powered Drill", + "basesteam:steam_still": "Steam-Powered Still", + "basesteam:steam_pump": "Steam-Powered Pump", + "baseelectric:electric_battery_array": "Battery Array", + "baseelectric:electric_crusher": "Electric Rock Crusher", + "baseelectric:electric_drill": "Electric Mining Drill", + "baseelectric:electric_fabricator": "Automated Assembler", + "baseelectric:electric_furnace": "Electric Arc Furnace", + "baseelectric:electric_oven": "Electric Oven", + "baseelectric:electric_pump": "Electric Pump", + "baseelectric:electric_still": "Electric Distiller", + "baseelectric:growth_chamber": "Growth Chamber", + "baseelectric:growth_chamber_controller": "Growth Chamber Control Unit", + "baseelectric:hydroelectric_generator": "Hydroelectric Generator", + "baseelectric:laser_turret": "Laser Turret", + "baseelectric:photovoltaic_generator": "Photovoltaic Generator", + "baseelectric:plastic_refinery": "Petro-Plastic Refinery", + "baseelectric:steam_powered_generator": "Steam-Powered Electric Generator" } } diff --git a/test-rig/client-resources/resources/mcmod.info b/test-rig/client-resources/resources/mcmod.info index f74821d..b3d9aa2 100644 --- a/test-rig/client-resources/resources/mcmod.info +++ b/test-rig/client-resources/resources/mcmod.info @@ -6,6 +6,6 @@ "version": "1.0.0.110021", "mcversion": "1.10.2", "authorList": ["Advantage Works"], - "dependencies": ["poweradvantage", "steamadvantage", "electricadvantage"] + "dependencies": ["basepower", "basesteam", "baseelectric"] } ] diff --git a/test-rig/client-resources/run.ps1 b/test-rig/client-resources/run.ps1 index 34add1a..6618ec8 100644 --- a/test-rig/client-resources/run.ps1 +++ b/test-rig/client-resources/run.ps1 @@ -101,7 +101,7 @@ try { $inputReport.runner = Get-Record $PSCommandPath $inputReport.expectations = Get-Record (Join-Path $PSScriptRoot 'resources/gui-label-expectations.json') New-Item -ItemType Directory -Path (Join-Path $runtime 'mods') | Out-Null - $candidates = @{ poweradvantage = $PowerJar; steamadvantage = $SteamJar; electricadvantage = $ElectricJar; advantageclientresources = $ProbeJar } + $candidates = @{ basepower = $PowerJar; basesteam = $SteamJar; baseelectric = $ElectricJar; advantageclientresources = $ProbeJar } $candidateRecords = [ordered]@{} $versions = @{} foreach ($id in $candidates.Keys) { @@ -143,7 +143,7 @@ try { $arguments = @([regex]::Matches($attributes['org.eclipse.jdt.launching.PROGRAM_ARGUMENTS'], '"[^"]*"|\S+') | ForEach-Object { $_.Value.Trim('"') }) $vmArguments = @([regex]::Matches($attributes['org.eclipse.jdt.launching.VM_ARGUMENTS'], '"[^"]*"|\S+') | ForEach-Object { $_.Value.Trim('"') }) $vmArguments += '-Dadvantageworks.clientResources=true','-Dadvantageworks.requireExtensions=true','-Dadvantageworks.machineGuiLayouts=true','-Xmx2G' - foreach ($id in 'poweradvantage','steamadvantage','electricadvantage') { $vmArguments += "-Dadvantageworks.expectedVersion.$id=$($versions[$id])" } + foreach ($id in 'basepower','basesteam','baseelectric') { $vmArguments += "-Dadvantageworks.expectedVersion.$id=$($versions[$id])" } $inputReport.environment = $environment $inputReport.program_arguments = $arguments $inputReport.vm_arguments = $vmArguments @@ -172,7 +172,7 @@ try { $phase = 'native-report' $report = Get-Content -LiteralPath (Join-Path $runtime 'client-resources.json') -Raw | ConvertFrom-Json Assert-GuiReport $report (Join-Path $runtime 'machine-gui-layouts') - foreach ($id in 'poweradvantage','steamadvantage','electricadvantage') { + foreach ($id in 'basepower','basesteam','baseelectric') { if ($report.mod_versions.$id -cne $versions[$id]) { throw "Native loaded version mismatch: $id" } } foreach ($record in $candidateRecords.Values) { diff --git a/test-rig/migration/audit_survival110.py b/test-rig/migration/audit_survival110.py new file mode 100644 index 0000000..f312d08 --- /dev/null +++ b/test-rig/migration/audit_survival110.py @@ -0,0 +1,93 @@ +"""Independent checks on recorded native progression evidence, not a recipe planner.""" +import argparse +from collections import Counter, defaultdict +import io +import base64 +import json +from pathlib import Path +import nbtlib +from rig_transport import digest, write_json + + +def require(value, reason): + if not value: raise AssertionError(reason) + + +def hammer_witness(stock, uses, crafted, durability): + tools=defaultdict(list) + for encoded in stock: + item=nbtlib.File.parse(io.BytesIO(base64.b64decode(encoded,validate=True))) + identifier=str(item["id"])+"@0" + if identifier in durability: + require(isinstance(item["Damage"],nbtlib.Short) and isinstance(item["Count"],nbtlib.Byte),"Untyped tool damage/count") + tools[identifier].extend([int(item["Damage"])]*int(item["Count"])) + for identifier, count in crafted.items(): + capacity=durability[identifier]+1 + broken, damage=divmod(uses[identifier],capacity) + expected=[0]*(count-broken) + require(bool(expected) or damage==0,"Missing replacement hammer") + if damage: expected[0]=damage + require(sorted(tools[identifier])==sorted(expected),"Recorded native hammer damage disagrees with actual crush count") + + +def audit_case(case): + phases=case["phaseReports"] + require(case["status"]=="PASS" and phases["resume"]["status"]=="PASS" and phases["inspect"]["status"]=="PASS","Incomplete native case") + first=phases["first"]["actions"];later=phases["continue"]["actions"] + require(len(first)+len(later)==case["actions"],"Action coverage mismatch") + uses=Counter();crushes=Counter();crafted=Counter();boundaries=[];trades=0 + durability=case["economy"]["toolDurability"] + offers={row["id"]:row for row in case["economy"]["trades"]} + for receipts in (first,later): + for row in receipts: + require(row["status"]=="PASS","Failed native action") + if row["kind"]=="craft" and row["output"] in durability: + delta=row["after"].get(row["output"],0)-row["before"].get(row["output"],0) + require(delta>0,"No real hammer crafted");crafted[row["output"]]+=delta + if row["kind"]=="crush": + # Tool selection is retained in the pinned plan; native receipts expose its actual stock/damage. + candidates=[tool for tool in durability if row["before"].get(tool,0)>0] + require(len(candidates)==1,"Ambiguous tool witness; extend the independent auditor") + crushes[candidates[0]]+=1 + if row["kind"]=="trade": + trades+=1;uses[row["offer"]]+=1 + require(row["usesAfter"]==uses[row["offer"]]<=offers[row["offer"]]["maxUses"],"Merchant uses reset, duplicated or exceeded native offer stock") + boundaries.append((dict(crushes),dict(crafted))) + hammer_witness(phases["first"]["stockTyped"],Counter(boundaries[0][0]),Counter(boundaries[0][1]),durability) + hammer_witness(phases["continue"]["stockTyped"],crushes,crafted,durability) + require(phases["first"]["stockTyped"]==phases["continue"]["resumedStockTyped"],"Cold tool/item state changed") + require(phases["resume"]["stockTyped"]==phases["inspect"]["stockTyped"],"Final cold item state changed") + roots=set(phases["first"]["initialStock"]) + obtained=roots|{row["output"] for row in first+later}|{"baseelectric:petrolplastic_ingot@0"} + gaps=[] + for item,row in case["coverage"].items(): + if row["status"] in ("NATIVE_OBTAINED_FINITE_STOCK","LIVE_PRODUCED"): + require(item in obtained,"Registry item was credited without any production or resource witness") + elif row["status"]=="NO_FINITE_ROUTE":gaps.append(item) + else:require(row["status"]=="EXCLUDED" and bool(row.get("reason")),"Unclassified target") + require(set(gaps)<={"baseelectric:li_nugget@0"},"New progression gap cannot be hidden as a known unused item") + return dict(status="PASS",actions=case["actions"],trades=trades,hammerCrushes=sum(crushes.values()), + merchantOffersUsed=len(uses),registryTargets=len(case["coverage"]),unprovenItems=gaps, + maximumSteamTemperature=phases["resume"]["maximumSteamFurnaceTemperature"]) + + +def audit(report): + require(report["status"]=="PASS" and report["protocolUnchanged"] is True and report["manifestUnchanged"] is True,"Unsealed or failed native run") + expected={mode+suffix for mode in ("normal","tech_progression","apocalyptic") for suffix in ("-rubber","-no-rubber")} + require(set(report["cases"])==expected,"All six mode/configuration cases required") + result={name:audit_case(case) for name,case in report["cases"].items()} + for name in ("apocalyptic-rubber","apocalyptic-no-rubber"): + require(result[name]["trades"]>0,"Apocalyptic bootstrap has no paid native trading evidence") + economy=report["cases"][name]["economy"] + require(economy["physicalChestsSampled"]==448 and economy["nonemptyPhysicalChests"]>0,"Missing actual-chest positive control") + return dict(status="PASS",cases=result,scope="Recorded native hammer damage, trade stock, coverage and restart checks") + + +if __name__=="__main__": + parser=argparse.ArgumentParser(description=__doc__) + parser.add_argument("receipt",type=Path);parser.add_argument("--output",type=Path,required=True) + args=parser.parse_args() + if args.output.exists():raise FileExistsError(args.output) + result=audit(json.loads(args.receipt.read_text(encoding="utf-8"))) + result.update(receipt=str(args.receipt.resolve()),receiptSha256=digest(args.receipt),auditorSha256=digest(Path(__file__))) + write_json(args.output,result);print(json.dumps(result,indent=2)) diff --git a/test-rig/migration/native110.py b/test-rig/migration/native110.py index 2c4734a..9e8a54b 100644 --- a/test-rig/migration/native110.py +++ b/test-rig/migration/native110.py @@ -66,7 +66,13 @@ def pinned_profile(manifest_path, key): raise ValueError("Wrong Advantage platform version") if jar["id"] in ids: raise ValueError("Duplicate mod identity") ids.add(jar["id"]); jars.append(path) - if key != "target110" or target["launcher"] != LAUNCHER or not {"poweradvantage", "advantageworkstest"} <= ids: + legacy = {"poweradvantage", "steamadvantage", "electricadvantage"} + current = {"basepower", "basesteam", "baseelectric"} + if ids & legacy and ids & current: + raise ValueError("Mixed historical and renamed target identities") + if any(not jar["version"].endswith(".110021") for jar in target["jars"] if jar["id"] in current): + raise ValueError("Wrong renamed Advantage platform version") + if key != "target110" or target["launcher"] != LAUNCHER or "advantageworkstest" not in ids or not ids & {"poweradvantage", "basepower"}: raise ValueError("Incomplete/wrong native110 input profile") if digest(seed / LAUNCHER) != target["launcher_sha256"].upper() or not (seed / "libraries").is_dir(): raise AssertionError("Native Forge 25 seed changed") diff --git a/test-rig/migration/native110_harvest.py b/test-rig/migration/native110_harvest.py index a539598..7ae137b 100644 --- a/test-rig/migration/native110_harvest.py +++ b/test-rig/migration/native110_harvest.py @@ -41,20 +41,20 @@ NA_REASON = f"Minecraft {MINECRAFT} has no waterlogged blockstate/fluid API" # Historical GUIBlock explicitly sets light opacity to zero, independent of # PhotovoltaicGeneratorBlock's full-cube/opaque overrides. Preserve both facts. -PROPERTIES = {"solar/native-solidity": ("electricadvantage:photovoltaic_generator", True, 0), - "frame/native-opacity": ("poweradvantage:steel_frame", False, 0)} +PROPERTIES = {"solar/native-solidity": ("baseelectric:photovoltaic_generator", True, 0), + "frame/native-opacity": ("basepower:steel_frame", False, 0)} def block_identity(name): - if name.startswith("sulfur/"): return "electricadvantage:sulfur_ore" - if name.startswith("lithium/"): return "electricadvantage:li_ore" - if name.startswith("frame/"): return "poweradvantage:steel_frame" - return "electricadvantage:" + ("electric_conduit" if name.startswith("wire/") else "electric_track") + if name.startswith("sulfur/"): return "baseelectric:sulfur_ore" + if name.startswith("lithium/"): return "baseelectric:li_ore" + if name.startswith("frame/"): return "basepower:steel_frame" + return "baseelectric:" + ("electric_conduit" if name.startswith("wire/") else "electric_track") def drop_identity(name): if not EXPECTED[name][3]: return "" - if name in ("sulfur/wood", "sulfur/stone"): return "electricadvantage:sulfur_powder" + if name in ("sulfur/wood", "sulfur/stone"): return "baseelectric:sulfur_powder" return block_identity(name) @@ -163,7 +163,7 @@ def run(args): require_disjoint(output, args.target_manifest) target = pinned_profile(args.target_manifest.resolve(), "target110") for protected in (target[0], *target[2]): require_disjoint(output, protected) - if not {"poweradvantage","steamadvantage","electricadvantage","advantageworkstest"} <= {identity(jar)[0] for jar in target[2]}: + if not {"basepower","basesteam","baseelectric","advantageworkstest"} <= {identity(jar)[0] for jar in target[2]}: raise AssertionError("Harvest requires all three Advantage mods and the native harness") expected_code = read_json(args.target_manifest)["target110"].get("serverCode") if not expected_code: raise AssertionError("Harvest requires an exact sealed server-code inventory") diff --git a/test-rig/migration/native110_machine_operations.py b/test-rig/migration/native110_machine_operations.py index 31c4ccd..3694eb1 100644 --- a/test-rig/migration/native110_machine_operations.py +++ b/test-rig/migration/native110_machine_operations.py @@ -15,7 +15,7 @@ import nbtlib from rig_transport import digest, write_json -from native110 import RIG, LAUNCHER, output_path, pinned_profile, require_disjoint +from native110 import RIG, LAUNCHER, identity, output_path, pinned_profile, require_disjoint from native110_code import Server, code_files, verify_code, INVENTORY from native110_lifecycle import prepare, read_json, require_native_boot, verify_staged @@ -25,7 +25,7 @@ "conveyor/blocked", "conveyor/item-entity", "conveyor/nbt-preserved", "filter/block", "filter/food", "filter/fuel", "filter/ore", "filter/plant", "filter/smelt", "filter/inventory-0", "filter/inventory-1", "filter/inventory-2", "filter/inventory-3", "filter/overflow-0", "filter/overflow-1", "filter/overflow-2", "filter/overflow-3", - "drain/minecraft_water", "drain/poweradvantage_crude_oil", "drain/poweradvantage_refined_oil", + "drain/minecraft_water", "drain/basepower_crude_oil", "drain/basepower_refined_oil", "drain/non-source", "tank/filter-true", "tank/filter-false", "tank/full", "fluid-switch/true", "fluid-switch/false", "discharge/true", "discharge/false", "conveyor/locked-source", "conveyor/locked-destination", "still/production", "still/no-fuel", "still/invalid", "still/full", "still/one-space", "still/redstone"}, @@ -168,21 +168,26 @@ def actors(case): def pin(args): + pinned_profile(args.base.resolve(), "target110") base = read_json(args.base) destination = args.output.resolve() if destination.exists(): raise FileExistsError(destination) destination.mkdir(parents=True) replacements = { - "poweradvantage": RIG.parent / "build/libs/PowerAdvantage-2.4.3.110021.jar", - "steamadvantage": RIG.parent.parent / "SteamAdvantage/SteamAdvantage/build/libs/SteamAdvantage-2.2.5.110021.jar", - "electricadvantage": RIG.parent.parent / "ElectricAdvantage/ElectricAdvantage/build/libs/ElectricAdvantage-2.2.5.110021.jar", + "basepower": RIG.parent / "build/libs/basePower-2.4.4.110021.jar", + "basesteam": RIG.parent.parent / "SteamAdvantage/SteamAdvantage/build/libs/baseSteam-2.2.6.110021.jar", + "baseelectric": RIG.parent.parent / "ElectricAdvantage/ElectricAdvantage/build/libs/baseElectric-2.2.6.110021.jar", "advantageworkstest": RIG / "build/gradle/libs/AdvantageWorksTestHarness-1.1.0.110021.jar", } if getattr(args, "original_production", False): replacements = {key: value for key, value in replacements.items() if key == "advantageworkstest"} target = copy.deepcopy(base["target110"]) + renamed = {"poweradvantage": "basepower", "steamadvantage": "basesteam", "electricadvantage": "baseelectric"} for jar in target["jars"]: - source = replacements.get(jar["id"], Path(jar["path"])) + wanted = jar["id"] if getattr(args, "original_production", False) else renamed.get(jar["id"], jar["id"]) + source = replacements.get(wanted, (args.base.resolve().parent / jar["path"]).resolve()) + actual_id, version = identity(source) + if actual_id != wanted: raise AssertionError("Wrong candidate mod identity: " + str(source)) checksum = digest(source) folder = destination / "artifacts" / checksum folder.mkdir(parents=True, exist_ok=True) @@ -190,8 +195,8 @@ def pin(args): if path.exists(): raise FileExistsError(path) shutil.copy2(source, path) if digest(path) != checksum: raise AssertionError("Archive copy differs") - jar.update(path=str(path), originPath=str(source), sha256=checksum) - if jar["id"] in replacements: jar["sourceRef"] = "LOCAL_OPERATING_CANDIDATE_" + args.label + jar.update(id=actual_id, version=version, path=str(path), originPath=str(source), sha256=checksum) + if wanted in replacements: jar["sourceRef"] = "LOCAL_OPERATING_CANDIDATE_" + args.label target["qualificationStatus"] = "UNQUALIFIED_OPERATING_CANDIDATE" target["scope"] = args.label target["serverCode"] = {"files": code_files(Path(target["seed"]))} diff --git a/test-rig/migration/native110_rebrand_bucket_proof.py b/test-rig/migration/native110_rebrand_bucket_proof.py new file mode 100644 index 0000000..3b71df3 --- /dev/null +++ b/test-rig/migration/native110_rebrand_bucket_proof.py @@ -0,0 +1,390 @@ +"""Fresh Base24 dependency-only baseline + full renamed candidate, exactly four boots. + +Only this helper's process-local callbacks hold the single exact diagnostic. +Ordinary auditors and frozen helpers are never edited. A failed strict receipt +is mandatory before a separately recorded proof-bound migration rerun. +""" +import argparse +from datetime import datetime, timezone +import importlib +import os +from pathlib import Path +import re +import shutil +import socket +import traceback +from unittest.mock import patch +import uuid + +import nbtlib + +import legacy_bucket_proof as legacy +import native110_machine_operations as operating +from native110 import identity, output_path, require_disjoint +from native110_code import INVENTORY, Server, verify_code +from native110_lifecycle import verify_staged +from native110_rebrand_connected import TARGET_IDS, bind_target +from rig_transport import WORLD, digest, stage, write_json + +KIND = "REBRAND_BASE24_FRESH_FOUR_BOOT_V1" +BOOT_LABELS = {"baseline-first", "baseline-restart", "candidate-operate", "candidate-restart"} +BOOTSTRAP = {"minecraft", "mcp", "FML", "Forge"} +PROBE_SHA = "B9F756681593B508A8E3222BD592A3DFCB474303532B154045893B3C585EF1D3" +PASSIVE_PROBE_SHA = "79157E31FFAF5D66CCDC8030EB7B8C37D0E0D33FD6A601D119F59904A461AAD4" +MODS_LOADED = re.compile(r"^\[\d\d:\d\d:\d\d\] \[Server thread/INFO\] \[FML\]: Forge Mod Loader has successfully loaded \d+ mods\s*$") + + +def require(value, message): + if not value: raise AssertionError(message) + + +def protocol_files(): + return [Path(__file__), *[Path(__file__).with_name(name) for name in + ("legacy_bucket_proof.py", "native110_machine_operations.py", "native110_rebrand_connected.py", + "native110_rebrand_passive.py", "native110_connected.py", "legacy_connected_oracle.py", "semantic_machine_audit.py", + "native110.py", "native110_code.py", "native110_lifecycle.py", "native110_diagnostics.py", "rig_transport.py")]] + + +def pins(path): + profile, _ = bind_target(path) + bound = legacy.pins(path) + require({m["id"] for m in bound["mods"]} == TARGET_IDS and len(bound["mods"]) == 6, "Full six-mod candidate required") + for mod in bound["mods"]: + require(identity(Path(mod["path"])) == (mod["id"], mod["version"]), "Candidate metadata changed") + return profile, bound + + +def bind_candidate(document, candidate): + require(document.get("kind") == KIND and document.get("status") == "PASS", "Not a fresh completed renamed-candidate proof") + require(document.get("candidate") == candidate, "Proof does not bind the entire exact candidate, manifest and Forge inventory") + + +def require_four_boots(boots, role): + require(len(boots) == 4 and {r.get("label") for r in boots} == BOOT_LABELS, "Exactly four distinct physical boots required") + for boot in boots: + diagnostic = boot.get("diagnostic", {}) + require(boot.get("status") == "PASS_BOOT" and type(boot.get("exitCode")) is int and boot["exitCode"] == 0, + "Every physical process must exit cleanly") + require(diagnostic.get("originalSeverity") == "ERROR" and legacy.LATE_BUCKET.fullmatch(diagnostic.get("message", "")), + "Only the exact one Base Metals diagnostic is eligible") + require(role.get("status") == "PASS" and role.get("operationCases") == 3 and role.get("exactColdCases") == 3 + and set(role.get("startupFlags", {})) == {"operate", "restart"}, "All three native bucket/oil cases and cold comparisons are mandatory") + + +def require_baseline_mods(actual, expected): + require(set(expected) == {"basemetals", "orespawn"}, "Baseline declares only Base24 and the same OreSpawn") + require({k: v for k, v in actual.items() if k not in BOOTSTRAP} == expected, "Baseline loaded a harness, Power or another undeclared mod") + + +def observer_sha(mode): + require(mode in ("connected", "passive-source355", "synthetic-nested"), "Unknown source observer mode") + return PROBE_SHA if mode == "connected" else PASSIVE_PROBE_SHA + + +def require_destination_inventory(actual, candidate, mode): + expected = {Path(m["path"]).name: m["sha256"] for m in candidate["mods"]} + extra = {k: v for k, v in actual.items() if k not in expected} + require(len(extra) == 1 and next(iter(extra.values())) == observer_sha(mode), + "Only this mode's exact authentic source observer may supplement the full candidate") + expected.update(extra) + require(actual == expected, "Destination differs from the complete proven candidate") + + +def mod_list(path): + rows = nbtlib.load(path)["FML"]["ModList"] + actual = {str(row["ModId"]): str(row["ModVersion"]) for row in rows} + require(len(actual) == len(rows), "Duplicate saved loaded-mod identity") + return actual + + +def audit_boot(path): + path = Path(path) + return legacy.held_diagnostics(path.read_text(encoding="utf-8", errors="replace").splitlines(), + legacy.BASE_SHA, digest(path.parent / legacy.LAUNCHER)) + + +def seal_sources(output): + seals = {str(p): digest(p) for p in protocol_files()} + for path in protocol_files(): + dest = output / "protocol-sources" / path.name + dest.parent.mkdir(exist_ok=True) + shutil.copy2(path, dest) + return seals + + +def collect(args): + output = output_path(args.output) + candidate_profile, candidate = pins(args.candidate_manifest.resolve()) + dependencies = [m for m in candidate["mods"] if m["id"] in {"basemetals", "orespawn"}] + baseline_profile = candidate_profile[:2] + ([Path(m["path"]) for m in dependencies],) + for protected in (args.candidate_manifest, candidate_profile[0], *candidate_profile[2]): require_disjoint(output, protected) + for port in (args.port, args.port + 1): + with socket.socket() as listener: listener.bind(("127.0.0.1", port)) + output.mkdir(parents=True, exist_ok=False) + token = uuid.uuid4().hex + report = dict(kind=KIND, status=legacy.PENDING, token=token, candidate=candidate, + baseline=dict(mods=dependencies, codeInventory=candidate["codeInventory"]), boots=[], candidateRole={}, classification=None, + scope="Two dependency-only baseline boots without harness/Power, then full six-mod candidate oil/bucket operation and cold restart", + startedAtUtc=datetime.now(timezone.utc).isoformat(), protocolSha256=seal_sources(output)) + receipt = output / "native110-rebrand-bucket-proof.json" + write_json(receipt, report) + server = None + try: + root = output / "baseline" + launcher = stage(root, baseline_profile) + props = root / "server.properties" + props.write_text(props.read_text().replace("server-port=25584", "server-port=" + str(args.port))) + write_json(root / INVENTORY, candidate["codeInventory"]) + write_json(output / "baseline-inputs.json", report["baseline"]) + expected = {m["id"]: m["runtimeVersion"] for m in dependencies} + for phase in ("first", "restart"): + verify_staged(root, baseline_profile) + verify_code(root, candidate["codeInventory"]) + server = Server(root, args.java8, launcher, phase) + server.send("save-all flush") + server.wait("Saved the world", 120) + server.close(); server = None + diagnostic = audit_boot(root / ("console-" + phase + ".log")) + saved = output / ("baseline-level-" + phase + ".dat") + shutil.copy2(root / WORLD / "level.dat", saved) + loaded = mod_list(saved) + require_baseline_mods(loaded, expected) + report["boots"].append(dict(label="baseline-" + phase, status="PASS_BOOT", exitCode=0, + log="baseline/console-" + phase + ".log", diagnostic=diagnostic, savedModList=loaded, + savedLevel=saved.name)) + write_json(receipt, report) + + def pending_candidate_boot(path): + path = Path(path) + require(path.parent.resolve() == (output / "candidate").resolve(), "Unexpected candidate runtime") + phase = {"console-operate.log": "operate", "console-restart.log": "restart"}.get(path.name) + require(phase is not None, "Unexpected candidate boot phase") + verify_staged(path.parent, candidate_profile) + verify_code(path.parent, candidate["codeInventory"]) + diagnostic = audit_boot(path) + write_json(path.with_suffix(".diagnostics.json"), diagnostic) + report["boots"].append(dict(label="candidate-" + phase, status="PASS_BOOT", exitCode=0, + log="candidate/" + path.name, diagnostic=diagnostic)) + write_json(receipt, report) + + with patch.dict(os.environ, {"ADVWORKS_BUCKET_PROOF": token}), \ + patch.object(operating, "require_native_boot", pending_candidate_boot): + code = operating.run(argparse.Namespace(manifest=args.candidate_manifest, output=output / "candidate", + java8=args.java8, port=args.port + 1, group="power/bucket")) + require(code == 0, "Full renamed candidate bucket operation/cold campaign failed") + report["candidateRole"] = legacy.validate_role(operating, output / "candidate", token, candidate) + require_four_boots(report["boots"], report["candidateRole"]) + require(pins(args.candidate_manifest)[1] == candidate, "Candidate inputs changed") + require(report["protocolSha256"] == {str(p): digest(p) for p in protocol_files()}, "Proof protocol changed") + report.update(status="PASS", classification=dict(severity="NOTICE", originalSeverity="ERROR", + exactDiagnostic="REDUNDANT_BASE24_ENABLE_UNIVERSAL_BUCKET_AFTER_INIT", + candidateManifestSha256=candidate["manifestSha256"], baseSha256=legacy.BASE_SHA, forgeSha256=legacy.PUBLIC_FORGE_SHA)) + except BaseException as error: + report.update(status="FAIL", classification=None, failure=str(error), traceback=traceback.format_exc()) + finally: + if server: + try: server.close() + except BaseException as error: report.update(status="FAIL", classification=None, shutdownError=str(error)) + report["completedAtUtc"] = datetime.now(timezone.utc).isoformat() + report["filesSha256"] = {p.relative_to(output).as_posix(): digest(p) for p in output.rglob("*") if p.is_file() and p != receipt} + write_json(receipt, report) + return int(report["status"] != "PASS") + + +def verify_proof(path, checksum): + path = path.resolve() + require(digest(path) == checksum.upper(), "Explicit fresh proof receipt hash changed") + document = legacy.read(path) + _, candidate = pins(Path(document["candidate"]["manifest"])) + bind_candidate(document, candidate) + classification = document.get("classification") or {} + require(classification == dict(severity="NOTICE", originalSeverity="ERROR", + exactDiagnostic="REDUNDANT_BASE24_ENABLE_UNIVERSAL_BUCKET_AFTER_INIT", + candidateManifestSha256=candidate["manifestSha256"], baseSha256=legacy.BASE_SHA, forgeSha256=legacy.PUBLIC_FORGE_SHA), + "Incomplete or broadened classification") + actual = {} + for file in path.parent.rglob("*"): + if file.is_file() and file != path: + require(file.resolve().is_relative_to(path.parent), "Sealed evidence escapes the proof root") + actual[file.relative_to(path.parent).as_posix()] = digest(file) + require(actual and actual == document.get("filesSha256"), "Fresh proof raw evidence changed, disappeared or was added") + require(document["protocolSha256"] == {str(p): digest(p) for p in protocol_files()}, "Proof is bound to another protocol") + baseline = document["baseline"] + require(baseline["codeInventory"] == candidate["codeInventory"] and baseline["mods"] == + [m for m in candidate["mods"] if m["id"] in {"basemetals", "orespawn"}], "Baseline dependencies/Forge differ from candidate") + for boot in document["boots"]: + diagnostic = audit_boot(path.parent / boot["log"]) + require(diagnostic == boot["diagnostic"], "Original boot diagnostic changed") + if boot["label"].startswith("baseline-"): + loaded = mod_list(path.parent / boot["savedLevel"]) + require_baseline_mods(loaded, {m["id"]: m["runtimeVersion"] for m in baseline["mods"]}) + require(loaded == boot["savedModList"], "Baseline saved loaded-mod evidence changed") + role = legacy.validate_role(operating, path.parent / "candidate", document["token"], candidate) + require(role == document["candidateRole"], "Candidate bucket/cold evidence changed") + require_four_boots(document["boots"], role) + for name in ("baseline", "candidate"): + verify_code(path.parent / name, candidate["codeInventory"]) + expected = {Path(m["path"]).name: m["sha256"] for m in (baseline["mods"] if name == "baseline" else candidate["mods"])} + require({p.name: digest(p) for p in (path.parent / name / "mods").glob("*.jar")} == expected, "Proof staged mod inventory changed") + return document + + +def require_strict_failure(path, checksum, candidate): + require(digest(path) == checksum.upper(), "Retained strict failure receipt changed") + failed = legacy.read(path) + require(failed.get("status") == "FAIL" and failed.get("targetManifestSha256") == candidate["manifestSha256"], + "Retained strict failure belongs to another target or is not FAIL") + message = failed.get("failure", "") + prefix = re.match(r"^Native runtime diagnostic at line \d+: (.*)$", message) + require(prefix and legacy.LATE_BUCKET.fullmatch(prefix.group(1)), "Strict primary failure is not solely the exact known Base24 diagnostic") + return failed + + +def rerun(args): + document = verify_proof(args.proof, args.proof_sha256) + _, candidate = pins(args.target_manifest) + bind_candidate(document, candidate) + require_strict_failure(args.strict_failure, args.strict_failure_sha256, candidate) + module = importlib.import_module("native110_rebrand_connected" if args.mode == "connected" else "native110_rebrand_passive") + output = output_path(args.output) + for protected in (args.proof.parent, args.strict_failure.parent): require_disjoint(output, protected) + receipt = output.parent / (output.name + "-fresh-bucket-permit.json") + require(not receipt.exists(), "Refusing to overwrite a permit receipt") + report = dict(status=legacy.PENDING, kind=KIND, mode=args.mode, proof=str(args.proof.resolve()), proofSha256=args.proof_sha256.upper(), + strictFailure=str(args.strict_failure.resolve()), strictFailureSha256=args.strict_failure_sha256.upper(), + candidate=candidate, boots={}, classification=None, protocolSha256={str(p): digest(p) for p in protocol_files()}, + sourceObserver=dict(modid="advantagemigrationprobe", version="1.0.0", sha256=observer_sha(args.mode)), + startedAtUtc=datetime.now(timezone.utc).isoformat()) + write_json(receipt, report) + expected_versions = {m["id"]: m["runtimeVersion"] for m in candidate["mods"]} + original_class = module.NativeServer if args.mode == "connected" else module.PassiveServer + + def destination(root): + require(root.resolve() == output, "Unexpected proof-bound destination") + actual = {p.name: digest(p) for p in (root / "mods").glob("*.jar")} + require_destination_inventory(actual, candidate, args.mode) + verify_code(root, candidate["codeInventory"]) + + class BoundServer(original_class): + def read(self): + for line in self.process.stdout: + if MODS_LOADED.fullmatch(line): + try: + self.bucket_marker.touch(exist_ok=False) + self.bucket_armed = True + except OSError as error: self.arm_error = str(error) + self.log.write(line); self.log.flush(); self.lines.put(line) + + def __init__(self, runtime, java, launcher, label): + self.root = Path(runtime).resolve() + destination(self.root) + require(label in ("converted", "restarted") and label not in report["boots"], "Unexpected/duplicate destination boot") + self.record = dict(status=legacy.PENDING, label=label, token=uuid.uuid4().hex) + report["boots"][label] = self.record + self.bucket_marker = self.root / "advantage-machine-operation.allow" + require(not self.bucket_marker.exists(), "Machine operating authority leaked into pre-init") + self.bucket_armed = False; self.arm_error = None + phase = "operate" if label == "converted" else "restart" + self.flags_path = self.root / ("bucket-startup-" + phase + ".json") + require(not self.flags_path.exists(), "Fresh per-process bucket flags are required") + try: + with patch.dict(os.environ, {"ADVWORKS_BUCKET_PROOF": self.record["token"]}): + super().__init__(runtime, java, launcher, label) + require(self.bucket_armed and self.arm_error is None, "Post-mod-loading bucket witness was not armed") + self.flags_sha = digest(self.flags_path) + versions = dict(expected_versions) + versions["advantagemigrationprobe"] = "1.0.0" + legacy.startup_flags(legacy.read(self.flags_path), self.record["token"], versions) + except BaseException: + if getattr(self, "process", None) is not None and self.process.poll() is None: + try: self.close() + except BaseException: pass + raise + finally: + if self.bucket_armed: self.bucket_marker.unlink(missing_ok=True) + + def close(self): + try: + # Preserve the inherited command restriction, clean exit and code custody; + # replace only this explicitly proven runtime's diagnostic decision. + try: + Server.close(self) + finally: + if args.mode == "connected": + write_json(Path(self.log.name).with_suffix(".commands.json"), self.commands) + destination(self.root) + require(digest(args.proof) == args.proof_sha256.upper(), "Protected proof receipt changed") + require(not hasattr(self, "flags_sha") or digest(self.flags_path) == self.flags_sha, "Fresh startup flags changed") + versions = dict(expected_versions) + versions["advantagemigrationprobe"] = "1.0.0" + flags = legacy.read(self.flags_path) + legacy.startup_flags(flags, self.record["token"], versions) + diagnostic = audit_boot(Path(self.log.name)) + self.record.update(status="PASS_BOOT", exitCode=self.process.returncode, startupFlags=flags, + startupSha256=digest(self.flags_path), logSha256=digest(Path(self.log.name)), diagnostic=diagnostic) + write_json(receipt, report) + except BaseException as error: + self.record.update(status="FAIL", failure=str(error)); write_json(receipt, report) + raise + + try: + arguments = argparse.Namespace(target_manifest=args.target_manifest, output=args.output, java8=args.java8, port=args.port) + if args.mode == "connected": + arguments.source_report = args.source_report; arguments.source_report_sha256 = args.source_report_sha256 + else: + arguments.mode = args.mode; arguments.source_fixture = args.source_fixture; arguments.source_profile = args.source_profile + with patch.object(module, "NativeServer" if args.mode == "connected" else "PassiveServer", BoundServer): + code = module.run(arguments) + name = "native110-rebrand-connected-results.json" if args.mode == "connected" else ( + "native110-rebrand-passive-results.json" if args.mode == "passive-source355" else "native110-rebrand-synthetic-nested-results.json") + primary = legacy.read(output / name) + require(code == 0 and primary.get("status") == "PASS" and primary.get("sourceUnchanged") is True, + "Unchanged primary migration/work/preservation protocol did not pass") + require(set(report["boots"]) == {"converted", "restarted"} and all(b.get("status") == "PASS_BOOT" + and type(b.get("exitCode")) is int and b["exitCode"] == 0 for b in report["boots"].values()), "Two fresh validated rerun boots required") + report.update(status="PASS", classification="FRESH_FOUR_BOOT_PROOF_BOUND_EXACT_BASE24_NOTICE_ONLY", primaryReceiptSha256=digest(output / name)) + except BaseException as error: + report.update(status="FAIL", classification=None, failure=str(error), traceback=traceback.format_exc()) + finally: + try: + verify_proof(args.proof, args.proof_sha256) + require_strict_failure(args.strict_failure, args.strict_failure_sha256, candidate) + require(pins(args.target_manifest)[1] == candidate, "Candidate changed") + require(report["protocolSha256"] == {str(p): digest(p) for p in protocol_files()}, "Rerun protocol changed") + report["protectedEvidenceUnchanged"] = True + except BaseException as error: + report.update(status="FAIL", classification=None, protectedEvidenceUnchanged=False, custodyFailure=str(error)) + report["completedAtUtc"] = datetime.now(timezone.utc).isoformat() + report["filesSha256"] = {p.relative_to(output).as_posix(): digest(p) for p in output.rglob("*") if p.is_file()} if output.exists() else {} + write_json(receipt, report) + return int(report["status"] != "PASS") + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + commands = parser.add_subparsers(dest="command", required=True) + collect_parser = commands.add_parser("collect") + collect_parser.add_argument("--candidate-manifest", type=Path, required=True) + rerun_parser = commands.add_parser("rerun") + rerun_parser.add_argument("--proof", type=Path, required=True) + rerun_parser.add_argument("--proof-sha256", required=True) + rerun_parser.add_argument("--strict-failure", type=Path, required=True) + rerun_parser.add_argument("--strict-failure-sha256", required=True) + rerun_parser.add_argument("--target-manifest", type=Path, required=True) + rerun_parser.add_argument("--mode", choices=("connected", "passive-source355", "synthetic-nested"), required=True) + rerun_parser.add_argument("--source-report", type=Path) + rerun_parser.add_argument("--source-report-sha256") + rerun_parser.add_argument("--source-fixture", type=Path) + rerun_parser.add_argument("--source-profile", type=Path) + for command in (collect_parser, rerun_parser): + command.add_argument("--output", type=Path, required=True) + command.add_argument("--java8", type=Path, required=True) + command.add_argument("--port", type=int, required=True) + args = parser.parse_args() + if args.command == "rerun": + if args.mode == "connected" and (not args.source_report or not args.source_report_sha256): parser.error("Connected requires its sealed original source report") + if args.mode != "connected" and (not args.source_fixture or not args.source_profile): parser.error("Passive/synthetic mode requires the authentic source fixture and profile") + return collect(args) if args.command == "collect" else rerun(args) + + +if __name__ == "__main__": raise SystemExit(main()) diff --git a/test-rig/migration/native110_rebrand_connected.py b/test-rig/migration/native110_rebrand_connected.py new file mode 100644 index 0000000..87dc3a2 --- /dev/null +++ b/test-rig/migration/native110_rebrand_connected.py @@ -0,0 +1,270 @@ +"""Original released Cyano 1.10 -> renamed 1.10, on copies and strict diagnostics. + +No historical diagnostic permit is imported. New warnings/errors need new proof. +Only expected identity fields are translated; raw fixtures and snapshots stay intact. +""" +import argparse +import base64 +import copy +from datetime import datetime, timezone +import gzip +import io +from pathlib import Path +import shutil +import socket +import traceback + +import nbtlib + +import legacy_connected_oracle as oracle +import semantic_machine_audit +from native110 import output_path, pinned_profile, require_disjoint +from native110_code import INVENTORY, verify_code +from native110_connected import NativeServer +from native110_lifecycle import read_json, verify_staged +from rig_transport import WORLD, digest, fingerprint, write_json + +NAMESPACES = {"poweradvantage": "basepower", "steamadvantage": "basesteam", "electricadvantage": "baseelectric"} +TARGET_IDS = {"basepower", "basesteam", "baseelectric", "basemetals", "orespawn", "advantageworkstest"} +ORIGINAL_JARS = { + "PowerAdvantage_1.10.2-2.3.0.jar": "47CD509C1141095BFE1C8C7DD689C2ECD3F99C89195E34A88CC9E0B5FC12413E", + "SteamAdvantage_1.10.2-2.2.0.jar": "34A0C46C7B36DEF313F35720BD788539BDEECAD3C30880D30D82BC84E35AD9A5", + "ElectricAdvantage_1.10.2-2.2.0.jar": "61AE5343A79F518F54F1717D508EA3F6DA7209EE69B0C4433E0B7A9722213EE0", + "BaseMetals_1.10.2-2.4.0.11.jar": "A225D3E24CD37C377A9D843861FC13BDDB0B88F799D3D3AEDBC8B1DC636BB5E5", + "OreSpawn_1.10.2-1.1.0.jar": "91345E4B825AA06E05F470066F467AABA0C7A2804A8DBCA4D3CD1905ED53607C", + "AdvantageMigrationProbe-110-1.0.0.jar": "B9F756681593B508A8E3222BD592A3DFCB474303532B154045893B3C585EF1D3", +} +TANKS = {"Tank", "InputTank", "TankIn", "TankOut", "FuelTank", "WaterTank"} + + +def mapped_id(value, namespaces): + domain, separator, path = value.partition(":") + return namespaces.get(domain, domain) + separator + path if separator else value + + +def target_id(value): + return mapped_id(value, NAMESPACES) + + +def tile_alias(value): + if value == "Chest": return "minecraft:chest" + for namespace in (*NAMESPACES, *NAMESPACES.values()): + for prefix in (namespace + ".", "minecraft:" + namespace + "."): + if value.startswith(prefix): return namespace + ":" + value[len(prefix):] + return value + + +def binary_nbt(row): + return nbtlib.File.parse(io.BytesIO(gzip.decompress(base64.b64decode(row["nbtBase64"], validate=True)))) + + +def encode_nbt(tag): + output = io.BytesIO() + tag.write(output) + return base64.b64encode(gzip.compress(output.getvalue())).decode("ascii") + + +def identity_nbt(tag, namespaces): + """Translate tile IDs, inventory stack IDs and named tank fluids, never free text.""" + result = copy.deepcopy(tag) + if "id" in result and isinstance(result["id"], nbtlib.String): + result["id"] = nbtlib.String(mapped_id(tile_alias(str(result["id"])), namespaces)) + + def contents(value): + if not isinstance(value, nbtlib.Compound): return + for key, child in value.items(): + if key in ("Items", "Inventory") and isinstance(child, nbtlib.List): + for stack in child: + if isinstance(stack, nbtlib.Compound) and "Count" in stack and isinstance(stack.get("id"), nbtlib.String): + stack["id"] = nbtlib.String(mapped_id(str(stack["id"]), namespaces)) + if key in TANKS and isinstance(child, nbtlib.Compound) and isinstance(child.get("FluidName"), nbtlib.String): + child["FluidName"] = nbtlib.String(mapped_id(str(child["FluidName"]), namespaces)) + if isinstance(child, nbtlib.Compound): contents(child) + elif isinstance(child, nbtlib.List): + for entry in child: contents(entry) + contents(result) + return result + + +def preservation(before, after): + def rows(document, expected): + result = {} + for row in document["snapshot"]: + if row["id"] in result: raise AssertionError("Duplicate connected witness") + value = {key: row[key] for key in ("station", "kind", "name", "x", "y", "z", "actualName", "properties")} + if expected: value["actualName"] = target_id(value["actualName"]) + if "nbt" in row and "nbtBase64" not in row: raise AssertionError("Missing typed native NBT") + if "nbtBase64" in row: + tag = identity_nbt(binary_nbt(row), NAMESPACES if expected else {}) + if expected and row["actualName"] == "steamadvantage:steam_drill" and "Facing" not in tag: + facings = ("down", "up", "north", "south", "west", "east") + tag["Facing"] = nbtlib.Byte(facings.index(row["properties"]["facing"])) + value["nbt"] = oracle.saved_tile_nbt(tag) + for field in ("ForgeData", "ForgeCaps"): + if value["nbt"].get(field) == {}: value["nbt"].pop(field) + result[row["id"]] = value + return result + left, right = rows(before, True), rows(after, False) + changed = sorted(key for key in left.keys() | right.keys() if left.get(key) != right.get(key)) + return dict(status="FAIL" if changed else "PASS", changed=changed, + comparison="Exact witnesses, block states and typed NBT; only expected namespace fields and documented legacy serializer aliases") + + +def require_passive(document): + if (document.get("held") is not True or type(document.get("buildCallsThisProcess")) is not int + or document["buildCallsThisProcess"] != 0 or type(document.get("advancedTicks")) is not int + or document["advancedTicks"] != 0 or type(document.get("requestedTicks")) is not int + or document["requestedTicks"] != 0): + raise AssertionError("Loaded comparison requires zero ticks, zero construction and held machines") + + +def operation_view(document): + # Only an in-memory comparison view for the unchanged finite-work oracles. + result = copy.deepcopy(document) + reverse = {new: old for old, new in NAMESPACES.items()} + for row in result["snapshot"]: + row["actualName"] = mapped_id(row["actualName"], reverse) + if "nbtBase64" in row: row["nbtBase64"] = encode_nbt(identity_nbt(binary_nbt(row), reverse)) + return result + + +def sealed_json(path, checksum): + path = Path(path).resolve() + if digest(path) != checksum.upper(): raise AssertionError("Changed sealed input: " + str(path)) + return read_json(path) + + +def bind_source(report_path, checksum): + history = sealed_json(report_path, checksum) + if history.get("sourceKey") != "original110" or history.get("status") != "PASS": + raise AssertionError("Only completed original released Cyano 1.10 provenance is eligible") + source = Path(history["source"]).resolve() + manifest = sealed_json(history["sourceManifest"], history["sourceManifestSha256"]) + pins = {Path(j["path"]).name: j["sha256"].upper() for j in manifest["original110"]["jars"]} + actual = {p.name: digest(p) for p in (source / "mods").glob("*.jar")} + if pins != ORIGINAL_JARS or actual != pins: raise AssertionError("Not the exact original release mod inventory") + for jar in manifest["original110"]["jars"]: + if digest((Path(history["sourceManifest"]).parent / jar["path"]).resolve()) != jar["sha256"].upper(): + raise AssertionError("Archived original input artifact changed") + hashes = sealed_json(history["sourceHashes"], history["sourceHashesSha256"]) + if fingerprint(source / WORLD) != hashes: raise AssertionError("Protected original world changed") + if (not history.get("sourceRuntimeBefore") or history["sourceRuntimeBefore"] != history.get("sourceRuntimeAfter") + or fingerprint(source) != history["sourceRuntimeBefore"]): + raise AssertionError("Original fixture definition, configuration or runtime custody changed") + checkpoint = source / ("connected-" + history["sourceCheckpoint"] + ".json") + sealed_json(checkpoint, history["sourceCheckpointSha256"]) + return source, history + + +def bind_target(manifest_path): + target = pinned_profile(manifest_path, "target110") + pins = read_json(manifest_path)["target110"] + jars = pins["jars"] + if len(jars) != len(TARGET_IDS) or {j["id"] for j in jars} != TARGET_IDS: + raise AssertionError("Target must contain exactly basePower/baseSteam/baseElectric plus the three pinned support mods") + base = next(j for j in jars if j["id"] == "basemetals") + if base["sha256"].upper() != ORIGINAL_JARS["BaseMetals_1.10.2-2.4.0.11.jar"]: + raise AssertionError("This route upgrades Advantage, not the source Base Metals registry") + verify_code(target[0], pins["serverCode"]) + return target, pins + + +def run(args): + output = output_path(args.output) + source, history = bind_source(args.source_report, args.source_report_sha256) + target, pins = bind_target(args.target_manifest) + probe = next(j for j in read_json(Path(history["sourceManifest"]))["original110"]["jars"] + if Path(j["path"]).name == "AdvantageMigrationProbe-110-1.0.0.jar") + probe_path = (Path(history["sourceManifest"]).parent / probe["path"]).resolve() + profile = target[:2] + (target[2] + [probe_path],) + for protected in (source, args.source_report, args.target_manifest, target[0], probe_path, *target[2]): + require_disjoint(output, protected) + with socket.socket() as listener: listener.bind(("127.0.0.1", args.port)) + source_before = fingerprint(source) + helpers = [Path(__file__), Path(oracle.__file__), Path(semantic_machine_audit.__file__), + *[Path(__file__).with_name(name) for name in ("native110.py", "native110_code.py", "native110_connected.py", + "native110_lifecycle.py", "native110_diagnostics.py", "rig_transport.py")]] + report = dict(status="RUNNING", sourceKey="original110", sourceReport=str(args.source_report.resolve()), + sourceReportSha256=digest(args.source_report), targetManifest=str(args.target_manifest.resolve()), + targetManifestSha256=digest(args.target_manifest), sourceBefore=source_before, phases={}, + startedAtUtc=datetime.now(timezone.utc).isoformat(), protocolSha256={str(p): digest(p) for p in helpers}, + scope="Original Cyano 1.10 to renamed 1.10 only; two 2048-tick intervals and full process restart; strict diagnostics, no legacy bucket permit") + receipt = output / "native110-rebrand-connected-results.json" + server = None + try: + launcher = oracle.prepare(output, profile, None, args.port, source) + for path in helpers: + destination = output / "protocol-sources" / path.name + destination.parent.mkdir(exist_ok=True) + shutil.copy2(path, destination) + verify_code(output, pins["serverCode"]) + write_json(output / INVENTORY, pins["serverCode"]) + write_json(receipt, report) + if (output / "connected-build.allow").exists(): raise AssertionError("Destination construction authority leaked") + previous = oracle.read(source, history["sourceCheckpoint"]) + definition = read_json(output / "connected-fixture.json") + if oracle.state(previous)["status"] != "PASS": raise AssertionError("Invalid original finite stocks") + for phase in ("converted", "restarted"): + bind_source(args.source_report, args.source_report_sha256) + if digest(args.target_manifest) != report["targetManifestSha256"]: raise AssertionError("Target manifest changed") + verify_staged(output, profile) + verify_code(output, pins["serverCode"]) + server = NativeServer(output, args.java8, launcher, phase) + server.observe("snapshot", phase + "-loaded") + loaded = oracle.read(output, phase + "-loaded") + require_passive(loaded) + preserved = preservation(previous, loaded) + report["phases"][phase + "-preservation"] = preserved + write_json(receipt, report) + if preserved["status"] != "PASS": raise AssertionError("Unticked imported state changed: " + str(preserved)) + server.observe("step", phase + "-worked", 2048) + worked = oracle.read(output, phase + "-worked") + before_view, after_view = operation_view(loaded), operation_view(worked) + operation = oracle.operation(before_view, after_view, 2048) + completed = semantic_machine_audit.connected_interval(before_view, after_view, definition, 2048) + report["phases"][phase + "-operation"] = operation + report["phases"][phase + "-completed-work"] = completed + if operation["status"] != "PASS" or completed["status"] != "PASS": raise AssertionError("Imported machines failed finite paid work") + server.send("save-all flush") + server.wait("Saved the world", 120) + server.close(); server = None + verify_staged(output, profile) + if phase == "converted": shutil.copytree(output / WORLD, output / "pre-restart-save") + previous = worked + write_json(receipt, report) + report["status"] = "PASS" + except BaseException as error: + report.update(status="FAIL", failure=str(error), traceback=traceback.format_exc()) + finally: + if server: + try: server.close() + except BaseException as error: report.update(status="FAIL", shutdownError=str(error)) + report["sourceUnchanged"] = fingerprint(source) == source_before + report["protocolUnchanged"] = report["protocolSha256"] == {str(p): digest(p) for p in helpers} + report["manifestUnchanged"] = digest(args.target_manifest) == report["targetManifestSha256"] + try: + bind_source(args.source_report, args.source_report_sha256) + report["sourceBindingUnchanged"] = True + except BaseException as error: + report.update(status="FAIL", sourceBindingUnchanged=False, sourceBindingError=str(error)) + if not all(report[k] for k in ("sourceUnchanged", "protocolUnchanged", "manifestUnchanged")): report["status"] = "FAIL" + report["completedAtUtc"] = datetime.now(timezone.utc).isoformat() + output.mkdir(parents=True, exist_ok=True) + report["rawSha256"] = {str(p.relative_to(output)): digest(p) for p in output.rglob("*") if p.is_file() and p != receipt} + write_json(receipt, report) + return int(report["status"] != "PASS") + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--source-report", type=Path, required=True) + parser.add_argument("--source-report-sha256", required=True) + parser.add_argument("--target-manifest", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--java8", type=Path, required=True) + parser.add_argument("--port", type=int, required=True) + return run(parser.parse_args()) + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/test-rig/migration/native110_rebrand_passive.py b/test-rig/migration/native110_rebrand_passive.py new file mode 100644 index 0000000..04cbe70 --- /dev/null +++ b/test-rig/migration/native110_rebrand_passive.py @@ -0,0 +1,299 @@ +"""Independent authentic Cyano 355-witness passive upgrade, or separate synthetic serializers. + +Neither mode edits original files. The passive observer has no NBT load/repair path. +Synthetic detached-player/item cases are never original-player migration evidence. +""" +import argparse +import base64 +from datetime import datetime, timezone +import gzip +import io +from pathlib import Path +import shutil +import socket +import traceback + +import nbtlib + +import legacy_connected_oracle as legacy +from native110 import output_path, require_disjoint +from native110_code import INVENTORY, Server, verify_code +from native110_lifecycle import read_json, require_native_boot, verify_staged +from native110_rebrand_connected import ORIGINAL_JARS, NAMESPACES, binary_nbt, bind_target, identity_nbt, target_id +from rig_transport import WORLD, copy_fixture, digest, fingerprint, stage, write_json + +AUTHENTIC_SCOPE = "AUTHENTIC_ORIGINAL_RELEASE_110_PASSIVE_355" +SYNTHETIC_SCOPE = "SYNTHETIC_NATIVE_SERIALIZERS_NOT_ORIGINAL_PLAYER_OR_ENTITY_PROOF" +PROFILE_SHA = "6A6A7C57D674CCD30656098B1D1F3EC3C0AD95B49927511B039BF0F93CF3FE09" +SOURCE_FILES = { + "fixture-hashes.json": "2C9E521E6E813D8822A8B882B0D81D210B8646D11BC978D845621AC124273E41", + "migration-fixture.json": "FF1B1E6D0977E12577B1FCABDB5A2410EEBE016DCEB52E1B5004DE99BAB3AD01", + "migration-source.json": "C490A49CDFBCA43E01F1179CA035773BB36628727831E84149205EF5260664BA", + "input-jars.json": "62E42341F646C0C52C512B74E1F99DAFA7FA0A8AE9BE63DD4D76B989B70202B8", +} +SOURCE_JARS = {**ORIGINAL_JARS, "AdvantageMigrationProbe-110-1.0.0.jar": + "79157E31FFAF5D66CCDC8030EB7B8C37D0E0D33FD6A601D119F59904A461AAD4"} +SYNTHETIC_CASES = {"synthetic/player-inventory-ender-armor-offhand", "synthetic/dropped-enchanted-item", + "synthetic/nested-container-stack"} +RETAINED_ENCHANTMENTS = {"steamadvantage:" + name for name in + ("rapid_reload", "powderless", "high_explosive", "recoil")} + + +def saved_enchantments(world): + level = nbtlib.load(world / "level.dat") + entries = level["FML"]["Registries"]["minecraft:enchantments"]["ids"] + return registry([(int(row["V"]), str(row["K"])) for row in entries]) + + +def registry(rows): + result = {} + names = set() + for numeric_id, name in rows: + if type(numeric_id) is not int or numeric_id < 0 or numeric_id in result or name in names: + raise AssertionError("Missing/duplicate/malformed enchantment registry identity") + result[numeric_id] = name + names.add(name) + if not result: raise AssertionError("No genuine native enchantment registry") + return result + + +def canonical_nbt(row, enchantments, expected): + tag = identity_nbt(binary_nbt(row), NAMESPACES if expected else {}) + if expected and row["actualName"] == "steamadvantage:steam_drill" and "Facing" not in tag: + meta = row["metadata"] + facings = ("down", "up", "north", "south", "west", "east") + if type(meta) is not int or not 0 <= meta < len(facings) or row["properties"].get("facing") != facings[meta]: + raise AssertionError("Original Steam drill metadata and facing disagree") + tag["Facing"] = nbtlib.Byte(meta) + result = legacy.saved_tile_nbt(tag) + for field in ("ForgeData", "ForgeCaps"): + if result.get(field) == {}: result.pop(field) + + def visit(value): + if isinstance(value, dict): + for key, child in value.items(): + if key in ("ench", "StoredEnchantments", "Enchantments"): + if not isinstance(child, list) or len(child) != 3 or child[:2] != ["List", 10]: + raise AssertionError("Malformed typed enchantment list") + for entry in child[2]: + kind, numeric_id = entry["id"] + if kind not in ("Short", "Int") or type(numeric_id) is not int or numeric_id not in enchantments: + raise AssertionError("Unresolved native enchantment ID") + name = enchantments[numeric_id] + entry["id"] = [kind, target_id(name) if expected and name not in RETAINED_ENCHANTMENTS else name] + visit(child) + elif isinstance(value, list): + for child in value: visit(child) + visit(result) + return result + + +def compare_rows(before, after, before_enchantments, after_enchantments): + def indexed(rows, enchantments, expected): + if len(rows) != 355: raise AssertionError("All 355 authentic witnesses are mandatory") + result = {} + for row in rows: + pos = tuple(row[k] for k in ("x", "y", "z")) + if any(type(n) is not int for n in pos) or pos in result: raise AssertionError("Duplicate/invalid witness position") + value = {key: row[key] for key in ("name", "metadata", "actualName", "properties")} + if type(value["metadata"]) is not int: raise AssertionError("Invalid metadata type") + if expected: value["actualName"] = target_id(value["actualName"]) + if "nbt" in row and "nbtBase64" not in row: raise AssertionError("Missing authoritative binary NBT") + if "nbtBase64" in row: value["nbt"] = canonical_nbt(row, enchantments, expected) + result[pos] = value + return result + left = indexed(before, before_enchantments, True) + right = indexed(after, after_enchantments, False) + differences = [dict(position=pos, expected=left.get(pos), actual=right.get(pos)) + for pos in sorted(left.keys() | right.keys()) if left.get(pos) != right.get(pos)] + if differences: raise AssertionError("Passive registry/meta/typed-NBT differences: " + str(differences[:5])) + return dict(status="PASS", witnesses=355, tiles=sum("nbtBase64" in row for row in before), + comparison="Exact metadata, properties and typed NBT; expected namespace fields only; numeric enchantments resolved against each genuine registry") + + +def coverage(source, rows): + stacks, enchantments = [], [] + def visit(tag): + if isinstance(tag, nbtlib.Compound): + if "Count" in tag and isinstance(tag.get("id"), nbtlib.String): stacks.append(tag) + for key, child in tag.items(): + if key in ("ench", "StoredEnchantments", "Enchantments"): enchantments.extend(child) + visit(child) + elif isinstance(tag, nbtlib.List): + for child in tag: visit(child) + for row in rows: + if "nbtBase64" in row: visit(binary_nbt(row)) + world = source / WORLD + return dict(blockStateWitnesses=len(rows), tileWitnesses=sum("nbtBase64" in r for r in rows), + distinctBlockNames=len({r["name"] for r in rows}), inventoryStacks=len(stacks), + inventoryItems=sum(int(s["Count"]) for s in stacks), distinctItemNames=len({str(s["id"]) for s in stacks}), + enchantmentEntries=len(enchantments), playerFiles=len(list((world / "playerdata").glob("*.dat"))), + levelPlayer="Player" in nbtlib.load(world / "level.dat").get("Data", {}), declaredEntityWitnesses=0, + gaps=["No authentic saved player, ender inventory or armor/offhand fixture", + "No declared actor fixture; independent read-only scan found no saved entities", + "Synthetic detached serializers are not player-login, entity-spawn or cross-restart player acceptance"]) + + +def bind_fixture(source, source_profile): + source, source_profile = source.resolve(), source_profile.resolve() + if digest(source_profile) != PROFILE_SHA: raise AssertionError("Not the sealed original-Cyano profile manifest") + for name, checksum in SOURCE_FILES.items(): + if digest(source / name) != checksum: raise AssertionError("Changed authentic source receipt: " + name) + profile = read_json(source_profile)["original110"] + if {Path(j["path"]).name: j["sha256"].upper() for j in profile["jars"]} != SOURCE_JARS: + raise AssertionError("Source profile does not describe the original released jars and original passive probe") + if {p.name: digest(p) for p in (source / "mods").glob("*.jar")} != SOURCE_JARS: + raise AssertionError("Archived source mod bytes differ") + if fingerprint(source / WORLD) != read_json(source / "fixture-hashes.json"): + raise AssertionError("Protected authentic source world changed") + rows = read_json(source / "migration-source.json") + if len(rows) != 355 or len(read_json(source / "migration-fixture.json")) != 355: + raise AssertionError("Not the complete original 355-witness fixture") + return rows, saved_enchantments(source / WORLD) + + +def source_observer(source): + path = source / "mods" / "AdvantageMigrationProbe-110-1.0.0.jar" + if digest(path) != SOURCE_JARS[path.name]: + raise AssertionError("The exact authentic passive source observer is required") + return path + + +def validate_passive(document): + if (document.get("scope") != AUTHENTIC_SCOPE or document.get("held") is not True + or any(type(document.get(k)) is not int or document[k] != 0 + for k in ("constructionCallsThisProcess", "requestedTicks", "advancedTicks")) + or type(document.get("frozenTileObjects")) is not int or document["frozenTileObjects"] < 1): + raise AssertionError("Missing frozen, nonconstructing passive native observation") + return registry([(r["numericId"], r["name"]) for r in document["enchantments"]]) + + +def decoded(value): + return nbtlib.File.parse(io.BytesIO(gzip.decompress(base64.b64decode(value, validate=True)))) + + +def validate_nested(document): + if (document.get("scope") != SYNTHETIC_SCOPE or document.get("status") != "PASS" + or type(document.get("worldInsertions")) is not int or document["worldInsertions"] != 0 + or type(document.get("playerFileWrites")) is not int or document["playerFileWrites"] != 0): + raise AssertionError("Not a complete isolated synthetic native serializer regression") + cases = document.get("cases", []) + if len(cases) != 3 or {r["id"] for r in cases} != SYNTHETIC_CASES: + raise AssertionError("All three separate synthetic cases are required") + for row in cases: + if row.get("status") != "PASS" or row.get("nativeSemantics") is not True: + raise AssertionError("Native serializer semantics failed") + expected, actual = decoded(row["expectedNbtBase64"]), decoded(row["actualNbtBase64"]) + if legacy.typed_nbt(expected) != legacy.typed_nbt(actual): + raise AssertionError("Synthetic typed native readback changed: " + row["id"]) + if not decoded(row["inputNbtBase64"]): raise AssertionError("Missing declared synthetic legacy input") + return dict(status="PASS", cases=3, scope=SYNTHETIC_SCOPE) + + +class PassiveServer(Server): + def send(self, command): + if command not in ("stop", "save-all flush") and not command.startswith(("advpassive snapshot ", "advnested run ")): + raise AssertionError("Forbidden passive runtime command: " + command) + super().send(command) + + def close(self): + try: return super().close() + finally: require_native_boot(Path(self.log.name)) + + +def run(args): + output = output_path(args.output) + source, source_profile = args.source_fixture.resolve(), args.source_profile.resolve() + original, original_enchantments = bind_fixture(source, source_profile) + target, pins = bind_target(args.target_manifest) + observer = source_observer(source) + runtime_profile = target[:2] + (target[2] + [observer],) + for protected in (source, source_profile, args.target_manifest, target[0], *target[2]): require_disjoint(output, protected) + with socket.socket() as listener: listener.bind(("127.0.0.1", args.port)) + source_before = fingerprint(source) + helpers = [Path(__file__), *[Path(__file__).with_name(name) for name in + ("native110_rebrand_connected.py", "native110_connected.py", "legacy_connected_oracle.py", "semantic_machine_audit.py", + "native110.py", "native110_code.py", "native110_lifecycle.py", "native110_diagnostics.py", "rig_transport.py")]] + report = dict(status="RUNNING", mode=args.mode, scope=AUTHENTIC_SCOPE if args.mode == "passive-source355" else SYNTHETIC_SCOPE, + source=str(source), sourceProfile=str(source_profile), sourceProfileSha256=digest(source_profile), + targetManifest=str(args.target_manifest.resolve()), targetManifestSha256=digest(args.target_manifest), + sourceBefore=source_before, sourceFilesSha256=SOURCE_FILES, coverage=coverage(source, original), phases={}, + sourceObserver=dict(path=str(observer), sha256=digest(observer), modid="advantagemigrationprobe", version="1.0.0", + scope="Exact original fixture dependency; initialization freezes tiles only; legacy build/snapshot commands forbidden"), + protocolSha256={str(p): digest(p) for p in helpers}, startedAtUtc=datetime.now(timezone.utc).isoformat()) + receipt = output / ("native110-rebrand-passive-results.json" if args.mode == "passive-source355" else "native110-rebrand-synthetic-nested-results.json") + server = None + try: + launcher = stage(output, runtime_profile) + copy_fixture(source, output) + (output / "advantage-passive-migration.allow").touch() + if args.mode == "synthetic-nested": + (output / "advantage-nested-identity.allow").touch() + write_json(output / "source-enchantments.json", {name: numeric_id for numeric_id, name in original_enchantments.items()}) + props = output / "server.properties" + props.write_text(props.read_text().replace("server-port=25584", "server-port=" + str(args.port))) + for path in helpers: + destination = output / "protocol-sources" / path.name + destination.parent.mkdir(exist_ok=True) + shutil.copy2(path, destination) + write_json(output / INVENTORY, pins["serverCode"]) + write_json(receipt, report) + before, before_enchantments = original, original_enchantments + for phase in ("converted", "restarted"): + bind_fixture(source, source_profile) + if digest(args.target_manifest) != report["targetManifestSha256"]: raise AssertionError("Target manifest changed") + if (output / "migration-operate.allow").exists() or (output / "advantage-machine-operation.allow").exists(): + raise AssertionError("Passive world acquired operating authority") + verify_staged(output, runtime_profile) + verify_code(output, pins["serverCode"]) + server = PassiveServer(output, args.java8, launcher, phase) + if args.mode == "passive-source355": + server.send("advpassive snapshot " + phase) + server.wait("ADVPASSIVE COMPLETE " + phase, 180) + observed = read_json(output / ("passive-" + phase + ".json")) + after_enchantments = validate_passive(observed) + report["phases"][phase] = compare_rows(before, observed["snapshot"], before_enchantments, after_enchantments) + before, before_enchantments = observed["snapshot"], after_enchantments + else: + server.send("advnested run " + phase) + server.wait("ADVNESTED COMPLETE " + phase, 180) + report["phases"][phase] = validate_nested(read_json(output / ("nested-identity-" + phase + ".json"))) + server.send("save-all flush") + server.wait("Saved the world", 120) + server.close(); server = None + verify_staged(output, runtime_profile) + if phase == "converted": shutil.copytree(output / WORLD, output / "pre-restart-save") + write_json(receipt, report) + report["status"] = "PASS" + except BaseException as error: + report.update(status="FAIL", failure=str(error), traceback=traceback.format_exc()) + finally: + if server: + try: server.close() + except BaseException as error: report.update(status="FAIL", shutdownError=str(error)) + report["sourceUnchanged"] = fingerprint(source) == source_before + report["protocolUnchanged"] = report["protocolSha256"] == {str(p): digest(p) for p in helpers} + report["manifestUnchanged"] = digest(args.target_manifest) == report["targetManifestSha256"] + try: bind_fixture(source, source_profile) + except BaseException as error: report.update(status="FAIL", sourceBindingError=str(error)) + if not all(report[k] for k in ("sourceUnchanged", "protocolUnchanged", "manifestUnchanged")): report["status"] = "FAIL" + output.mkdir(parents=True, exist_ok=True) + report["completedAtUtc"] = datetime.now(timezone.utc).isoformat() + report["rawSha256"] = {str(p.relative_to(output)): digest(p) for p in output.rglob("*") if p.is_file() and p != receipt} + write_json(receipt, report) + return int(report["status"] != "PASS") + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--mode", choices=("passive-source355", "synthetic-nested"), default="passive-source355") + parser.add_argument("--source-fixture", type=Path, required=True) + parser.add_argument("--source-profile", type=Path, required=True) + parser.add_argument("--target-manifest", type=Path, required=True) + parser.add_argument("--java8", type=Path, required=True) + parser.add_argument("--port", type=int, required=True) + parser.add_argument("--output", type=Path, required=True) + return run(parser.parse_args()) + + +if __name__ == "__main__": raise SystemExit(main()) diff --git a/test-rig/migration/native110_recipe_progression.py b/test-rig/migration/native110_recipe_progression.py index 7773ffe..f44eea5 100644 --- a/test-rig/migration/native110_recipe_progression.py +++ b/test-rig/migration/native110_recipe_progression.py @@ -20,21 +20,21 @@ "leather","string","feather","blaze_rod","ender_pearl","quartz","bone","cactus","dirt") ORE_ROOTS=("oreCopper","oreTin","oreZinc","oreLead","oreNickel","oreSilver","oreLithium","oreSulfur") EXCLUSIONS={ - "poweradvantage:infinite_steam@0":"Creative-only source", - "poweradvantage:infinite_electricity@0":"Creative-only source", - "poweradvantage:infinite_quantum@0":"Creative-only source", - "poweradvantage:crude_oil@0":"World fluid identity; natural collection is outside this audit", - "poweradvantage:refined_oil@0":"World fluid identity; live distillation is outside this audit", - "poweradvantage:fluid_pipe_terminal@0":"Hidden ordinary-pipe state", - "steamadvantage:drillbit@0":"Drill-created helper", - "steamadvantage:platform@0":"Elevator-created helper", - "steamadvantage:pump_pipe_steam@0":"Pump-created helper", - "electricadvantage:pump_pipe_electric@0":"Pump-created helper", - "electricadvantage:laser_turret_evil@0":"Hidden converted turret state", + "basepower:infinite_steam@0":"Creative-only source", + "basepower:infinite_electricity@0":"Creative-only source", + "basepower:infinite_quantum@0":"Creative-only source", + "basepower:crude_oil@0":"World fluid identity; natural collection is outside this audit", + "basepower:refined_oil@0":"World fluid identity; live distillation is outside this audit", + "basepower:fluid_pipe_terminal@0":"Hidden ordinary-pipe state", + "basesteam:drillbit@0":"Drill-created helper", + "basesteam:platform@0":"Elevator-created helper", + "basesteam:pump_pipe_steam@0":"Pump-created helper", + "baseelectric:pump_pipe_electric@0":"Pump-created helper", + "baseelectric:laser_turret_evil@0":"Hidden converted turret state", } -CORE={"poweradvantage:sprocket@0","poweradvantage:fluid_pipe@0","steamadvantage:steam_governor@0", - "steamadvantage:steam_pipe@0","electricadvantage:integrated_circuit@0","electricadvantage:psu@0", - "electricadvantage:electric_conduit@0","electricadvantage:photovoltaic_generator@0"} +CORE={"basepower:sprocket@0","basepower:fluid_pipe@0","basesteam:steam_governor@0", + "basesteam:steam_pipe@0","baseelectric:integrated_circuit@0","baseelectric:psu@0", + "baseelectric:electric_conduit@0","baseelectric:photovoltaic_generator@0"} def mode_checks(doc,mode,rubber): @@ -48,7 +48,7 @@ def mode_checks(doc,mode,rubber): ids=[r["id"] for r in crafting] if len(ids)!=len(set(ids)): raise AssertionError("Duplicate native recipe evidence") for row in crafting: - owned=isinstance(row.get("output"),str) and row["output"].startswith(("poweradvantage:","steamadvantage:","electricadvantage:")) + owned=isinstance(row.get("output"),str) and row["output"].startswith(("basepower:","basesteam:","baseelectric:")) if row.get("owned") is not owned: raise AssertionError("Native recipe ownership evidence is missing or inconsistent") if row.get("status")=="PASS" and (row.get("negativeControlsRejected")!=2 or type(row.get("count")) is not int or row["count"]<=0 or not row.get("output") @@ -61,17 +61,17 @@ def mode_checks(doc,mode,rubber): if row.get("status")=="PASS" and row.get("owned") is True and row.get("recipeBookCraftUnlock")!="N/A_NO_1_10_RECIPE_BOOK": raise AssertionError("Missing native recipe-book result or explicit legacy N/A") def rows(output): return [r for r in crafting if r.get("output")==output] - for target in ("poweradvantage:sprocket@0","electricadvantage:integrated_circuit@0","electricadvantage:photovoltaic_generator@0"): + for target in ("basepower:sprocket@0","baseelectric:integrated_circuit@0","baseelectric:photovoltaic_generator@0"): if bool(rows(target)) != (mode!="APOCALYPTIC"): raise AssertionError("Recipe mode restriction changed: "+target) - for target in ("steamadvantage:steam_governor@0","electricadvantage:psu@0"): + for target in ("basesteam:steam_governor@0","baseelectric:psu@0"): if not rows(target): raise AssertionError("Mode lost a foundational recipe: "+target) iron=set(doc.get("ores",{}).get("ingotIron",[])) - pipes=[r for r in rows("poweradvantage:fluid_pipe@0") + pipes=[r for r in rows("basepower:fluid_pipe@0") if len([x for x in r.get("inputs",[]) if x])==6 and all(x in iron for x in r["inputs"] if x)] if not pipes or any(r["count"]!=(3 if mode=="APOCALYPTIC" else 6) for r in pipes): raise AssertionError("Native iron-pipe yield changed") - chips=rows("electricadvantage:integrated_circuit@0") + chips=rows("baseelectric:integrated_circuit@0") # Forge may expand a wildcard ore entry into concrete matching-stack variants. def matches_provider(value,choices): return (isinstance(value,str) and "@" in value and isinstance(choices,list) @@ -125,7 +125,7 @@ def reachability(doc): blocked=[]; excluded={} for target in doc["targets"]: if target in EXCLUSIONS: excluded[target]=EXCLUSIONS[target] - elif doc["mode"]=="APOCALYPTIC" and target=="electricadvantage:photovoltaic_generator@0": + elif doc["mode"]=="APOCALYPTIC" and target=="baseelectric:photovoltaic_generator@0": excluded[target]="Explicit legacy Apocalyptic restriction" elif target not in known: blocked.append(target) return {"reachable":known,"blocked":sorted(blocked),"excluded":excluded,"rounds":rounds, @@ -174,7 +174,7 @@ def run(args): launcher=prepare(runtime,target,[],args.port) verify_code(runtime,code); write_json(runtime/INVENTORY,code) (runtime/"advantage-legacy-recipes.allow").touch() - config=runtime/"config/poweradvantage.cfg"; config.parent.mkdir(exist_ok=True) + config=runtime/"config/basepower.cfg"; config.parent.mkdir(exist_ok=True) config.write_text('options {\n S:recipe_mode='+mode+'\n B:plastic_equals_rubber='+str(not args.no_rubber).lower()+'\n}\n',encoding="utf-8") proofs={} for phase in ("initial","restart"): diff --git a/test-rig/migration/native110_survival_progression.py b/test-rig/migration/native110_survival_progression.py new file mode 100644 index 0000000..fc1217f --- /dev/null +++ b/test-rig/migration/native110_survival_progression.py @@ -0,0 +1,194 @@ +"""Native finite-material crafting/trading and naturally ticking starter-plant checks.""" +import argparse +from collections import Counter +from datetime import datetime, timezone +import json +from pathlib import Path +import shutil +import socket +import traceback + +from rig_transport import digest, write_json +from native110 import output_path, pinned_profile, require_disjoint +from native110_code import INVENTORY, Server, verify_code +from native110_lifecycle import prepare, read_json, require_native_boot, verify_staged +from native110_recipe_progression import MODES, mode_checks, canonical +from survival110_plan import plan + + +def validate_replay(proposed, first, continued): + rows = first["actions"] + continued["actions"] + if len(rows) != len(proposed["actions"]): raise AssertionError("Missing/repeated finite replay step") + stock = Counter(proposed["initial"]) + for index, (action, receipt) in enumerate(zip(proposed["actions"], rows)): + if (receipt.get("index") != index or receipt.get("status") != "PASS" or receipt.get("kind") != action["kind"] + or receipt.get("output") != action["output"] or receipt.get("before") != +stock): + raise AssertionError("Wrong replay step or pre-debit stock at " + str(index)) + debits = Counter() + kind = action["kind"] + if kind == "craft": + if receipt.get("nativeConsumption") != "SlotCrafting" or receipt.get("negativeControlsRejected") != 2: + raise AssertionError("Missing real craft consumption or negative controls") + if receipt.get("selectedInputs") != action["inputs"]: raise AssertionError("Substituted ingredient route") + debits.update(x for x in action["inputs"] if x) + returned = action.get("emptyBucketsReturned", 0) + if receipt.get("returnedEmptyBuckets") != returned: raise AssertionError("Missing/duplicated empty bucket") + elif kind == "smelt": + if not 200 <= receipt.get("nativeUpdates", 0) <= 220 or receipt.get("coalDebited") != 1: + raise AssertionError("Registered smelting function is not fuelled processing evidence") + debits.update([action["input"], action["fuel"]]) + elif kind == "crush": + if receipt.get("durabilityDebited") != 1 or receipt.get("nativeInteraction") != "Item.onItemUse + EntityItem outputs": + raise AssertionError("Crushing lookup is not a real hammer interaction") + debits.update([action["input"]]) + if receipt.get("toolBroke") is not action["toolBreaks"]: raise AssertionError("Wrong tool lifetime") + if action["toolBreaks"]: debits[action["tool"]] += 1 + elif kind == "trade": + if receipt.get("nativeConsumption") != "SlotMerchantResult" or receipt.get("offer") != action["trade"]["id"]: + raise AssertionError("Registered offer is not a paid native transaction") + debits[action["trade"]["input"]] += action["trade"]["price"] + if action["trade"].get("secondInput"): debits[action["trade"]["secondInput"]] += action["trade"]["secondPrice"] + elif kind == "water": debits["minecraft:bucket@0"] += 1 + else: raise AssertionError("Unknown action") + if any(stock[item] < count for item, count in debits.items()): raise AssertionError("Free intermediate item or overdraft") + stock.subtract(debits) + stock[action["output"]] += action["count"] + if kind == "craft": stock["minecraft:bucket@0"] += action.get("emptyBucketsReturned", 0) + if receipt.get("after") != +stock: raise AssertionError("Wrong native material balance at " + str(index)) + if +stock != proposed["expectedStock"] or continued.get("craftedStock") != +stock: + raise AssertionError("Final finite stock disagrees with independent accounting") + if first.get("stock") != continued.get("resumedStock"): + raise AssertionError("Crafting stock reset across full process restart") + if not first.get("stockTyped") or first["stockTyped"]!=continued.get("resumedStockTyped"): + raise AssertionError("Typed item/tool state changed across full process restart") + + +def validate_phases(proposed, phases): + for name, expected in (("first", "CRAFT_CHECKPOINT"), ("continue", "MACHINE_CHECKPOINT"), ("resume", "PASS"), ("inspect", "PASS")): + row = phases[name] + if (row.get("status") != expected or row.get("mode") != proposed["mode"] + or row.get("rubber") is not proposed["rubber"] or row.get("minecraft") != "1.10.2"): + raise AssertionError("Incomplete/wrong native phase " + name) + validate_replay(proposed, phases["first"], phases["continue"]) + for phase in ("resume", "inspect"): + if phases[phase].get("coldMachineState") != "EXACT_TYPED_NBT_AND_BLOCK_EQUAL": + raise AssertionError("Machine state not checked cold before restart ticks") + live = phases["resume"] + if (live.get("crudeOilDebited"), live.get("refinedOilProducedAndConsumed"), live.get("plasticProduced"), live.get("steamSmeltProduced")) != (1000,500,5,1): + raise AssertionError("Live fluid/product conservation or paid steam work failed") + if not 620 <= live.get("naturalMachineTicks", 0) < 2200: raise AssertionError("No bounded natural machine operation") + if live.get("steamReceived") is not True or live.get("maximumSteamFurnaceTemperature",0)<=800: + raise AssertionError("Coal-only smelting is not proof of network steam heating") + if phases["inspect"].get("stock") != live.get("stock"): raise AssertionError("Products lost or duplicated after final restart") + if not live.get("stockTyped") or phases["inspect"].get("stockTyped")!=live["stockTyped"]: + raise AssertionError("Final typed item state changed across full process restart") + operation_stock=Counter(proposed["expectedStock"]) + for item in ("basepower:still@0","baseelectric:hydroelectric_generator@0","baseelectric:plastic_refinery@0", + "basesteam:steam_boiler_coal@0","basesteam:steam_furnace@0","basesteam:steam_pipe@0"): + operation_stock[item]-=1 + operation_stock["minecraft:coal@0"]-=3 + operation_stock["minecraft:iron_ore@0"]-=1 + if any(v<0 for v in operation_stock.values()) or phases["continue"]["stock"] != +operation_stock: + raise AssertionError("Starter plant did not debit exact crafted machinery, inputs and fuel") + operation_stock["baseelectric:petrolplastic_ingot@0"]+=5 + if live["stock"] != +operation_stock: raise AssertionError("Live production invented or lost stock") + water=1000*sum(action["kind"]=="water" for action in proposed["actions"])+2000 + if live.get("waterSourcesCollectedMb")!=water: raise AssertionError("Missing bucket/source-fluid conservation") + + +def run(args): + root = output_path(args.output) + manifest = args.target_manifest.resolve() + target = pinned_profile(manifest, "target110") + for path in (manifest, target[0], *target[2]): require_disjoint(root,path) + code = read_json(manifest)["target110"]["serverCode"] + verify_code(target[0],code) + with socket.socket() as sock: sock.bind(("127.0.0.1",args.port)) + root.mkdir(parents=True) + sources = [Path(__file__), *[Path(__file__).with_name(name) for name in + ("survival110_plan.py", "native110_recipe_progression.py", "rig_transport.py", "native110.py", "native110_code.py", "native110_lifecycle.py", "native110_diagnostics.py")], + *[Path(__file__).parents[1]/"src/main/java/zone/moddev/mc/advantageworks"/name for name in + ("NativeSurvivalProgressionProbe.java", "NativeRecipeProgressionProbe.java", "NativeEntityHold.java", "NativeFluidPort.java")]] + seals = {str(path):digest(path) for path in sources} + for path in sources: + dest=root/"protocol-sources"/path.name; dest.parent.mkdir(exist_ok=True); shutil.copy2(path,dest) + report = dict(status="RUNNING", startedAtUtc=datetime.now(timezone.utc).isoformat(), manifest=str(manifest), manifestSha256=digest(manifest), + protocolSha256=seals, cases={}, + scope="FINITE_HARVESTED_INPUTS_NATIVE_CRAFTS_HAMMER_TRADES_BUCKETS_AND_NATURAL_STARTER_PLANT", + limitations=["Resource harvesting, villager encounter and career leveling are not simulated", + "Vanilla furnaces use bounded native updates with real coal, not wall-clock ticks", + "Additional Loot Tables is not in the pinned pack; absent loot remains a reported integration gap", + "No 1.10 recipe book or ingredient advancements exist"]) + server=None + try: + for mode in ([args.mode] if args.mode else MODES): + for rubber in ([args.rubber == "on"] if args.rubber else (True,False)): + name=mode.lower()+("-rubber" if rubber else "-no-rubber") + runtime=root/name + launcher=prepare(runtime,target,[],args.port) + verify_code(runtime,code);write_json(runtime/INVENTORY,code) + for marker in ("advantage-legacy-recipes.allow","advantage-survival.allow"): (runtime/marker).touch() + config=runtime/"config/basepower.cfg";config.parent.mkdir(exist_ok=True) + config.write_text('options {\n S:recipe_mode='+mode+'\n B:plastic_equals_rubber='+str(rubber).lower()+'\n}\n',encoding="utf-8") + phases={}; exports={} + for phase in ("first","continue","resume","inspect"): + verify_staged(runtime,target) + server=Server(runtime,args.java8,launcher,phase) + if phase in ("first","inspect"): + server.send("advlegacyrecipes "+phase);server.wait("ADVLEGACYRECIPES COMPLETE "+phase,180) + doc=read_json(runtime/"advantage-works-results"/("legacy-recipes-"+phase+".json")) + mode_checks(doc,mode,rubber);exports[phase]=doc + if phase=="first": + proposed=plan(doc) + gaps={item for item,row in proposed["coverage"].items() if row["status"]=="NO_FINITE_ROUTE"} + if gaps-{"baseelectric:li_nugget@0"}: raise AssertionError("New unclassified progression blockers: "+str(sorted(gaps))) + write_json(runtime/"survival-plan.json",proposed) + plan_seal=digest(runtime/"survival-plan.json") + print(name+" PLAN actions="+str(len(proposed["actions"])),flush=True) + if digest(runtime/"survival-plan.json")!=plan_seal: raise AssertionError("Finite plan changed during progression") + server.send("advsurvival "+phase+" "+phase) + server.wait("ADVSURVIVAL COMPLETE "+phase,240) + phases[phase]=read_json(runtime/"advantage-works-results"/("survival-"+phase+".json")) + server.send("save-all flush");server.close();server=None + require_native_boot(runtime/("console-"+phase+".log"));verify_staged(runtime,target) + if phases[phase].get("status")=="FAIL": raise AssertionError(phases[phase].get("failure","Failed native phase")) + if canonical(exports["first"])!=canonical(exports["inspect"]): raise AssertionError("Native recipes changed across restart") + if exports["first"]["economy"]!=exports["inspect"]["economy"]: raise AssertionError("Native offers/loot/durability changed across restart") + if digest(runtime/"survival-plan.json")!=plan_seal: raise AssertionError("Finite plan changed during progression") + validate_phases(proposed,phases) + coverage=proposed["coverage"] + for target_item,row in coverage.items(): + if row["status"]=="NATIVE_REPLAY_REQUIRED": row["status"]="NATIVE_OBTAINED_FINITE_STOCK" + elif row["status"]=="LIVE_MACHINE_REQUIRED": row["status"]="LIVE_PRODUCED" + report["cases"][name]=dict(status="PASS",planSha256=digest(runtime/"survival-plan.json"),phaseReports=phases, + actions=len(proposed["actions"]),coverage=coverage, + uncreditedTrades=proposed["uncreditedTrades"], + sampledNativeLoot=exports["first"]["sampledNativeLoot"],economy=exports["first"]["economy"]) + write_json(root/"survival-results-progress.json",report) + print("SURVIVAL110 PASS "+name,flush=True) + report["status"]="PASS" + report["completeProgression"]="PARTIAL" if any(row["status"]=="NO_FINITE_ROUTE" for case in report["cases"].values() for row in case["coverage"].values()) else "QUALIFIED_WITHIN_DECLARED_SCOPE" + except Exception as error: + report.update(status="FAIL",failure=str(error),traceback=traceback.format_exc()) + finally: + if server: + try:server.close() + except Exception as error:report.update(status="FAIL",shutdownError=str(error)) + report["manifestUnchanged"]=report["manifestSha256"]==digest(manifest) + report["protocolUnchanged"]=seals=={str(path):digest(path) for path in sources} + if not report["manifestUnchanged"] or not report["protocolUnchanged"]:report["status"]="FAIL" + report["completedAtUtc"]=datetime.now(timezone.utc).isoformat() + write_json(root/"native110-survival-results.json",report) + print("SURVIVAL110 "+report["status"]+" "+report.get("failure",""),flush=True) + return 1 if report["status"]=="FAIL" else 0 + + +if __name__=="__main__": + parser=argparse.ArgumentParser(description=__doc__) + parser.add_argument("--target-manifest",type=Path,required=True) + parser.add_argument("--java8",type=Path,required=True) + parser.add_argument("--output",type=Path,required=True) + parser.add_argument("--port",type=int,default=25597) + parser.add_argument("--mode",choices=MODES) + parser.add_argument("--rubber",choices=("on","off")) + raise SystemExit(run(parser.parse_args())) diff --git a/test-rig/migration/requirements.txt b/test-rig/migration/requirements.txt new file mode 100644 index 0000000..15f86d4 --- /dev/null +++ b/test-rig/migration/requirements.txt @@ -0,0 +1,2 @@ +nbtlib==2.0.4 +numpy==2.5.3 diff --git a/test-rig/migration/steam_control_audit.py b/test-rig/migration/steam_control_audit.py index 2c51321..04ab1fc 100644 --- a/test-rig/migration/steam_control_audit.py +++ b/test-rig/migration/steam_control_audit.py @@ -36,6 +36,10 @@ } +def steam_block(path, line): + return ("basesteam:" if line == "110" else "steamadvantage:") + path + + def require(value, message): if not value: raise AssertionError(message) @@ -185,8 +189,8 @@ def at(x, y=4, z=8): "Tile hold must remove ticking, retain the same tile and leave NBT unchanged") observed = measured.get(at(*point)) require(observed is not None and "nbt" in observed - and observed["block"] == ("steamadvantage:steam_furnace" if row["id"] in FURNACES - else "steamadvantage:steam_crusher"), + and observed["block"] == steam_block("steam_furnace" if row["id"] in FURNACES + else "steam_crusher", line), "Held tile is not the measured native machine") actual.add(point) require(actual == expected, "Incomplete measured tile hold coverage") @@ -228,7 +232,7 @@ def audit_documents(catalog, operation, fixture, cold, line): for stage in ("before", "after"): require(set(positions(row[stage], base, line)) == expected_positions, "Wrong comparator layout") for i, count in enumerate(counts): - data = tile(row[stage], at(3 + 6 * i), "steamadvantage:steam_crusher", line) + data = tile(row[stage], at(3 + 6 * i), steam_block("steam_crusher", line), line) inventory(data, 0, "minecraft:stone", count) require(energy(data) == 0 and progress(data) == 0, "Comparator witness must remain unpowered") for i, count in enumerate(counts): @@ -245,7 +249,7 @@ def audit_documents(catalog, operation, fixture, cold, line): require(set(snapshot) == expected_positions, "Wrong controlled-machine layout") if signal: require(snapshot[at(7)]["block"] == "minecraft:redstone_block", "Missing actual redstone source") - block = "steamadvantage:steam_crusher" if is_crusher else "steamadvantage:steam_furnace" + block = steam_block("steam_crusher" if is_crusher else "steam_furnace", line) before = tile(row["before"], at(8), block, line) after = tile(row["after"], at(8), block, line) item = "minecraft:stone" if is_crusher else "minecraft:sand" diff --git a/test-rig/migration/survival110_plan.py b/test-rig/migration/survival110_plan.py new file mode 100644 index 0000000..a0a580b --- /dev/null +++ b/test-rig/migration/survival110_plan.py @@ -0,0 +1,228 @@ +"""Finite material planner. Proposed routes are NOT proof until native replay passes.""" +from collections import Counter, defaultdict +from native110_recipe_progression import EXCLUSIONS + + +class Unobtainable(ValueError): + pass + + +def concrete(token): + return token.replace("@32767", "@0") if token else token + + +class Planner: + def __init__(self, doc, stock, allow_trades=False): + self.doc = doc + self.stock = Counter(stock) + self.initial = dict(stock) + self.actions = [] + self.routes = defaultdict(list) + self.tools = Counter() + self.trade_uses = Counter() + self.uncredited_trades = [] + self.reserved = {"minecraft:crafting_table@0": 1, "minecraft:furnace@0": 1} + self.attempts = 0 + for row in doc["crafting"]: + if row.get("status") == "PASS": + self.routes[row["output"]].append(dict(kind="craft", recipe=row)) + for row in doc["smelting"]: + self.routes[row["output"]].append(dict(kind="smelt", recipe=row)) + for row in doc["crushing"]: + self.routes[row["output"]].append(dict(kind="crush", recipe=row)) + if allow_trades: + for row in doc["economy"]["trades"]: + if (not isinstance(row.get("input"),str) or type(row.get("price")) is not int or row["price"]<=0 + or type(row.get("maxUses")) is not int or row["maxUses"]<=0): + self.uncredited_trades.append(dict(id=row["id"],output=row["output"],reason="Missing currency, non-positive price or invalid offer stock")) + else: + self.routes[row["output"]].append(dict(kind="trade", recipe=row)) + self.routes["minecraft:water_bucket@0"].append(dict(kind="water", recipe=dict(count=1))) + self.ranks = {item: 0 for item, count in stock.items() if count > 0} + for _ in range(100): + changed = False + for item, routes in self.routes.items(): + rank = min((self.route_rank(route) for route in routes), default=1000000) + if rank < self.ranks.get(item, 1000000): + self.ranks[item] = rank + changed = True + if not changed: break + + def route_rank(self, route): + row, kind = route["recipe"], route["kind"] + rank = lambda item: self.ranks.get(concrete(item), 1000000) + if kind == "craft": + cells = row.get("providers", [[x] if x else [] for x in row["inputs"]]) + return 1 + max((min(map(rank, choices)) for choices in cells if choices), default=1000000) + if kind == "smelt": return 1 + max(rank(row["input"]), rank("minecraft:furnace@0"), rank("minecraft:coal@0")) + if kind == "crush": return 1 + max(rank(row["input"]), min(map(rank, row["tools"]), default=1000000)) + if kind == "trade": return 1 + max(rank(row["input"]), rank(row["secondInput"]) if row.get("secondInput") else 0) + if kind == "water": return 1 + rank("minecraft:bucket@0") + raise ValueError(kind) + + def snapshot(self): + return self.stock.copy(), len(self.actions), self.tools.copy(), self.trade_uses.copy() + + def restore(self, snapshot): + self.stock, action_count, self.tools, self.trade_uses = snapshot + del self.actions[action_count:] + + def take(self, item, count=1, path=()): + if count <= 0: + raise ValueError("Non-positive debit") + self.ensure(item, count + self.reserved.get(item, 0), path) + self.stock[item] -= count + + def ensure(self, item, count=1, path=()): + self.attempts += 1 + if self.attempts > 100000: + raise RuntimeError("Planner search budget exhausted; do not claim unreachable") + if self.stock[item] >= count: + return + if item not in self.ranks: + raise Unobtainable("No resource-rooted route for " + item) + if item in path or len(path) > 40: + raise Unobtainable("Cyclic or excessively deep prerequisite: " + item) + path = (*path, item) + while self.stock[item] < count: + success = False + # Prefer an already available input, then short non-recycling paths. + routes = sorted(self.routes[item], key=lambda r: self.cost(r)) + for route in routes: + before = self.snapshot() + try: + self.produce(item, route, path) + success = True + break + except Unobtainable: + self.restore(before) + if not success: + raise Unobtainable("No finite route for " + item) + + def cost(self, route): + row, kind = route["recipe"], route["kind"] + if kind == "trade": return (self.route_rank(route), 0, 0) + if kind == "water": return (self.route_rank(route), 0, 1) + if kind in ("smelt", "crush"): + return (self.route_rank(route), 0 if self.stock[row["input"]] else 2, 1 if kind == "smelt" else 2) + cells = row.get("providers", [[x] if x else [] for x in row["inputs"]]) + return (self.route_rank(route), sum(not any(self.stock[concrete(x)] for x in choices) for choices in cells if choices), len(cells)) + + def produce(self, item, route, path): + row, kind = route["recipe"], route["kind"] + action = dict(kind=kind, output=item, count=row["count"]) + if kind == "craft": + selected = [] + for choices in row.get("providers", [[x] if x else [] for x in row["inputs"]]): + if not choices: + selected.append(None) + continue + candidate = None + for choice in sorted(dict.fromkeys(map(concrete, choices)), key=lambda x: (not bool(self.stock[x]), self.ranks.get(x,1000000))): + before = self.snapshot() + try: + self.take(choice, path=path) + candidate = choice + break + except Unobtainable: + self.restore(before) + if candidate is None: + raise Unobtainable("Missing ingredient for " + item) + selected.append(candidate) + action.update(recipe=row["id"], inputs=selected, width=row["width"]) + # Independent policy: a water-bucket ingredient returns exactly one EMPTY bucket. + buckets = selected.count("minecraft:water_bucket@0") + if buckets: + self.stock["minecraft:bucket@0"] += buckets + action["emptyBucketsReturned"] = buckets + elif kind == "smelt": + self.ensure("minecraft:furnace@0", path=path) + self.take(row["input"], path=path) + self.take("minecraft:coal@0", path=path) + action.update(input=row["input"], fuel="minecraft:coal@0") + elif kind == "crush": + self.take(row["input"], path=path) + tool = None + for candidate in sorted(row["tools"], key=lambda x: (not bool(self.stock[x]), "iron_crackhammer" not in x)): + before = self.snapshot() + try: + if not self.tools[candidate]: + self.ensure(candidate, 1, path) + self.tools[candidate] += self.doc["economy"]["toolDurability"][candidate] + 1 + tool = candidate + break + except Unobtainable: + self.restore(before) + if tool is None: raise Unobtainable("No obtainable crushing tool for " + item) + self.tools[tool] -= 1 + if not self.tools[tool]: self.stock[tool] -= 1 + action.update(input=row["input"], tool=tool) + action["toolBreaks"] = not bool(self.tools[tool]) + elif kind == "trade": + if self.trade_uses[row["id"]] >= row["maxUses"]: + raise Unobtainable("Offer exhausted; restocking is not assumed") + self.take(row["input"], row["price"], path) + if row.get("secondInput"): self.take(row["secondInput"], row["secondPrice"], path) + self.trade_uses[row["id"]] += 1 + action.update(trade=row) + elif kind == "water": + self.take("minecraft:bucket@0", path=path) + action["input"] = "minecraft:bucket@0" + else: raise ValueError(kind) + self.stock[item] += row["count"] + self.actions.append(action) + + +def raw_budget(doc): + # Harvested resources, not ingots, machine parts, tools, or free energy. + names = ("log", "sapling", "cobblestone", "coal", "iron_ore", "gold_ore", "sand", "clay_ball", + "gravel", "redstone", "diamond", "emerald", "obsidian", "potato", "wheat", "reeds", + "gunpowder", "flint", "leather", "string", "feather", "quartz", "bone", "cactus", "dirt") + stock = {"minecraft:"+name+"@0": 2048 for name in names} + for ore in ("oreCopper", "oreTin", "oreZinc", "oreLead", "oreNickel", "oreSilver", "oreLithium", "oreSulfur"): + for token in doc["ores"].get(ore, []): + token = concrete(token) + if token in doc["blockItems"]: stock[token] = 2048 + return stock + + +STARTER = ("minecraft:bucket@0", "basemetals:iron_crackhammer@0", "basepower:sprocket@0", + "basepower:fluid_pipe@0", "basepower:still@0", "basesteam:steam_governor@0", + "basesteam:steam_pipe@0", "basesteam:steam_boiler_coal@0", "basesteam:steam_furnace@0", + "baseelectric:electric_conduit@0", "baseelectric:psu@0", "baseelectric:hydroelectric_generator@0", + "baseelectric:plastic_refinery@0", "baseelectric:lead_acid_battery@0", + "baseelectric:nickel_hydride_battery@0") + + +def plan(doc): + planner = Planner(doc, raw_budget(doc), allow_trades=doc["mode"] == "APOCALYPTIC") + planner.ensure("minecraft:crafting_table@0") + for item in STARTER: + planner.ensure(item) + if doc["mode"] != "APOCALYPTIC": planner.ensure("baseelectric:photovoltaic_generator@0") + coverage = {} + for target in doc["targets"]: + if target in EXCLUSIONS: + coverage[target] = dict(status="EXCLUDED", reason=EXCLUSIONS[target]) + elif target == "baseelectric:petrolplastic_ingot@0": + coverage[target] = dict(status="LIVE_MACHINE_REQUIRED") + elif target == "baseelectric:photovoltaic_generator@0" and doc["mode"] == "APOCALYPTIC": + coverage[target] = dict(status="EXCLUDED", reason="Intentional Apocalyptic restriction") + else: + before = planner.snapshot() + try: + planner.ensure(target) + coverage[target] = dict(status="NATIVE_REPLAY_REQUIRED") + except Unobtainable as error: + planner.restore(before) + coverage[target] = dict(status="NO_FINITE_ROUTE", reason=str(error)) + # Two water packets for the boiler/stream, plus an empty bucket for crude oil. + planner.reserved.update({item: 1 for item in STARTER}) + for item in STARTER: + planner.ensure(item) + planner.ensure("minecraft:bucket@0", 1) + return dict(schema=1, mode=doc["mode"], rubber=doc["rubber"], initial=planner.initial, + actions=planner.actions, expectedStock={k:v for k,v in planner.stock.items() if v}, + checkpoints=list(STARTER), coverage=coverage, + uncreditedTrades=planner.uncredited_trades, + scope="FINITE_HARVESTED_RESOURCE_BUDGET; NATIVE_REPLAY_REQUIRED; NOT_MINING_OR_VILLAGER_LEVELING") diff --git a/test-rig/migration/test_audit_survival110.py b/test-rig/migration/test_audit_survival110.py new file mode 100644 index 0000000..ab851bc --- /dev/null +++ b/test-rig/migration/test_audit_survival110.py @@ -0,0 +1,62 @@ +"""Synthetic negative controls for the independent evidence audit only.""" +import base64 +from copy import deepcopy +import io +import unittest +import nbtlib +from audit_survival110 import audit_case, audit + +TOOL="basemetals:iron_crackhammer@0" + + +def tool(damage): + tag=nbtlib.File({"id":nbtlib.String(TOOL.split('@')[0]),"Count":nbtlib.Byte(1),"Damage":nbtlib.Short(damage)}) + buffer=io.BytesIO();tag.write(buffer) + return [base64.b64encode(buffer.getvalue()).decode("ascii")] + + +def fixture(): + def row(kind,output,**extra):return dict(status="PASS",kind=kind,output=output,**extra) + first=[row("craft",TOOL,before={},after={TOOL:1}),row("crush","powder",before={TOOL:1}), + row("trade","gear",offer="test-offer",usesAfter=1)] + second=[row("crush","powder",before={TOOL:1}),row("trade","gear",offer="test-offer",usesAfter=2)] + return dict(status="PASS",actions=5,economy=dict(toolDurability={TOOL:100},trades=[dict(id="test-offer",maxUses=7)]), + coverage={TOOL:dict(status="NATIVE_OBTAINED_FINITE_STOCK")},phaseReports={ + "first":dict(actions=first,initialStock={},stockTyped=tool(1)), + "continue":dict(actions=second,resumedStockTyped=tool(1),stockTyped=tool(2)), + "resume":dict(status="PASS",stockTyped=tool(2),maximumSteamFurnaceTemperature=1200), + "inspect":dict(status="PASS",stockTyped=tool(2))}) + + +class IndependentAuditTests(unittest.TestCase): + def test_valid_typed_wear_and_cross_restart_offer_uses(self): + result=audit_case(fixture());self.assertEqual(2,result["trades"]);self.assertEqual(2,result["hammerCrushes"]) + + def test_tool_damage_reset_fails_even_when_cold_counts_agree(self): + data=fixture();data["phaseReports"]["first"]["stockTyped"]=tool(0) + data["phaseReports"]["continue"]["resumedStockTyped"]=tool(0) + with self.assertRaisesRegex(AssertionError,"damage"):audit_case(data) + + def test_free_merchant_restock_after_restart_is_rejected(self): + data=fixture();data["phaseReports"]["continue"]["actions"][-1]["usesAfter"]=1 + with self.assertRaisesRegex(AssertionError,"Merchant"):audit_case(data) + + def test_unwitnessed_component_cannot_be_marked_available(self): + data=fixture();data["coverage"]["free-machine"]=dict(status="NATIVE_OBTAINED_FINITE_STOCK") + with self.assertRaisesRegex(AssertionError,"credited"):audit_case(data) + + def test_missing_action_or_changed_final_state_is_rejected(self): + data=fixture();data["phaseReports"]["first"]["actions"].pop() + with self.assertRaisesRegex(AssertionError,"coverage"):audit_case(data) + data=fixture();data["phaseReports"]["inspect"]["stockTyped"]=tool(0) + with self.assertRaisesRegex(AssertionError,"Final cold"):audit_case(data) + + def test_new_unreachable_item_cannot_hide_in_historical_gap(self): + data=fixture();data["coverage"]["needed-machine"]=dict(status="NO_FINITE_ROUTE") + with self.assertRaisesRegex(AssertionError,"gap"):audit_case(data) + + def test_incomplete_matrix_cannot_qualify(self): + with self.assertRaisesRegex(AssertionError,"six"):audit(dict(status="PASS",protocolUnchanged=True,manifestUnchanged=True,cases={})) + + +if __name__=="__main__":unittest.main() diff --git a/test-rig/migration/test_native110_harvest.py b/test-rig/migration/test_native110_harvest.py index 24453ed..27d01ad 100644 --- a/test-rig/migration/test_native110_harvest.py +++ b/test-rig/migration/test_native110_harvest.py @@ -161,7 +161,7 @@ def test_cleanup_negative_counts_bad_sequence_and_bool_timestamps_fail(self): def test_wrong_tool_cannot_hide_unexpected_live_drop(self): document=sample() row(document,"lithium/wood-fails")["dropEvidence"][0]["actualDrops"] = [ - dict(entityId=99999,uuid=str(UUID(int=99999)),item="electricadvantage:li_ore", + dict(entityId=99999,uuid=str(UUID(int=99999)),item="baseelectric:li_ore", count=1,damage=0,tagged=False,removed=False,x=1200.5,y=8.5,z=1024.5)] with self.assertRaises(AssertionError): native.require_isolation(document) @@ -185,8 +185,8 @@ def test_java_observes_native_survival_and_real_unfiltered_item_identities(self) self.assertIn(literal,source) self.assertNotIn(".getDrops(",source) self.assertNotIn("import com.mcmoddev",source) - self.assertNotIn("import zone.moddev.mc.electricadvantage",source) - self.assertNotIn("import zone.moddev.mc.steamadvantage",source) + self.assertNotIn("import zone.moddev.mc.baseelectric",source) + self.assertNotIn("import zone.moddev.mc.basesteam",source) def test_runner_enforces_code_custody_before_boot_without_editing_shared_helpers(self): source=Path(native.__file__).read_text() diff --git a/test-rig/migration/test_native110_rebrand_bucket_proof.py b/test-rig/migration/test_native110_rebrand_bucket_proof.py new file mode 100644 index 0000000..cb7d7db --- /dev/null +++ b/test-rig/migration/test_native110_rebrand_bucket_proof.py @@ -0,0 +1,98 @@ +"""Synthetic four-boot permit rejection controls; no server or artifact mutation.""" +import copy +import unittest +from pathlib import Path +from unittest.mock import patch + +import native110_rebrand_bucket_proof as proof + + +NOTICE = "[12:34:56] [Server thread/ERROR] [FML]: Trying to activate the universal filled bucket too late. Call it statically in your Mods class. Mod: Base Metals" + + +def boots(): + return [dict(label=label, status="PASS_BOOT", exitCode=0, + diagnostic=dict(originalSeverity="ERROR", message=NOTICE)) for label in proof.BOOT_LABELS] + + +def role(): + return dict(status="PASS", operationCases=3, exactColdCases=3, + startupFlags={"operate": {}, "restart": {}}) + + +class FreshRebrandBucketProofTest(unittest.TestCase): + def test_four_complete_boots_and_three_real_bucket_cold_cases_are_required(self): + proof.require_four_boots(boots(), role()) + for mutation in ("missing", "duplicate", "unknown", "exit", "bool-exit", "changed-line", "wrong-mod", "missing-oil", "missing-cold"): + observed, validated = boots(), role() + if mutation == "missing": observed.pop() + elif mutation == "duplicate": observed[-1] = copy.deepcopy(observed[0]) + elif mutation == "unknown": observed[0]["label"] = "old-proof" + elif mutation == "exit": observed[0]["exitCode"] = 1 + elif mutation == "bool-exit": observed[0]["exitCode"] = False + elif mutation == "changed-line": observed[0]["diagnostic"]["message"] += " " + elif mutation == "wrong-mod": observed[0]["diagnostic"]["message"] = NOTICE.replace("Base Metals", "basePower") + elif mutation == "missing-oil": validated["operationCases"] = 2 + else: validated["exactColdCases"] = 2 + with self.subTest(mutation=mutation), self.assertRaises(AssertionError): + proof.require_four_boots(observed, validated) + + def test_an_old_pass_or_a_changed_full_candidate_never_binds(self): + candidate = dict(manifestSha256="a" * 64, mods=[dict(id=id, sha256=id, version="v", runtimeVersion="v") + for id in sorted(proof.TARGET_IDS)], codeInventory={"files": {"engine": "sealed"}}) + doc = dict(kind=proof.KIND, status="PASS", candidate=candidate) + proof.bind_candidate(doc, candidate) + for mutation in ("old-proof", "manifest", "power", "steam", "electric", "harness", "base", "ore", "engine"): + changed = copy.deepcopy(candidate) + document = copy.deepcopy(doc) + if mutation == "old-proof": document["kind"] = "historical-legacy-bucket-proof" + elif mutation == "manifest": changed["manifestSha256"] = "b" * 64 + elif mutation == "engine": changed["codeInventory"]["files"]["engine"] = "changed" + else: + id = {"power": "basepower", "steam": "basesteam", "electric": "baseelectric", "harness": "advantageworkstest", "base": "basemetals", "ore": "orespawn"}[mutation] + next(m for m in changed["mods"] if m["id"] == id)["sha256"] = "changed" + with self.subTest(mutation=mutation), self.assertRaises(AssertionError): proof.bind_candidate(document, changed) + + def test_exact_line_is_pending_until_the_whole_fresh_campaign_passes(self): + lines = ["Starting minecraft server version 1.10.2", "Forge Mod Loader version 12.18.3.2511 for Minecraft 1.10.2 loading", NOTICE] + self.assertEqual("PENDING_DIAGNOSTIC_PROOF", proof.legacy.held_diagnostics(lines, proof.legacy.BASE_SHA, proof.legacy.PUBLIC_FORGE_SHA)["status"]) + for bad in (lines + [NOTICE], lines + ["[12:34:57] [Server thread/ERROR] [FML]: Other failure"], lines[:-1]): + with self.assertRaises(AssertionError): proof.legacy.held_diagnostics(bad, proof.legacy.BASE_SHA, proof.legacy.PUBLIC_FORGE_SHA) + + def test_baseline_mod_inventory_cannot_contain_a_harness_or_power(self): + proof.require_baseline_mods({"basemetals": "2.4.0", "orespawn": "4.0.8.110021", "Forge": "12.18.3.2511"}, + {"basemetals": "2.4.0", "orespawn": "4.0.8.110021"}) + for extra in ("basepower", "advantageworkstest", "unknown"): + with self.subTest(extra=extra), self.assertRaises(AssertionError): + proof.require_baseline_mods({"basemetals": "2.4.0", "orespawn": "4.0.8.110021", extra: "v"}, + {"basemetals": "2.4.0", "orespawn": "4.0.8.110021"}) + + def test_first_strict_failure_is_required_and_cannot_be_a_preservation_failure(self): + candidate = dict(manifestSha256="a" * 64) + failed = dict(status="FAIL", targetManifestSha256="a" * 64, + failure="Native runtime diagnostic at line 123: " + NOTICE) + with patch.object(proof, "digest", return_value="B" * 64), patch.object(proof.legacy, "read", return_value=failed): + proof.require_strict_failure(Path("strict.json"), "b" * 64, candidate) + for field, value in (("status", "PASS"), ("targetManifestSha256", "c" * 64), + ("failure", "Unticked imported state changed"), + ("failure", "Native runtime diagnostic at line 123: " + NOTICE.replace("Base Metals", "Other Mod"))): + bad = copy.deepcopy(failed) + bad[field] = value + with self.subTest(field=field, value=value), patch.object(proof.legacy, "read", return_value=bad), self.assertRaises(AssertionError): + proof.require_strict_failure(Path("strict.json"), "b" * 64, candidate) + with self.assertRaises(AssertionError): proof.require_strict_failure(Path("strict.json"), "changed", candidate) + + def test_each_mode_requires_its_exact_original_observer_with_no_other_extra(self): + candidate = dict(mods=[dict(path="core.jar", sha256="core")]) + for mode in ("connected", "passive-source355", "synthetic-nested"): + correct = {"core.jar": "core", "observer.jar": proof.observer_sha(mode)} + proof.require_destination_inventory(correct, candidate, mode) + for bad in ({"core.jar": "core"}, {**correct, "extra.jar": "unexpected"}, + {"core.jar": "core", "observer.jar": "changed"}, + {**correct, "core.jar": "changed"}): + with self.subTest(mode=mode, bad=bad), self.assertRaises(AssertionError): + proof.require_destination_inventory(bad, candidate, mode) + with self.assertRaises(AssertionError): proof.observer_sha("unknown") + + +if __name__ == "__main__": unittest.main() diff --git a/test-rig/migration/test_native110_rebrand_connected.py b/test-rig/migration/test_native110_rebrand_connected.py new file mode 100644 index 0000000..12b5b07 --- /dev/null +++ b/test-rig/migration/test_native110_rebrand_connected.py @@ -0,0 +1,104 @@ +"""Pure rejection controls, not Minecraft migration evidence.""" +import base64 +import copy +import gzip +import io +import unittest + +import nbtlib + +import native110_rebrand_connected as rebrand + + +def snapshot(namespace): + tag = nbtlib.parse_nbt('{id:"' + namespace + '.steam_furnace",Energy:[I;1065353216],' + 'Items:[{Slot:0b,id:"' + ("electricadvantage" if namespace == "steamadvantage" else "baseelectric") + + ':lithium_battery",Count:1b,tag:{energy:123.5f,CustomName:"electricadvantage:keep"}}]}') + data = io.BytesIO() + nbtlib.File(tag).write(data) + return dict(held=True, buildCallsThisProcess=0, advancedTicks=0, requestedTicks=0, + snapshot=[dict(id="furnace", station="C-STEAM", kind="furnace", name="steamadvantage:steam_furnace", + actualName=namespace + ":steam_furnace", x=80, y=80, z=80, properties={"facing": "north"}, + nbtBase64=base64.b64encode(gzip.compress(data.getvalue())).decode("ascii"))]) + + +def change_nbt(document, change): + row = document["snapshot"][0] + tag = rebrand.binary_nbt(row) + change(tag) + row["nbtBase64"] = rebrand.encode_nbt(tag) + + +class RebrandPreservationTest(unittest.TestCase): + def test_exact_namespace_only_change_passes_without_mutating_documents(self): + old, new = snapshot("steamadvantage"), snapshot("basesteam") + untouched = copy.deepcopy((old, new)) + self.assertEqual("PASS", rebrand.preservation(old, new)["status"]) + self.assertEqual(untouched, (old, new)) + self.assertEqual("PASS", rebrand.preservation(new, new)["status"]) + + def test_removed_item_wrong_facing_and_lost_energy_fail(self): + for mutation in ("item", "facing", "energy", "type", "extra", "custom", "old-id", "missing-tile"): + old, new = snapshot("steamadvantage"), snapshot("basesteam") + if mutation == "item": change_nbt(new, lambda tag: tag["Items"].clear()) + elif mutation == "facing": new["snapshot"][0]["properties"]["facing"] = "south" + elif mutation == "energy": change_nbt(new, lambda tag: tag.__setitem__("Energy", nbtlib.IntArray([0]))) + elif mutation == "type": change_nbt(new, lambda tag: tag["Items"][0].__setitem__("Count", nbtlib.Int(1))) + elif mutation == "extra": change_nbt(new, lambda tag: tag.__setitem__("HiddenEnergy", nbtlib.Int(1))) + elif mutation == "custom": change_nbt(new, lambda tag: tag["Items"][0]["tag"].__setitem__("CustomName", nbtlib.String("baseelectric:keep"))) + elif mutation == "old-id": new["snapshot"][0]["actualName"] = "steamadvantage:steam_furnace" + else: new["snapshot"][0].pop("nbtBase64") + with self.subTest(mutation=mutation): + self.assertEqual("FAIL", rebrand.preservation(old, new)["status"]) + + def test_unticked_means_frozen_zero_builds_and_zero_ticks(self): + for field, value in (("held", False), ("advancedTicks", 1), ("requestedTicks", 1), ("buildCallsThisProcess", 1)): + new = snapshot("basesteam") + new[field] = value + with self.subTest(field=field), self.assertRaises(AssertionError): + rebrand.require_passive(new) + + def test_missing_extra_duplicate_and_moved_witnesses_fail(self): + for mutation in ("missing", "extra", "duplicate", "moved"): + old, new = snapshot("steamadvantage"), snapshot("basesteam") + if mutation == "missing": new["snapshot"].clear() + elif mutation == "moved": new["snapshot"][0]["x"] += 1 + else: + row = copy.deepcopy(new["snapshot"][0]) + if mutation == "extra": row["id"] = "extra" + new["snapshot"].append(row) + with self.subTest(mutation=mutation): + if mutation == "duplicate": + with self.assertRaises(AssertionError): rebrand.preservation(old, new) + else: self.assertEqual("FAIL", rebrand.preservation(old, new)["status"]) + + def test_only_exact_namespace_boundaries_are_translated(self): + self.assertEqual("basepower:still", rebrand.target_id("poweradvantage:still")) + for value in ("other:poweradvantage", "poweradvantage_extra:still", "custom poweradvantage:still"): + self.assertEqual(value, rebrand.target_id(value)) + + def test_electric_drill_does_not_invent_a_saved_facing_field(self): + old, new = snapshot("steamadvantage"), snapshot("basesteam") + for document, namespace in ((old, "electricadvantage"), (new, "baseelectric")): + document["snapshot"][0].update(name="electricadvantage:electric_drill", + actualName=namespace + ":electric_drill", kind="drill") + change_nbt(document, lambda tag: tag.__setitem__("id", nbtlib.String(namespace + ".electric_drill"))) + change_nbt(document, lambda tag: tag.__setitem__("progress", nbtlib.Short(209))) + self.assertEqual("PASS", rebrand.preservation(old, new)["status"]) + change_nbt(new, lambda tag: tag.__setitem__("Facing", nbtlib.Byte(2))) + self.assertEqual("FAIL", rebrand.preservation(old, new)["status"]) + + def test_only_steam_legacy_facing_is_derived_from_the_actual_block_state(self): + old, new = snapshot("steamadvantage"), snapshot("basesteam") + for document, namespace in ((old, "steamadvantage"), (new, "basesteam")): + document["snapshot"][0].update(name="steamadvantage:steam_drill", + actualName=namespace + ":steam_drill", kind="drill") + change_nbt(document, lambda tag: tag.__setitem__("id", nbtlib.String(namespace + ".steam_drill"))) + change_nbt(new, lambda tag: tag.__setitem__("Facing", nbtlib.Byte(2))) + self.assertEqual("PASS", rebrand.preservation(old, new)["status"]) + change_nbt(new, lambda tag: tag.__setitem__("Facing", nbtlib.Byte(3))) + self.assertEqual("FAIL", rebrand.preservation(old, new)["status"]) + + +if __name__ == "__main__": + unittest.main() diff --git a/test-rig/migration/test_native110_rebrand_passive.py b/test-rig/migration/test_native110_rebrand_passive.py new file mode 100644 index 0000000..ee5ad82 --- /dev/null +++ b/test-rig/migration/test_native110_rebrand_passive.py @@ -0,0 +1,137 @@ +"""Synthetic oracle rejection tests, never labelled authentic fixture evidence.""" +import copy +import unittest +from pathlib import Path +from unittest.mock import patch + +import nbtlib + +from native110_rebrand_connected import encode_nbt +import native110_rebrand_passive as passive + + +def rows(namespace="steamadvantage", enchantment_id=11): + result = [] + for index in range(355): + tag = nbtlib.parse_nbt('{id:"' + namespace + '.steam_furnace",Energy:[I;1065353216],Items:[{Slot:0b,id:"' + + namespace + ':musket",Count:1b,Damage:5s,tag:{MigrationWitness:"steamadvantage:musket",' + + 'ench:[{id:' + str(enchantment_id) + 's,lvl:1s}],Nested:{Bytes:[B;1b,-2b],Ints:[I;3,-7]}}}]}') + result.append(dict(x=index, y=80, z=0, name="steamadvantage:steam_furnace", metadata=2, + actualName=namespace + ":steam_furnace", properties={"facing": "north"}, nbtBase64=encode_nbt(nbtlib.File(tag)))) + return result + + +class Passive355Test(unittest.TestCase): + def compare(self, old, new, target_registry=None): + return passive.compare_rows(old, new, {11: "steamadvantage:recoil"}, target_registry or {47: "steamadvantage:recoil"}) + + def test_exact_namespace_translation_and_enchantment_semantics_pass_without_mutation(self): + old, new = rows(), rows("basesteam", 47) + untouched = copy.deepcopy((old, new)) + self.assertEqual("PASS", self.compare(old, new)["status"]) + self.assertEqual(untouched, (old, new)) + + def test_missing_extra_duplicate_moved_meta_facing_and_wrong_namespace_fail(self): + for mutation in ("missing", "extra", "duplicate", "moved", "meta", "facing", "old-id"): + old, new = rows(), rows("basesteam", 47) + if mutation == "missing": new.pop() + elif mutation == "extra": new.append(copy.deepcopy(new[-1])) + elif mutation == "duplicate": new[-1] = copy.deepcopy(new[0]) + elif mutation == "moved": new[-1]["x"] += 1000 + elif mutation == "meta": new[-1]["metadata"] = 3 + elif mutation == "facing": new[-1]["properties"]["facing"] = "south" + else: new[-1]["actualName"] = "steamadvantage:steam_furnace" + with self.subTest(mutation=mutation), self.assertRaises(AssertionError): self.compare(old, new) + + def test_removed_item_lost_energy_changed_type_enchantment_and_extra_key_fail(self): + for mutation in ("item", "energy", "type", "level", "enchantment", "extra", "custom"): + old, new = rows(), rows("basesteam", 47) + tag = passive.binary_nbt(new[-1]) + if mutation == "item": tag["Items"].clear() + elif mutation == "energy": tag["Energy"] = nbtlib.IntArray([0]) + elif mutation == "type": tag["Items"][0]["Count"] = nbtlib.Int(1) + elif mutation == "level": tag["Items"][0]["tag"]["ench"][0]["lvl"] = nbtlib.Short(2) + elif mutation == "enchantment": tag["Items"][0]["tag"]["ench"][0]["id"] = nbtlib.Short(48) + elif mutation == "extra": tag["HiddenEnergy"] = nbtlib.Int(1) + else: tag["Items"][0]["tag"]["MigrationWitness"] = nbtlib.String("basesteam:musket") + new[-1]["nbtBase64"] = encode_nbt(tag) + with self.subTest(mutation=mutation), self.assertRaises(AssertionError): self.compare(old, new) + + def test_equal_numeric_ids_do_not_hide_an_incorrect_registry_semantic(self): + with self.assertRaises(AssertionError): + self.compare(rows(), rows("basesteam", 11), {11: "steamadvantage:powderless"}) + + def test_retained_canonical_enchantments_must_not_be_renamed_in_the_target(self): + with self.assertRaises(AssertionError): + self.compare(rows(), rows("basesteam", 47), {47: "basesteam:recoil"}) + + def test_only_steam_derives_exact_typed_facing_from_original_metadata(self): + old, new = rows(), rows("basesteam", 47) + for meta, facing in enumerate(("down", "up", "north", "south", "west", "east")): + for collection, namespace in ((old, "steamadvantage"), (new, "basesteam")): + row = collection[meta] + row.update(name="steamadvantage:steam_drill", actualName=namespace + ":steam_drill", metadata=meta, + properties={"facing": facing}) + tag = passive.binary_nbt(row) + tag["id"] = nbtlib.String(namespace + ".steam_drill") + if collection is new: tag["Facing"] = nbtlib.Byte(meta) + row["nbtBase64"] = encode_nbt(tag) + self.assertEqual("PASS", self.compare(old, new)["status"]) + for mutation in ("wrong-facing", "wrong-type", "foreign-key", "metadata-disagreement"): + damaged = copy.deepcopy(new) + source = copy.deepcopy(old) + tag = passive.binary_nbt(damaged[2]) + if mutation == "wrong-facing": tag["Facing"] = nbtlib.Byte(3) + elif mutation == "wrong-type": tag["Facing"] = nbtlib.Int(2) + elif mutation == "foreign-key": tag["ForeignState"] = nbtlib.Int(1) + else: source[2]["properties"]["facing"] = "south" + damaged[2]["nbtBase64"] = encode_nbt(tag) + with self.subTest(mutation=mutation), self.assertRaises(AssertionError): self.compare(source, damaged) + + def test_electric_missing_facing_stays_absent_and_extra_target_facing_fails(self): + old, new = rows(), rows("basesteam", 47) + for collection, namespace in ((old, "electricadvantage"), (new, "baseelectric")): + row = collection[0] + row.update(name="electricadvantage:electric_drill", actualName=namespace + ":electric_drill") + tag = passive.binary_nbt(row) + tag["id"] = nbtlib.String(namespace + ".electric_drill") + row["nbtBase64"] = encode_nbt(tag) + self.assertEqual("PASS", self.compare(old, new)["status"]) + tag = passive.binary_nbt(new[0]); tag["Facing"] = nbtlib.Byte(2) + new[0]["nbtBase64"] = encode_nbt(tag) + with self.assertRaises(AssertionError): self.compare(old, new) + + def test_observer_has_no_state_repair_or_construction_path(self): + java = (Path(passive.__file__).parents[1] / "src/main/java/zone/moddev/mc/advantageworks/NativePassiveMigrationProbe.java").read_text() + for forbidden in ("readFromNBT", "setBlockState", "setInventorySlotContents", "markDirty", "build(", "addEnchantment"): + self.assertNotIn(forbidden, java) + self.assertIn("tile.writeToNBT(new NBTTagCompound())", java) + + def test_synthetic_station_cannot_be_accepted_as_authentic_player_evidence(self): + with self.assertRaises(AssertionError): passive.validate_nested({"scope": passive.AUTHENTIC_SCOPE, "cases": []}) + + def test_synthetic_xp_seed_remains_exact_and_typed_not_ignored(self): + tag = nbtlib.File(nbtlib.parse_nbt('{XpSeed:305441741,Inventory:[],EnderItems:[]}')) + encoded = encode_nbt(tag) + document = dict(scope=passive.SYNTHETIC_SCOPE, status="PASS", worldInsertions=0, playerFileWrites=0, + cases=[dict(id=case, status="PASS", nativeSemantics=True, inputNbtBase64=encoded, + expectedNbtBase64=encoded, actualNbtBase64=encoded) for case in sorted(passive.SYNTHETIC_CASES)]) + self.assertEqual("PASS", passive.validate_nested(document)["status"]) + for value in (nbtlib.Int(305441742), nbtlib.Long(305441741)): + bad = copy.deepcopy(document) + actual = nbtlib.File(nbtlib.parse_nbt('{XpSeed:305441741,Inventory:[],EnderItems:[]}')) + actual["XpSeed"] = value + bad["cases"][0]["actualNbtBase64"] = encode_nbt(actual) + with self.subTest(value=type(value).__name__), self.assertRaises(AssertionError): passive.validate_nested(bad) + + def test_only_the_exact_original_observer_is_allowed_and_legacy_commands_are_forbidden(self): + expected = passive.SOURCE_JARS["AdvantageMigrationProbe-110-1.0.0.jar"] + with patch.object(passive, "digest", return_value=expected): + self.assertEqual(Path("fixture/mods/AdvantageMigrationProbe-110-1.0.0.jar"), passive.source_observer(Path("fixture"))) + with patch.object(passive, "digest", return_value="changed"), self.assertRaises(AssertionError): + passive.source_observer(Path("fixture")) + for command in ("advprobe build source", "advprobe snapshot source", "setblock 0 80 0 stone", "advconnected build source"): + with self.subTest(command=command), self.assertRaises(AssertionError): passive.PassiveServer.send(None, command) + + +if __name__ == "__main__": unittest.main() diff --git a/test-rig/migration/test_native110_recipe_progression.py b/test-rig/migration/test_native110_recipe_progression.py index 4eb1509..ce3c128 100644 --- a/test-rig/migration/test_native110_recipe_progression.py +++ b/test-rig/migration/test_native110_recipe_progression.py @@ -7,32 +7,32 @@ def fixture(mode="NORMAL"): rows=[] ores={"ingotIron":["minecraft:iron_ingot@0"], - "ingotSilicon":["electricadvantage:silicon_ingot@0"], + "ingotSilicon":["baseelectric:silicon_ingot@0"], "nuggetCopper":["basemetals:copper_nugget@0"], "nuggetTin":["basemetals:tin_nugget@0"], "nuggetGold":["minecraft:gold_nugget@0"], - "plastic":["poweradvantage:plastic@0"],"dustRedstone":["minecraft:redstone@0"]} + "plastic":["basepower:plastic@0"],"dustRedstone":["minecraft:redstone@0"]} def recipe(output,inputs,count=1): rows.append(dict(id="craft/"+str(len(rows)),output=output,inputs=inputs,count=count, providers=[[item] for item in inputs], actualCrafted=output,actualCraftedCount=count, status="PASS",owned=True,negativeControlsRejected=2,consumption="NATIVE_SLOT_CRAFTING", recipeBookCraftUnlock="N/A_NO_1_10_RECIPE_BOOK")) - recipe("poweradvantage:fluid_pipe@0",["minecraft:iron_ingot@0"]*6,3 if mode=="APOCALYPTIC" else 6) - recipe("steamadvantage:steam_governor@0",["minecraft:iron_nugget@0"]) - recipe("electricadvantage:psu@0",["electricadvantage:control_circuit@0"]) + recipe("basepower:fluid_pipe@0",["minecraft:iron_ingot@0"]*6,3 if mode=="APOCALYPTIC" else 6) + recipe("basesteam:steam_governor@0",["minecraft:iron_nugget@0"]) + recipe("baseelectric:psu@0",["baseelectric:control_circuit@0"]) if mode!="APOCALYPTIC": - recipe("poweradvantage:sprocket@0",["basemetals:steel_ingot@0"],4) + recipe("basepower:sprocket@0",["basemetals:steel_ingot@0"],4) for metal in ("Copper","Tin","Gold"): inputs=[ores["ingotSilicon"][0]]*3+[ores["nugget"+metal][0]]*3 if mode=="TECH_PROGRESSION": inputs=[ores["plastic"][0],ores["dustRedstone"][0],ores["plastic"][0]]+inputs - recipe("electricadvantage:integrated_circuit@0",inputs,3) - recipe("electricadvantage:photovoltaic_generator@0",["minecraft:glass@0"]) + recipe("baseelectric:integrated_circuit@0",inputs,3) + recipe("baseelectric:photovoltaic_generator@0",["minecraft:glass@0"]) return dict(minecraft=native.MC,mode=mode,rubber=True,status="EXPORTED_NOT_QUALIFIED",crafting=rows, targets=sorted(native.CORE),ores=ores, blockItems=[],smelting=[dict(input="minecraft:iron_ore@0",output="minecraft:iron_ingot@0",count=1)], - crusherRegistry="unit:fixture",crushing=[dict(input="minecraft:potato@0",output="poweradvantage:starch@0",tools=[])],sampledNativeLoot=[]) + crusherRegistry="unit:fixture",crushing=[dict(input="minecraft:potato@0",output="basepower:starch@0",tools=[])],sampledNativeLoot=[]) class RecipeAuditTests(unittest.TestCase): def test_missing_process_functions_and_lookup_errors_remain_required_failures(self): @@ -64,7 +64,7 @@ def test_missing_core_or_duplicate_recipe_cannot_qualify(self): with self.assertRaises(AssertionError): native.mode_checks(doc,"NORMAL",True) def test_apocalyptic_does_not_gain_free_chips_sprockets_or_solar(self): - for target in ("poweradvantage:sprocket@0","electricadvantage:integrated_circuit@0","electricadvantage:photovoltaic_generator@0"): + for target in ("basepower:sprocket@0","baseelectric:integrated_circuit@0","baseelectric:photovoltaic_generator@0"): doc=fixture("APOCALYPTIC") extra=deepcopy(doc["crafting"][0]);extra.update(id="forbidden",output=target);doc["crafting"].append(extra) with self.subTest(target=target),self.assertRaises(AssertionError): native.mode_checks(doc,"APOCALYPTIC",True) @@ -74,13 +74,13 @@ def test_pipe_yields_and_tech_chip_complexity_remain_strict(self): doc=fixture(mode);doc["crafting"][0]["count"]=99 with self.subTest(mode=mode),self.assertRaises(AssertionError):native.mode_checks(doc,mode,True) doc=fixture("TECH_PROGRESSION") - next(r for r in doc["crafting"] if r["output"]=="electricadvantage:integrated_circuit@0")["inputs"]=["minecraft:dirt@0"]*6 + next(r for r in doc["crafting"] if r["output"]=="baseelectric:integrated_circuit@0")["inputs"]=["minecraft:dirt@0"]*6 with self.assertRaises(AssertionError): native.mode_checks(doc,"TECH_PROGRESSION",True) def test_wrong_chip_materials_are_not_blessed_by_a_root_flag(self): for mode in ("NORMAL","TECH_PROGRESSION"): doc=fixture(mode);doc["chipSemanticsVerified"]=True - chip=next(r for r in doc["crafting"] if r["output"]=="electricadvantage:integrated_circuit@0") + chip=next(r for r in doc["crafting"] if r["output"]=="baseelectric:integrated_circuit@0") chip["inputs"]=["minecraft:dirt@0"]*len(chip["inputs"]) chip["providers"]=[[item] for item in chip["inputs"]] with self.subTest(mode=mode),self.assertRaisesRegex(AssertionError,"Microchip"): @@ -90,7 +90,7 @@ def test_chip_yield_is_three_even_when_native_count_fields_agree(self): for mode in ("NORMAL","TECH_PROGRESSION"): for count in (1,2,4,64): doc=fixture(mode) - chip=next(r for r in doc["crafting"] if r["output"]=="electricadvantage:integrated_circuit@0") + chip=next(r for r in doc["crafting"] if r["output"]=="baseelectric:integrated_circuit@0") chip.update(count=count,actualCraftedCount=count) with self.subTest(mode=mode,count=count),self.assertRaisesRegex(AssertionError,"Microchip"): native.mode_checks(doc,mode,True) @@ -100,7 +100,7 @@ def test_chip_nuggets_cannot_be_mixed_or_replaced_by_ingots(self): for metals in (["basemetals:copper_nugget@0","basemetals:tin_nugget@0","minecraft:gold_nugget@0"], ["basemetals:copper_ingot@0"]*3): doc=fixture(mode);doc["ores"]["ingotCopper"]=["basemetals:copper_ingot@0"] - chip=next(r for r in doc["crafting"] if r["output"]=="electricadvantage:integrated_circuit@0") + chip=next(r for r in doc["crafting"] if r["output"]=="baseelectric:integrated_circuit@0") chip["inputs"][-3:]=metals;chip["providers"][-3:]=[[item] for item in metals] with self.subTest(mode=mode,metals=metals),self.assertRaisesRegex(AssertionError,"Microchip"): native.mode_checks(doc,mode,True) @@ -115,7 +115,7 @@ def test_chip_requires_actual_native_ore_entries(self): def test_tech_chip_requires_plastic_and_redstone(self): for slot in (0,1,2): doc=fixture("TECH_PROGRESSION") - chip=next(r for r in doc["crafting"] if r["output"]=="electricadvantage:integrated_circuit@0") + chip=next(r for r in doc["crafting"] if r["output"]=="baseelectric:integrated_circuit@0") chip["inputs"][slot]=doc["ores"]["ingotSilicon"][0] chip["providers"][slot]=[chip["inputs"][slot]] with self.subTest(slot=slot),self.assertRaisesRegex(AssertionError,"Microchip"): @@ -125,7 +125,7 @@ def test_chip_requires_complete_consistent_provider_evidence(self): for mode in ("NORMAL","TECH_PROGRESSION"): for mutation in ("missing","short","empty","wrong-selected","extra-wrong-choice"): doc=fixture(mode) - chip=next(r for r in doc["crafting"] if r["output"]=="electricadvantage:integrated_circuit@0") + chip=next(r for r in doc["crafting"] if r["output"]=="baseelectric:integrated_circuit@0") if mutation=="missing": chip.pop("providers") elif mutation=="short": chip["providers"].pop() elif mutation=="empty": chip["providers"][0]=[] @@ -150,37 +150,37 @@ def test_chip_uses_actual_ore_entries_not_item_name_heuristics(self): def test_chip_wildcard_ores_accept_native_expanded_providers(self): doc=fixture();doc["ores"]["ingotSilicon"]=["othermod:silicon@32767"] - for chip in (r for r in doc["crafting"] if r["output"]=="electricadvantage:integrated_circuit@0"): + for chip in (r for r in doc["crafting"] if r["output"]=="baseelectric:integrated_circuit@0"): chip["inputs"][:3]=["othermod:silicon@5"]*3 chip["providers"][:3]=[["othermod:silicon@5","othermod:silicon@7"] for _ in range(3)] native.mode_checks(doc,"NORMAL",True) def test_chip_provider_wildcards_cannot_broaden_specific_ore_entries(self): doc=fixture() - chip=next(r for r in doc["crafting"] if r["output"]=="electricadvantage:integrated_circuit@0") + chip=next(r for r in doc["crafting"] if r["output"]=="baseelectric:integrated_circuit@0") chip["providers"][0]=[chip["inputs"][0].rsplit("@",1)[0]+"@32767"] with self.assertRaisesRegex(AssertionError,"Microchip"): native.mode_checks(doc,"NORMAL",True) def test_unseeded_self_and_mutual_cycles_are_not_reachable(self): doc=fixture() - for output,inputs in (("poweradvantage:a@0",["poweradvantage:b@0"]),("poweradvantage:b@0",["poweradvantage:a@0"])): + for output,inputs in (("basepower:a@0",["basepower:b@0"]),("basepower:b@0",["basepower:a@0"])): doc["crafting"].append(dict(id=output,output=output,inputs=inputs,status="PASS")) doc["targets"].append(output) result=native.reachability(doc) - self.assertIn("poweradvantage:a@0",result["blocked"]);self.assertIn("poweradvantage:b@0",result["blocked"]) + self.assertIn("basepower:a@0",result["blocked"]);self.assertIn("basepower:b@0",result["blocked"]) def test_generated_loot_configuration_is_not_a_real_acquisition(self): - doc=fixture("APOCALYPTIC");doc["generatedLootConfig"]=["poweradvantage:sprocket@0"] - self.assertNotIn("poweradvantage:sprocket@0",native.reachability(doc)["reachable"]) - doc["sampledNativeLoot"]=[dict(item="poweradvantage:sprocket@0",table="simple_dungeon",seed=4)] - self.assertIn("poweradvantage:sprocket@0",native.reachability(doc)["reachable"]) + doc=fixture("APOCALYPTIC");doc["generatedLootConfig"]=["basepower:sprocket@0"] + self.assertNotIn("basepower:sprocket@0",native.reachability(doc)["reachable"]) + doc["sampledNativeLoot"]=[dict(item="basepower:sprocket@0",table="simple_dungeon",seed=4)] + self.assertIn("basepower:sprocket@0",native.reachability(doc)["reachable"]) doc["mode"]="NORMAL" - self.assertNotIn("poweradvantage:sprocket@0",native.reachability(doc)["reachable"]) + self.assertNotIn("basepower:sprocket@0",native.reachability(doc)["reachable"]) def test_ore_roots_never_seed_a_crafted_nonblock_part(self): - doc=fixture();doc["ores"]["oreCopper"]=["poweradvantage:sprocket@0"] - self.assertNotIn("poweradvantage:sprocket@0",native.reachability(doc)["reachable"]) + doc=fixture();doc["ores"]["oreCopper"]=["basepower:sprocket@0"] + self.assertNotIn("basepower:sprocket@0",native.reachability(doc)["reachable"]) def test_smelting_requires_a_reachable_furnace_and_fuel(self): doc=fixture();doc["smelting"]=[dict(input="minecraft:iron_ore@0",output="minecraft:iron_ingot@0",count=1)] @@ -189,10 +189,10 @@ def test_smelting_requires_a_reachable_furnace_and_fuel(self): self.assertIn("minecraft:iron_ingot@0",native.reachability(doc)["reachable"]) def test_crushing_requires_an_obtainable_valid_hammer(self): - doc=fixture();doc["crushing"]=[dict(input="minecraft:potato@0",output="poweradvantage:starch@0",tools=["basemetals:stone_crackhammer@0"])] - self.assertNotIn("poweradvantage:starch@0",native.reachability(doc)["reachable"]) + doc=fixture();doc["crushing"]=[dict(input="minecraft:potato@0",output="basepower:starch@0",tools=["basemetals:stone_crackhammer@0"])] + self.assertNotIn("basepower:starch@0",native.reachability(doc)["reachable"]) doc["crafting"].append(dict(id="hammer",inputs=["minecraft:cobblestone@0"],output="basemetals:stone_crackhammer@0",status="PASS")) - self.assertIn("poweradvantage:starch@0",native.reachability(doc)["reachable"]) + self.assertIn("basepower:starch@0",native.reachability(doc)["reachable"]) def test_unverified_native_recipes_and_missing_machine_edges_are_explicit(self): doc=fixture();doc["crafting"][0].update(status="UNVERIFIED",reason="Missing provider") diff --git a/test-rig/migration/test_rebrand_target_contract.py b/test-rig/migration/test_rebrand_target_contract.py new file mode 100644 index 0000000..d4b1483 --- /dev/null +++ b/test-rig/migration/test_rebrand_target_contract.py @@ -0,0 +1,69 @@ +"""Target declarations and API boundaries; no builds, servers or source-world writes.""" +import json +from pathlib import Path +import unittest + +RIG = Path(__file__).resolve().parents[1] +VERSIONS = {"basepower": ("basePower", "2.4.4.110021"), + "basesteam": ("baseSteam", "2.2.6.110021"), "baseelectric": ("baseElectric", "2.2.6.110021")} + + +class RebrandTargetContractTest(unittest.TestCase): + def test_all_eleven_current_profiles_are_explicitly_unqualified_new_targets(self): + profiles = list((RIG / "profiles").glob("*.json")) + self.assertEqual(11, len(profiles)) + for path in profiles: + doc = json.loads(path.read_text()) + self.assertEqual("UNQUALIFIED_REBRAND_WORKSPACE_INPUTS", doc["qualificationStatus"]) + for mod in doc["mods"]: + self.assertNotIn(mod["id"], ("poweradvantage", "steamadvantage", "electricadvantage")) + if mod["id"] in VERSIONS: + stem, version = VERSIONS[mod["id"]] + self.assertEqual(version, mod["version"]) + suffix = "-deobf.jar" if doc["mode"] == "development" else ".jar" + self.assertEqual(stem + "-" + version + suffix, mod["file"]) + self.assertRegex(mod.get("sha256", ""), r"^[A-F0-9]{64}$") + if doc["mode"] == "packaged": + expected = {"basepower": "164693E756A935A8C51085CF95AECCCAF3506390A6F0A3888E46765F29896F31", + "basesteam": "728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D", + "baseelectric": "05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1"} + self.assertEqual(expected[mod["id"]], mod["sha256"]) + if mod["id"] == "advantageworkstest": + self.assertEqual("1.1.0.110021", mod["version"]) + if doc["mode"] == "development": + self.assertTrue(mod["path"].startswith("build/gradle/libs-dev")) + else: + self.assertEqual("521AC1FF85FCC8D449D84E10888CB888B5E9B01455D1DB05F31839648652D525",mod["sha256"]) + self.assertIn("/survival-candidate-06/artifacts/" + mod["sha256"] + "/", mod["path"]) + self.assertTrue(mod["path"].endswith("/" + mod["file"])) + + def test_current_targets_keep_the_legacy_public_api_and_use_new_implementation_packages(self): + roots = (RIG / "src", RIG / "client-resources/java") + seen_api = False + for root in roots: + for path in root.rglob("*.java"): + source = path.read_text() + seen_api |= "cyano.poweradvantage.api" in source + self.assertNotIn("cyano.basepower.api", source) + for old in ("poweradvantage", "steamadvantage", "electricadvantage"): + self.assertNotIn("zone.moddev.mc." + old, source) + self.assertNotIn("com.mcmoddev." + old, source) + self.assertTrue(seen_api) + build = (RIG / "build.gradle").read_text() + self.assertIn("../build/libs-dev/basePower-2.4.4.110021-deobf.jar", build) + + def test_java_profile_runner_cannot_treat_unpinned_rebrand_bytes_as_qualified(self): + source = (RIG / "src/runner/java/zone/moddev/mc/advantageworks/runner/WorksRunner.java").read_text() + self.assertIn('input.id.matches("base(?:power|steam|electric)")', source) + self.assertIn("requires a fresh exact SHA-256 pin", source) + self.assertIn('manifest.put("qualificationStatus", profile.qualificationStatus)', source) + + def test_harness_metadata_depends_only_on_current_target_ids(self): + harness = json.loads((RIG / "src/main/resources/mcmod.info").read_text()) + client = json.loads((RIG / "client-resources/resources/mcmod.info").read_text()) + self.assertEqual(["basepower"], harness[0]["dependencies"]) + self.assertEqual(["basepower", "basesteam", "baseelectric"], client[0]["dependencies"]) + + +if __name__ == "__main__": + unittest.main() diff --git a/test-rig/migration/test_steam_control_audit.py b/test-rig/migration/test_steam_control_audit.py index b2b62bd..f3f1664 100644 --- a/test-rig/migration/test_steam_control_audit.py +++ b/test-rig/migration/test_steam_control_audit.py @@ -63,7 +63,7 @@ def at(x): if case_id == audit.COMPARATOR: before, after = [], [] for i, stock in enumerate((0, 1, 32, 64)): - tile = snapshot(at(3 + 6 * i), "steamadvantage:steam_crusher", + tile = snapshot(at(3 + 6 * i), audit.steam_block("steam_crusher", LINE), data("minecraft:stone", stock, 0, work=0)) before.append(tile); after.append(deepcopy(tile)) row["count/" + str(3 + 6 * i) + "/4/8/minecraft:stone"] = stock @@ -72,14 +72,14 @@ def at(x): crusher = case_id in audit.CRUSHERS signal, initial = audit.CRUSHERS[case_id] if crusher else (audit.FURNACES[case_id], 40) if crusher: - block, item, slot = "steamadvantage:steam_crusher", "minecraft:stone", 0 + block, item, slot = audit.steam_block("steam_crusher", LINE), "minecraft:stone", 0 work = 105 if signal or initial == 0 else 107 reserve = 0 if initial == 0 else 39.9375 if signal else 38.4375 before_data = data(item, 1, slot, initial, work=106) after_data = data(item, 1, slot, reserve, work=work) row["firstLoaded.progress"] = work else: - block, item, slot = "steamadvantage:steam_furnace", "minecraft:sand", 1 + block, item, slot = audit.steam_block("steam_furnace", LINE), "minecraft:sand", 1 heat = 989.5 if signal else 1027.0 work = audit.f32(.25 + audit.f32(audit.f32(3.5e-6) * heat)) reserve = 40 if signal else 39.5 @@ -123,6 +123,23 @@ def change_tile(row, line, **changes): class SteamControlAuditTests(unittest.TestCase): + def test_namespace_is_exact_and_version_specific(self): + self.assertEqual("basesteam:steam_crusher", audit.steam_block("steam_crusher", "110")) + self.assertEqual("steamadvantage:steam_crusher", audit.steam_block("steam_crusher", "112")) + + def test_old_owner_is_not_accepted_as_a_renamed_native_machine(self): + if LINE != "110": + self.skipTest("Only the 1.10 target has been renamed") + bundle = fixture() + for group, keys in (("operation", ("before", "after")), ("fixture", ("positions",)), + ("cold", ("positions",))): + for row in bundle[group]["cases"]: + for key in keys: + for state in row[key]: + for field in ("block", "state"): + state[field] = state[field].replace("basesteam:", "steamadvantage:") + self.verify(bundle) + def verify(self, bundle, status="FAIL"): result = audit.audit_documents(**bundle, line=LINE) self.assertEqual(status, result["status"], result) diff --git a/test-rig/migration/test_survival110_plan.py b/test-rig/migration/test_survival110_plan.py new file mode 100644 index 0000000..3da04a3 --- /dev/null +++ b/test-rig/migration/test_survival110_plan.py @@ -0,0 +1,120 @@ +"""Planner/receipt negative controls. These tests do not claim gameplay proof.""" +from copy import deepcopy +import unittest +from survival110_plan import Planner, Unobtainable +from native110_survival_progression import validate_replay + + +def recipe(output, inputs, providers=None, count=1): + return dict(id="craft/0",status="PASS",output=output,inputs=inputs, + providers=providers or [[x] for x in inputs],count=count,width=3) + + +def doc(rows=()): + return dict(crafting=list(rows),smelting=[],crushing=[],economy=dict(trades=[],toolDurability={})) + + +class FinitePlannerTests(unittest.TestCase): + def test_selects_obtainable_alternative_not_first_registry_entry(self): + p=Planner(doc([recipe("gear",["diamond_rod"],[["diamond_rod","iron_rod"]])]),{"iron_rod":1}) + p.ensure("gear") + self.assertEqual(["iron_rod"],p.actions[0]["inputs"]) + self.assertEqual(0,p.stock["iron_rod"]) + + def test_duplicate_ingredient_requires_real_quantity(self): + p=Planner(doc([recipe("gear",["iron","iron"])]),{"iron":1}) + with self.assertRaises(Unobtainable):p.ensure("gear") + self.assertEqual(1,p.stock["iron"]) + self.assertEqual([],p.actions) + + def test_cycles_do_not_create_starting_components(self): + p=Planner(doc([recipe("gear",["chip"]),recipe("chip",["gear"])]),{}) + with self.assertRaises(Unobtainable):p.ensure("gear") + self.assertEqual([],p.actions) + + def test_failed_provider_rolls_back_partial_prerequisites(self): + p=Planner(doc([recipe("gear",["a","missing"]),recipe("gear",["b"])]),{"a":1,"b":1}) + p.ensure("gear") + self.assertEqual(1,p.stock["a"]) + self.assertEqual(0,p.stock["b"]) + self.assertEqual(1,len(p.actions)) + + def test_water_bucket_is_not_free_and_returns_empty_bucket(self): + d=doc([recipe("battery",["minecraft:water_bucket@0"])]) + p=Planner(d,{"minecraft:bucket@0":1}) + p.ensure("battery") + self.assertEqual(["water","craft"],[a["kind"] for a in p.actions]) + self.assertEqual(1,p.stock["minecraft:bucket@0"]) + self.assertEqual(0,p.stock["minecraft:water_bucket@0"]) + with self.assertRaises(Unobtainable):Planner(d,{}).ensure("battery") + + def test_smelting_requires_furnace_and_fuel(self): + d=doc();d["smelting"]=[dict(input="ore",output="ingot",count=1)] + for budget in ({"ore":1},{"ore":1,"minecraft:furnace@0":1}): + with self.assertRaises(Unobtainable):Planner(d,budget).ensure("ingot") + p=Planner(d,{"ore":1,"minecraft:furnace@0":1,"minecraft:coal@0":1});p.ensure("ingot") + self.assertEqual(0,p.stock["minecraft:coal@0"]) + + def test_trade_requires_money_and_does_not_assume_restock(self): + d=doc();d["economy"]["trades"]=[dict(id="offer",input="emerald",price=2,output="gear",count=1,maxUses=1)] + with self.assertRaises(Unobtainable):Planner(d,{"emerald":1},True).ensure("gear") + p=Planner(d,{"emerald":4},True);p.ensure("gear") + with self.assertRaises(Unobtainable):p.ensure("gear",2) + self.assertEqual(2,p.stock["emerald"]) + with self.assertRaises(Unobtainable):Planner(d,{"emerald":4}).ensure("gear") + + def test_missing_currency_and_zero_price_are_not_free_intermediates(self): + for row in (dict(id="bad",price=0,output="gear",count=1,maxUses=7), + dict(id="bad",input="emerald",price=0,output="gear",count=1,maxUses=7)): + d=doc();d["economy"]["trades"]=[row];p=Planner(d,{"emerald":4},True) + with self.assertRaises(Unobtainable):p.ensure("gear") + self.assertEqual(1,len(p.uncredited_trades)) + + def test_no_diamond_rod_can_be_credited_from_an_unreplayed_provider_list(self): + p=Planner(doc([recipe("gear",["diamond_rod"],[["diamond_rod","iron_rod"]])]),{"iron_rod":1}) + p.ensure("gear") + self.assertEqual(0,p.stock["diamond_rod"]) + self.assertNotIn("diamond_rod",p.actions[0]["inputs"]) + + def test_machine_recipe_cannot_consume_the_only_workbench(self): + d=doc([recipe("minecraft:crafting_table@0",["wood"]),recipe("machine",["minecraft:crafting_table@0"])]) + p=Planner(d,{"wood":2,"minecraft:crafting_table@0":1}) + p.ensure("machine") + self.assertEqual(1,p.stock["minecraft:crafting_table@0"]) + self.assertEqual(1,p.stock["wood"]) + + +class ReceiptTests(unittest.TestCase): + def fixture(self): + action=dict(kind="craft",output="gear",count=1,inputs=["iron"],width=1,recipe="craft/0") + p=dict(initial={"iron":1},actions=[action],expectedStock={"gear":1}) + row=dict(index=0,kind="craft",status="PASS",output="gear",before={"iron":1},after={"gear":1}, + selectedInputs=["iron"],nativeConsumption="SlotCrafting",negativeControlsRejected=2,returnedEmptyBuckets=0) + first=dict(actions=[row],stock={"gear":1},stockTyped=["exact-nbt-test-fixture"]) + continued=dict(actions=[],craftedStock={"gear":1},resumedStock={"gear":1},resumedStockTyped=["exact-nbt-test-fixture"]) + return p,first,continued + + def test_valid_accounting(self):validate_replay(*self.fixture()) + + def test_rejects_faked_receipts(self): + for field,value in (("index",1),("nativeConsumption","LOOKUP_ONLY"),("negativeControlsRejected",0), + ("after",{"gear":2}),("before",{"iron":9}),("selectedInputs",["diamond_rod"]), + ("returnedEmptyBuckets",1),("output","chip")): + p,first,continued=self.fixture();first["actions"][0][field]=value + with self.subTest(field=field),self.assertRaises(AssertionError):validate_replay(p,first,continued) + + def test_missing_or_duplicate_step_fails(self): + for rows in ([],[0,0]): + p,first,continued=self.fixture();first["actions"]=[deepcopy(first["actions"][i]) for i in rows] + with self.assertRaises(AssertionError):validate_replay(p,first,continued) + + def test_restart_may_not_reseed_inventory(self): + p,first,continued=self.fixture();continued["resumedStock"]={"gear":1,"iron":99} + with self.assertRaisesRegex(AssertionError,"reset"):validate_replay(p,first,continued) + + def test_tool_damage_reset_fails_even_if_every_item_count_is_unchanged(self): + p,first,continued=self.fixture();continued["resumedStockTyped"]=["same-tool-reset-damage"] + with self.assertRaisesRegex(AssertionError,"Typed"):validate_replay(p,first,continued) + + +if __name__=="__main__":unittest.main() diff --git a/test-rig/profiles/dev-core-apocalyptic.json b/test-rig/profiles/dev-core-apocalyptic.json index 2826bcb..46bca65 100644 --- a/test-rig/profiles/dev-core-apocalyptic.json +++ b/test-rig/profiles/dev-core-apocalyptic.json @@ -7,30 +7,34 @@ "shutdownTimeoutSeconds": 60, "stationRunSeconds": 5, "recipeMode": "APOCALYPTIC", - "sourceCommit": "2443eaae7c666b8d54a5c9c30091892b79e80994", - "sourceVersion": "2.4.3.110021", + "sourceCommit": "UNQUALIFIED_REBRAND_WORKTREE", + "sourceVersion": "2.4.4.110021", "lifecycleStations": [], "mods": [ { "id": "advantageworkstest", - "version": "1.0.0.110020", - "file": "AdvantageWorksTestHarness-1.0.0.110020-deobf.jar", - "path": "build/libs-dev/AdvantageWorksTestHarness-1.0.0.110020-deobf.jar", - "workspaceProduced": true + "version": "1.1.0.110021", + "file": "AdvantageWorksTestHarness-1.1.0.110021-deobf.jar", + "path": "build/gradle/libs-dev/AdvantageWorksTestHarness-1.1.0.110021-deobf.jar", + "workspaceProduced": true, + "sha256": "FE1F72756FA4A16BFAD5CD21C28EC85C2F8FCF25A29EDC5A9908914B6F8559D2" }, { - "id": "steamadvantage", - "version": "2.2.5.110021", - "file": "SteamAdvantage-2.2.5.110021-deobf.jar", - "path": "../../SteamAdvantage/SteamAdvantage/build/libs-dev/SteamAdvantage-2.2.5.110021-deobf.jar", - "sha256": "B5247840473DE939234D83B61612B42B2398D79036101CD17ADA5AEA08B8A63F" + "id": "basesteam", + "version": "2.2.6.110021", + "file": "baseSteam-2.2.6.110021-deobf.jar", + "path": "../../SteamAdvantage/SteamAdvantage/build/libs-dev/baseSteam-2.2.6.110021-deobf.jar", + "workspaceProduced": true, + "sha256": "17563247BECAA47E7191EC8FDCC1BF8EB493BC83312C2CD2BF2DA52332D6DC55" }, { - "id": "electricadvantage", - "version": "2.2.5.110021", - "file": "ElectricAdvantage-2.2.5.110021-deobf.jar", - "path": "../../ElectricAdvantage/ElectricAdvantage/build/libs-dev/ElectricAdvantage-2.2.5.110021-deobf.jar", - "sha256": "2E1ED596049D891C3A41ECC9DFE8979E39DED56651B8DE6DB2A9A4709F5A1AF9" + "id": "baseelectric", + "version": "2.2.6.110021", + "file": "baseElectric-2.2.6.110021-deobf.jar", + "path": "../../ElectricAdvantage/ElectricAdvantage/build/libs-dev/baseElectric-2.2.6.110021-deobf.jar", + "workspaceProduced": true, + "sha256": "BBB2620D71A52B1EF11E509F77D52E1A733FB7A8F5883646331AF4D5E1A2708F" } - ] + ], + "qualificationStatus": "UNQUALIFIED_REBRAND_WORKSPACE_INPUTS" } diff --git a/test-rig/profiles/dev-core-tech-progression.json b/test-rig/profiles/dev-core-tech-progression.json index 86b202d..1a21e83 100644 --- a/test-rig/profiles/dev-core-tech-progression.json +++ b/test-rig/profiles/dev-core-tech-progression.json @@ -7,30 +7,34 @@ "shutdownTimeoutSeconds": 60, "stationRunSeconds": 5, "recipeMode": "TECH_PROGRESSION", - "sourceCommit": "2443eaae7c666b8d54a5c9c30091892b79e80994", - "sourceVersion": "2.4.3.110021", + "sourceCommit": "UNQUALIFIED_REBRAND_WORKTREE", + "sourceVersion": "2.4.4.110021", "lifecycleStations": [], "mods": [ { "id": "advantageworkstest", - "version": "1.0.0.110020", - "file": "AdvantageWorksTestHarness-1.0.0.110020-deobf.jar", - "path": "build/libs-dev/AdvantageWorksTestHarness-1.0.0.110020-deobf.jar", - "workspaceProduced": true + "version": "1.1.0.110021", + "file": "AdvantageWorksTestHarness-1.1.0.110021-deobf.jar", + "path": "build/gradle/libs-dev/AdvantageWorksTestHarness-1.1.0.110021-deobf.jar", + "workspaceProduced": true, + "sha256": "FE1F72756FA4A16BFAD5CD21C28EC85C2F8FCF25A29EDC5A9908914B6F8559D2" }, { - "id": "steamadvantage", - "version": "2.2.5.110021", - "file": "SteamAdvantage-2.2.5.110021-deobf.jar", - "path": "../../SteamAdvantage/SteamAdvantage/build/libs-dev/SteamAdvantage-2.2.5.110021-deobf.jar", - "sha256": "B5247840473DE939234D83B61612B42B2398D79036101CD17ADA5AEA08B8A63F" + "id": "basesteam", + "version": "2.2.6.110021", + "file": "baseSteam-2.2.6.110021-deobf.jar", + "path": "../../SteamAdvantage/SteamAdvantage/build/libs-dev/baseSteam-2.2.6.110021-deobf.jar", + "workspaceProduced": true, + "sha256": "17563247BECAA47E7191EC8FDCC1BF8EB493BC83312C2CD2BF2DA52332D6DC55" }, { - "id": "electricadvantage", - "version": "2.2.5.110021", - "file": "ElectricAdvantage-2.2.5.110021-deobf.jar", - "path": "../../ElectricAdvantage/ElectricAdvantage/build/libs-dev/ElectricAdvantage-2.2.5.110021-deobf.jar", - "sha256": "2E1ED596049D891C3A41ECC9DFE8979E39DED56651B8DE6DB2A9A4709F5A1AF9" + "id": "baseelectric", + "version": "2.2.6.110021", + "file": "baseElectric-2.2.6.110021-deobf.jar", + "path": "../../ElectricAdvantage/ElectricAdvantage/build/libs-dev/baseElectric-2.2.6.110021-deobf.jar", + "workspaceProduced": true, + "sha256": "BBB2620D71A52B1EF11E509F77D52E1A733FB7A8F5883646331AF4D5E1A2708F" } - ] + ], + "qualificationStatus": "UNQUALIFIED_REBRAND_WORKSPACE_INPUTS" } diff --git a/test-rig/profiles/dev-core.json b/test-rig/profiles/dev-core.json index c218a50..4c3a0dd 100644 --- a/test-rig/profiles/dev-core.json +++ b/test-rig/profiles/dev-core.json @@ -7,29 +7,33 @@ "shutdownTimeoutSeconds": 60, "stationRunSeconds": 5, "recipeMode": "NORMAL", - "sourceCommit": "2443eaae7c666b8d54a5c9c30091892b79e80994", - "sourceVersion": "2.4.3.110021", + "sourceCommit": "UNQUALIFIED_REBRAND_WORKTREE", + "sourceVersion": "2.4.4.110021", "mods": [ { "id": "advantageworkstest", - "version": "1.0.0.110020", - "file": "AdvantageWorksTestHarness-1.0.0.110020-deobf.jar", - "path": "build/libs-dev/AdvantageWorksTestHarness-1.0.0.110020-deobf.jar", - "workspaceProduced": true + "version": "1.1.0.110021", + "file": "AdvantageWorksTestHarness-1.1.0.110021-deobf.jar", + "path": "build/gradle/libs-dev/AdvantageWorksTestHarness-1.1.0.110021-deobf.jar", + "workspaceProduced": true, + "sha256": "FE1F72756FA4A16BFAD5CD21C28EC85C2F8FCF25A29EDC5A9908914B6F8559D2" }, { - "id": "steamadvantage", - "version": "2.2.5.110021", - "file": "SteamAdvantage-2.2.5.110021-deobf.jar", - "path": "../../SteamAdvantage/SteamAdvantage/build/libs-dev/SteamAdvantage-2.2.5.110021-deobf.jar", - "sha256": "B5247840473DE939234D83B61612B42B2398D79036101CD17ADA5AEA08B8A63F" + "id": "basesteam", + "version": "2.2.6.110021", + "file": "baseSteam-2.2.6.110021-deobf.jar", + "path": "../../SteamAdvantage/SteamAdvantage/build/libs-dev/baseSteam-2.2.6.110021-deobf.jar", + "workspaceProduced": true, + "sha256": "17563247BECAA47E7191EC8FDCC1BF8EB493BC83312C2CD2BF2DA52332D6DC55" }, { - "id": "electricadvantage", - "version": "2.2.5.110021", - "file": "ElectricAdvantage-2.2.5.110021-deobf.jar", - "path": "../../ElectricAdvantage/ElectricAdvantage/build/libs-dev/ElectricAdvantage-2.2.5.110021-deobf.jar", - "sha256": "2E1ED596049D891C3A41ECC9DFE8979E39DED56651B8DE6DB2A9A4709F5A1AF9" + "id": "baseelectric", + "version": "2.2.6.110021", + "file": "baseElectric-2.2.6.110021-deobf.jar", + "path": "../../ElectricAdvantage/ElectricAdvantage/build/libs-dev/baseElectric-2.2.6.110021-deobf.jar", + "workspaceProduced": true, + "sha256": "BBB2620D71A52B1EF11E509F77D52E1A733FB7A8F5883646331AF4D5E1A2708F" } - ] + ], + "qualificationStatus": "UNQUALIFIED_REBRAND_WORKSPACE_INPUTS" } diff --git a/test-rig/profiles/packaged-current.json b/test-rig/profiles/packaged-current.json index ec883de..00ee15c 100644 --- a/test-rig/profiles/packaged-current.json +++ b/test-rig/profiles/packaged-current.json @@ -7,8 +7,8 @@ "shutdownTimeoutSeconds": 60, "stationRunSeconds": 5, "recipeMode": "NORMAL", - "sourceCommit": "2443eaae7c666b8d54a5c9c30091892b79e80994", - "sourceVersion": "2.4.3.110021", + "sourceCommit": "UNQUALIFIED_REBRAND_WORKTREE", + "sourceVersion": "2.4.4.110021", "forge": { "version": "1.10.2-12.18.3.2511", "installerPath": ".cache/forge-1.10.2-12.18.3.2511-installer.jar", @@ -18,46 +18,51 @@ "mods": [ { "id": "advantageworkstest", - "version": "1.0.0.110020", - "file": "AdvantageWorksTestHarness-1.0.0.110020.jar", - "path": "build/libs/AdvantageWorksTestHarness-1.0.0.110020.jar", - "workspaceProduced": true + "version": "1.1.0.110021", + "file": "AdvantageWorksTestHarness-1.1.0.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/survival-candidate-06/artifacts/521AC1FF85FCC8D449D84E10888CB888B5E9B01455D1DB05F31839648652D525/AdvantageWorksTestHarness-1.1.0.110021.jar", + "workspaceProduced": true, + "sha256": "521AC1FF85FCC8D449D84E10888CB888B5E9B01455D1DB05F31839648652D525" }, { - "id": "poweradvantage", - "version": "2.4.3.110021", - "file": "PowerAdvantage-2.4.3.110021.jar", - "path": "../build/libs/PowerAdvantage-2.4.3.110021.jar", - "sha256": "07C9F409034F762CA77F336ECB65B04E814A24E22B7D2C95824BAA52CDBA9D56" + "id": "basepower", + "version": "2.4.4.110021", + "file": "basePower-2.4.4.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/schema-requalification-01/candidate-legacy/artifacts/164693E756A935A8C51085CF95AECCCAF3506390A6F0A3888E46765F29896F31/basePower-2.4.4.110021.jar", + "workspaceProduced": true, + "sha256": "164693E756A935A8C51085CF95AECCCAF3506390A6F0A3888E46765F29896F31" }, { - "id": "steamadvantage", - "version": "2.2.5.110021", - "file": "SteamAdvantage-2.2.5.110021.jar", - "path": "../../SteamAdvantage/SteamAdvantage/build/libs/SteamAdvantage-2.2.5.110021.jar", - "sha256": "1C9DE2F9EE29439B727D2087E18BAD5277115BCCF7162F0F9342F322F44F9E9E" + "id": "basesteam", + "version": "2.2.6.110021", + "file": "baseSteam-2.2.6.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D/baseSteam-2.2.6.110021.jar", + "workspaceProduced": true, + "sha256": "728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D" }, { - "id": "electricadvantage", - "version": "2.2.5.110021", - "file": "ElectricAdvantage-2.2.5.110021.jar", - "path": "../../ElectricAdvantage/ElectricAdvantage/build/libs/ElectricAdvantage-2.2.5.110021.jar", - "sha256": "1854A854332FC02151C289BAEAF9DC3C6677ED6CDC1ED04EA8EDD0CB54A085F5" + "id": "baseelectric", + "version": "2.2.6.110021", + "file": "baseElectric-2.2.6.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1/baseElectric-2.2.6.110021.jar", + "workspaceProduced": true, + "sha256": "05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1" }, { "id": "basemetals", "version": "2.5.0-beta4", "file": "BaseMetals-1.10.2-2.5.0-beta4.238.jar", - "path": "${env:ADVANTAGE_WORKS_CURRENT_MODS}/BaseMetals-1.10.2-2.5.0-beta4.238.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/51F04770C316E62D9ED3EF713144F02FA2EC899645813627091365E12F61C3EF/BaseMetals-1.10.2-2.5.0-beta4.238.jar", "sha256": "51F04770C316E62D9ED3EF713144F02FA2EC899645813627091365E12F61C3EF" }, { "id": "orespawn", "version": "4.0.8.110021", "file": "OreSpawn-4.0.8.110021.jar", - "path": "../../../../MinecraftMineralogy/OS110/OreSpawn/build/libs/OreSpawn-4.0.8.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/FD27D4F5B4B6087C5F64344903C0E0124115E08FA2D465ECDB88D291F36B2B21/OreSpawn-4.0.8.110021.jar", "sha256": "FD27D4F5B4B6087C5F64344903C0E0124115E08FA2D465ECDB88D291F36B2B21", "workspaceProduced": true } - ] + ], + "qualificationStatus": "UNQUALIFIED_REBRAND_WORKSPACE_INPUTS" } diff --git a/test-rig/profiles/packaged-decoupled.json b/test-rig/profiles/packaged-decoupled.json index a8686d0..65b9e6b 100644 --- a/test-rig/profiles/packaged-decoupled.json +++ b/test-rig/profiles/packaged-decoupled.json @@ -7,8 +7,8 @@ "shutdownTimeoutSeconds": 60, "stationRunSeconds": 5, "recipeMode": "NORMAL", - "sourceCommit": "2443eaae7c666b8d54a5c9c30091892b79e80994", - "sourceVersion": "2.4.3.110021", + "sourceCommit": "UNQUALIFIED_REBRAND_WORKTREE", + "sourceVersion": "2.4.4.110021", "forge": { "version": "1.10.2-12.18.3.2511", "installerPath": ".cache/forge-1.10.2-12.18.3.2511-installer.jar", @@ -18,39 +18,44 @@ "mods": [ { "id": "advantageworkstest", - "version": "1.0.0.110020", - "file": "AdvantageWorksTestHarness-1.0.0.110020.jar", - "path": "build/libs/AdvantageWorksTestHarness-1.0.0.110020.jar", - "workspaceProduced": true + "version": "1.1.0.110021", + "file": "AdvantageWorksTestHarness-1.1.0.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/survival-candidate-06/artifacts/521AC1FF85FCC8D449D84E10888CB888B5E9B01455D1DB05F31839648652D525/AdvantageWorksTestHarness-1.1.0.110021.jar", + "workspaceProduced": true, + "sha256": "521AC1FF85FCC8D449D84E10888CB888B5E9B01455D1DB05F31839648652D525" }, { - "id": "poweradvantage", - "version": "2.4.3.110021", - "file": "PowerAdvantage-2.4.3.110021.jar", - "path": "../build/libs/PowerAdvantage-2.4.3.110021.jar", - "sha256": "07C9F409034F762CA77F336ECB65B04E814A24E22B7D2C95824BAA52CDBA9D56" + "id": "basepower", + "version": "2.4.4.110021", + "file": "basePower-2.4.4.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/schema-requalification-01/candidate-legacy/artifacts/164693E756A935A8C51085CF95AECCCAF3506390A6F0A3888E46765F29896F31/basePower-2.4.4.110021.jar", + "workspaceProduced": true, + "sha256": "164693E756A935A8C51085CF95AECCCAF3506390A6F0A3888E46765F29896F31" }, { - "id": "steamadvantage", - "version": "2.2.5.110021", - "file": "SteamAdvantage-2.2.5.110021.jar", - "path": "../../SteamAdvantage/SteamAdvantage/build/libs/SteamAdvantage-2.2.5.110021.jar", - "sha256": "1C9DE2F9EE29439B727D2087E18BAD5277115BCCF7162F0F9342F322F44F9E9E" + "id": "basesteam", + "version": "2.2.6.110021", + "file": "baseSteam-2.2.6.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D/baseSteam-2.2.6.110021.jar", + "workspaceProduced": true, + "sha256": "728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D" }, { - "id": "electricadvantage", - "version": "2.2.5.110021", - "file": "ElectricAdvantage-2.2.5.110021.jar", - "path": "../../ElectricAdvantage/ElectricAdvantage/build/libs/ElectricAdvantage-2.2.5.110021.jar", - "sha256": "1854A854332FC02151C289BAEAF9DC3C6677ED6CDC1ED04EA8EDD0CB54A085F5" + "id": "baseelectric", + "version": "2.2.6.110021", + "file": "baseElectric-2.2.6.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1/baseElectric-2.2.6.110021.jar", + "workspaceProduced": true, + "sha256": "05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1" }, { "id": "orespawn", "version": "4.0.8.110021", "file": "OreSpawn-4.0.8.110021.jar", - "path": "../../../../MinecraftMineralogy/OS110/OreSpawn/build/libs/OreSpawn-4.0.8.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/FD27D4F5B4B6087C5F64344903C0E0124115E08FA2D465ECDB88D291F36B2B21/OreSpawn-4.0.8.110021.jar", "sha256": "FD27D4F5B4B6087C5F64344903C0E0124115E08FA2D465ECDB88D291F36B2B21", "workspaceProduced": true } - ] + ], + "qualificationStatus": "UNQUALIFIED_REBRAND_WORKSPACE_INPUTS" } diff --git a/test-rig/profiles/packaged-legacy.json b/test-rig/profiles/packaged-legacy.json index 4515c11..d62255e 100644 --- a/test-rig/profiles/packaged-legacy.json +++ b/test-rig/profiles/packaged-legacy.json @@ -7,8 +7,8 @@ "shutdownTimeoutSeconds": 60, "stationRunSeconds": 5, "recipeMode": "NORMAL", - "sourceCommit": "2443eaae7c666b8d54a5c9c30091892b79e80994", - "sourceVersion": "2.4.3.110021", + "sourceCommit": "UNQUALIFIED_REBRAND_WORKTREE", + "sourceVersion": "2.4.4.110021", "forge": { "version": "1.10.2-12.18.3.2511", "installerPath": ".cache/forge-1.10.2-12.18.3.2511-installer.jar", @@ -18,46 +18,51 @@ "mods": [ { "id": "advantageworkstest", - "version": "1.0.0.110020", - "file": "AdvantageWorksTestHarness-1.0.0.110020.jar", - "path": "build/libs/AdvantageWorksTestHarness-1.0.0.110020.jar", - "workspaceProduced": true + "version": "1.1.0.110021", + "file": "AdvantageWorksTestHarness-1.1.0.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/survival-candidate-06/artifacts/521AC1FF85FCC8D449D84E10888CB888B5E9B01455D1DB05F31839648652D525/AdvantageWorksTestHarness-1.1.0.110021.jar", + "workspaceProduced": true, + "sha256": "521AC1FF85FCC8D449D84E10888CB888B5E9B01455D1DB05F31839648652D525" }, { - "id": "poweradvantage", - "version": "2.4.3.110021", - "file": "PowerAdvantage-2.4.3.110021.jar", - "path": "../build/libs/PowerAdvantage-2.4.3.110021.jar", - "sha256": "07C9F409034F762CA77F336ECB65B04E814A24E22B7D2C95824BAA52CDBA9D56" + "id": "basepower", + "version": "2.4.4.110021", + "file": "basePower-2.4.4.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/schema-requalification-01/candidate-legacy/artifacts/164693E756A935A8C51085CF95AECCCAF3506390A6F0A3888E46765F29896F31/basePower-2.4.4.110021.jar", + "workspaceProduced": true, + "sha256": "164693E756A935A8C51085CF95AECCCAF3506390A6F0A3888E46765F29896F31" }, { - "id": "steamadvantage", - "version": "2.2.5.110021", - "file": "SteamAdvantage-2.2.5.110021.jar", - "path": "../../SteamAdvantage/SteamAdvantage/build/libs/SteamAdvantage-2.2.5.110021.jar", - "sha256": "1C9DE2F9EE29439B727D2087E18BAD5277115BCCF7162F0F9342F322F44F9E9E" + "id": "basesteam", + "version": "2.2.6.110021", + "file": "baseSteam-2.2.6.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D/baseSteam-2.2.6.110021.jar", + "workspaceProduced": true, + "sha256": "728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D" }, { - "id": "electricadvantage", - "version": "2.2.5.110021", - "file": "ElectricAdvantage-2.2.5.110021.jar", - "path": "../../ElectricAdvantage/ElectricAdvantage/build/libs/ElectricAdvantage-2.2.5.110021.jar", - "sha256": "1854A854332FC02151C289BAEAF9DC3C6677ED6CDC1ED04EA8EDD0CB54A085F5" + "id": "baseelectric", + "version": "2.2.6.110021", + "file": "baseElectric-2.2.6.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1/baseElectric-2.2.6.110021.jar", + "workspaceProduced": true, + "sha256": "05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1" }, { "id": "basemetals", "version": "2.4.0.11", "file": "BaseMetals_1.10.2-2.4.0.11.jar", - "path": "../../../_deps/BaseMetals-v2.4.0/build/libs/BaseMetals_1.10.2-2.4.0.11.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c-base24/artifacts/A225D3E24CD37C377A9D843861FC13BDDB0B88F799D3D3AEDBC8B1DC636BB5E5/BaseMetals_1.10.2-2.4.0.11.jar", "sha256": "A225D3E24CD37C377A9D843861FC13BDDB0B88F799D3D3AEDBC8B1DC636BB5E5" }, { "id": "orespawn", "version": "4.0.8.110021", "file": "OreSpawn-4.0.8.110021.jar", - "path": "../../../../MinecraftMineralogy/OS110/OreSpawn/build/libs/OreSpawn-4.0.8.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/FD27D4F5B4B6087C5F64344903C0E0124115E08FA2D465ECDB88D291F36B2B21/OreSpawn-4.0.8.110021.jar", "sha256": "FD27D4F5B4B6087C5F64344903C0E0124115E08FA2D465ECDB88D291F36B2B21", "workspaceProduced": true } - ] + ], + "qualificationStatus": "UNQUALIFIED_REBRAND_WORKSPACE_INPUTS" } diff --git a/test-rig/profiles/packaged-mineralogy.json b/test-rig/profiles/packaged-mineralogy.json index c05074d..0a001db 100644 --- a/test-rig/profiles/packaged-mineralogy.json +++ b/test-rig/profiles/packaged-mineralogy.json @@ -7,8 +7,8 @@ "shutdownTimeoutSeconds": 60, "stationRunSeconds": 5, "recipeMode": "NORMAL", - "sourceCommit": "2443eaae7c666b8d54a5c9c30091892b79e80994", - "sourceVersion": "2.4.3.110021", + "sourceCommit": "UNQUALIFIED_REBRAND_WORKTREE", + "sourceVersion": "2.4.4.110021", "forge": { "version": "1.10.2-12.18.3.2511", "installerPath": ".cache/forge-1.10.2-12.18.3.2511-installer.jar", @@ -18,37 +18,41 @@ "mods": [ { "id": "advantageworkstest", - "version": "1.0.0.110020", - "file": "AdvantageWorksTestHarness-1.0.0.110020.jar", - "path": "build/libs/AdvantageWorksTestHarness-1.0.0.110020.jar", - "workspaceProduced": true + "version": "1.1.0.110021", + "file": "AdvantageWorksTestHarness-1.1.0.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/survival-candidate-06/artifacts/521AC1FF85FCC8D449D84E10888CB888B5E9B01455D1DB05F31839648652D525/AdvantageWorksTestHarness-1.1.0.110021.jar", + "workspaceProduced": true, + "sha256": "521AC1FF85FCC8D449D84E10888CB888B5E9B01455D1DB05F31839648652D525" }, { - "id": "poweradvantage", - "version": "2.4.3.110021", - "file": "PowerAdvantage-2.4.3.110021.jar", - "path": "../build/libs/PowerAdvantage-2.4.3.110021.jar", - "sha256": "07C9F409034F762CA77F336ECB65B04E814A24E22B7D2C95824BAA52CDBA9D56" + "id": "basepower", + "version": "2.4.4.110021", + "file": "basePower-2.4.4.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/schema-requalification-01/candidate-legacy/artifacts/164693E756A935A8C51085CF95AECCCAF3506390A6F0A3888E46765F29896F31/basePower-2.4.4.110021.jar", + "workspaceProduced": true, + "sha256": "164693E756A935A8C51085CF95AECCCAF3506390A6F0A3888E46765F29896F31" }, { - "id": "steamadvantage", - "version": "2.2.5.110021", - "file": "SteamAdvantage-2.2.5.110021.jar", - "path": "../../SteamAdvantage/SteamAdvantage/build/libs/SteamAdvantage-2.2.5.110021.jar", - "sha256": "1C9DE2F9EE29439B727D2087E18BAD5277115BCCF7162F0F9342F322F44F9E9E" + "id": "basesteam", + "version": "2.2.6.110021", + "file": "baseSteam-2.2.6.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D/baseSteam-2.2.6.110021.jar", + "workspaceProduced": true, + "sha256": "728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D" }, { - "id": "electricadvantage", - "version": "2.2.5.110021", - "file": "ElectricAdvantage-2.2.5.110021.jar", - "path": "../../ElectricAdvantage/ElectricAdvantage/build/libs/ElectricAdvantage-2.2.5.110021.jar", - "sha256": "1854A854332FC02151C289BAEAF9DC3C6677ED6CDC1ED04EA8EDD0CB54A085F5" + "id": "baseelectric", + "version": "2.2.6.110021", + "file": "baseElectric-2.2.6.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1/baseElectric-2.2.6.110021.jar", + "workspaceProduced": true, + "sha256": "05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1" }, { "id": "orespawn", "version": "4.0.8.110021", "file": "OreSpawn-4.0.8.110021.jar", - "path": "../../../../MinecraftMineralogy/OS110/OreSpawn/build/libs/OreSpawn-4.0.8.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/FD27D4F5B4B6087C5F64344903C0E0124115E08FA2D465ECDB88D291F36B2B21/OreSpawn-4.0.8.110021.jar", "sha256": "FD27D4F5B4B6087C5F64344903C0E0124115E08FA2D465ECDB88D291F36B2B21", "workspaceProduced": true }, @@ -60,5 +64,9 @@ "sha256": "48841ABD9517127D1F0D17960AAD86FEFB251D340B006872ACECADD01A4B43F9" } ], - "lifecycleStations": ["W-03", "S-01"] + "lifecycleStations": [ + "W-03", + "S-01" + ], + "qualificationStatus": "UNQUALIFIED_REBRAND_WORKSPACE_INPUTS" } diff --git a/test-rig/profiles/packaged-optional-power.json b/test-rig/profiles/packaged-optional-power.json index 3523a7e..d111626 100644 --- a/test-rig/profiles/packaged-optional-power.json +++ b/test-rig/profiles/packaged-optional-power.json @@ -7,8 +7,8 @@ "shutdownTimeoutSeconds": 60, "stationRunSeconds": 5, "recipeMode": "NORMAL", - "sourceCommit": "2443eaae7c666b8d54a5c9c30091892b79e80994", - "sourceVersion": "2.4.3.110021", + "sourceCommit": "UNQUALIFIED_REBRAND_WORKTREE", + "sourceVersion": "2.4.4.110021", "forge": { "version": "1.10.2-12.18.3.2511", "installerPath": ".cache/forge-1.10.2-12.18.3.2511-installer.jar", @@ -18,31 +18,35 @@ "mods": [ { "id": "advantageworkstest", - "version": "1.0.0.110020", - "file": "AdvantageWorksTestHarness-1.0.0.110020.jar", - "path": "build/libs/AdvantageWorksTestHarness-1.0.0.110020.jar", - "workspaceProduced": true + "version": "1.1.0.110021", + "file": "AdvantageWorksTestHarness-1.1.0.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/survival-candidate-06/artifacts/521AC1FF85FCC8D449D84E10888CB888B5E9B01455D1DB05F31839648652D525/AdvantageWorksTestHarness-1.1.0.110021.jar", + "workspaceProduced": true, + "sha256": "521AC1FF85FCC8D449D84E10888CB888B5E9B01455D1DB05F31839648652D525" }, { - "id": "poweradvantage", - "version": "2.4.3.110021", - "file": "PowerAdvantage-2.4.3.110021.jar", - "path": "../build/libs/PowerAdvantage-2.4.3.110021.jar", - "sha256": "07C9F409034F762CA77F336ECB65B04E814A24E22B7D2C95824BAA52CDBA9D56" + "id": "basepower", + "version": "2.4.4.110021", + "file": "basePower-2.4.4.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/schema-requalification-01/candidate-legacy/artifacts/164693E756A935A8C51085CF95AECCCAF3506390A6F0A3888E46765F29896F31/basePower-2.4.4.110021.jar", + "workspaceProduced": true, + "sha256": "164693E756A935A8C51085CF95AECCCAF3506390A6F0A3888E46765F29896F31" }, { - "id": "steamadvantage", - "version": "2.2.5.110021", - "file": "SteamAdvantage-2.2.5.110021.jar", - "path": "../../SteamAdvantage/SteamAdvantage/build/libs/SteamAdvantage-2.2.5.110021.jar", - "sha256": "1C9DE2F9EE29439B727D2087E18BAD5277115BCCF7162F0F9342F322F44F9E9E" + "id": "basesteam", + "version": "2.2.6.110021", + "file": "baseSteam-2.2.6.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D/baseSteam-2.2.6.110021.jar", + "workspaceProduced": true, + "sha256": "728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D" }, { - "id": "electricadvantage", - "version": "2.2.5.110021", - "file": "ElectricAdvantage-2.2.5.110021.jar", - "path": "../../ElectricAdvantage/ElectricAdvantage/build/libs/ElectricAdvantage-2.2.5.110021.jar", - "sha256": "1854A854332FC02151C289BAEAF9DC3C6677ED6CDC1ED04EA8EDD0CB54A085F5" + "id": "baseelectric", + "version": "2.2.6.110021", + "file": "baseElectric-2.2.6.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1/baseElectric-2.2.6.110021.jar", + "workspaceProduced": true, + "sha256": "05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1" }, { "id": "rf-api", @@ -63,9 +67,10 @@ "id": "orespawn", "version": "4.0.8.110021", "file": "OreSpawn-4.0.8.110021.jar", - "path": "../../../../MinecraftMineralogy/OS110/OreSpawn/build/libs/OreSpawn-4.0.8.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/FD27D4F5B4B6087C5F64344903C0E0124115E08FA2D465ECDB88D291F36B2B21/OreSpawn-4.0.8.110021.jar", "sha256": "FD27D4F5B4B6087C5F64344903C0E0124115E08FA2D465ECDB88D291F36B2B21", "workspaceProduced": true } - ] + ], + "qualificationStatus": "UNQUALIFIED_REBRAND_WORKSPACE_INPUTS" } diff --git a/test-rig/profiles/worldgen-advantage.json b/test-rig/profiles/worldgen-advantage.json index 9b39614..fad4e3d 100644 --- a/test-rig/profiles/worldgen-advantage.json +++ b/test-rig/profiles/worldgen-advantage.json @@ -5,8 +5,8 @@ "startupTimeoutSeconds": 180, "stationRunSeconds": 5, "recipeMode": "NORMAL", - "sourceCommit": "2443eaae7c666b8d54a5c9c30091892b79e80994", - "sourceVersion": "2.4.3.110021", + "sourceCommit": "UNQUALIFIED_REBRAND_WORKTREE", + "sourceVersion": "2.4.4.110021", "forge": { "version": "1.10.2-12.18.3.2511", "installerPath": ".cache/forge-1.10.2-12.18.3.2511-installer.jar", @@ -16,37 +16,41 @@ "mods": [ { "id": "advantageworkstest", - "version": "1.0.0.110020", - "file": "AdvantageWorksTestHarness-1.0.0.110020.jar", - "path": "build/libs/AdvantageWorksTestHarness-1.0.0.110020.jar", - "workspaceProduced": true + "version": "1.1.0.110021", + "file": "AdvantageWorksTestHarness-1.1.0.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/survival-candidate-06/artifacts/521AC1FF85FCC8D449D84E10888CB888B5E9B01455D1DB05F31839648652D525/AdvantageWorksTestHarness-1.1.0.110021.jar", + "workspaceProduced": true, + "sha256": "521AC1FF85FCC8D449D84E10888CB888B5E9B01455D1DB05F31839648652D525" }, { - "id": "poweradvantage", - "version": "2.4.3.110021", - "file": "PowerAdvantage-2.4.3.110021.jar", - "path": "../build/libs/PowerAdvantage-2.4.3.110021.jar", - "sha256": "07C9F409034F762CA77F336ECB65B04E814A24E22B7D2C95824BAA52CDBA9D56" + "id": "basepower", + "version": "2.4.4.110021", + "file": "basePower-2.4.4.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/schema-requalification-01/candidate-legacy/artifacts/164693E756A935A8C51085CF95AECCCAF3506390A6F0A3888E46765F29896F31/basePower-2.4.4.110021.jar", + "workspaceProduced": true, + "sha256": "164693E756A935A8C51085CF95AECCCAF3506390A6F0A3888E46765F29896F31" }, { - "id": "steamadvantage", - "version": "2.2.5.110021", - "file": "SteamAdvantage-2.2.5.110021.jar", - "path": "../../SteamAdvantage/SteamAdvantage/build/libs/SteamAdvantage-2.2.5.110021.jar", - "sha256": "1C9DE2F9EE29439B727D2087E18BAD5277115BCCF7162F0F9342F322F44F9E9E" + "id": "basesteam", + "version": "2.2.6.110021", + "file": "baseSteam-2.2.6.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D/baseSteam-2.2.6.110021.jar", + "workspaceProduced": true, + "sha256": "728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D" }, { - "id": "electricadvantage", - "version": "2.2.5.110021", - "file": "ElectricAdvantage-2.2.5.110021.jar", - "path": "../../ElectricAdvantage/ElectricAdvantage/build/libs/ElectricAdvantage-2.2.5.110021.jar", - "sha256": "1854A854332FC02151C289BAEAF9DC3C6677ED6CDC1ED04EA8EDD0CB54A085F5" + "id": "baseelectric", + "version": "2.2.6.110021", + "file": "baseElectric-2.2.6.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1/baseElectric-2.2.6.110021.jar", + "workspaceProduced": true, + "sha256": "05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1" }, { "id": "orespawn", "version": "4.0.8.110021", "file": "OreSpawn-4.0.8.110021.jar", - "path": "../../../../MinecraftMineralogy/OS110/OreSpawn/build/libs/OreSpawn-4.0.8.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/FD27D4F5B4B6087C5F64344903C0E0124115E08FA2D465ECDB88D291F36B2B21/OreSpawn-4.0.8.110021.jar", "sha256": "FD27D4F5B4B6087C5F64344903C0E0124115E08FA2D465ECDB88D291F36B2B21", "workspaceProduced": true } @@ -64,7 +68,7 @@ { "id": "desert-oil-visible", "section": "fluid_deposits", - "entry": "poweradvantage:fluid_deposit/desert_crude_oil", + "entry": "basepower:fluid_deposit/desert_crude_oil", "present": true, "field": "enabled", "expectedBoolean": true @@ -72,15 +76,15 @@ { "id": "desert-oil-owner", "section": "fluid_deposits", - "entry": "poweradvantage:fluid_deposit/desert_crude_oil", + "entry": "basepower:fluid_deposit/desert_crude_oil", "present": true, "field": "source_provider", - "expectedString": "poweradvantage" + "expectedString": "basepower" }, { "id": "electric-sulfur-default", "section": "ores", - "entry": "electricadvantage:ore/sulfur", + "entry": "baseelectric:ore/sulfur", "present": true, "field": "enabled", "expectedBoolean": true @@ -88,7 +92,7 @@ { "id": "electric-lithium-default", "section": "ores", - "entry": "electricadvantage:ore/lithium", + "entry": "baseelectric:ore/lithium", "present": true, "field": "enabled", "expectedBoolean": true @@ -97,13 +101,13 @@ "profileMutations": [ { "section": "fluid_deposits", - "entry": "poweradvantage:fluid_deposit/desert_crude_oil", + "entry": "basepower:fluid_deposit/desert_crude_oil", "field": "enabled", "booleanValue": false }, { "section": "ores", - "entry": "electricadvantage:ore/sulfur", + "entry": "baseelectric:ore/sulfur", "field": "enabled", "booleanValue": false } @@ -112,7 +116,7 @@ { "id": "desert-oil-user-disable-persists", "section": "fluid_deposits", - "entry": "poweradvantage:fluid_deposit/desert_crude_oil", + "entry": "basepower:fluid_deposit/desert_crude_oil", "present": true, "field": "enabled", "expectedBoolean": false @@ -120,7 +124,7 @@ { "id": "electric-sulfur-user-disable-persists", "section": "ores", - "entry": "electricadvantage:ore/sulfur", + "entry": "baseelectric:ore/sulfur", "present": true, "field": "enabled", "expectedBoolean": false @@ -128,7 +132,7 @@ { "id": "electric-lithium-remains-enabled", "section": "ores", - "entry": "electricadvantage:ore/lithium", + "entry": "baseelectric:ore/lithium", "present": true, "field": "enabled", "expectedBoolean": true @@ -136,14 +140,15 @@ ], "worldgenExpectations": { "minimumCounts": { - "poweradvantage:crude_oil": 1, - "electricadvantage:li_ore": 1, - "electricadvantage:sulfur_ore": 1 + "basepower:crude_oil": 1, + "baseelectric:li_ore": 1, + "baseelectric:sulfur_ore": 1 }, "maximumCounts": { "mineralogy:crude_oil": 0, "mineralogy:sulfur_ore": 0 }, "zeroBiomeViolations": true - } + }, + "qualificationStatus": "UNQUALIFIED_REBRAND_WORKSPACE_INPUTS" } diff --git a/test-rig/profiles/worldgen-legacy-import.json b/test-rig/profiles/worldgen-legacy-import.json index 6eb7cd6..82f61c0 100644 --- a/test-rig/profiles/worldgen-legacy-import.json +++ b/test-rig/profiles/worldgen-legacy-import.json @@ -5,8 +5,8 @@ "startupTimeoutSeconds": 180, "stationRunSeconds": 5, "recipeMode": "NORMAL", - "sourceCommit": "2443eaae7c666b8d54a5c9c30091892b79e80994", - "sourceVersion": "2.4.3.110021", + "sourceCommit": "UNQUALIFIED_REBRAND_WORKTREE", + "sourceVersion": "2.4.4.110021", "forge": { "version": "1.10.2-12.18.3.2511", "installerPath": ".cache/forge-1.10.2-12.18.3.2511-installer.jar", @@ -16,37 +16,41 @@ "mods": [ { "id": "advantageworkstest", - "version": "1.0.0.110020", - "file": "AdvantageWorksTestHarness-1.0.0.110020.jar", - "path": "build/libs/AdvantageWorksTestHarness-1.0.0.110020.jar", - "workspaceProduced": true + "version": "1.1.0.110021", + "file": "AdvantageWorksTestHarness-1.1.0.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/survival-candidate-06/artifacts/521AC1FF85FCC8D449D84E10888CB888B5E9B01455D1DB05F31839648652D525/AdvantageWorksTestHarness-1.1.0.110021.jar", + "workspaceProduced": true, + "sha256": "521AC1FF85FCC8D449D84E10888CB888B5E9B01455D1DB05F31839648652D525" }, { - "id": "poweradvantage", - "version": "2.4.3.110021", - "file": "PowerAdvantage-2.4.3.110021.jar", - "path": "../build/libs/PowerAdvantage-2.4.3.110021.jar", - "sha256": "07C9F409034F762CA77F336ECB65B04E814A24E22B7D2C95824BAA52CDBA9D56" + "id": "basepower", + "version": "2.4.4.110021", + "file": "basePower-2.4.4.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/schema-requalification-01/candidate-legacy/artifacts/164693E756A935A8C51085CF95AECCCAF3506390A6F0A3888E46765F29896F31/basePower-2.4.4.110021.jar", + "workspaceProduced": true, + "sha256": "164693E756A935A8C51085CF95AECCCAF3506390A6F0A3888E46765F29896F31" }, { - "id": "steamadvantage", - "version": "2.2.5.110021", - "file": "SteamAdvantage-2.2.5.110021.jar", - "path": "../../SteamAdvantage/SteamAdvantage/build/libs/SteamAdvantage-2.2.5.110021.jar", - "sha256": "1C9DE2F9EE29439B727D2087E18BAD5277115BCCF7162F0F9342F322F44F9E9E" + "id": "basesteam", + "version": "2.2.6.110021", + "file": "baseSteam-2.2.6.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D/baseSteam-2.2.6.110021.jar", + "workspaceProduced": true, + "sha256": "728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D" }, { - "id": "electricadvantage", - "version": "2.2.5.110021", - "file": "ElectricAdvantage-2.2.5.110021.jar", - "path": "../../ElectricAdvantage/ElectricAdvantage/build/libs/ElectricAdvantage-2.2.5.110021.jar", - "sha256": "1854A854332FC02151C289BAEAF9DC3C6677ED6CDC1ED04EA8EDD0CB54A085F5" + "id": "baseelectric", + "version": "2.2.6.110021", + "file": "baseElectric-2.2.6.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1/baseElectric-2.2.6.110021.jar", + "workspaceProduced": true, + "sha256": "05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1" }, { "id": "orespawn", "version": "4.0.8.110021", "file": "OreSpawn-4.0.8.110021.jar", - "path": "../../../../MinecraftMineralogy/OS110/OreSpawn/build/libs/OreSpawn-4.0.8.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/FD27D4F5B4B6087C5F64344903C0E0124115E08FA2D465ECDB88D291F36B2B21/OreSpawn-4.0.8.110021.jar", "sha256": "FD27D4F5B4B6087C5F64344903C0E0124115E08FA2D465ECDB88D291F36B2B21", "workspaceProduced": true } @@ -58,7 +62,9 @@ "generatorSettings": "", "buildWorks": false, "worldgenSampleRadius": 8, - "stableWorldgenCountExclusions": ["poweradvantage:crude_oil"], + "stableWorldgenCountExclusions": [ + "basepower:crude_oil" + ], "shutdownTimeoutSeconds": 300, "lifecycleStations": [], "configFixtures": [ @@ -75,7 +81,7 @@ { "id": "legacy-oil-retained", "section": "ores", - "entry": "poweradvantage:legacy/poweradvantage_crude_oil_0", + "entry": "basepower:legacy/basepower_crude_oil_0", "present": true, "field": "enabled", "expectedBoolean": true @@ -83,7 +89,7 @@ { "id": "legacy-lithium-retained", "section": "ores", - "entry": "electricadvantage:legacy/electricadvantage_li_ore_0", + "entry": "baseelectric:legacy/baseelectric_li_ore_0", "present": true, "field": "enabled", "expectedBoolean": true @@ -91,7 +97,7 @@ { "id": "legacy-sulfur-retained", "section": "ores", - "entry": "electricadvantage:legacy/electricadvantage_sulfur_ore_1", + "entry": "baseelectric:legacy/baseelectric_sulfur_ore_1", "present": true, "field": "enabled", "expectedBoolean": true @@ -99,19 +105,19 @@ { "id": "modern-oil-not-duplicated", "section": "fluid_deposits", - "entry": "poweradvantage:fluid_deposit/desert_crude_oil", + "entry": "basepower:fluid_deposit/desert_crude_oil", "present": false }, { "id": "modern-lithium-not-duplicated", "section": "ores", - "entry": "electricadvantage:ore/lithium", + "entry": "baseelectric:ore/lithium", "present": false }, { "id": "modern-sulfur-not-duplicated", "section": "ores", - "entry": "electricadvantage:ore/sulfur", + "entry": "baseelectric:ore/sulfur", "present": false } ], @@ -119,7 +125,7 @@ { "id": "legacy-oil-retained", "section": "ores", - "entry": "poweradvantage:legacy/poweradvantage_crude_oil_0", + "entry": "basepower:legacy/basepower_crude_oil_0", "present": true, "field": "enabled", "expectedBoolean": true @@ -127,7 +133,7 @@ { "id": "legacy-lithium-retained", "section": "ores", - "entry": "electricadvantage:legacy/electricadvantage_li_ore_0", + "entry": "baseelectric:legacy/baseelectric_li_ore_0", "present": true, "field": "enabled", "expectedBoolean": true @@ -135,7 +141,7 @@ { "id": "legacy-sulfur-retained", "section": "ores", - "entry": "electricadvantage:legacy/electricadvantage_sulfur_ore_1", + "entry": "baseelectric:legacy/baseelectric_sulfur_ore_1", "present": true, "field": "enabled", "expectedBoolean": true @@ -143,19 +149,19 @@ { "id": "modern-oil-not-duplicated", "section": "fluid_deposits", - "entry": "poweradvantage:fluid_deposit/desert_crude_oil", + "entry": "basepower:fluid_deposit/desert_crude_oil", "present": false }, { "id": "modern-lithium-not-duplicated", "section": "ores", - "entry": "electricadvantage:ore/lithium", + "entry": "baseelectric:ore/lithium", "present": false }, { "id": "modern-sulfur-not-duplicated", "section": "ores", - "entry": "electricadvantage:ore/sulfur", + "entry": "baseelectric:ore/sulfur", "present": false } ], @@ -168,14 +174,14 @@ }, { "id": "power-provider", - "path": "config/poweradvantage-orespawn.json", - "contains": "poweradvantage:legacy/poweradvantage_crude_oil_0", + "path": "config/basepower-orespawn.json", + "contains": "basepower:legacy/basepower_crude_oil_0", "minimumOccurrences": 1 }, { "id": "electric-provider", - "path": "config/electricadvantage-orespawn.json", - "contains": "electricadvantage:legacy/electricadvantage_li_ore_0", + "path": "config/baseelectric-orespawn.json", + "contains": "baseelectric:legacy/baseelectric_li_ore_0", "minimumOccurrences": 1 } ], @@ -188,27 +194,28 @@ }, { "id": "power-provider", - "path": "config/poweradvantage-orespawn.json", - "contains": "poweradvantage:legacy/poweradvantage_crude_oil_0", + "path": "config/basepower-orespawn.json", + "contains": "basepower:legacy/basepower_crude_oil_0", "minimumOccurrences": 1 }, { "id": "electric-provider", - "path": "config/electricadvantage-orespawn.json", - "contains": "electricadvantage:legacy/electricadvantage_li_ore_0", + "path": "config/baseelectric-orespawn.json", + "contains": "baseelectric:legacy/baseelectric_li_ore_0", "minimumOccurrences": 1 } ], "worldgenExpectations": { "minimumCounts": { - "poweradvantage:crude_oil": 1, - "electricadvantage:li_ore": 1, - "electricadvantage:sulfur_ore": 1 + "basepower:crude_oil": 1, + "baseelectric:li_ore": 1, + "baseelectric:sulfur_ore": 1 }, "maximumCounts": { "mineralogy:crude_oil": 0, "mineralogy:sulfur_ore": 0 }, "zeroBiomeViolations": false - } + }, + "qualificationStatus": "UNQUALIFIED_REBRAND_WORKSPACE_INPUTS" } diff --git a/test-rig/profiles/worldgen-mineralogy.json b/test-rig/profiles/worldgen-mineralogy.json index d249b3f..c0f2581 100644 --- a/test-rig/profiles/worldgen-mineralogy.json +++ b/test-rig/profiles/worldgen-mineralogy.json @@ -5,8 +5,8 @@ "startupTimeoutSeconds": 180, "stationRunSeconds": 5, "recipeMode": "NORMAL", - "sourceCommit": "2443eaae7c666b8d54a5c9c30091892b79e80994", - "sourceVersion": "2.4.3.110021", + "sourceCommit": "UNQUALIFIED_REBRAND_WORKTREE", + "sourceVersion": "2.4.4.110021", "forge": { "version": "1.10.2-12.18.3.2511", "installerPath": ".cache/forge-1.10.2-12.18.3.2511-installer.jar", @@ -16,37 +16,41 @@ "mods": [ { "id": "advantageworkstest", - "version": "1.0.0.110020", - "file": "AdvantageWorksTestHarness-1.0.0.110020.jar", - "path": "build/libs/AdvantageWorksTestHarness-1.0.0.110020.jar", - "workspaceProduced": true + "version": "1.1.0.110021", + "file": "AdvantageWorksTestHarness-1.1.0.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/survival-candidate-06/artifacts/521AC1FF85FCC8D449D84E10888CB888B5E9B01455D1DB05F31839648652D525/AdvantageWorksTestHarness-1.1.0.110021.jar", + "workspaceProduced": true, + "sha256": "521AC1FF85FCC8D449D84E10888CB888B5E9B01455D1DB05F31839648652D525" }, { - "id": "poweradvantage", - "version": "2.4.3.110021", - "file": "PowerAdvantage-2.4.3.110021.jar", - "path": "../build/libs/PowerAdvantage-2.4.3.110021.jar", - "sha256": "07C9F409034F762CA77F336ECB65B04E814A24E22B7D2C95824BAA52CDBA9D56" + "id": "basepower", + "version": "2.4.4.110021", + "file": "basePower-2.4.4.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/schema-requalification-01/candidate-legacy/artifacts/164693E756A935A8C51085CF95AECCCAF3506390A6F0A3888E46765F29896F31/basePower-2.4.4.110021.jar", + "workspaceProduced": true, + "sha256": "164693E756A935A8C51085CF95AECCCAF3506390A6F0A3888E46765F29896F31" }, { - "id": "steamadvantage", - "version": "2.2.5.110021", - "file": "SteamAdvantage-2.2.5.110021.jar", - "path": "../../SteamAdvantage/SteamAdvantage/build/libs/SteamAdvantage-2.2.5.110021.jar", - "sha256": "1C9DE2F9EE29439B727D2087E18BAD5277115BCCF7162F0F9342F322F44F9E9E" + "id": "basesteam", + "version": "2.2.6.110021", + "file": "baseSteam-2.2.6.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D/baseSteam-2.2.6.110021.jar", + "workspaceProduced": true, + "sha256": "728E37A1A0551596D8167976A7022E31EF075A383640BB385470160DD9A8F07D" }, { - "id": "electricadvantage", - "version": "2.2.5.110021", - "file": "ElectricAdvantage-2.2.5.110021.jar", - "path": "../../ElectricAdvantage/ElectricAdvantage/build/libs/ElectricAdvantage-2.2.5.110021.jar", - "sha256": "1854A854332FC02151C289BAEAF9DC3C6677ED6CDC1ED04EA8EDD0CB54A085F5" + "id": "baseelectric", + "version": "2.2.6.110021", + "file": "baseElectric-2.2.6.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1/baseElectric-2.2.6.110021.jar", + "workspaceProduced": true, + "sha256": "05F1CF02C97C6112C7EB4913DB46F65C45058CC6E818D81E159DBF5AD0F93DD1" }, { "id": "orespawn", "version": "4.0.8.110021", "file": "OreSpawn-4.0.8.110021.jar", - "path": "../../../../MinecraftMineralogy/OS110/OreSpawn/build/libs/OreSpawn-4.0.8.110021.jar", + "path": "../../../_verification/base-110-rename-20261102/candidate-c/artifacts/FD27D4F5B4B6087C5F64344903C0E0124115E08FA2D465ECDB88D291F36B2B21/OreSpawn-4.0.8.110021.jar", "sha256": "FD27D4F5B4B6087C5F64344903C0E0124115E08FA2D465ECDB88D291F36B2B21", "workspaceProduced": true }, @@ -72,7 +76,7 @@ { "id": "desert-oil-enabled", "section": "fluid_deposits", - "entry": "poweradvantage:fluid_deposit/desert_crude_oil", + "entry": "basepower:fluid_deposit/desert_crude_oil", "present": true, "field": "enabled", "expectedBoolean": true @@ -96,7 +100,7 @@ { "id": "electric-sulfur-disabled", "section": "ores", - "entry": "electricadvantage:ore/sulfur", + "entry": "baseelectric:ore/sulfur", "present": true, "field": "enabled", "expectedBoolean": false @@ -104,7 +108,7 @@ { "id": "electric-lithium-fallback-enabled", "section": "ores", - "entry": "electricadvantage:ore/lithium", + "entry": "baseelectric:ore/lithium", "present": true, "field": "enabled", "expectedBoolean": true @@ -113,7 +117,7 @@ "profileMutations": [ { "section": "ores", - "entry": "electricadvantage:ore/sulfur", + "entry": "baseelectric:ore/sulfur", "field": "enabled", "booleanValue": true } @@ -122,7 +126,7 @@ { "id": "electric-sulfur-user-enable-persists", "section": "ores", - "entry": "electricadvantage:ore/sulfur", + "entry": "baseelectric:ore/sulfur", "present": true, "field": "enabled", "expectedBoolean": true @@ -146,14 +150,15 @@ ], "worldgenExpectations": { "minimumCounts": { - "poweradvantage:crude_oil": 1, + "basepower:crude_oil": 1, "mineralogy:crude_oil": 1, "mineralogy:sulfur_ore": 1, - "electricadvantage:li_ore": 1 + "baseelectric:li_ore": 1 }, "maximumCounts": { - "electricadvantage:sulfur_ore": 0 + "baseelectric:sulfur_ore": 0 }, "zeroBiomeViolations": true - } + }, + "qualificationStatus": "UNQUALIFIED_REBRAND_WORKSPACE_INPUTS" } diff --git a/test-rig/src/main/java/zone/moddev/mc/advantageworks/AdvantageWorksMod.java b/test-rig/src/main/java/zone/moddev/mc/advantageworks/AdvantageWorksMod.java index df20812..1161e94 100644 --- a/test-rig/src/main/java/zone/moddev/mc/advantageworks/AdvantageWorksMod.java +++ b/test-rig/src/main/java/zone/moddev/mc/advantageworks/AdvantageWorksMod.java @@ -24,6 +24,8 @@ public void preInit(FMLPreInitializationEvent event) { net.minecraftforge.common.ForgeChunkManager.forceChunk(ticket, chunk); }); MachineOperationalProbe.register(); + NativePassiveMigrationProbe.register(); + NativeSurvivalProgressionProbe.register(); } @Mod.EventHandler @@ -32,5 +34,7 @@ public void serverStarting(FMLServerStartingEvent event) { MachineOperationalProbe.registerCommands(event); NativeHarvestProbe.registerCommands(event); NativeRecipeProgressionProbe.registerCommands(event); + NativePassiveMigrationProbe.registerCommands(event); + NativeSurvivalProgressionProbe.registerCommands(event); } } diff --git a/test-rig/src/main/java/zone/moddev/mc/advantageworks/BatteryOperationalCases.java b/test-rig/src/main/java/zone/moddev/mc/advantageworks/BatteryOperationalCases.java index e54c620..072eb43 100644 --- a/test-rig/src/main/java/zone/moddev/mc/advantageworks/BatteryOperationalCases.java +++ b/test-rig/src/main/java/zone/moddev/mc/advantageworks/BatteryOperationalCases.java @@ -17,10 +17,10 @@ static void register(List cases) { cases.add(new MachineScenario("electric/battery-chemistry-" + chemistry, "Each battery chemistry supplies a real LED from finite item NBT, retaining its rated capacity and exact energy debit", 160, c -> { - c.block(7, 4, 8, "electricadvantage:electric_battery_array"); - c.put(7, 4, 8, 0, "electricadvantage:" + chemistry + "_battery", 1); + c.block(7, 4, 8, "baseelectric:electric_battery_array"); + c.put(7, 4, 8, 0, "baseelectric:" + chemistry + "_battery", 1); NativeStacks.tag(c.inventory(7, 4, 8).getStackInSlot(0)).setFloat("energy", 10); - c.block(8, 4, 8, "electricadvantage:led_bar"); + c.block(8, 4, 8, "baseelectric:led_bar"); }, c -> { PoweredEntity array = (PoweredEntity)c.tile(7, 4, 8); c.require(array.getEnergyCapacity(new ConduitType("electricity")) == capacity, "rated battery capacity retained"); diff --git a/test-rig/src/main/java/zone/moddev/mc/advantageworks/BucketOperationalCases.java b/test-rig/src/main/java/zone/moddev/mc/advantageworks/BucketOperationalCases.java index 1523d13..6a81459 100644 --- a/test-rig/src/main/java/zone/moddev/mc/advantageworks/BucketOperationalCases.java +++ b/test-rig/src/main/java/zone/moddev/mc/advantageworks/BucketOperationalCases.java @@ -96,10 +96,10 @@ private static UniversalBucket startup(MachineContext c) { && Item.REGISTRY.getObject(bucket.getRegistryName()) == bucket, "Universal bucket is a real registered item, not merely an enabled flag"); c.record("bucket/item", bucket.getRegistryName().toString()); - for (String mod : new String[]{"basemetals", "steamadvantage", "electricadvantage", "orespawn"}) + for (String mod : new String[]{"basemetals", "basesteam", "baseelectric", "orespawn"}) c.record("bucket/mod/" + mod, Loader.isModLoaded(mod)); if (Boolean.getBoolean("advworks.bucket.requireStandalone")) - for (String mod : new String[]{"basemetals", "steamadvantage", "electricadvantage"}) + for (String mod : new String[]{"basemetals", "basesteam", "baseelectric"}) c.require(!Loader.isModLoaded(mod), "Standalone bucket proof excludes " + mod); return bucket; } diff --git a/test-rig/src/main/java/zone/moddev/mc/advantageworks/CanonicalSteamEnchantments.java b/test-rig/src/main/java/zone/moddev/mc/advantageworks/CanonicalSteamEnchantments.java new file mode 100644 index 0000000..84df207 --- /dev/null +++ b/test-rig/src/main/java/zone/moddev/mc/advantageworks/CanonicalSteamEnchantments.java @@ -0,0 +1,34 @@ +package zone.moddev.mc.advantageworks; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.util.ResourceLocation; + +/** These four released enchantment registry keys intentionally retain their old domain. */ +final class CanonicalSteamEnchantments { + private static final Set PATHS = new HashSet<>(Arrays.asList( + "rapid_reload", "powderless", "high_explosive", "recoil")); + + static String canonicalId(String id) { + if (id.startsWith("basesteam:") && PATHS.contains(id.substring("basesteam:".length()))) + throw new IllegalArgumentException("Retained canonical enchantment required, no new-domain fallback: " + id); + return id; + } + + static Enchantment require(String id) { + ResourceLocation name = new ResourceLocation(canonicalId(id)); + if ("steamadvantage".equals(name.getResourceDomain())) + for (String path : PATHS) resolve(new ResourceLocation("steamadvantage", path)); + return resolve(name); + } + + private static Enchantment resolve(ResourceLocation name) { + Enchantment enchantment = Enchantment.REGISTRY.getObject(name); + if (enchantment == null || !Enchantment.REGISTRY.containsKey(name) + || !name.equals(Enchantment.REGISTRY.getNameForObject(enchantment))) + throw new IllegalStateException("Missing or noncanonical native enchantment: " + name); + return enchantment; + } +} diff --git a/test-rig/src/main/java/zone/moddev/mc/advantageworks/DrillOperationalCases.java b/test-rig/src/main/java/zone/moddev/mc/advantageworks/DrillOperationalCases.java index d65669a..799c3e8 100644 --- a/test-rig/src/main/java/zone/moddev/mc/advantageworks/DrillOperationalCases.java +++ b/test-rig/src/main/java/zone/moddev/mc/advantageworks/DrillOperationalCases.java @@ -42,7 +42,7 @@ private static final class Witness { private static void scenario(List cases, String district, EnumFacing facing, String mode) { boolean steam = district.equals("steam"); boolean move = mode.equals("move"), noPower = mode.equals("no-power"); - String namespace = steam ? "steamadvantage" : "electricadvantage"; + String namespace = steam ? "basesteam" : "baseelectric"; String drill = namespace + ":" + district + "_drill"; String track = namespace + ":" + district + "_track"; String conduit = namespace + (steam ? ":steam_pipe" : ":electric_conduit"); @@ -116,7 +116,7 @@ private static void scenario(List cases, String district, EnumF BlockPos active = move ? destination : source; requireBlock(c, source, move ? conduit : drill, "Source becomes the correct conduit only after a successful move"); requireBlock(c, destination, move ? drill : track, "Destination contains the moved drill, or the untouched single track in a control"); - requireBlock(c, front, move ? "poweradvantage:steel_frame" : "minecraft:bedrock", + requireBlock(c, front, move ? "basepower:steel_frame" : "minecraft:bedrock", "The old bore mouth becomes one steel frame only on movement"); requireBlock(c, nextFront, "minecraft:bedrock", "Destination bedrock stop is never mined"); requireBlock(c, hold, "minecraft:redstone_block", "Destination hold remains physically present"); diff --git a/test-rig/src/main/java/zone/moddev/mc/advantageworks/ElectricLifecycleOperationalCases.java b/test-rig/src/main/java/zone/moddev/mc/advantageworks/ElectricLifecycleOperationalCases.java index 8a0c250..31b9aa2 100644 --- a/test-rig/src/main/java/zone/moddev/mc/advantageworks/ElectricLifecycleOperationalCases.java +++ b/test-rig/src/main/java/zone/moddev/mc/advantageworks/ElectricLifecycleOperationalCases.java @@ -12,7 +12,7 @@ /** Finite legacy jobs. Verification only reads the world; live phase actions need a core hook. */ public final class ElectricLifecycleOperationalCases { - private static final String EA = "electricadvantage:"; + private static final String EA = "baseelectric:"; private static final String ELECTRICITY = "electricity"; private static final PropertyBool LIT = PropertyBool.create("lit"); private static final PropertyBool ACTIVE = PropertyBool.create("active"); diff --git a/test-rig/src/main/java/zone/moddev/mc/advantageworks/ElectricOperationalCases.java b/test-rig/src/main/java/zone/moddev/mc/advantageworks/ElectricOperationalCases.java index ad25f96..01fbded 100644 --- a/test-rig/src/main/java/zone/moddev/mc/advantageworks/ElectricOperationalCases.java +++ b/test-rig/src/main/java/zone/moddev/mc/advantageworks/ElectricOperationalCases.java @@ -25,7 +25,7 @@ /** Independent operating contracts. Only setup seeds inputs; all work uses world ticks. */ public final class ElectricOperationalCases { - private static final String EA = "electricadvantage:"; + private static final String EA = "baseelectric:"; private static final PropertyBool LED_LIT = PropertyBool.create("lit"); private static final String ELECTRICITY = "electricity"; private static final String GREENHOUSE = "greenhouse"; @@ -167,7 +167,7 @@ private static void refinery(List cases) { int x = CELLS[i]; c.block(x, Y, Z, EA + "plastic_refinery"); if (i != 1) c.electricSupply(x - 1, Y, Z, 4000); - if (i != 2) reserve(c, x, Y, Z, "getTank", "poweradvantage:refined_oil", i == 4 ? 99 : 200); + if (i != 2) reserve(c, x, Y, Z, "getTank", "basepower:refined_oil", i == 4 ? 99 : 200); } rejectFluid(c, CELLS[2], "minecraft:water", 200); c.put(CELLS[3], Y, Z, 0, EA + "petrolplastic_ingot", 64); @@ -191,15 +191,15 @@ private static void still(List cases) { int x = CELLS[i]; c.block(x, Y, Z, EA + "electric_still"); if (i != 1) c.electricSupply(x - 1, Y, Z, 1000); - if (i != 2) reserve(c, x, Y, Z, "getInputTank", "poweradvantage:crude_oil", i == 4 ? 1 : 40); + if (i != 2) reserve(c, x, Y, Z, "getInputTank", "basepower:crude_oil", i == 4 ? 1 : 40); } rejectFluid(c, CELLS[2], "minecraft:water", 40); - reserve(c, CELLS[3], Y, Z, "getOutputTank", "poweradvantage:refined_oil", 1000); + reserve(c, CELLS[3], Y, Z, "getOutputTank", "basepower:refined_oil", 1000); equal(c, "setup.fullOutput", tankAmount(c, CELLS[3], 1), 1000); }, c -> { equal(c, "positive.input", tankAmount(c, CELLS[0], 0), 0); equal(c, "positive.output", tankAmount(c, CELLS[0], 1), 20); - fluidIs(c, CELLS[0], 1, "poweradvantage:refined_oil"); + fluidIs(c, CELLS[0], 1, "basepower:refined_oil"); close(c, "positive.energyDebit", 1000 - pairEnergy(c, CELLS[0]), 320, 0.01f); for (int i = 1; i < CELLS.length; i++) { equal(c, "negative" + i + ".input", tankAmount(c, CELLS[i], 0), i == 2 ? 0 : i == 4 ? 1 : 40); @@ -212,7 +212,7 @@ private static void still(List cases) { + "mutation. The 48 finite mB then operate on natural ticks, making 24 mB refined oil for 384 electricity.", 80, c -> { c.block(8, Y, Z, EA + "electric_still"); c.electricSupply(7, Y, Z, 1000); - Fluid oil = NativeFluids.get("poweradvantage:crude_oil"); + Fluid oil = NativeFluids.get("basepower:crude_oil"); c.require(oil != null, "Crude oil exists for faced automation"); int stored = 0; for (EnumFacing face : EnumFacing.values()) { @@ -226,12 +226,12 @@ private static void still(List cases) { }, c -> { equal(c, "faced.input", tankAmount(c, 8, 0), 0); equal(c, "faced.output", tankAmount(c, 8, 1), 24); - fluidIs(c, 8, 1, "poweradvantage:refined_oil"); + fluidIs(c, 8, 1, "basepower:refined_oil"); close(c, "faced.energyDebit", 1000 - pairEnergy(c, 8), 384, 0.01f); for (EnumFacing face : EnumFacing.values()) { FluidStack simulated = fluids(c, 8, face).drain(24, false); equal(c, "face." + face + ".drainable", simulated == null ? 0 : simulated.amount, 24); - c.require(simulated != null && simulated.getFluid() == NativeFluids.get("poweradvantage:refined_oil"), + c.require(simulated != null && simulated.getFluid() == NativeFluids.get("basepower:refined_oil"), "Face offers the real refined product " + face); equal(c, "face." + face + ".drainSimulationUnchanged", tankAmount(c, 8, 1), 24); } @@ -372,6 +372,11 @@ private static void led(List cases) { })); } + static boolean hydroturbineIdentity(String owner, String canonicalId, String registrationName) { + return "baseelectric".equals(owner) && "baseelectric.Hydroturbine".equals(canonicalId) + && "Hydroturbine".equals(registrationName); + } + private static void hydro(List cases) { cases.add(new MachineScenario("electric/hydro-rate", "A naturally spawned turbine in a contained horizontal water channel generates four electricity " @@ -411,8 +416,8 @@ private static void hydro(List cases) { for (Entity actor : c.world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(c.at(0, 0, 0), c.at(31, 31, 31)))) { EntityRegistry.EntityRegistration registration = EntityRegistry.instance().lookupModSpawn(actor.getClass(), false); - if (registration == null || !"electricadvantage".equals(registration.getContainer().getModId()) - || !"electricadvantage.Hydroturbine".equals(registration.getEntityName())) continue; + if (registration == null || !hydroturbineIdentity(registration.getContainer().getModId(), + net.minecraft.entity.EntityList.getEntityString(actor), registration.getEntityName())) continue; turbines++; c.record("hydro.motion/" + actor.getUniqueID(), new net.minecraft.util.math.Vec3d(actor.motionX, actor.motionY, actor.motionZ).toString()); c.require(new net.minecraft.util.math.Vec3d(actor.motionX, actor.motionY, actor.motionZ).lengthSquared() == 0, diff --git a/test-rig/src/main/java/zone/moddev/mc/advantageworks/LegacyPartialNetworkCases.java b/test-rig/src/main/java/zone/moddev/mc/advantageworks/LegacyPartialNetworkCases.java index 84736f1..5252d36 100644 --- a/test-rig/src/main/java/zone/moddev/mc/advantageworks/LegacyPartialNetworkCases.java +++ b/test-rig/src/main/java/zone/moddev/mc/advantageworks/LegacyPartialNetworkCases.java @@ -41,23 +41,23 @@ private static void add(List cases, String type, String part) { + "while other endpoints remain loaded and unchanged. The same ticket restores the chunk; " + "event-time typed NBT and finite resources survive, and native processing resumes without rebuilding.", TICKS, c -> { - String pipe = type.equals("steam") ? "steamadvantage:steam_pipe" - : type.equals("electric") ? "electricadvantage:electric_conduit" : "poweradvantage:fluid_pipe"; + String pipe = type.equals("steam") ? "basesteam:steam_pipe" + : type.equals("electric") ? "baseelectric:electric_conduit" : "basepower:fluid_pipe"; if (type.equals("steam")) { c.steamSupply(3, 4, 3, 6000); - c.block(20, 4, 20, "steamadvantage:steam_crusher"); + c.block(20, 4, 20, "basesteam:steam_crusher"); c.put(20, 4, 20, 0, "minecraft:stone", 8); c.require(c.inventory(20, 4, 20).isItemValidForSlot(0, c.inventory(20, 4, 20).getStackInSlot(0)), "Native stone crushing recipe is available"); } else if (type.equals("electric")) { c.electricSupply(3, 4, 3, 6000); NativeStacks.tag(c.inventory(3, 4, 3).getStackInSlot(0)).setString("PartialNetworkWitness", id); - c.block(20, 4, 20, "electricadvantage:electric_oven"); + c.block(20, 4, 20, "baseelectric:electric_oven"); c.put(20, 4, 20, 0, "minecraft:potato", 8); } else { - c.block(3, 4, 3, "poweradvantage:fluid_metal_tank"); + c.block(3, 4, 3, "basepower:fluid_metal_tank"); c.tank(3, 4, 3, "minecraft:water", 6000); - c.block(20, 4, 20, "steamadvantage:steam_boiler_coal"); + c.block(20, 4, 20, "basesteam:steam_boiler_coal"); c.put(20, 4, 20, 0, "minecraft:coal", 1); } for (int x = 4; x <= 20; x++) c.block(x, 4, 3, pipe); diff --git a/test-rig/src/main/java/zone/moddev/mc/advantageworks/MachineContext.java b/test-rig/src/main/java/zone/moddev/mc/advantageworks/MachineContext.java index 224147f..40f8e51 100644 --- a/test-rig/src/main/java/zone/moddev/mc/advantageworks/MachineContext.java +++ b/test-rig/src/main/java/zone/moddev/mc/advantageworks/MachineContext.java @@ -230,14 +230,14 @@ float energy(int x, int y, int z, String type) { } void steamSupply(int x, int y, int z, float reserve) { - block(x, y, z, "steamadvantage:steam_tank"); + block(x, y, z, "basesteam:steam_tank"); power(x, y, z, "steam", reserve); } void electricSupply(int x, int y, int z, float reserve) { if (!Float.isFinite(reserve) || reserve < 0 || reserve > 8000) throw new IllegalArgumentException("Invalid battery reserve"); - block(x, y, z, "electricadvantage:electric_battery_array"); - put(x, y, z, 0, "electricadvantage:lithium_battery", 1); + block(x, y, z, "baseelectric:electric_battery_array"); + put(x, y, z, 0, "baseelectric:lithium_battery", 1); NativeStacks.tag(inventory(x, y, z).getStackInSlot(0)).setFloat("energy", reserve); inventory(x, y, z).markDirty(); } diff --git a/test-rig/src/main/java/zone/moddev/mc/advantageworks/NativeFluids.java b/test-rig/src/main/java/zone/moddev/mc/advantageworks/NativeFluids.java index 1248bec..f2eac7c 100644 --- a/test-rig/src/main/java/zone/moddev/mc/advantageworks/NativeFluids.java +++ b/test-rig/src/main/java/zone/moddev/mc/advantageworks/NativeFluids.java @@ -7,8 +7,8 @@ final class NativeFluids { static Fluid get(String name) { Fluid fluid = FluidRegistry.getFluid(name); if (fluid == null && name.startsWith("minecraft:")) fluid = FluidRegistry.getFluid(name.substring(10)); - if (fluid == null && (name.equals("poweradvantage:crude_oil") || name.equals("poweradvantage:refined_oil"))) - fluid = FluidRegistry.getFluid(name.substring("poweradvantage:".length())); + if (fluid == null && (name.equals("basepower:crude_oil") || name.equals("basepower:refined_oil"))) + fluid = FluidRegistry.getFluid(name.substring("basepower:".length())); if (fluid == null) throw new IllegalArgumentException("Unregistered fixture fluid " + name); return fluid; } diff --git a/test-rig/src/main/java/zone/moddev/mc/advantageworks/NativeHarvestProbe.java b/test-rig/src/main/java/zone/moddev/mc/advantageworks/NativeHarvestProbe.java index 9c21a0e..6ddafbb 100644 --- a/test-rig/src/main/java/zone/moddev/mc/advantageworks/NativeHarvestProbe.java +++ b/test-rig/src/main/java/zone/moddev/mc/advantageworks/NativeHarvestProbe.java @@ -200,7 +200,7 @@ private static void checkGeometry(WorldServer world, Block block, IBlockState st boxEvidence.add(encoded); } row.add("collisionBoxes", boxEvidence); - if (blockId.equals("electricadvantage:electric_conduit")) { + if (blockId.equals("baseelectric:electric_conduit")) { expected.add(Arrays.toString(new double[]{.375, .375, .375, .625, .625, .625})); if ((mask & 2) != 0) expected.add(Arrays.toString(new double[]{.375, .375, .375, .625, 1, .625})); if ((mask & 1) != 0) expected.add(Arrays.toString(new double[]{.375, 0, .375, .625, .625, .625})); @@ -249,11 +249,11 @@ private static void run(MinecraftServer server, WorldServer world, String label) }; player.setPosition(POS.getX() + .5, POS.getY() + 1, POS.getZ() + .5); JsonArray rows = new JsonArray(); - String sulfur = "electricadvantage:sulfur_ore", lithium = "electricadvantage:li_ore"; + String sulfur = "baseelectric:sulfur_ore", lithium = "baseelectric:li_ore"; witness(world, player, rows, "sulfur/hand-fails", sulfur, 0, null, false, false, "", 0, 0, 1); witness(world, player, rows, "sulfur/axe-fails", sulfur, 0, Items.IRON_AXE, false, false, "", 0, 0, 1); - witness(world, player, rows, "sulfur/wood", sulfur, 0, Items.WOODEN_PICKAXE, false, true, "electricadvantage:sulfur_powder", 1, 4, 8); - witness(world, player, rows, "sulfur/stone", sulfur, 0, Items.STONE_PICKAXE, false, true, "electricadvantage:sulfur_powder", 1, 4, 8); + witness(world, player, rows, "sulfur/wood", sulfur, 0, Items.WOODEN_PICKAXE, false, true, "baseelectric:sulfur_powder", 1, 4, 8); + witness(world, player, rows, "sulfur/stone", sulfur, 0, Items.STONE_PICKAXE, false, true, "baseelectric:sulfur_powder", 1, 4, 8); witness(world, player, rows, "sulfur/silk", sulfur, 0, Items.WOODEN_PICKAXE, true, true, sulfur, 1, 1, 1); witness(world, player, rows, "lithium/hand-fails", lithium, 1, null, false, false, "", 0, 0, 1); witness(world, player, rows, "lithium/wood-fails", lithium, 1, Items.WOODEN_PICKAXE, false, false, "", 0, 0, 1); @@ -262,19 +262,19 @@ private static void run(MinecraftServer server, WorldServer world, String label) witness(world, player, rows, "lithium/stone", lithium, 1, Items.STONE_PICKAXE, false, true, lithium, 1, 1, 1); witness(world, player, rows, "lithium/diamond", lithium, 1, Items.DIAMOND_PICKAXE, false, true, lithium, 1, 1, 1); witness(world, player, rows, "lithium/silk", lithium, 1, Items.STONE_PICKAXE, true, true, lithium, 1, 1, 1); - witness(world, player, rows, "frame/hand", "poweradvantage:steel_frame", -1, null, false, true, "poweradvantage:steel_frame", 1, 1, 1); - witness(world, player, rows, "frame/silk", "poweradvantage:steel_frame", -1, Items.DIAMOND_PICKAXE, true, true, "poweradvantage:steel_frame", 1, 1, 1); + witness(world, player, rows, "frame/hand", "basepower:steel_frame", -1, null, false, true, "basepower:steel_frame", 1, 1, 1); + witness(world, player, rows, "frame/silk", "basepower:steel_frame", -1, Items.DIAMOND_PICKAXE, true, true, "basepower:steel_frame", 1, 1, 1); for (int mask = 0; mask < 64; mask++) { for (String family : new String[] {"wire", "scaffold"}) { - String identity = "electricadvantage:" + (family.equals("wire") ? "electric_conduit" : "electric_track"); + String identity = "baseelectric:" + (family.equals("wire") ? "electric_conduit" : "electric_track"); String prefix = family + "/" + mask; witness(world, player, rows, prefix + "/hand", identity, -1, null, false, true, identity, 1, 1, 1, mask); witness(world, player, rows, prefix + "/silk", identity, -1, Items.DIAMOND_PICKAXE, true, true, identity, 1, 1, 1, mask); } } - properties(world, rows, "solar/native-solidity", "electricadvantage:photovoltaic_generator", true, 0); - properties(world, rows, "frame/native-opacity", "poweradvantage:steel_frame", false, 0); + properties(world, rows, "solar/native-solidity", "baseelectric:photovoltaic_generator", true, 0); + properties(world, rows, "frame/native-opacity", "basepower:steel_frame", false, 0); for (String id : WATER_ONLY) { JsonObject row = new JsonObject(); row.addProperty("id", id); row.addProperty("status", "N/A"); diff --git a/test-rig/src/main/java/zone/moddev/mc/advantageworks/NativeNestedIdentityProbe.java b/test-rig/src/main/java/zone/moddev/mc/advantageworks/NativeNestedIdentityProbe.java new file mode 100644 index 0000000..98d1e15 --- /dev/null +++ b/test-rig/src/main/java/zone/moddev/mc/advantageworks/NativeNestedIdentityProbe.java @@ -0,0 +1,206 @@ +package zone.moddev.mc.advantageworks; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.mojang.authlib.GameProfile; +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.util.UUID; +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.EnumPacketDirection; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.management.PlayerInteractionManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.WorldServer; +import net.minecraft.world.GameType; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; + +/** Synthetic detached native serializers, never evidence of an original saved player. */ +final class NativeNestedIdentityProbe { + private static final String[] ENCHANTMENTS = {"powderless", "recoil", "high_explosive", "rapid_reload"}; + + static void registerCommands(FMLServerStartingEvent event) { + if (!new File("advantage-nested-identity.allow").isFile()) return; + event.registerServerCommand(new CommandBase() { + @Override public String getName() { return "advnested"; } + @Override public String getUsage(ICommandSender sender) { return "advnested run

hL6aCW=Cm>Xap`hQn#z*pw=q&UT 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 literal 0 HcmV?d00001 diff --git a/docs/curseforge-description.md b/docs/curseforge-description.md new file mode 100644 index 0000000..1ec7e1e --- /dev/null +++ b/docs/curseforge-description.md @@ -0,0 +1,55 @@ +# basePower + +**A Base Metals expansion continuing DrCyano's Power Advantage, with backwards-compatible upgrades for existing Minecraft 1.10.2 worlds.** + +basePower brings item transport, fluid handling and the shared foundation for steam and electrical machinery to your workshop. It continues [DrCyano's original Power Advantage](https://www.curseforge.com/minecraft/mc-mods/power-advantage), keeping its familiar machines and approach to automation while fixing bugs and maintaining compatibility with existing saves. + +This is the continuation under a new name, not an extra mod to install alongside Power Advantage. + +## What Does It Add? + +- **Conveyors:** Move items between inventories, collect dropped items and carry them upwards. No power supply needed. +- **Sorting and filters:** Separate items into different storage routes, filter by category or selected items, and handle overflow. +- **Fluid transport:** Collect water, lava and other fluids with drains, move them through pipes, and return them to the world with discharges. +- **Storage and control:** Store fluids in portable or metal tanks, select accepted fluids and control pipe connections with redstone switches. +- **Workshop materials:** Make sprockets, steel frames and bioplastic for your machinery. +- **Oil processing:** Collect crude oil and distil it into refined oil. OreSpawn handles underground desert deposits, and Mineralogy's crude oil is accepted by the appropriate processing machinery too. + +basePower is useful by itself. Its companion mods add the steam and electrical equipment; installing basePower alone does not add their generators, drills or processing machines. + +## Expand Your Workshop + +- **[baseSteam](https://github.com/MinecraftModDevelopmentMods/baseSteam):** The continuation of Steam Advantage, adding boilers, steam pipes, tanks and steam-powered machinery. +- **[baseElectric](https://github.com/MinecraftModDevelopmentMods/baseElectric):** The continuation of Electric Advantage, adding generators, batteries, wiring and electrically powered machinery. + +Both use basePower as their shared foundation. Install matching versions for your Minecraft release. + +## Requirements + +- **Minecraft 1.10.2 with Forge 12.18.3.2511 or a compatible later 1.10.2 Forge build.** +- **Java 8.** +- **[Base Metals](https://www.curseforge.com/minecraft/mc-mods/base-metals).** +- **[MMD OreSpawn](https://www.curseforge.com/minecraft/mc-mods/mmd-orespawn).** + +The current 1.10.2 build has been tested with Base Metals `2.5.1.110021` and OreSpawn `4.1.2.110021`, including existing-world upgrades and full restarts. Steam and Electric are optional companions, not requirements for basePower's conveyors and fluid equipment. + +## Moving An Existing Power Advantage World + +basePower supports upgrading worlds made with the original released Cyano Minecraft 1.10.2 Power Advantage. Existing blocks, items, inventories, stored fluids and machine state are migrated to the new identities without needing to rebuild your installations. + +1. Back up the complete world and its configuration before changing any mods. +2. Remove Power Advantage and install basePower. Do not keep both jars installed. +3. If the world also uses Steam Advantage or Electric Advantage, replace them with matching baseSteam and baseElectric versions at the same time. Do not mix the old and new families. +4. Open a copy first, check your machines and contents, then close Minecraft completely and reopen it to check the saved result. + +Existing configuration is carried forward when no new base configuration exists, and saved OreSpawn settings remain authoritative. Keep your original backup: rolling back means restoring the complete backup, not putting old jars back into an already converted world. + +This compatibility applies to the released 1.10.2 worlds. It is not a promise that every old third-party add-on works unchanged; integrations which look for the old mod IDs may need an update. + +## Credits, Modpacks And Development + +Power Advantage was created by **DrCyano (Cyanobacterium)**. basePower continues that work as part of **Minecraft Mod Development**, alongside Base Metals, baseSteam and baseElectric. + +Modpack inclusion is welcome. The project remains open source under **LGPL-3.0**. Its developer API includes the preserved `cyano.poweradvantage.api` package for the 1.10.2 line. + +[Source code](https://github.com/MinecraftModDevelopmentMods/basePower) | [Original Power Advantage](https://www.curseforge.com/minecraft/mc-mods/power-advantage) diff --git a/gradle.properties b/gradle.properties index 83a1b2e..334e3b4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,13 +19,13 @@ java_version=8 java_toolchain_version=8.0.502+7 java_setup_version=8.0.502+7 gradle_java_version=17 -curseforge_project_id=240982 +curseforge_project_id=0 -mod_id=poweradvantage -mod_name=Power Advantage +mod_id=basepower +mod_name=basePower mod_license=LGPL-3.0-only -mod_version=2.4.3.110021 -mod_group=zone.moddev.mc.poweradvantage +mod_version=2.4.4.110021 +mod_group=zone.moddev.mc.basepower mod_authors=DrCyano (aka Cyanobacterium) mod_description=API and shared machines for pressure, electricity, quantum power, fluids, and item transport. diff --git a/make-it.PS1 b/make-it.PS1 index b4573ec..f45efc8 100644 --- a/make-it.PS1 +++ b/make-it.PS1 @@ -1,49 +1,10 @@ -# Windows Power-Shell Build Script -$PROJECT_FOLDER="$PSScriptRoot" -$NAME="PowerAdvantage" -Set-Location "$PROJECT_FOLDER" -Add-Type -A System.IO.Compression.FileSystem -# make dev folders -mkdir -p "$PROJECT_FOLDER/build/dev" -mkdir -p "$PROJECT_FOLDER/build/dist" - -# remove stale files and build API jar -rm -v -Recurse build/libs/*.jar -rm -v -Recurse build/dev/* -rm -v -Recurse build/dist/* -echo "Compiling API" -Start-Process -wait gradlew.bat jar -# remove stale files and build mod jar and javadoc -cp -v build/libs/*.jar build/dev/ -echo "Compiling Mod" -Start-Process -wait gradlew.bat build -rm -v build/libs/*-sources.jar -echo "Compiling JavaDocs" -Start-Process -wait gradlew.bat javadoc - -# zip the sourcecode and javadoc -[IO.Compression.ZipFile]::CreateFromDirectory("$PROJECT_FOLDER/build/docs/javadoc", "$PROJECT_FOLDER/build/dev/$NAME-javadoc.zip") -[IO.Compression.ZipFile]::CreateFromDirectory("$PROJECT_FOLDER/src/main/java", "$PROJECT_FOLDER/build/dev/$NAME-src.zip") - -# remove assets from API jar -$array=Get-ChildItem "$PROJECT_FOLDER/build/dev" -Filter "$NAME*.jar" -$myFile=$array[0] -echo "Removing assets from $myFile" -mkdir -p "$PROJECT_FOLDER/build/dev/extract" -[IO.Compression.ZipFile]::ExtractToDirectory("$PROJECT_FOLDER/build/dev/$myfile","$PROJECT_FOLDER/build/dev/extract") -rm -Recurse $PROJECT_FOLDER/build/dev/extract/assets/* -rmdir "$PROJECT_FOLDER/build/dev/extract/assets" -rm "$PROJECT_FOLDER/build/dev/$myfile" -$myAPIfile=$myFile -replace "-","-API-" -& $env:JAVA_HOME\bin\jar.exe c0f "$PROJECT_FOLDER/build/dev/$myAPIfile" -C "$PROJECT_FOLDER/build/dev/extract" . -rm -Recurse $PROJECT_FOLDER/build/dev/extract - -# copy final files to dist folder -cp -v build/libs/*.jar build/dist -cp -v build/dev/*.jar build/dist -cp -v build/dev/*.zip build/dist - - -#done -$time=date -echo "Build script competed on $time" \ No newline at end of file +param([string[]] $GradleArguments = @()) +$ErrorActionPreference = 'Stop' + +# Use the same audited tasks as CI; never strip or repack a published jar here. +Push-Location $PSScriptRoot +try { + & ./gradlew.bat clean check build javadoc verifyReleaseDependencies verifyReleaseArtifacts ` + writeReleaseChecksums verifyEclipseProductionClasspath @GradleArguments + exit $LASTEXITCODE +} finally { Pop-Location } diff --git a/settings.gradle b/settings.gradle index 49735d0..4c5f6e5 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,4 +2,4 @@ plugins { id('org.gradle.toolchains.foojay-resolver-convention') version '1.0.0' } -rootProject.name = 'PowerAdvantage' +rootProject.name = 'basePower' diff --git a/src/main/java/com/mcmoddev/poweradvantage/conduitnetwork/ConduitRegistry.java b/src/main/java/com/mcmoddev/poweradvantage/conduitnetwork/ConduitRegistry.java index e3089dd..0f070dd 100644 --- a/src/main/java/com/mcmoddev/poweradvantage/conduitnetwork/ConduitRegistry.java +++ b/src/main/java/com/mcmoddev/poweradvantage/conduitnetwork/ConduitRegistry.java @@ -35,14 +35,14 @@ public List getRequestsForPower(World world, BlockPos position, Co public static float transmitPowerToConsumers(float availableEnergy, ConduitType powerType, byte minimumPriority, TileEntity provider) { - return zone.moddev.mc.poweradvantage.conduitnetwork.ConduitRegistry.transmitPowerToConsumers( + return zone.moddev.mc.basepower.conduitnetwork.ConduitRegistry.transmitPowerToConsumers( availableEnergy, powerType, minimumPriority, provider); } public static float transmitPowerToConsumers(float availableEnergy, ConduitType networkType, ConduitType powerType, byte minimumPriority, World world, BlockPos sourcePosition, Object provider) { - return zone.moddev.mc.poweradvantage.conduitnetwork.ConduitRegistry.transmitPowerToConsumers( + return zone.moddev.mc.basepower.conduitnetwork.ConduitRegistry.transmitPowerToConsumers( availableEnergy, networkType, powerType, minimumPriority, world, sourcePosition, provider); } @@ -66,7 +66,7 @@ public void conduitBlockRemovedEvent(World world, int dimension, BlockPos positi delegate().conduitBlockRemovedEvent(world, dimension, position, types); } - private zone.moddev.mc.poweradvantage.conduitnetwork.ConduitRegistry delegate() { - return zone.moddev.mc.poweradvantage.conduitnetwork.ConduitRegistry.getInstance(); + private zone.moddev.mc.basepower.conduitnetwork.ConduitRegistry delegate() { + return zone.moddev.mc.basepower.conduitnetwork.ConduitRegistry.getInstance(); } } diff --git a/src/main/java/com/mcmoddev/poweradvantage/init/Fluids.java b/src/main/java/com/mcmoddev/poweradvantage/init/Fluids.java index 1d287c0..86c4d69 100644 --- a/src/main/java/com/mcmoddev/poweradvantage/init/Fluids.java +++ b/src/main/java/com/mcmoddev/poweradvantage/init/Fluids.java @@ -8,5 +8,5 @@ * {@code cyano.poweradvantage.api.fluid}. */ @Deprecated -public abstract class Fluids extends zone.moddev.mc.poweradvantage.init.Fluids { +public abstract class Fluids extends zone.moddev.mc.basepower.init.Fluids { } diff --git a/src/main/java/com/mcmoddev/poweradvantage/math/Integer2D.java b/src/main/java/com/mcmoddev/poweradvantage/math/Integer2D.java index d612bdb..4d76079 100644 --- a/src/main/java/com/mcmoddev/poweradvantage/math/Integer2D.java +++ b/src/main/java/com/mcmoddev/poweradvantage/math/Integer2D.java @@ -5,7 +5,7 @@ * {@code cyano.poweradvantage.api.simple.SimpleMachineGUI} constructor. * * @deprecated New code should use - * {@link zone.moddev.mc.poweradvantage.math.Integer2D}. + * {@link zone.moddev.mc.basepower.math.Integer2D}. */ @Deprecated public class Integer2D { diff --git a/src/main/java/cyano/poweradvantage/api/ConduitBlock.java b/src/main/java/cyano/poweradvantage/api/ConduitBlock.java index 2c92a40..e606221 100644 --- a/src/main/java/cyano/poweradvantage/api/ConduitBlock.java +++ b/src/main/java/cyano/poweradvantage/api/ConduitBlock.java @@ -1,6 +1,6 @@ package cyano.poweradvantage.api; -import zone.moddev.mc.poweradvantage.conduitnetwork.ConduitRegistry; +import zone.moddev.mc.basepower.conduitnetwork.ConduitRegistry; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.util.math.BlockPos; diff --git a/src/main/java/cyano/poweradvantage/api/ConduitType.java b/src/main/java/cyano/poweradvantage/api/ConduitType.java index f782afc..8ed905a 100644 --- a/src/main/java/cyano/poweradvantage/api/ConduitType.java +++ b/src/main/java/cyano/poweradvantage/api/ConduitType.java @@ -1,6 +1,6 @@ package cyano.poweradvantage.api; -import zone.moddev.mc.poweradvantage.util.HashCodeHelper; +import zone.moddev.mc.basepower.util.HashCodeHelper; import java.util.Locale; diff --git a/src/main/java/cyano/poweradvantage/api/PoweredEntity.java b/src/main/java/cyano/poweradvantage/api/PoweredEntity.java index c85875f..b715faf 100644 --- a/src/main/java/cyano/poweradvantage/api/PoweredEntity.java +++ b/src/main/java/cyano/poweradvantage/api/PoweredEntity.java @@ -1,6 +1,6 @@ package cyano.poweradvantage.api; -import zone.moddev.mc.poweradvantage.conduitnetwork.ConduitRegistry; +import zone.moddev.mc.basepower.conduitnetwork.ConduitRegistry; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; diff --git a/src/main/java/cyano/poweradvantage/api/fluid/FluidConduitBlock.java b/src/main/java/cyano/poweradvantage/api/fluid/FluidConduitBlock.java index 4159652..77e331b 100644 --- a/src/main/java/cyano/poweradvantage/api/fluid/FluidConduitBlock.java +++ b/src/main/java/cyano/poweradvantage/api/fluid/FluidConduitBlock.java @@ -3,7 +3,7 @@ import cyano.poweradvantage.api.ConduitBlock; import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.PowerConnectorContext; -import zone.moddev.mc.poweradvantage.init.Fluids; +import zone.moddev.mc.basepower.init.Fluids; import net.minecraft.block.material.Material; /** diff --git a/src/main/java/cyano/poweradvantage/api/fluid/FluidNetworkApi.java b/src/main/java/cyano/poweradvantage/api/fluid/FluidNetworkApi.java index b6d809c..f8ca76e 100644 --- a/src/main/java/cyano/poweradvantage/api/fluid/FluidNetworkApi.java +++ b/src/main/java/cyano/poweradvantage/api/fluid/FluidNetworkApi.java @@ -10,8 +10,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; -import zone.moddev.mc.poweradvantage.conduitnetwork.ConduitRegistry; -import zone.moddev.mc.poweradvantage.init.Fluids; +import zone.moddev.mc.basepower.conduitnetwork.ConduitRegistry; +import zone.moddev.mc.basepower.init.Fluids; /** * Stable entry point for offering fluid from another mod to a PowerAdvantage diff --git a/src/main/java/cyano/poweradvantage/api/fluid/FluidPoweredEntity.java b/src/main/java/cyano/poweradvantage/api/fluid/FluidPoweredEntity.java index fcdd47b..f6fc167 100644 --- a/src/main/java/cyano/poweradvantage/api/fluid/FluidPoweredEntity.java +++ b/src/main/java/cyano/poweradvantage/api/fluid/FluidPoweredEntity.java @@ -3,8 +3,8 @@ import cyano.poweradvantage.api.ConduitType; import cyano.poweradvantage.api.PowerRequest; import cyano.poweradvantage.api.PoweredEntity; -import zone.moddev.mc.poweradvantage.conduitnetwork.ConduitRegistry; -import zone.moddev.mc.poweradvantage.init.Fluids; +import zone.moddev.mc.basepower.conduitnetwork.ConduitRegistry; +import zone.moddev.mc.basepower.init.Fluids; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.fluids.*; diff --git a/src/main/java/cyano/poweradvantage/api/modsupport/LightWeightPowerRegistry.java b/src/main/java/cyano/poweradvantage/api/modsupport/LightWeightPowerRegistry.java index 2415254..fee9def 100644 --- a/src/main/java/cyano/poweradvantage/api/modsupport/LightWeightPowerRegistry.java +++ b/src/main/java/cyano/poweradvantage/api/modsupport/LightWeightPowerRegistry.java @@ -18,7 +18,7 @@ * considered "external" power systems because their power implementation is not controlled by Power * Advantage.