From 08b7045a9ed02e76accb16b5a24a726c3e1e68a0 Mon Sep 17 00:00:00 2001 From: bdew Date: Fri, 29 Nov 2013 00:47:44 +0200 Subject: [PATCH] Preparing for public release --- .gitignore | 10 + .gitmodules | 3 + .idea/.name | 1 + .idea/ant.xml | 3 + .idea/codeStyleSettings.xml | 230 +++++++++++++++++ .idea/compiler.xml | 23 ++ .idea/copyright/MMPL__gendustry_.xml | 9 + .idea/copyright/MMPL__lib_.xml | 9 + .idea/copyright/profiles_settings.xml | 8 + .idea/encodings.xml | 5 + .idea/highlighting.xml | 8 + .idea/inspectionProfiles/Project_Default.xml | 19 ++ .../inspectionProfiles/profiles_settings.xml | 7 + .idea/misc.xml | 10 + .idea/modules.xml | 9 + .idea/scala_settings.xml | 58 +++++ .idea/scopes/lib.xml | 3 + .idea/scopes/main.xml | 3 + .idea/scopes/my_files.xml | 3 + .idea/scopes/scope_settings.xml | 5 + .idea/uiDesigner.xml | 125 +++++++++ .idea/vcs.xml | 7 + MMPL-1.0.txt | 87 +++++++ build.gradle | 135 ++++++++++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 50508 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 164 ++++++++++++ gradlew.bat | 90 +++++++ .../assets/gendustry/gendustry-recipes.cfg | 203 +++++++++++++++ .../assets/gendustry/gendustry-tuning.cfg | 237 ++++++++++++++++++ resources/assets/gendustry/lang/en_US.lang | 109 ++++++++ .../textures/blocks/apiary/apiary.psd | Bin 0 -> 43766 bytes .../gendustry/textures/blocks/apiary/side.png | Bin 0 -> 1394 bytes .../gendustry/textures/blocks/apiary/top.png | Bin 0 -> 1330 bytes .../textures/blocks/imprinter/bottom.png | Bin 0 -> 1212 bytes .../textures/blocks/imprinter/imprinter.psd | Bin 0 -> 39312 bytes .../textures/blocks/imprinter/side.png | Bin 0 -> 1322 bytes .../textures/blocks/imprinter/top.png | Bin 0 -> 1326 bytes .../textures/blocks/mutagen/flowing.png | Bin 0 -> 10187 bytes .../blocks/mutagen/flowing.png.mcmeta | 3 + .../textures/blocks/mutagen/flowing.psd | Bin 0 -> 276934 bytes .../textures/blocks/mutagen/sample.psd | Bin 0 -> 32926 bytes .../textures/blocks/mutagen/still.png | Bin 0 -> 14498 bytes .../textures/blocks/mutagen/still.png.mcmeta | 5 + .../textures/blocks/mutagen/still.psd | Bin 0 -> 86652 bytes .../blocks/mutagenproducer/bottom.png | Bin 0 -> 1212 bytes .../mutagenproducer/mutagenproducer.psd | Bin 0 -> 47340 bytes .../textures/blocks/mutagenproducer/side.png | Bin 0 -> 1364 bytes .../textures/blocks/mutagenproducer/top.png | Bin 0 -> 1214 bytes .../textures/blocks/mutatron/bottom.png | Bin 0 -> 1212 bytes .../textures/blocks/mutatron/mutatron.psd | Bin 0 -> 46862 bytes .../textures/blocks/mutatron/side.png | Bin 0 -> 1358 bytes .../textures/blocks/mutatron/top.png | Bin 0 -> 1253 bytes .../textures/blocks/sampler/bottom.png | Bin 0 -> 1212 bytes .../textures/blocks/sampler/sampler.psd | Bin 0 -> 41032 bytes .../textures/blocks/sampler/side.png | Bin 0 -> 1360 bytes .../gendustry/textures/blocks/sampler/top.png | Bin 0 -> 1326 bytes .../assets/gendustry/textures/gui/apiary.png | Bin 0 -> 1366 bytes .../assets/gendustry/textures/gui/apiary.psd | Bin 0 -> 91058 bytes .../gendustry/textures/gui/imprinter.png | Bin 0 -> 2631 bytes .../textures/gui/imprinter_templater.psd | Bin 0 -> 107063 bytes .../textures/gui/mutagenproducer.png | Bin 0 -> 1421 bytes .../textures/gui/mutagenproducer.psd | Bin 0 -> 80264 bytes .../gendustry/textures/gui/mutatron.png | Bin 0 -> 2261 bytes .../gendustry/textures/gui/mutatron.psd | Bin 0 -> 96505 bytes .../assets/gendustry/textures/gui/sampler.png | Bin 0 -> 2104 bytes .../assets/gendustry/textures/gui/widgets.png | Bin 0 -> 1900 bytes .../assets/gendustry/textures/gui/widgets.psd | Bin 0 -> 76232 bytes .../textures/items/beereceptacle.png | Bin 0 -> 1473 bytes .../textures/items/beereceptacle.psd | Bin 0 -> 34720 bytes .../textures/items/climatemodule.png | Bin 0 -> 968 bytes .../textures/items/climatemodule.psd | Bin 0 -> 33854 bytes .../gendustry/textures/items/genesample.png | Bin 0 -> 817 bytes .../textures/items/genesampleblank.png | Bin 0 -> 567 bytes .../gendustry/textures/items/genetemplate.png | Bin 0 -> 1472 bytes .../textures/items/geneticsprocessor.png | Bin 0 -> 604 bytes .../textures/items/geneticsprocessor.psd | Bin 0 -> 35319 bytes .../gendustry/textures/items/labware.png | Bin 0 -> 1390 bytes .../gendustry/textures/items/labware.psd | Bin 0 -> 26054 bytes .../textures/items/mutagen/bucket.png | Bin 0 -> 412 bytes .../textures/items/mutagen/bucket.psd | Bin 0 -> 34695 bytes .../gendustry/textures/items/mutagen/can.png | Bin 0 -> 352 bytes .../gendustry/textures/items/mutagen/can.psd | Bin 0 -> 35405 bytes .../gendustry/textures/items/mutagentank.png | Bin 0 -> 1545 bytes .../gendustry/textures/items/mutagentank.psd | Bin 0 -> 27873 bytes .../gendustry/textures/items/powermodule.png | Bin 0 -> 1299 bytes .../gendustry/textures/items/powermodule.psd | Bin 0 -> 59078 bytes .../gendustry/textures/items/sample.psd | Bin 0 -> 31395 bytes .../gendustry/textures/items/template.psd | Bin 0 -> 37321 bytes .../gendustry/textures/items/upgradeframe.png | Bin 0 -> 410 bytes .../textures/items/upgrades/auto.png | Bin 0 -> 1143 bytes .../textures/items/upgrades/cooler.png | Bin 0 -> 1229 bytes .../textures/items/upgrades/dryer.png | Bin 0 -> 1156 bytes .../textures/items/upgrades/flowering.png | Bin 0 -> 908 bytes .../textures/items/upgrades/heater.png | Bin 0 -> 1201 bytes .../textures/items/upgrades/hell.png | Bin 0 -> 931 bytes .../textures/items/upgrades/humidifier.png | Bin 0 -> 1158 bytes .../textures/items/upgrades/life.png | Bin 0 -> 1410 bytes .../textures/items/upgrades/light.png | Bin 0 -> 899 bytes .../textures/items/upgrades/prod.png | Bin 0 -> 1290 bytes .../textures/items/upgrades/sealing.png | Bin 0 -> 1279 bytes .../textures/items/upgrades/sieve.png | Bin 0 -> 1460 bytes .../gendustry/textures/items/upgrades/sky.png | Bin 0 -> 1242 bytes .../textures/items/upgrades/territory.png | Bin 0 -> 960 bytes .../textures/items/upgrades/upgrades.psd | Bin 0 -> 77489 bytes .../assets/gendustry/textures/items/waste.png | Bin 0 -> 1880 bytes .../assets/gendustry/textures/items/waste.psd | Bin 0 -> 33352 bytes resources/mcmod.info | 20 ++ src/cofh/api/energy/IEnergyContainerItem.java | 59 +++++ src/net/bdew/gendustry/Gendustry.scala | 66 +++++ .../bdew/gendustry/api/ApiaryModifiers.java | 40 +++ .../bdew/gendustry/api/IApiaryUpgrade.java | 20 ++ src/net/bdew/gendustry/config/Blocks.scala | 38 +++ src/net/bdew/gendustry/config/Config.scala | 27 ++ src/net/bdew/gendustry/config/Ids.scala | 40 +++ src/net/bdew/gendustry/config/Items.scala | 71 ++++++ src/net/bdew/gendustry/config/Machines.scala | 33 +++ src/net/bdew/gendustry/config/Tuning.scala | 105 ++++++++ .../bdew/gendustry/data/DataSlotPower.scala | 62 +++++ src/net/bdew/gendustry/data/ExposePower.scala | 22 ++ .../bdew/gendustry/forestry/GeneRecipe.scala | 42 ++++ .../gendustry/forestry/GeneSampleInfo.scala | 57 +++++ .../bdew/gendustry/forestry/StringUtil.scala | 17 ++ .../gendustry/gui/BlockGuiWrenchable.scala | 33 +++ src/net/bdew/gendustry/gui/GuiHandler.scala | 31 +++ src/net/bdew/gendustry/gui/GuiProvider.scala | 25 ++ src/net/bdew/gendustry/gui/Textures.scala | 23 ++ .../bdew/gendustry/gui/WidgetMJGauge.scala | 29 +++ src/net/bdew/gendustry/items/GeneSample.scala | 44 ++++ .../bdew/gendustry/items/GeneTemplate.scala | 81 ++++++ .../gendustry/items/IndustrialGrafter.scala | 123 +++++++++ src/net/bdew/gendustry/items/SimpleItem.scala | 24 ++ src/net/bdew/gendustry/machines/Machine.scala | 37 +++ .../gendustry/machines/PoweredMachine.scala | 21 ++ .../gendustry/machines/ProcessorMachine.scala | 17 ++ .../machines/TileBaseProcessor.scala | 69 +++++ .../machines/TileItemProcessor.scala | 26 ++ .../machines/apiary/BlockApiary.scala | 59 +++++ .../machines/apiary/ContainerApiary.scala | 82 ++++++ .../machines/apiary/ErrorCodes.scala | 33 +++ .../gendustry/machines/apiary/GuiApiary.scala | 29 +++ .../machines/apiary/MachineApiary.scala | 38 +++ .../machines/apiary/TileApiary.scala | 232 +++++++++++++++++ .../apiary/WidgetApiaryProgress.scala | 40 +++ .../machines/apiary/WidgetError.scala | 47 ++++ .../apiary/upgrades/ItemApiaryUpgrade.scala | 120 +++++++++ .../machines/apiary/upgrades/Upgrades.scala | 75 ++++++ .../machines/imprinter/BlockImprinter.scala | 50 ++++ .../imprinter/ContainerImprinter.scala | 28 +++ .../machines/imprinter/GuiImprinter.scala | 28 +++ .../machines/imprinter/MachineImprinter.scala | 37 +++ .../machines/imprinter/TileImprinter.scala | 100 ++++++++ .../mproducer/BlockMutagenProducer.scala | 50 ++++ .../mproducer/ContainerMutagenProducer.scala | 23 ++ .../mproducer/GuiMutagenProducer.scala | 29 +++ .../mproducer/MachineMutagenProducer.scala | 35 +++ .../mproducer/TileMutagenProducer.scala | 74 ++++++ .../machines/mutatron/BlockMutatron.scala | 50 ++++ .../machines/mutatron/ContainerMutatron.scala | 28 +++ .../machines/mutatron/GeneticsHelper.scala | 104 ++++++++ .../machines/mutatron/GuiMutatron.scala | 29 +++ .../machines/mutatron/MachineMutatron.scala | 39 +++ .../machines/mutatron/TileMutatron.scala | 61 +++++ .../machines/sampler/BlockSampler.scala | 50 ++++ .../machines/sampler/ContainerSampler.scala | 28 +++ .../machines/sampler/GuiSampler.scala | 28 +++ .../machines/sampler/MachineSampler.scala | 35 +++ .../machines/sampler/TileSampler.scala | 78 ++++++ .../bdew/gendustry/mutagen/BlockMutagen.scala | 67 +++++ .../bdew/gendustry/mutagen/FluidMutagen.scala | 20 ++ .../gendustry/mutagen/ItemMutagenBucket.scala | 26 ++ .../gendustry/mutagen/ItemMutagenCan.scala | 25 ++ .../gendustry/mutagen/MutagenRegistry.scala | 46 ++++ .../gendustry/nei/NEIGendustryConfig.scala | 36 +++ .../gendustry/test/PowerEmitterBlock.scala | 20 ++ .../gendustry/test/PowerEmitterTile.scala | 33 +++ 176 files changed, 4911 insertions(+) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 .idea/.name create mode 100644 .idea/ant.xml create mode 100644 .idea/codeStyleSettings.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/copyright/MMPL__gendustry_.xml create mode 100644 .idea/copyright/MMPL__lib_.xml create mode 100644 .idea/copyright/profiles_settings.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/highlighting.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/scala_settings.xml create mode 100644 .idea/scopes/lib.xml create mode 100644 .idea/scopes/main.xml create mode 100644 .idea/scopes/my_files.xml create mode 100644 .idea/scopes/scope_settings.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml create mode 100644 MMPL-1.0.txt create mode 100644 build.gradle create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 resources/assets/gendustry/gendustry-recipes.cfg create mode 100644 resources/assets/gendustry/gendustry-tuning.cfg create mode 100644 resources/assets/gendustry/lang/en_US.lang create mode 100644 resources/assets/gendustry/textures/blocks/apiary/apiary.psd create mode 100644 resources/assets/gendustry/textures/blocks/apiary/side.png create mode 100644 resources/assets/gendustry/textures/blocks/apiary/top.png create mode 100644 resources/assets/gendustry/textures/blocks/imprinter/bottom.png create mode 100644 resources/assets/gendustry/textures/blocks/imprinter/imprinter.psd create mode 100644 resources/assets/gendustry/textures/blocks/imprinter/side.png create mode 100644 resources/assets/gendustry/textures/blocks/imprinter/top.png create mode 100644 resources/assets/gendustry/textures/blocks/mutagen/flowing.png create mode 100644 resources/assets/gendustry/textures/blocks/mutagen/flowing.png.mcmeta create mode 100644 resources/assets/gendustry/textures/blocks/mutagen/flowing.psd create mode 100644 resources/assets/gendustry/textures/blocks/mutagen/sample.psd create mode 100644 resources/assets/gendustry/textures/blocks/mutagen/still.png create mode 100644 resources/assets/gendustry/textures/blocks/mutagen/still.png.mcmeta create mode 100644 resources/assets/gendustry/textures/blocks/mutagen/still.psd create mode 100644 resources/assets/gendustry/textures/blocks/mutagenproducer/bottom.png create mode 100644 resources/assets/gendustry/textures/blocks/mutagenproducer/mutagenproducer.psd create mode 100644 resources/assets/gendustry/textures/blocks/mutagenproducer/side.png create mode 100644 resources/assets/gendustry/textures/blocks/mutagenproducer/top.png create mode 100644 resources/assets/gendustry/textures/blocks/mutatron/bottom.png create mode 100644 resources/assets/gendustry/textures/blocks/mutatron/mutatron.psd create mode 100644 resources/assets/gendustry/textures/blocks/mutatron/side.png create mode 100644 resources/assets/gendustry/textures/blocks/mutatron/top.png create mode 100644 resources/assets/gendustry/textures/blocks/sampler/bottom.png create mode 100644 resources/assets/gendustry/textures/blocks/sampler/sampler.psd create mode 100644 resources/assets/gendustry/textures/blocks/sampler/side.png create mode 100644 resources/assets/gendustry/textures/blocks/sampler/top.png create mode 100644 resources/assets/gendustry/textures/gui/apiary.png create mode 100644 resources/assets/gendustry/textures/gui/apiary.psd create mode 100644 resources/assets/gendustry/textures/gui/imprinter.png create mode 100644 resources/assets/gendustry/textures/gui/imprinter_templater.psd create mode 100644 resources/assets/gendustry/textures/gui/mutagenproducer.png create mode 100644 resources/assets/gendustry/textures/gui/mutagenproducer.psd create mode 100644 resources/assets/gendustry/textures/gui/mutatron.png create mode 100644 resources/assets/gendustry/textures/gui/mutatron.psd create mode 100644 resources/assets/gendustry/textures/gui/sampler.png create mode 100644 resources/assets/gendustry/textures/gui/widgets.png create mode 100644 resources/assets/gendustry/textures/gui/widgets.psd create mode 100644 resources/assets/gendustry/textures/items/beereceptacle.png create mode 100644 resources/assets/gendustry/textures/items/beereceptacle.psd create mode 100644 resources/assets/gendustry/textures/items/climatemodule.png create mode 100644 resources/assets/gendustry/textures/items/climatemodule.psd create mode 100644 resources/assets/gendustry/textures/items/genesample.png create mode 100644 resources/assets/gendustry/textures/items/genesampleblank.png create mode 100644 resources/assets/gendustry/textures/items/genetemplate.png create mode 100644 resources/assets/gendustry/textures/items/geneticsprocessor.png create mode 100644 resources/assets/gendustry/textures/items/geneticsprocessor.psd create mode 100644 resources/assets/gendustry/textures/items/labware.png create mode 100644 resources/assets/gendustry/textures/items/labware.psd create mode 100644 resources/assets/gendustry/textures/items/mutagen/bucket.png create mode 100644 resources/assets/gendustry/textures/items/mutagen/bucket.psd create mode 100644 resources/assets/gendustry/textures/items/mutagen/can.png create mode 100644 resources/assets/gendustry/textures/items/mutagen/can.psd create mode 100644 resources/assets/gendustry/textures/items/mutagentank.png create mode 100644 resources/assets/gendustry/textures/items/mutagentank.psd create mode 100644 resources/assets/gendustry/textures/items/powermodule.png create mode 100644 resources/assets/gendustry/textures/items/powermodule.psd create mode 100644 resources/assets/gendustry/textures/items/sample.psd create mode 100644 resources/assets/gendustry/textures/items/template.psd create mode 100644 resources/assets/gendustry/textures/items/upgradeframe.png create mode 100644 resources/assets/gendustry/textures/items/upgrades/auto.png create mode 100644 resources/assets/gendustry/textures/items/upgrades/cooler.png create mode 100644 resources/assets/gendustry/textures/items/upgrades/dryer.png create mode 100644 resources/assets/gendustry/textures/items/upgrades/flowering.png create mode 100644 resources/assets/gendustry/textures/items/upgrades/heater.png create mode 100644 resources/assets/gendustry/textures/items/upgrades/hell.png create mode 100644 resources/assets/gendustry/textures/items/upgrades/humidifier.png create mode 100644 resources/assets/gendustry/textures/items/upgrades/life.png create mode 100644 resources/assets/gendustry/textures/items/upgrades/light.png create mode 100644 resources/assets/gendustry/textures/items/upgrades/prod.png create mode 100644 resources/assets/gendustry/textures/items/upgrades/sealing.png create mode 100644 resources/assets/gendustry/textures/items/upgrades/sieve.png create mode 100644 resources/assets/gendustry/textures/items/upgrades/sky.png create mode 100644 resources/assets/gendustry/textures/items/upgrades/territory.png create mode 100644 resources/assets/gendustry/textures/items/upgrades/upgrades.psd create mode 100644 resources/assets/gendustry/textures/items/waste.png create mode 100644 resources/assets/gendustry/textures/items/waste.psd create mode 100644 resources/mcmod.info create mode 100644 src/cofh/api/energy/IEnergyContainerItem.java create mode 100644 src/net/bdew/gendustry/Gendustry.scala create mode 100644 src/net/bdew/gendustry/api/ApiaryModifiers.java create mode 100644 src/net/bdew/gendustry/api/IApiaryUpgrade.java create mode 100644 src/net/bdew/gendustry/config/Blocks.scala create mode 100644 src/net/bdew/gendustry/config/Config.scala create mode 100644 src/net/bdew/gendustry/config/Ids.scala create mode 100644 src/net/bdew/gendustry/config/Items.scala create mode 100644 src/net/bdew/gendustry/config/Machines.scala create mode 100644 src/net/bdew/gendustry/config/Tuning.scala create mode 100644 src/net/bdew/gendustry/data/DataSlotPower.scala create mode 100644 src/net/bdew/gendustry/data/ExposePower.scala create mode 100644 src/net/bdew/gendustry/forestry/GeneRecipe.scala create mode 100644 src/net/bdew/gendustry/forestry/GeneSampleInfo.scala create mode 100644 src/net/bdew/gendustry/forestry/StringUtil.scala create mode 100644 src/net/bdew/gendustry/gui/BlockGuiWrenchable.scala create mode 100644 src/net/bdew/gendustry/gui/GuiHandler.scala create mode 100644 src/net/bdew/gendustry/gui/GuiProvider.scala create mode 100644 src/net/bdew/gendustry/gui/Textures.scala create mode 100644 src/net/bdew/gendustry/gui/WidgetMJGauge.scala create mode 100644 src/net/bdew/gendustry/items/GeneSample.scala create mode 100644 src/net/bdew/gendustry/items/GeneTemplate.scala create mode 100644 src/net/bdew/gendustry/items/IndustrialGrafter.scala create mode 100644 src/net/bdew/gendustry/items/SimpleItem.scala create mode 100644 src/net/bdew/gendustry/machines/Machine.scala create mode 100644 src/net/bdew/gendustry/machines/PoweredMachine.scala create mode 100644 src/net/bdew/gendustry/machines/ProcessorMachine.scala create mode 100644 src/net/bdew/gendustry/machines/TileBaseProcessor.scala create mode 100644 src/net/bdew/gendustry/machines/TileItemProcessor.scala create mode 100644 src/net/bdew/gendustry/machines/apiary/BlockApiary.scala create mode 100644 src/net/bdew/gendustry/machines/apiary/ContainerApiary.scala create mode 100644 src/net/bdew/gendustry/machines/apiary/ErrorCodes.scala create mode 100644 src/net/bdew/gendustry/machines/apiary/GuiApiary.scala create mode 100644 src/net/bdew/gendustry/machines/apiary/MachineApiary.scala create mode 100644 src/net/bdew/gendustry/machines/apiary/TileApiary.scala create mode 100644 src/net/bdew/gendustry/machines/apiary/WidgetApiaryProgress.scala create mode 100644 src/net/bdew/gendustry/machines/apiary/WidgetError.scala create mode 100644 src/net/bdew/gendustry/machines/apiary/upgrades/ItemApiaryUpgrade.scala create mode 100644 src/net/bdew/gendustry/machines/apiary/upgrades/Upgrades.scala create mode 100644 src/net/bdew/gendustry/machines/imprinter/BlockImprinter.scala create mode 100644 src/net/bdew/gendustry/machines/imprinter/ContainerImprinter.scala create mode 100644 src/net/bdew/gendustry/machines/imprinter/GuiImprinter.scala create mode 100644 src/net/bdew/gendustry/machines/imprinter/MachineImprinter.scala create mode 100644 src/net/bdew/gendustry/machines/imprinter/TileImprinter.scala create mode 100644 src/net/bdew/gendustry/machines/mproducer/BlockMutagenProducer.scala create mode 100644 src/net/bdew/gendustry/machines/mproducer/ContainerMutagenProducer.scala create mode 100644 src/net/bdew/gendustry/machines/mproducer/GuiMutagenProducer.scala create mode 100644 src/net/bdew/gendustry/machines/mproducer/MachineMutagenProducer.scala create mode 100644 src/net/bdew/gendustry/machines/mproducer/TileMutagenProducer.scala create mode 100644 src/net/bdew/gendustry/machines/mutatron/BlockMutatron.scala create mode 100644 src/net/bdew/gendustry/machines/mutatron/ContainerMutatron.scala create mode 100644 src/net/bdew/gendustry/machines/mutatron/GeneticsHelper.scala create mode 100644 src/net/bdew/gendustry/machines/mutatron/GuiMutatron.scala create mode 100644 src/net/bdew/gendustry/machines/mutatron/MachineMutatron.scala create mode 100644 src/net/bdew/gendustry/machines/mutatron/TileMutatron.scala create mode 100644 src/net/bdew/gendustry/machines/sampler/BlockSampler.scala create mode 100644 src/net/bdew/gendustry/machines/sampler/ContainerSampler.scala create mode 100644 src/net/bdew/gendustry/machines/sampler/GuiSampler.scala create mode 100644 src/net/bdew/gendustry/machines/sampler/MachineSampler.scala create mode 100644 src/net/bdew/gendustry/machines/sampler/TileSampler.scala create mode 100644 src/net/bdew/gendustry/mutagen/BlockMutagen.scala create mode 100644 src/net/bdew/gendustry/mutagen/FluidMutagen.scala create mode 100644 src/net/bdew/gendustry/mutagen/ItemMutagenBucket.scala create mode 100644 src/net/bdew/gendustry/mutagen/ItemMutagenCan.scala create mode 100644 src/net/bdew/gendustry/mutagen/MutagenRegistry.scala create mode 100644 src/net/bdew/gendustry/nei/NEIGendustryConfig.scala create mode 100644 src/net/bdew/gendustry/test/PowerEmitterBlock.scala create mode 100644 src/net/bdew/gendustry/test/PowerEmitterTile.scala diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..e7920da8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +/bin +/out +/build +/run +/.idea/workspace.xml +/.idea/dictionaries +/eclipse +/.gradle +/*.iml +/*.ipr diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..926a8ae6 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "bdlib"] + path = bdlib + url = D:\\dropbox\\mcmods\\bdlib.git diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 00000000..eac6c590 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +gendustry \ No newline at end of file diff --git a/.idea/ant.xml b/.idea/ant.xml new file mode 100644 index 00000000..f6e673ad --- /dev/null +++ b/.idea/ant.xml @@ -0,0 +1,3 @@ + + + diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml new file mode 100644 index 00000000..5e9478bd --- /dev/null +++ b/.idea/codeStyleSettings.xml @@ -0,0 +1,230 @@ + + + + + + + diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 00000000..217af471 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,23 @@ + + + + + + diff --git a/.idea/copyright/MMPL__gendustry_.xml b/.idea/copyright/MMPL__gendustry_.xml new file mode 100644 index 00000000..b490696a --- /dev/null +++ b/.idea/copyright/MMPL__gendustry_.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/.idea/copyright/MMPL__lib_.xml b/.idea/copyright/MMPL__lib_.xml new file mode 100644 index 00000000..fa6252cc --- /dev/null +++ b/.idea/copyright/MMPL__lib_.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 00000000..d1d7b7d2 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 00000000..e206d70d --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/.idea/highlighting.xml b/.idea/highlighting.xml new file mode 100644 index 00000000..f33b64d9 --- /dev/null +++ b/.idea/highlighting.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 00000000..20bcff66 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,19 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 00000000..3b312839 --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..0cae957f --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..511dc350 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.idea/scala_settings.xml b/.idea/scala_settings.xml new file mode 100644 index 00000000..f350c240 --- /dev/null +++ b/.idea/scala_settings.xml @@ -0,0 +1,58 @@ + + + + + + + + diff --git a/.idea/scopes/lib.xml b/.idea/scopes/lib.xml new file mode 100644 index 00000000..9ef6479d --- /dev/null +++ b/.idea/scopes/lib.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/scopes/main.xml b/.idea/scopes/main.xml new file mode 100644 index 00000000..6397915a --- /dev/null +++ b/.idea/scopes/main.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/scopes/my_files.xml b/.idea/scopes/my_files.xml new file mode 100644 index 00000000..af16f14b --- /dev/null +++ b/.idea/scopes/my_files.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/scopes/scope_settings.xml b/.idea/scopes/scope_settings.xml new file mode 100644 index 00000000..922003b8 --- /dev/null +++ b/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 00000000..3b000203 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..275077f8 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/MMPL-1.0.txt b/MMPL-1.0.txt new file mode 100644 index 00000000..a445a6fb --- /dev/null +++ b/MMPL-1.0.txt @@ -0,0 +1,87 @@ +Minecraft Mod Public License +============================ + +Version 1.0.1 + +0. Definitions +-------------- + +Minecraft: Denotes a copy of the Minecraft game licensed by Mojang AB + +User: Anybody that interacts with the software in one of the following ways: + - play + - decompile + - recompile or compile + - modify + - distribute + +Mod: The mod code designated by the present license, in source form, binary +form, as obtained standalone, as part of a wider distribution or resulting from +the compilation of the original or modified sources. + +Dependency: Code required for the mod to work properly. This includes +dependencies required to compile the code as well as any file or modification +that is explicitely or implicitely required for the mod to be working. + +1. Scope +-------- + +The present license is granted to any user of the mod. As a prerequisite, +a user must own a legally acquired copy of Minecraft + +2. Liability +------------ + +This mod is provided 'as is' with no warranties, implied or otherwise. The owner +of this mod takes no responsibility for any damages incurred from the use of +this mod. This mod alters fundamental parts of the Minecraft game, parts of +Minecraft may not work with this mod installed. All damages caused from the use +or misuse of this mad fall on the user. + +3. Play rights +-------------- + +The user is allowed to install this mod on a client or a server and to play +without restriction. + +4. Modification rights +---------------------- + +The user has the right to decompile the source code, look at either the +decompiled version or the original source code, and to modify it. + +5. Derivation rights +-------------------- + +The user has the rights to derive code from this mod, that is to say to +write code that extends or instanciate the mod classes or interfaces, refer to +its objects, or calls its functions. This code is known as "derived" code, and +can be licensed under a license different from this mod. + +6. Distribution of original or modified copy rights +--------------------------------------------------- + +Is subject to distribution rights this entire mod in its various forms. This +include: + - original binary or source forms of this mod files + - modified versions of these binaries or source files, as well as binaries + resulting from source modifications + - patch to its source or binary files + - any copy of a portion of its binary source files + +The user is allowed to redistribute this mod partially, in totality, or +included in a distribution. + +When distributing binary files, the user must provide means to obtain its +entire set of sources or modified sources at no costs. + +All distributions of this mod must remain licensed under the MMPL. + +All dependencies that this mod have on other mods or classes must be licensed +under conditions comparable to this version of MMPL, with the exception of the +Minecraft code and the mod loading framework (e.g. ModLoader, ModLoaderMP or +Bukkit). + +Modified version of binaries and sources, as well as files containing sections +copied from this mod, should be distributed under the terms of the present +license. diff --git a/build.gradle b/build.gradle new file mode 100644 index 00000000..5539695e --- /dev/null +++ b/build.gradle @@ -0,0 +1,135 @@ +buildscript { + configurations.all { + resolutionStrategy.cacheChangingModulesFor 0, 'seconds' + } + repositories { + mavenCentral() + maven { + name = "bdew" + url = "http://jenkins.bdew.net/maven" + } + maven { + name = "forge" + url = "http://files.minecraftforge.net/maven" + } + } + dependencies { + classpath 'net.minecraftforge.gradle:ForgeGradle:1.0-SNAPSHOT' + } +} + +apply plugin: 'forge' +apply plugin: 'scala' + +version = "0.9.0" +ext.bdlibver = "0.9.0.2" + +if (project.hasProperty('buildnum')) { + project.version = project.version + '.' + project.buildnum +} else { + project.version = "0-SNAPSHOT" + ext.bdlibver = "0-SNAPSHOT" + repositories.mavenLocal() +} + +group = "net.bdew" +archivesBaseName = "gendustry" + +minecraft { + version = "1.6.4-9.11.1.964" +} + + +repositories { + mavenCentral() + maven { + name = "bdew" + url = "http://jenkins.bdew.net/maven" + } +} + +dependencies { + compile "net.bdew:bdlib:" + bdlibver + compile "net.bdew.gendustry:gendustry-deps:1.0.0.+" +} + +import org.apache.tools.ant.filters.ReplaceTokens + +sourceSets { + main { + scala { + srcDir 'src' + } + resources { + srcDir 'resources' + } + } + processed { + scala { + srcDir 'build/stage' + } + } +} + +def myTokens = [GendustryVer: project.version, BdLibVer: project.bdlibver] + +task stage(type: Sync) { + from sourceSets.main.scala + into 'build/stage' + inputs.property "tokens", myTokens + stage.filter(ReplaceTokens, tokens: myTokens) +} + +processResources { + inputs.property "tokens", myTokens + from(sourceSets.main.resources.srcDirs) { + include 'mcmod.info' + filter(ReplaceTokens, tokens: myTokens) + } + + from(sourceSets.main.resources.srcDirs) { + exclude 'mcmod.info' + } +} + + +compileScala { + source = sourceSets.processed.scala + dependsOn stage +} + +task sourceJar(type: Jar) { + from sourceSets.main.allSource +} + +task deobfJar(type: Jar) { + from sourceSets.main.output +} + +jar { + appendix = 'universal' +} + +artifacts { + archives sourceJar + archives deobfJar +} + +apply plugin: 'maven-publish' + +publishing { + publications { + maven(MavenPublication) { + artifact deobfJar + + artifact sourceJar { + classifier "sources" + } + } + } + repositories { + maven { + url "file://var/www/maven" + } + } +} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..d5c591c9c532da774b062aa6d7ab16405ff8700a GIT binary patch literal 50508 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%0DD3;W?!&t=FUIvF}Y7;NYDq6$vu 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 00000000..8a0b282a --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/resources/assets/gendustry/gendustry-recipes.cfg b/resources/assets/gendustry/gendustry-recipes.cfg new file mode 100644 index 00000000..3ead4369 --- /dev/null +++ b/resources/assets/gendustry/gendustry-recipes.cfg @@ -0,0 +1,203 @@ +// This file is loaded in init, recipes should go here + +// === RECIPES === + +B = OD:ingotBronze +T = OD:ingotTin +C = OD:ingotCopper +A = OD:gearBronze +S = B:pistonBase +R = I:redstone +G = I:ingotGold +I = I:ingotIron +g = I:goldNugget +D = I:diamond + +Y = buildcraft.BuildCraftSilicon[redstoneChipset] @ 4 // BC has no proper item interface? + +def forestryB = forestry.api.core.BlockInterface.getBlock +def forestryI = forestry.api.core.ItemInterface.getItem + +// === Crafting items === + +P = B:thinGlass + +TPT +TPT => gendustry:MutagenTank +TPT + +Z = B:weightedPlate_light + +BBB +BPB => gendustry:BeeReceptacle +RZR + +AGA +SRS => gendustry:PowerModule +AGA + +Q = I:netherquartz + +DQD +QYQ => gendustry:GeneticsProcessor +DQD + +// alternative recipe, cheaper but takes a lot of power +assembly: D*2, Y, Q*2, 100000 mj => gendustry:GeneticsProcessor + +TgT +R_R => gendustry:UpgradeFrame +TgT + +BRB +BAB => gendustry:ClimateModule +BRB + +P_P +P_P => gendustry:Labware * 16 +_D_ + +// === Templates === + +s = gendustry:GeneSample +t = gendustry:GeneTemplate + +_T_ +TRT => gendustry:GeneSampleBlank +_T_ + +RTR +TDT => gendustry:GeneTemplate +RTR + +smelt: $s => gendustry:GeneSampleBlank,0 +smelt: $t => $t, 0 + +// === Machines === + +O = $forestryI(sturdyCasing) + +M = gendustry:MutagenTank +T = gendustry:BeeReceptacle +P = gendustry:PowerModule +Z = gendustry:GeneticsProcessor + +H = B:hopper +L = B:glass + +BHB +POP => gendustry:MutagenProducer +AMA + +TZB +POT => gendustry:Mutatron +TMB + +AZA +TOT => gendustry:Imprinter +APA + +AZA +TOD => gendustry:Sampler +APA + +LTL +LOL => gendustry:IndustrialApiary +ASA + +// === Upgrades === + +X = gendustry:UpgradeFrame + +_A_ +RXR => gendustry:"upgrade.auto" +_S_ + +r = OD:dyeRed +g = OD:dyeGreen +b = OD:dyeBlue +y = OD:dyeYellow +L = B:glass + +rbg +yXy => gendustry:"upgrade.flowering" +LLL + +bbb +LXL => gendustry:"upgrade.sky" +LLL + +W = $forestryI(craftingMaterial) @ 2 // silk wasp + +WWW +WXW => gendustry:"upgrade.sieve" +WAW + +W = $forestryI(beeswax) + +WLW +LXL => gendustry:"upgrade.sealing" +WLW + +W = I:yellowDust + +WLW +LXL => gendustry:"upgrade.light" +WLW + +J = $forestryI(royalJelly) +S = I:sugar + +BJB +SXS => gendustry:"upgrade.prod" +BAB + +Z = I:blazePowder + +AZA +QXQ => gendustry:"upgrade.hell" +AZA + +F = I:fermentedSpiderEye + +FLF +LXL => gendustry:"upgrade.life" +___ + +I_I +_X_ => gendustry:"upgrade.territory" +I_I + +L = gendustry:ClimateModule +R = B:reeds +S = B:sand +N = B:hellrock +O = I:snowball + +SSS +BXB => gendustry:"upgrade.dryer" +BLB + +RRR +BXB => gendustry:"upgrade.humidifier" +BLB + +NNN +BXB => gendustry:"upgrade.heater" +BLB + +OOO +BXB => gendustry:"upgrade.cooler" +BLB + +mutagen: I:redstone -> 100 +mutagen: I:yellowDust -> 200 +mutagen: B:lightgem -> 800 +mutagen: B:blockRedstone -> 900 + +ifMod IC2 { + mutagen: ic2.core.Ic2Items[uraniumBlock] -> 4500 + mutagen: ic2.core.Ic2Items[Uran235] -> 9000 + mutagen: ic2.core.Ic2Items[smallUran235] -> 1000 + mutagen: ic2.core.Ic2Items[Uran238] -> 500 +} \ No newline at end of file diff --git a/resources/assets/gendustry/gendustry-tuning.cfg b/resources/assets/gendustry/gendustry-tuning.cfg new file mode 100644 index 00000000..30fa51f3 --- /dev/null +++ b/resources/assets/gendustry/gendustry-tuning.cfg @@ -0,0 +1,237 @@ +// This file is loaded early in preInit and should contain all the configuration +// Recipes shouldn't go here as items aren't registered yet + +// Power config values, those are used for all machines +// ---------------------------------------------------- +// +// MinReceivedEnergy: +// Min energy received into buffer in a single pulse +// Should be reasonably high to prevent small update spam +// +// MaxReceivedEnergy: +// Max energy received into buffer in a single pulse +// Should be high if direct connections form BC engines are expected as they output once in up to 100 ticks +// 500 is a good value for a combustion engines +// +// ActivationEnergy: +// Machine will until that much energy is available before it does anything +// Should be reasonably high to prevent small update spam +// +// MaxStoredEnergy: +// Size of internal buffer, for some machines this affects speed, see below +// +// PowerLoss, PowerLossInterval: +// Power loss from internal buffer, will loose on average PowerLoss/PowerLossInterval MJ/tick +// Cannot be set below 0.01, this is enforced by BC API +// +// MjPerItem: +// Cost of a single operation in MJ, for most machines this means processing 1 item +// +// PowerUseRate: +// Sets the max speed of machines with variable speed +// +// Most machines use a variable speed system, while MjPerItem is constant, the actual energy used per tick is variable +// The upper bound is MaxStoredEnergy * PowerUseRate and the lower bound is ActivationEnergy +// +// For example, with the following config: +// +// MaxStoredEnergy = 10000 +// MjPerItem = 10000 +// PowerUseRate = 0.005 +// ActivationEnergy = 5 +// +// If a machine recieves 10 MJ/t it will stabilize at ~2000 energy stored and use 10 MJ/t to run, completing a cycle in 1000 ticks +// If the same machine recieves 50 MJ/t it will stabilize at ~10000 energy stored and use 50 MJ/t to run, completing a cycle in 200 ticks +// While if it would recieve 2 MJ/t it will only run once in 2.5 ticks on average, will consume 5 MJ/t every time it activates and will take 5000 ticks to finish, no energy will be stored + +cfg Machines { + cfg MutagenProducer { + MinReceivedEnergy = 50 + MaxReceivedEnergy = 500 + PowerLoss = 1 + PowerLossInterval = 100 + + PowerUseRate = 0.0005 + MjPerItem = 100000 + MaxStoredEnergy = 500000 + ActivationEnergy = 25 + + TankSize = 10000 // Output tank size in milibuckets + } + + cfg Mutatron { + MinReceivedEnergy = 50 + MaxReceivedEnergy = 500 + PowerLoss = 1 + PowerLossInterval = 100 + + PowerUseRate = 0.001 + MjPerItem = 20000 + MaxStoredEnergy = 100000 + ActivationEnergy = 10 + + TankSize = 10000 // Output tank size in milibuckets + MutagenPerItem = 1000 // Mutagen use per run, in milibuckets + LabwareConsumeChance = 100 // Chance that the Genetic Labware will be consumed, 0-100 + DegradeChanceNatural = 0 // Chance of natural princesses to become artificial when mutating, 0-100 + DeathChanceArtificial = 10 // Chance of artificial princesses to be killed when mutating, 0-100 + } + + cfg Sampler { + MinReceivedEnergy = 50 + MaxReceivedEnergy = 500 + PowerLoss = 1 + PowerLossInterval = 100 + + PowerUseRate = 0.001 + MjPerItem = 20000 + MaxStoredEnergy = 100000 + ActivationEnergy = 10 + + LabwareConsumeChance = 100 // Chance that the Genetic Labware will be consumed, 0-100 + } + + cfg Imprinter { + MinReceivedEnergy = 50 + MaxReceivedEnergy = 500 + PowerLoss = 1 + PowerLossInterval = 100 + + PowerUseRate = 0.0005 + MjPerItem = 80000 + MaxStoredEnergy = 400000 + ActivationEnergy = 20 + + LabwareConsumeChance = 100 // Chance that the Genetic Labware will be consumed, 0-100 + DeathChanceNatural = 0 // Chance of natural princesses or queen to be killed when imprinting, 0-100 + DeathChanceArtificial = 10 // Chance of artificial princesses or queen to be killed when imprinting, 0-100 + } + + cfg IndustrialApiary { + MinReceivedEnergy = 10 + MaxReceivedEnergy = 100 + MaxStoredEnergy = 10000 + PowerLoss = 1 + PowerLossInterval = 100 + ActivationEnergy = 0 + + BaseMjPerTick = 2 // Base run cost in MJ/t, before any modifiers + } +} + +cfg Items { + cfg IndustrialGrafter { + Charges = 200 + RfPerCharge = 5000 // This is in RF not MJ! + } +} + +// === INDUSTRIAL APIARY UPGRADES === + +cfg Upgrades { + + // section names are used in localization and texture names + // id is used in saves, changing it will brake any upgrades that already exist + // max is the maximum number installed in a single apiary + // valid modifiers: + // * Boolean: sealed, selfLighted, sunlightSimulated, hellish, automated, collectingPollen + // * Numeric: lifespan, territory, mutation, production, flowering, geneticDecay, energy, temperature, humidity + + cfg prod { + id = 0 + max = 8 + production *= 1.2 + energy *= 1.2 + } + + cfg life { + id = 1 + max = 4 + energy *= 1.05 + lifespan /= 1.5 + } + + cfg flowering { + id = 2 + max = 8 + energy *= 1.1 + flowering *= 1.2 + } + + cfg territory { + id = 3 + max = 4 + energy *= 1.05 + territory *= 1.5 + } + + cfg humidifier { + id = 4 + max = 8 + energy *= 1.05 + humidity += 0.25 + } + + cfg dryer { + id = 5 + max = 8 + energy *= 1.05 + humidity -= 0.25 + } + + cfg heater { + id = 6 + max = 8 + energy *= 1.05 + temperature += 0.25 + } + + cfg cooler { + id = 7 + max = 8 + energy *= 1.05 + temperature -= 0.25 + } + + cfg sealing { + id = 10 + max = 1 + energy *= 1.05 + sealed = Y + } + + cfg light { + id = 11 + max = 1 + energy *= 1.05 + selfLighted = Y + } + + cfg sky { + id = 12 + max = 1 + energy *= 1.05 + sunlightSimulated = Y + } + + cfg hell { + id = 13 + max = 1 + energy *= 1.5 + hellish = Y + } + + cfg auto { + id = 14 + max = 1 + energy *= 1.1 + automated = Y + } + + cfg sieve { + id = 15 + max = 1 + energy *= 1.25 + collectingPollen = Y + } +} \ No newline at end of file diff --git a/resources/assets/gendustry/lang/en_US.lang b/resources/assets/gendustry/lang/en_US.lang new file mode 100644 index 00000000..2c65deea --- /dev/null +++ b/resources/assets/gendustry/lang/en_US.lang @@ -0,0 +1,109 @@ +tile.gendustry.mutagen.name=Mutagen +tile.gendustry.mutagen.producer.name=Mutagen Producer +tile.gendustry.mutatron.name=Mutatron +tile.gendustry.apiary.name=Industrial Apiary +tile.gendustry.imprinter.name=Genetic Imprinter +tile.gendustry.sampler.name=Genetic Sampler + +item.gendustry.mutagen.bucket.name=Mutagen Bucket +item.gendustry.mutagen.can.name=Mutagen Can + +item.gendustry.MutagenTank.name=Mutagen Tank +item.gendustry.BeeReceptacle.name=Bee Receptacle +item.gendustry.PowerModule.name=Power Module +item.gendustry.GeneticsProcessor.name=Genetics Processor +item.gendustry.UpgradeFrame.name=Upgrade Frame +item.gendustry.ClimateModule.name=Climate Control Module +item.gendustry.Labware.name=Genetics Labware +item.gendustry.GeneSample.name=Gene Sample +item.gendustry.GeneTemplate.name=Genetic Template +item.gendustry.GeneSampleBlank.name=Blank Gene Sample +item.gendustry.Waste.name=Genetic Waste +item.gendustry.grafter.name=Industrial Grafter + +gendustry.upgrades.prod.name=Production Upgrade +gendustry.upgrades.life.name=Lifespan Upgrade +gendustry.upgrades.flowering.name=Flowering Upgrade +gendustry.upgrades.territory.name=Territory Upgrade +gendustry.upgrades.sealing.name=Seal Upgrade +gendustry.upgrades.light.name=Light Upgrade +gendustry.upgrades.sky.name=Open Sky Upgrade +gendustry.upgrades.hell.name=Hell Upgrade +gendustry.upgrades.auto.name=Automation Upgrade +gendustry.upgrades.humidifier.name=Humidifier Upgrade +gendustry.upgrades.dryer.name=Dryer Upgrade +gendustry.upgrades.heater.name=Heater Upgrade +gendustry.upgrades.sieve.name=Sieve Upgrade +gendustry.upgrades.cooler.name=Cooler Upgrade + +fluid.gendustry.mutagen=Mutagen + +gendustry.label.charges=Charges: %s + +gendustry.label.empty=Empty +gendustry.label.breeding=Breeding +gendustry.label.working=Working +gendustry.label.maxinstall=Maximum Installed: +gendustry.label.temperature=Temperature: %s +gendustry.label.humidity=Humidity: %s +gendustry.label.energy=Energy Required: %s MJ/t +gendustry.label.lifespan=Lifespan Modifier: %s +gendustry.label.flowering=Flowering Chance: %s +gendustry.label.production=Production Modifier: %s +gendustry.label.territory=Territory: %s + +gendustry.label.mod.automated=* Automation +gendustry.label.mod.hellish=* Hell Environment Simulation +gendustry.label.mod.sealed=* Rain Protection +gendustry.label.mod.selflighted=* Internal Lighting +gendustry.label.mod.sky=* Open Sky Simulation +gendustry.label.mod.energy=* Energy Consumption +gendustry.label.mod.lifespan=* Lifespan +gendustry.label.mod.flowering=* Flowering and Pollination +gendustry.label.mod.geneticDecay=* Genetic Decay +gendustry.label.mod.mutation=* Mutation Chance +gendustry.label.mod.production=* Production +gendustry.label.mod.territory=* Territory +gendustry.label.mod.sieve=* Pollen Collection +gendustry.label.mod.temperature=* Temperature +gendustry.label.mod.humidity=* Humidity + +gendustry.error.power=Not enough power + +gendustry.label.sample.rootBees=Taken from a Bee +gendustry.label.sample.rootTrees=Taken from a Sapling +gendustry.label.sample.rootButterflies=Taken from a Butterfly + +gendustry.label.template.rootBees=Can be applied to a Bee +gendustry.label.template.rootTrees=Can be applied to a Sapling +gendustry.label.template.rootButterflies=Can be applied to a Butterfly +gendustry.label.template.blank=Gene Samples can be added + +gendustry.chromosome.FLOWER_PROVIDER=Flowers +gendustry.chromosome.GIRTH=Girth +gendustry.chromosome.SPEED=Speed +gendustry.chromosome.YIELD=Yield +gendustry.chromosome.HEIGHT=Height +gendustry.chromosome.GROWTH=Growth +gendustry.chromosome.FLOWERING=Flowering +gendustry.chromosome.METABOLISM=Metabolism +gendustry.chromosome.LIFESPAN=Lifespan +gendustry.chromosome.TERRITORY=Territory +gendustry.chromosome.FERTILITY=Fertility +gendustry.chromosome.SIZE=Size +gendustry.chromosome.HUMIDITY=Humidity +gendustry.chromosome.SPECIES=Species +gendustry.chromosome.FIRE_RESIST=Fire resist +gendustry.chromosome.TEMPERATURE_TOLERANCE=Temperature tolerance +gendustry.chromosome.HUMIDITY_TOLERANCE=Humidity tolerance +gendustry.chromosome.PLANT=Plant +gendustry.chromosome.EFFECT=Effect +gendustry.chromosome.CAVE_DWELLING=Cave dwelling +gendustry.chromosome.MATURATION=Maturation +gendustry.chromosome.NOCTURNAL=Nocturnal +gendustry.chromosome.TOLERANT_FLYER=Tolerant flyer +gendustry.chromosome.FRUITS=Fruits +gendustry.chromosome.SAPPINESS=Sappiness + +gendustry.allele.false=False +gendustry.allele.true=True \ No newline at end of file diff --git a/resources/assets/gendustry/textures/blocks/apiary/apiary.psd b/resources/assets/gendustry/textures/blocks/apiary/apiary.psd new file mode 100644 index 0000000000000000000000000000000000000000..b7c2e514e70645f3388bb4a9fcfdb12d0504647f GIT binary patch literal 43766 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 ZAh_<1ZWH$}*dRljg&yPXmA$He|9=2&t^xo6 literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/blocks/apiary/side.png b/resources/assets/gendustry/textures/blocks/apiary/side.png new file mode 100644 index 0000000000000000000000000000000000000000..9b3436b62a1007bcf6c749b0ba3d2b535d2b9844 GIT binary patch literal 1394 zcmWlZ`8yN{9EZP!Cy{-GYLTOJ826DfN7RVzC=2D@@j3`53!=RU?U zjG1xFm|Q7Do(;)aOHwv#e|SId^L+k*H{QbhhKP`q5CDjvO;DEmmj53?zWqfNCb0G; z8EkA9Y~|+`9EJ$7w3+*#N+Nq1oY$e01iZ1m{}WB3gB51)Rsei72G#N z`dOJ^kVyfj>xjP+p)3~)Nl;1wavl(4zyWo>mj&%K=w(9>0~k!`XosF& z=;OlRFoZj5J;rJW+NjgJp&}mwY}ETWz#0HA3l;VN&{`oi9nzmeN*c7afUlKmKNmP7 z(9r<{ub{I7TyG+o{qV?1n@)!=Ixtv}k^_8t$4NVhI7X_e*j*5)s+yF%@>X0PH+v$5sZdR%DR?zD zHMo|b*SH;f-%)ux`m?;C-0ht0?K28&^!YT!Iv4x5tE-hyLKx^?nYf1C#mJFUXu{-< zr1{xjbSTy%@dz>N*OxPe;~c;HhYkvw96SiKM314( zShr0&+3J)|rJShjGGlm!lUeLtE^>^2NUC{MZZC8AkvVB2jrQ@90nwD8U^9=HYC8HG z()Q=a3So*88)NtRrlt!z~vDSU!-MYO?|p>N5$Gh--9pY3a`OMc)UE!8lp+x`PT9y5K%Te#hqFR6xi zs6hLfXmu^wcfFP~_wycqt9`QEH-RK!J<}P-cj=h$+B3OXQoc!^7_X-S7cMiF zlDh@W&hd%5I0g~aG>6%_l(RTpd9x!oXTq+>y3e`t9jUJ?q;zVs>xD)R)k89(sIgNRuGZaO4guaFE>wox^+8x7Rk@n zC*w7eF++CwN?KAfS_JLE`UWLQ30%vu` zyrhZ`M3!geV+!VoX|mF5h@kfy`r zGH&4=-Mvn*uY`I8cU?Pd|9|tO{DA}6?TSs(VV@KA+Iv_!@#4}@Gzt2KGm41@-ufF(OvYDS#4o#*Dw`qZ23 zDT2JiblSL;daZ3;r)go*Oy;f!OWq`}CH|plc7n(su^z57gYU0?)(rV6q$_yDgHxx{ z`a@p0U3nbyXS?m+0p{%qj{L{44|jIIEK{wKPG5-`JzwUx8W-n(8r51~T2Z;JNJx;2 x5zju1L>HG*dQ%){xEqcUN_!dGd!P1dfDfo;0{&4n^vHfh0c~uKs=nq-_zwgMii7|F literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/blocks/apiary/top.png b/resources/assets/gendustry/textures/blocks/apiary/top.png new file mode 100644 index 0000000000000000000000000000000000000000..e14d0ce1552ba2fb83d243bca608ad691a402e74 GIT binary patch literal 1330 zcmV-21f z%nM^nDs*ihp( zI+c-SnwUVoxg5j76VcQ&(9<5au>;1*K+4S&uC7GR(It?O0K~!>($*ujswJbMLd3=a z(bX%KnE=4Q4Zgkrn3ZM8&H%Wz0m{lAy0#0|+9AQbJ8*IUy|+8k+5)}04r*m6Tt+9R znFXYl1ASjLuA>x(gf^0t0EUB1ySV|Flx1>OFu}kEiH87~odC?x3bn5b$I1kqqX3kb z0K>%ssi{ZP*%xnAFV)&Ac3CpT!!^gr4ARs<*4#Rhk6gaK1jWY$yt)C8j6Bud4XmLI zytOE$qDi8hNzc^|!^8xVi$j-`Wq4aNnU`g1P%Uj!E_+=xXiqG8Tr-D*0LRD{$j2eG zst<8(E~248z`z2>%K@jRM#IHG$jCjlUR2EDrn*W(45mt()aLeJ6{Yf&w9STUNI zWx0AQzyJUPNJ&INRCwBilkG#=Rusl>3?V}h2uW;EVM;_H5CIjG7nfoN0|QM{)&hMS zGz0=_E!eKxB+0+Nd((a2^C4gE@8&$`Jof<2wq+=FW?9qud`gx{+nm_8YLO(V+Nuh) zMa^fLH4|d?#5A?3RrC33HB(dP*2I)mF!7z=+=K<8De!!_aobRu&8E=gCHR%X=Mxpk zHN{`@*R$DSy-vjAsrI1l@Aykunx^YCzfi$kR#K%C9IsaK!bPSR@b{~&7o?d;}@nYDC1OeL@CgQETMBvKCWh>Yye}({E)ICtBgopZ6Ji5Xqp9w5k!7}&7j{yD}oge_Zr9M5~NBRhu&ZK2w z=d8=3V@HIo8lp$!*kB+TYV$q~h9wafJB$lJ_sF7Xa2y+D61_1G-veni=}dkPwux#x zun}lhk*zQ94X6_loS>;G$={(AWj1l&oAu!aFP z;HdqIo2G(c7u!sb;@nA!?j)&Sm}F?M6n>hbAy`Y;pEr6e~^SfWo^&|Dvkh4Q?Pm+ zCknfV`Pfzx2|n80435Jk2*WhxnndRaobI%}y-_F<8in>F-pKbjk@c@SC{1XR$Pu(Z zm0EQMrSW($?)N*nAwj1QFtLEpF07*qoM6N<$f;+i^(EtDd literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/blocks/imprinter/bottom.png b/resources/assets/gendustry/textures/blocks/imprinter/bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..00d239bf5febc13190162b7469b96180a4019ea5 GIT binary patch literal 1212 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 literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/blocks/imprinter/side.png b/resources/assets/gendustry/textures/blocks/imprinter/side.png new file mode 100644 index 0000000000000000000000000000000000000000..080325a6af5c5cfb8b503767352a3cd5b50d5a41 GIT binary patch literal 1322 zcmV+_1=aeAP)c~gLz`oxRlXvMw5$mEN*UO zODeaKSizladR;V)ePG9@dzq+=&9I1WR4=S*P}sqvDw2(DlZTCmc3V_OeRpMbY*>AB zUC_0VgJU>RdQ?I@GH!r$(YJ-zm59YnFvPfm~VyikEWM@{ntd*jNYQ~jF z)xDdmo`TD(X?&4+wxo&9Sy9WUTbYxAlY?ZwnPr=aYHVauVOmN?cyCfmJ&A&Dk%Vl_ zu7%31f=EI+r>2p!Pf4;zE!Biw!=P}ymSS8+C(pBt#iMlAzn+?!ZJdi+n2&jKRxrbZ zSJ%Lxc3CpSw2Ui&eA>mR)~kstKT4#KZ!2JBJ~k@GrFg`mbIPlM)4G^?e@)lGgVU99 z+{dfSgm2!=vdf)w&yar7kZ8JTJ!xk}ZFx;^epAPtPSdt{$+dc(cxS+&b;+uAUyF5d zfLfM6NjhU=v6*(PtA~|&M1p*4WRZ1yglsELR4ROg%C3c> zF+r~ktN;K5KuJVFRCwBilUsM%MihmGuoa2%$O3^FDz}co#u2{62rx!cVhmd9_g=VM4P8RbiZh=nQv*%S$l6GOp<_0RpW)EQz=oDBvE5YlGH?1 zg;1$f6fTbO8zqcme!x#cRf-iQPz9v|n2)J%_iap>OKsZ+l=?oF`+ZqfR3WG^;6Z~iJ7QrqlmZ^12nJ@V~#`Rgafe+2w}hxt$Mw_*AS+E zZ3~e|m=i@aIf(^H<&UzT_v(AXa5&VD%H>S1*=n_N8EZf;6G?~_T&;58k>2r4u8WHc zuVdtznf6GF00$C2B!Sam$=k^1^IQF@BMwF*V_xnIG>avtDIi9uRrU(`{6yM3J`+dJ zuCA^OqsRxr>ZuTi7>Z)Av+~E}P*~mET+cq&EQ|l6Lm0j%o$@thR}^~Pjpg&g%J$>+ z{r&8hD2l9kyUXMh;6uVF1#W)Z-Tl5+s~xXrPo7(mUMh;N%mG#LAsXhoYeR=Ih!Ffc zo6VkliiSr;5#k_S(|1`j)78Iw_3h5ij{W4x)7#spXD0{x9iy@m2yr4)%7LZZhYznG zT;F^9_RX7bzFy4^=Util6-9`HKCbpMcl8%HjX%lYnPx=@esPv<8YYG?1=Ri}T$RT54Ve9wvo89~T4J(4IWq6uvs|z;)(U(dQq3q!1eEFwe#^dqFKl-hl8a}BR3TqJaXI9#=*R3nvwIbn-~DlmW-TjI>4GE=(^b literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/blocks/imprinter/top.png b/resources/assets/gendustry/textures/blocks/imprinter/top.png new file mode 100644 index 0000000000000000000000000000000000000000..ced1db3f0be3f751b9919f224e213e80f8af7fa3 GIT binary patch literal 1326 zcmV+}1=0G6P)P`(zukeb2ns6DsEISyp&_d zhDyn*e#DJdc5Gy-ctp*xh^T>8a%ElF!lSyGb;O)=(6x|3lvL8RjJtzM)Z53pm2Hh_ zM7NG&x{O=2g;T7HXSIo3lVv!2a%<9^XVtx%zR|Y4&a%Uyac#4FaaAzBm}JbZg}Rem z%B+IIo^8R^y=q}rK8{MId{WBS!D~`CbF+TP)xBMLRKt^Eg=IL$r+d${j9f-1#?!fi zV>eW)X~m;-uZCQFUNnAqaYU9`vVKX6WIoovo?C!gYp-^;l5W?)pmtd@fO&Monr@qN zNyeILzm{y7Yd@fPP;*y1Kaftq)Vs#fx4+W4V@)1JpLxQff5?JAz?^DoUsBMwl+cn@$ChNken8Bxl8|CG%%gT|Q7v>> zF)ZNYF8}}oL`g(JRCwBiligd|NEpR4CUFQMz_7LiM2x0kHW8)RI^$x9ASh`qwtiFs z2;$mZTifo3>n_!GlYf0DX>ayw&&Ax#Z{~T=bKb+bL0~Wmf**7j^hj&7W5p)^?hffcJ2&af%kikA#lAKfwtbaN2QVFLDL(JY|`)BwmuR|memtD z;~Y|Knnc$j1)4^QO-z|m3_aWS^s&J4hGilO&vXcq$r86N%UL9Y7%lVDM+)bG%Tp2^^qK=RT+2yo}A|)qHG*KuEO~Jqviw@9Bgv z{NmzvG5!AY;+I$dyjuMDD>hLlIUx)PYLHSH(=UG)x_hZTHOG#0;kO^ZL#?C+gUt|_ z0wn*Em0lFLi;`5_-hRQ9rU(G43!9wp>M~eZczCBs?abloYNpXRZ7ap>!@>i!zUMb1 zo1ptVcA&JkxN5b^F>SSr^}9P2S|1p|hLk62A-|&>URJKx*VikRN8D*KkyBM*ju;>e zZ5cflRR-)HFE1@EFE3TNOtJnlodU9MFq>oBgoUfzj?#E?y&UQI@=&UGyDIdovBCL) z<$3XDGb=?v_{H(%s`R?qj9Z?);c&iD(n&rR+h@QJOGhh5CnxLGLuqYxE^f(kmH~oz zChv8-St+x7eR8z2vT{`67?95=AT>AKFf0iE`1vNwhODsX5s;A*IWeW-a34ZIOLfH^ zWp(#aC3MMbX4ntv)+BOY^BVBc^kVDpU38|a=FFXqy~USzozNx zCPrGa)tS9xW@2;VP5P%vq{bLzLIP3pq5}|`A}Y%^OEcIQP!m%b z5|bi?WJ2Wd3S-#sL%Zj5Zp~xWv#pZILc^GhN|xR4_s^`6D6;AqoZDmN9XhTd81C3P kXXPFKx4i#X|9=G-08b#t7T%vqg#Z8m07*qoM6N<$f}Dns+5i9m literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/blocks/mutagen/flowing.png b/resources/assets/gendustry/textures/blocks/mutagen/flowing.png new file mode 100644 index 0000000000000000000000000000000000000000..20976a30fcdb255ae2e95556c4e917b5fbe4cb5a GIT binary patch literal 10187 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 literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/blocks/mutagen/flowing.png.mcmeta b/resources/assets/gendustry/textures/blocks/mutagen/flowing.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/resources/assets/gendustry/textures/blocks/mutagen/flowing.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/resources/assets/gendustry/textures/blocks/mutagen/flowing.psd b/resources/assets/gendustry/textures/blocks/mutagen/flowing.psd new file mode 100644 index 0000000000000000000000000000000000000000..e3ab4f960b24c1a01ac1eac1aefcd0651f900fa3 GIT binary patch literal 276934 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 literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/blocks/mutagen/sample.psd b/resources/assets/gendustry/textures/blocks/mutagen/sample.psd new file mode 100644 index 0000000000000000000000000000000000000000..6d1e6c2b6abb3dcbd3c14c997bea3dcb49a6a140 GIT binary patch literal 32926 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 literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/blocks/mutagen/still.png.mcmeta b/resources/assets/gendustry/textures/blocks/mutagen/still.png.mcmeta new file mode 100644 index 00000000..0645f48c --- /dev/null +++ b/resources/assets/gendustry/textures/blocks/mutagen/still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/resources/assets/gendustry/textures/blocks/mutagen/still.psd b/resources/assets/gendustry/textures/blocks/mutagen/still.psd new file mode 100644 index 0000000000000000000000000000000000000000..9c084428836db00d96d145356539afa9b49e00b1 GIT binary patch literal 86652 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 M{gWJsKKm#C54e{Rpa1{> literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/blocks/mutagenproducer/bottom.png b/resources/assets/gendustry/textures/blocks/mutagenproducer/bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..00d239bf5febc13190162b7469b96180a4019ea5 GIT binary patch literal 1212 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 WveDq0f3LX!0000X5H@c#LznW&ZrH#Fp zV}EsDeso>8qlkcYUVd|2v6^~)`G2w7OtMIzSnXlC|a+Kq+flKT=tG&Ph?B}*$i z?cSNKf4x=vDS5B&&!6{Z-hAc*IM-#ov3bYIY;0sAzExLCxi0HOwj->|vViL!#x-rT z4ua@CTx|8Y9b*a!x%_|~PnhApN+4z>X>nlHhSORgMdjM@_Z!Ghp z$%r2X78e8jWN+{3)5*(|(_&Z8`#^@%mExQIU;pmz?PF>`S@nSkldc!%@8A3V&+hVL z`sKp|pLa=J=}ZOu?RszB2iTURn87K)!|z2!XI6pJABZ$OngXm4HQi@`a|Z(j=1yH&MB`nkjd|?Df9bNfG};;=Qt2?k|cX``6{sB7vTAS@NClZ zG$8QN5-aQmh~z6JJim7pSRBjBg-tG9FlUyhJoPnbk_(%)X6W=}!Uq->_z};KMk9W~ zbGHBfGi(+vZ5BJ*H{{BK`WtI~x{Nh}bgs)lYrIa^eSL7E|< zT<&D6!%LesDj_Ns#5%0zaIR1z*m@Kbvh8x$ez)z}w6%rW?Afshym zkx~xe;wqJfQaZU)86sFky^1|B3}eks>>POMF@Q^L#kH2kF)YLNwJk5+)@8i;zw!Pr c|33l@0O)8CcdeecTL1t607*qoM6N<$f;}8l^#A|> literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/blocks/mutatron/bottom.png b/resources/assets/gendustry/textures/blocks/mutatron/bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..00d239bf5febc13190162b7469b96180a4019ea5 GIT binary patch literal 1212 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 M2kX0IyK9~P526m+RsaA1 literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/blocks/mutatron/side.png b/resources/assets/gendustry/textures/blocks/mutatron/side.png new file mode 100644 index 0000000000000000000000000000000000000000..475179d8572c30479d9cea0dbb5e4433e7864da7 GIT binary patch literal 1358 zcmV-U1+n^xP)c zNx30q9{>OYWJyFpRCwA0YRbYV0cKht2~7ksPYmcib`uY z#j1sEcTozgw*UIxxb8W7PtKV+ncw;5-nsWff*^!K@ImlAAM*G-k|IeGYBIz83(W;AM*K{=(6X+21@B*u-tE?h9khlGTDQ!0}f1_`WZv#INDeP|du9#NGqn&LxJ zQVVZVEQ^OY+Egt+wtv;X{XT59M%vM)6bu#Kx?x0lB5Z!9GyJ` zLKLrOu1FJ)3|*hB$!-rQ$Z5x0nr`+Yu0yLxXn!`9N_9Gh&N)}dNePAA;~fBkJ-FIs z6|sMiji=&qi@~wZRc%E9pwV|cb?dLiXl^#M`2E3%E1u0-2)pN8J2L_Fcfat|^4E<{ zYL@Fw|D3K{BbGSJ0&w46LCAv|`ND6lmVvX^k>0F2okA^5LRbt*juR39^E@c%SQoFO zf4F9m$kq0G6te_FnR9o@1a=A!1|D^@@o2B-%H?ub+b*(4$jB@cCd$p^3lBJ^4`@+r zb#ggNOcZHW<)DiDBD}+Mv)*7F91x;oG1s$TnpRaB8?60%(GA^9XqnO$N9ch{I8N+z zL=%8>gWAlS-Gm%&7o4y5;4e!!tg|ekgY_=V#@6oAUFZYyN$0lJ&t*cZP+E+Ou|(|# z>q9uNq~|A|56B}O$;E@xR|@7R2G7Iddc8Ho)K=v_qj>=cNssbv=5(Rrm`vZk_ zvD+)V2k&m>M*-TcEXp>m-R}4E;fsrla2}TML3(3DV`_`$*bB-LSg*E!emoyvo}FDX z^RcFBGSm3idZGW!YkD`4NG21edBMG=dHHAa{?GnqJlh{hlEA;%{~rMc08y{Lnp2u4 Qe*gdg07*qoM6N<$g22w2CIA2c literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/blocks/mutatron/top.png b/resources/assets/gendustry/textures/blocks/mutatron/top.png new file mode 100644 index 0000000000000000000000000000000000000000..507f247327665f2c657ba06fad1b0ec56ee59b7e GIT binary patch literal 1253 zcmViX4bbMYk$f|(4qk*}mi?Wz>*1w)|Rxq`p zgR+`>u9kJtx|w85DsNOTgnMM!#;U1~X|PAq?5HoTQz)VrD7$E)1Pth$q2po(mh_o`z8dJy^OYyRhDg9o7&tj2}wx0 zwOcQ{c5TY;-R4Q|zg|J&?Bm`~dLI2A9i8)@7npIZNg3TJ>Kq<+^qd~6?Kn0feM>iD z!vN;|IIpVeRAO;kRn1PM?&goxsc9TVZB;WsJC6iWeA37^fGwEaXb|N4ged!qEC6i- zXvcg)8AFP~;cPgBh#-a`90{8cTbUc+NCV7){6G=2AgGmX_?gMq{! zpF!%CELRBVP$5{)sRd&cZ-F?^A-wgjTr6&uHw(AKv)>C>q^_3#xfWPF&PhNly~6Eg zDwS%cZm0dvwyQ0vRO`<_!imz&fsU!*@JZ|6wW>d$w;K=E$A|ac3GjuU1G)x!;b!a6 z`<1G%=(UXp>*K@bwgBI4<4fSC18*cian{>E$^m0auv1BZ&mH<@0{k6fMU!pL z2@}^-NeTAR%LFKM8_YEj#lW^-CBSnClNT~Oz$UvYh_tLSxS5o=bN1q^3*i2@0OO}B z=yVqc`0|q*r=KKU+}{zfw`)qXvfL{sz^`6C0Ww94uJ%E?DTc-Wy0E@ZfS&`_Hx7Z` z?IUy|egPR`vl6-HevDAfWBiUDVC?er|LPKK7XWGgo{ z)y6oi)h)@mvX*e`r?r{uEM15((PS694E89*9I=Vxx)>q6x}uc(J}2!6n0Z@9kAUo= zuOK=?`+Y!s-#-A2#X?3;17=%>cdDA2p_y~_ScZ3c9^URnc>gc{9|RZxVO#PNsR%V# P00000NkvXXu0mjf{9AVm literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/blocks/sampler/bottom.png b/resources/assets/gendustry/textures/blocks/sampler/bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..00d239bf5febc13190162b7469b96180a4019ea5 GIT binary patch literal 1212 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 literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/blocks/sampler/side.png b/resources/assets/gendustry/textures/blocks/sampler/side.png new file mode 100644 index 0000000000000000000000000000000000000000..336dc5a695d3f64ba290b642637af3d8352a204b GIT binary patch literal 1360 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 literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/gui/apiary.png b/resources/assets/gendustry/textures/gui/apiary.png new file mode 100644 index 0000000000000000000000000000000000000000..501906a1b8ff2419aa9578052de92188368f239e GIT binary patch literal 1366 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$18e;u=vBoS#-wo>-L1;Fyx1 zl&avFo0y&&l$w}QS$HzlhJk_Qho_5UNX4x;cMk^M_K|2v>^4-NRAj-BTj0k(uTWm^ z$d(DpO>RMsMJ<6k5;yypnYL^yyZ+n8SkmKP%31w2*C*xFhismk##XsvTlp=ue|NX7 zT6HqNc+LO!Kl5yV+s}OSH}vWo_lAe(-u!v8Y+bhd8f7`Jzrqde?d;L5OV)<1p5FiZ z>#n_@-Ry-<{1kbR^WVIzPUF1@g8+jA$TKWh7$*+wd2g>L*8M}PHHw>W)xr$Y*6xJOxnlw@#DwB-#z|WtRSJodr*U#Yd=F_L5-#?EYb=~s0*4my);Gl^0UiZ47 z2ayddH-8E;Sle?n%#~+3aE_lT;W<0RQwa+CELMtdtJQCPx1V#%isQhNpxJ9a-|TLA z`?mF7+V|4sTl%_}FbO=pXyUS_(?X5up%lY}?}81V-8C#2-d4_cwugGNfq~&+4=X#P z$7Jz|4Z)B=JGFz2LB8|v;@dKe41Ej@+pm`X&HenapCLu*I>;#1*Zb%G-)#T&=M8(= zD296zUc1N$HwrWe%KJLc;7Cylm~WQV-v3Vi?>~tcmX;^I+E$Hg$`!s7qp|NmT%i0|%hFbKG8(){o4)vH&R|NFCd|8psZf?MtkaV|`( z><1zWEbNv8qXg(yCUD#U8S2ZwmohBfCvn_GLAcTDVqZw^uInb%4|y#k)`scJUw>U% zF5j2*qMC6I6I9QED^>GZBXq!wk}zxVhKaZ{RRQezM0$n;$Byjozg_J z1#TUP!O`FgG)p97(#8kZHu7b@lI6}*not@P@w`B3!o~-}vWy_J)b2&7m&gh?#xP?| zd!S_55MDf+p>5@=jC>cFw{tuC7!GJMJP>)%;AwizGf}p$Ldw`!@Pt+8`pK_c7R)%d zi!A|Y%cOXqN3Y{b(I8VD7;=~d7#29FF-5BXEVY<-uhU_Il5nFBD;p>eBuu#1-LQ-) zTD`TDZ#k23Aj7VF2ae$UwZgmlx-a`N;>an;=7KZ>&6NvoJlVJMz%nLgP>>vz{b$_w zO(|jP#Ve(`kDV5}GhF@pb?aJ3Gp~IN7RwIv-ngNXQgvVVRK$6vkYrt!C)JR=g&dJ6 sL5v#5L`YH3BzV#y#z=>xe_RF(v$dZr)_tXNj{yigUHx3vIVCg!0B#Y_zyJUM literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/gui/apiary.psd b/resources/assets/gendustry/textures/gui/apiary.psd new file mode 100644 index 0000000000000000000000000000000000000000..f5fe42595fa60b6444f6972d8a94ff0a4353ebdf GIT binary patch literal 91058 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 E4_2CZuK)l5 literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/gui/imprinter.png b/resources/assets/gendustry/textures/gui/imprinter.png new file mode 100644 index 0000000000000000000000000000000000000000..8997acecd825863e2ba37c90be308d5e12541c8c GIT binary patch literal 2631 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 S&fNfFh^`LiQ@?)!f&T*y@Yi_& literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/gui/mutagenproducer.png b/resources/assets/gendustry/textures/gui/mutagenproducer.png new file mode 100644 index 0000000000000000000000000000000000000000..0952f9a82adc8528ef33dc6ce30484505b9dc9bd GIT binary patch literal 1421 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 literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/gui/mutatron.psd b/resources/assets/gendustry/textures/gui/mutatron.psd new file mode 100644 index 0000000000000000000000000000000000000000..c44580b3edb7d70f550aca85311b4bc58b9f1aaf GIT binary patch literal 96505 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

l$I6TE2w}S*6tOQ!=7pP3d&#ywd=5h z+BGR6|0x%_FBK9~;n?J{;8^KAQ0U4!fN-Rts30G{8l*1s8C&(8Hb-eAy`ix^(4?Fe zNN0SmzM=TU$()H<#z=S8MsqYCZpS%r;^gSrh6vqm36x&kk!d&j^zuT7hQYbauTEa9 zAl{Wf=xV=*H~rai394U*Dq=BGZzme~l|92(kW^e{iG- zGI}Z}1t_0cP@7pn`LVQhnhGpUdsp)`mdb$h-w*Y7+J^^8|9-AMkYe?LS#7mioBNlp zZB(b){?|kO4M$ymXu7)eU(eMCQlx9Un&kKZVse@C?bh}uzkUAMyX;H6m+BIy+Ph0x zI(=Dlo!(tvc#%uat<|{vKap;A>Gfr6R5^CKcE2=l(Y5>EY_$~M;MyfGe0p1dmIR*~ zPo9t#7%axe?ZFv)^0R8;m>awypfUVvKUT*IwMF*G3Bo#&KNs1*6Y_x5w!6ZQa*?}x zAaCS@Ji*-?{9WKwZhX6e*&B}D@dT3x+)gqochdYF>HxoXs3rWY$tN~7Rmzp7Lwl&> zd^8{I^D$xMSkxs=d02cD5FG9E4gTo*S3M5Oxr*!P`p4W&w|`asP_`*}0pPB1DCqT8i( z$P_|fyKOyrSk!CT=C)LB*TbITyu77wZ(5hPTq6lJ`&n2}-%Tpr zkhd!@eMMg0vK4uYG!o&#a$$i!kmTg$ZO*F9(@S4jClZ_rCRvl0w^O>h&LkV5ARkGx zcxT?SC3#SpbxGwd$v4kP5EkvsTPfX{mnF?yJy#0_mJNA7(yG`d+Ftch#0n%W&vtU@w(2RxB(1AQxiNQmNtGH5=zF z+=zJtXkqN3-kelf_bmy{oaHMPNwYT0mrAoX&XE#lRT?Sv)h;6BO^PI$vuewh4O!W9 zrE}J9z<|_FB1hBI4N{mZUARUnowITc2}SKh6pGqz((UsrrA7;vEnB&M@nX!nA0h!h z+ze%3v2EkloQ&KpI~Uc7BxBRcHCxw67v^LFQFfh3qziJkZl0gHAbU~Hf}E9@oK#vh@Si541B!B~^Ppxj1(s@j zsELe{hL=JAimJnEyr`L&;!p+i0J$nB)<&*iUd&4$$FIs9TDPVm=T{XD#m!T53!}*J zd#su?1XAF^+DcbNsLq*kS#^~_U7s>={Ljx}&*?L<}C`(MdL>eS>@ z1f%?MaV;p+AQt5XI!U1S8p%{yP)=4mcoY}Z9!}0a`2RD70_M>iQ=Y~bZtcDlL)7k% z%kVGyLOJmPyD!wzq(14CzZ5^!_AwuT%G3I^4M%8d+(uMR+)=aEw8;yN8jV`rKRf(ACgX*p8kQJtR+-x@ht(XF6) z`U~(hjd_g-d{JKeXgNZUhvXxTFIq1(asn-XXw3g(a`%hMAG~!A*&`sR!)&n`>#pGg zZ4s;Xk7u|o{!ZPAdyon z_~Z2>T36tcbp>Q-e$=WMwP5pYt%-eEU4bf|thPe?aci#_S;ca%@=C1cwNPq_O|j0b zvJzW2QpNhV+G^|v$f5i5ujvYa-af4>Q0t1WD)Ut1#M>v z2z*;|@oUi)sFI+Vi#4y^%USg^g#rPlIi^ot&!-yJr&41aJ}WJhlhzfWXV>XajYn1<43HZ@+ zgw_?Hbp(*4{{HmhO^5583fYucNS)_Om)v(D* z?Q8O?Ojvt3Is4%M&lC#AZ<=HJ)D?SLR{$##zjmvDr~GT-ifSACs0_6g)3kLNdDAn! zH6rkV`HC886u{HeU)@UCw_9T$JvT<{3aHLP(yfthjkJDS&3lvJJxfZ6@~WLnRQne4 z9*6or-5EFMA!2bamQ+%}m literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/gui/sampler.png b/resources/assets/gendustry/textures/gui/sampler.png new file mode 100644 index 0000000000000000000000000000000000000000..ded731da2b6a51b44c8dcf105864e2fcf6cdcd62 GIT binary patch literal 2104 zcmbtVX;c%~6@Ez|$w1hYEmW3)9(6_q1eKix3IiTzk_v)=0fG{OIuN#D3y=VgjHYa2 z!Iafw3u*|2Wmr@Qu52POEKx&PoFHqA5OxA-@U))xlxctT{kiv@_rANI?_T>O&P_#0 zPYD2^a?;(!0|1Czg#aX6E(lR~L*xP-huyyluRU7`99=fCDj+)umza$ib&KE<}3TwEyI=nYX6nCm)(TIt9*`Y3p`thjDN z*0MOZ@+X?D#Rek1X93BfQc)=nLag`MUMQZpH;9Kc#feK=oLOu(d#IGh<4MN-*O=IX z3P63qHD9|;^90zPycB@?E=n29J9cAYc6N4F-+QKkt%T&YkGB)Ir3qUS z7(#WB^3B4`Km}&h5s7u1ALDWjgpnUcn)|s7hK|{=7$uqRzcahJDvs5Kat@-4+_DYy z^>eLGoCsNMe`C90Xd82Pdv&yh>Xwe-O5{PoF;I?sdzL;+)xh3Iey1EG?oC@2kKun7 zToKOks)uq-+-9q}N$Va6BR(cY8tD*B!b!Bj@@Odt#s~-b% zgmjE&^Qr@Rr8*1cH<92w+35!78yw-hamBhEewRzzSeluYO!W>;Jk4NT=2dxB;EHSO z)aj%=r+_LmVQ660%G6;aCwHSK#{mK6V^Lu0f4@SbxvSJunr(;~)PY z6tNR0>y|pEV^(2=rih>=2|>+#)eR(`PvT7ZwKY=4zR3j;9}Amh*$~$WBpO+*-DGVu z#biD66gYtP?P;DMOPvYu>3Sj}RwbuMy!$>LKQX}+|(-{RK|8c3Sx#ij^g{WC3Vq%~IKS!OEj1^&Mt&YYH35(B; z)Kz`)@pr||d(A7>(XZ7E9V^9*-s{aa?}Ez;u)kMAFVSq*HXV`W$+3V8qVw*gykDLC zdBJ9=m-VZKT8|r?_Wn)+JEG&!I{)4Zk39Pj;uhcSKYM**g zTv#A>NRc+FLiy2fqEg=%35P0Qilb}35*Ot$l5AidWxX**JlJC0qpPh~jL0f>ie+YM z+oG&RxGV{k@zmb!LH`R`STPeSbT35;w-znd>Wp#2z1;&ernYb{$~NDUex>b(Z_OpopTTLptkpGyNLK>L5tJdtm?w7AEvYwI(@Mp)((w6O7Ns5@S@B%d!^uD>-G+uCl`O|m%7OOFdf8^g zl1#9Az<9gK3c`_3%9!`VWOnEB98WgA$=`~rf&eH$0wX{N|EfqYx1UQDAXFVx>6>kj zHUG(14=C*nI*Y~fl%?6{MNGZY=hqbbQ`&EYC@W#tVc(kIP2Q&x?HcO%qWJw?pHaKf zokE+boXZkJO}o?hS)x8%Iy<}P$g)nJvYC%YN9=5@bK_#@7&zn;lS z^p20G*R2{XMX{Agq27N){W%Zm<>#h!0UD*f;{1%+vZo&nZb3mg*jst#f?e2aRTbQY zuMa`r;JOh5P?Z((~8d=n#Mk+~-+?NBs)q N=cFsnrOKI@_II?wWSam0 literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/gui/widgets.png b/resources/assets/gendustry/textures/gui/widgets.png new file mode 100644 index 0000000000000000000000000000000000000000..8b7ffaa1e1258e0c2648d2f532b9b33ca28f32b0 GIT binary patch literal 1900 zcmds%`%_bg630&x+Tb}S0dmMoBO(_cAjFCQyfaBceoFQ9Dn80Q>`K@e=pY zl>JhPK(hb9F@4b!lOslUn+ zqls7s+o++KxA`Gp{PF&V!Ya+ltryB{#@6Qt2}Qq9rPs#Bg2P%5A9R1;Bb6Q@%~xiR zN#f(*+NQ56mC6~vTpZsHJed0`7kGsrebaf9WHsSAi-0_^@s9z=XJ%?tbul@f9xib? z-3MZQ18G+6P&}{oEHS-tips0DDVuLqS63Gl6r|c8zUlBaJTAqd^CMQ2m zYwzf=RGs#h55IVE4ptC~uey@!?w2n(r`(L=c!|h5?P?BCX*BKaRbuJZGN~Yr{Jhnh z=$ozs^GQFgH`1;y4tPZjcn73wEko8~L2tlQ9Kh;h)#(uXqW~|Sx?PHM7Q3YnkHtu#r(cWGXDIwv!nvmVq zrd^o5_q%e6j!=Oj_vLvZ_~awTd9ZR>&}|$qD#p{ z*<$kt{HHZ$J2Pj=lH}vETFNs*`42CPii)gOYg1EG3vaZbkE5<(7Hpdn?QA)4IWt*-euw zC+5-r(Y9HVx0)n6O|B@UID--&e6iO5SHiX|rbB$o3SXh{R9wYf)~du6(a|@f4{iE3 z>P*9f;=u?%JThpP2vaOw+d7`)yCNx4mb8*}Z}eI7smg}ynw+xb8)C!mD{heLf(+6V z8SPJtL!-r-3lVpIuIDDjcjK^UoW1ss%5{t*KlG$h=Z0cpR}^;ABi>E_{&JtQ zPv@N-KOUSbR!;T#{`2mnTwqdcOh5{=LI1GOT~8Mg(zzVo)MNSAT#oxHxBrf^6U5w+ zmi(h~pT#OSm6z%;uuJg-GH+Pvq~+Kj*8h`iS6&cdz$=7n`%lYY{NI~}28V5_35rwv E1z>er00000 literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/gui/widgets.psd b/resources/assets/gendustry/textures/gui/widgets.psd new file mode 100644 index 0000000000000000000000000000000000000000..3a4f4046d532a5a4de213080c608d676a3f58575 GIT binary patch literal 76232 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 JImY1<`d=8`NGSjS literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/climatemodule.png b/resources/assets/gendustry/textures/items/climatemodule.png new file mode 100644 index 0000000000000000000000000000000000000000..445fe19f835d1246df1e77a24236b32a6f689145 GIT binary patch literal 968 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 literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/genesampleblank.png b/resources/assets/gendustry/textures/items/genesampleblank.png new file mode 100644 index 0000000000000000000000000000000000000000..d4de1281ca85659bb43c47d5d2ee97047444287a GIT binary patch literal 567 zcmV-70?7S|P)I;;IkmsxAbz3a*lMML&S0F6}1!`Uy%!hz+7H+7c6=ZR3OF=H@ zeuOy3aQ8=v*p3Usv|u+}IIa)Z^D*;!Lg1c)t=;eB#n_W!ycm0mVzCI@aj^LQ zBjF10GgfAkYe>De}IIrA1_*o0-) z`9;8@`93Zcn7XQJXf>Ps06bb~bwg+B-8~6f)&f6(*3}gV9W3kV?t&!C`~W0TghIp2 zjDV&>)4DhUNFroKVRtoIx>f)G?*d7ZpeX9CdNjBJ$kcfvnPeYB8h%j_`KBQCpqK4T z6yW`9A@4p5+~YdjoJSzyRW&!SimcZ~*`S002ovPDHLk FV1f@}31k2O literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/genetemplate.png b/resources/assets/gendustry/textures/items/genetemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..b2cd1187ec327faef47898751baea35ba75458ee GIT binary patch literal 1472 zcmV;x1wZ*tT1i zKA?qd$(E84vSV2kTcYXX1*0 z&mWMV-3}M7S#RL-g>z_bY=EoRA$vYpGbAM=CwCn3o|=Hn5gAY^m2kNF(B9S>{}Fh+ ze)PKgP;;-wjLsPdGDPk5x0Lz@t?o+}Vl1C#&Guumt?y7YD4d zATF&QC#BwDSFv6GOJ9Z||{1*?G0 zYsW`(i}3Pu1^*coE_}dVwzZH&0G%*Q`!2(QOjY$1@hyhXFoaY1aaez~D&?e|)P5LC@@h~I;ZLl}rggaf5Y7v3#pFob7e zKjlJgVL5j1`WnX%>|x@n1wP6Gshobk=lcQQ%xNah&7aXUQ3ra?27Sc^AFc}k}(^AN} zerc6NrvEy|$l4#K46ygoC8qHo{91jIytm4BElmya-H2M6uA{5tHuzvady|YQ$Ta65 z%REK~q#+QpW>9)bED!kTy5@G`j_tM_a*x~fXm`TFTDE0eOvVrM_K^WR`D5|~!2i+y a6<`2VOLbFOuuaMU0000Hp`@ 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 QdoK5s?j`;e^*V_D2fm4;r~m)} literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/labware.png b/resources/assets/gendustry/textures/items/labware.png new file mode 100644 index 0000000000000000000000000000000000000000..ae025eb94a20d0f40cd3c715c5cd8ee50276e06b GIT binary patch literal 1390 zcmV-!1(EuRP);=h^#pw$}!V)lhIyRxno=(ytrzvjv1>2uFL-{F6c-ocz<~pNc3W+2t>#_i!=j1`aB>V=wrt_82q5_yj~_n{dHzxo zi04vTzka>uDD&Z^S6(C2vFKd~Z)xQL@V~o`jE5$1 z?$ilv*s$TYL3BcYT)K*IJZX@$B*5u(LXt$xFPs(7KX?|;Joh3|Wf}cLLr}|>-<43! z%e5pN8q2#pc?Fc0m*eW_HAI6~GXDvL!s`|=6`jE3`F8u4FhI#tfnE?r#3R^FShzfX!wHA?eqaE~`R#;(BIDbfX%Dog<{KuFl2? zk!(V{cJ0zuzp+kR^ZHuNavrep95{}{wr$(A@u-Z87yhPIRaNQr76fRT22pYv%k{{L z$8!jcjEo>IdC4>{ff3Ry<$;TVFm*T_gng9s{yIb=<5$3DYvA>GJc!-60l{V`vMdvu zU?hUdtEikx%!V9Wf`8bcx_P}` zbbQ}~Cn^Ls+pWfIPY(YD7kfqmm(2+n8xP{Gcj`!CVUZpM_;B+_NP(hb?{0kg`KNsL z5^ewX3?5|@R1^houX+kfY-0A~YCJ>2loL)|53x?=a2L5Ds~Q|m2lxUTiahf&gc=(g zwZ6VSe74zd(CO*vfx{tCol558EPC{!s;c=sK-rIH&5}c4@y{{uzKIk~J2EK{u;$g( z#N+WA;y&528;P57?BDxE4k1yLjAtk~ZjM0ulth^00bBPUWol9^C&*Cb^!lGWd)go* zxkQ5y>%l}7Kus#SAVN?t<$8=t)|8^y-@ni8;b!UYgku;{1f{AOFs9+;Ggw$JT zGlY<6Yv%aIQ8d6c#B*(b7oNAj`@6q5_0YiC`pAz$rlBA zGvT~>>9BK(P9&4bISCbe+&TUAWTuz0vNH1mLZJ|g;k1wH+pw%C_e^NUzWMqfU%B`p zw6wHXI}^@$wVaSm5z4j-c5kqB9?*BXI)5F6RD!u}jNKh*au?jNR}~wsGUeyhk(6>g9CbzI_@aggu9T wz_Ff#mhOdf9!m4sT!ik`xCebb|4)Dc076-2ogHk_6951J07*qoM6N<$f{SjX%K!iX literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/labware.psd b/resources/assets/gendustry/textures/items/labware.psd new file mode 100644 index 0000000000000000000000000000000000000000..b25e0c5de2a9d33f732d7fc0ed0cb17edfa95fb1 GIT binary patch literal 26054 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 literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/mutagen/bucket.png b/resources/assets/gendustry/textures/items/mutagen/bucket.png new file mode 100644 index 0000000000000000000000000000000000000000..c0c8ed2f59e60b95de8352f88860c51949dcd3e4 GIT binary patch literal 412 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8x&WULSJ5^tv34z)ejVuvI&zbBm1gRRv}%iYX^VGg%S_Ud z>DQI+(~<1ak?7PGZ3iMPnO+_74js`pO{MAjqODr8ll0`K=qb(86Ke-**OLQsr|K%r z0CKe@x^yIZw558q<)-Ks6%}2&dU?f)71O3oyL9bxU|^uBsprhYhyl6Z)5S5Q;#SW2aK6J194rBEzTB%W6cU?p=YLb;+OMa&&dB>KAGz>7 ze}y!|j7YYGYxb9u!zVMZyL>p+V%Gi4UMZgS(XLN--%)5}`u*_aU8}nU&zMXYh3O Kb6Mw<&;$VdxT+`s literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/mutagen/bucket.psd b/resources/assets/gendustry/textures/items/mutagen/bucket.psd new file mode 100644 index 0000000000000000000000000000000000000000..e29a1e7e2e5389d9c4456ca17728f3b483a406ec GIT binary patch literal 34695 zcmeHw2Yg#aw*E+R??u%rmhDt`JCWmtzxJ*@+S=LaftJ5!7XVz7&yShrVZlz|XHgWEpkXdW;*3>uD z>#SD>EZAJ0mMQEo(;JwCudhOr<9!&Iti&mRVbqS5Z{rX%2F;6YH$j zhP;f7)vH&hub!4}GS_Bg&73(C)nsR<0V2(^)@W6)Ni$lK7$sgkMLLVdtZ%UDO-3c^ zRacuDt+Nvou^~2j`c>b+He|G<(>|taO!XOS)D0O~>6saM?2Y#d`G2%0P;JD5w5J zwnmlznk%##))NhlW&?G&R+FJK=<0Pws|CD~HPRbeOv3a)*Dtd&hN1sytJy|a<41%MTYX_Lu~m76CWFZg9@5R3HY?*|#Xc?@t}ZPsTx>Sg z=nc9#mWufW%F^P(oUEBSIceGHS-xs~a2M56WYRPu!}&&y&H|Bb@j8$hD%6by>e`W| zUjG{Ob0E&swR&w{NzTlC)y(NdSvk{+i>GB}6%@^wR#2Q>I6bFCRgjsR!vqQ(Fl+^C zq2V)9zpwR|wC+C^cVK^6*~Pu*odoLZGcGoHSgggXU|#XeQzQKDJVeLj?EKuE9N;ncQgmK$=rFM!wO;Z(YSBxo zlCi1vIrIXxi_CgBm8cCq7;g}aRsBU&T+qw{J%;1jQSpMaN~P}Rk)^}oNN1S_wb`OW z=4U5*srQ}70nMaY)Ps3y4bB{MG&r;Cw6iisln$HaJxb|0On;%%e!csQZl6Oht$%f$ z&Um?V1EY$fF0I63sg(0Dx{L;6t8_8C|G~am)T@45pyg!#+A#i&ftH)6 zn&!O-`QHdM3@N5vO`Y0UtJBWO@D5CG!T%|LW&Jn%Yi3?n&bYt4Q~7TnU%z_x{cYoG z#0C2Q>G8#!5k{Vo>Gzhhvb<4e@QYuvF{SX`559J0u-`i`IKQ)J-~XgAdJ6eZ>SlF~ zH^Nde7Ga#Ov9QEq#_3|I7>h7Y*H~C$G2?WxRE$L!r)w-Mv6ykXSSrRMjMFt1mRQU< zT`U!25yt5n3rj3!oGzA%u?XXIjfEu^Gfo#v#aM)Ky2ip1iy5bjrD80?I9+35iN%c5 z#ZoaAVVth9u*71<>0+rEi!e^tSXg2)<8-l9j71oyYb-3Wm~pyTD#jv=(=`^BSj;$G zEEQuB#_1XhODtxbE|!Y12;+2(g(Vg77S^{M`#%{3ST^tMSkVv)*W3)M#yJv_hdjLJAG$N}aK>-YerCemGi) z`% z5Wsm9HpBMC_}I6I{!-fl^)ZMnY_J-=YQctTGn=WXwUn`$LbI`OIAgR9XBJi)ENsoy zwboT^rnufv#AcwI!>S83D{B{3-=u-|JwLnmFhhTEU!hehwWh}Ed8Q+1Ax-nm#tX^{ z3>V@G%-X6YMr%n@g#kUmrUHXjd9m^ei@{3E7q2nQt68-C5s_<}61 zU2O3>4P^wwo;q})u7*)Fs@W>|nfk?=t<)Hp^2KJ&yla?d(R;k_s2oKWz@9_6-aYl~ zBw822pm95QJ>zrU_p~fLtjer5THrT!I-_PS6Ac1dqkwHVsUl{gCPrc*4X`&89mpE8 z)}!MXMS^y>n@WUeIgAb!%}2u)oOMC1oYvx76Bu+jn^#b)B_s2^A89_AZehc;F`0R* zLWnmU2$!;PlA;!njG7v#F~Bx}mT){JJ2nlnCD~Nj3fOuvXg7zX4VO@zKSQ1X1JIL; zCEiz9eX$z1`?u6lE>JZAuQE)*9?~##nKaMka3~h-#=hVH;n9*HTH+bi+TWUQrV*x(rO%@Jp(kXxDvH9zk3E9;p#@KX}->=GvjZLp@87;l|A4P28<^N~#F7kG=ojzF!hM%_r~&tUwG@I~NDy~QKpq1CnY?Fv5R zMl<>g=Cc)W2)Wv1M6QFarUp1`T6EsPz`76v1kweiVbvxp1k?rPq2TtqQE)n1rl2ko z1|RO+<5XrwT_i1D096YX>WwBY#9}?1oA8|u%dc6X415#DXE2OAh;y~Z(oj}ef~Qvk z?|V?j@edKB%*$M#&SW;+e zSW8`^oT8bkgjdMqDi`Qh8+2A{+G2P!j@qn+_tw-msEu&mVfu_mk(di!szHmH&1EZn zaF-L&w@m$y<M%aM^_IaG};r$m4JM z^hb#C;`2%!y-t&kgtF;Z0W9*;f=_$t*dF^r5@iuHf|VH68hGDHqge^p1sa_)ZFCU- zmk;zY%g2t?3SEs3uRnCkr4VI$csoF$$*9%Sw*%>oBVL>0qv5}Jn2!b&nYaca_MRca zzagDOy~QWI@7^GOv7v-_?N+Gauzp(@yp-U`TNeK%6ZarPJ>8Dja62K(wdm-6}hdfH2AkUB&$zRFqR?98NK3A*X_K4d+HqEyu`d;vPa(RWkMZ6Wf8lIVVJI~4M=k4U};XTcJm3M%5g!e7) z7ry|%SU;s-n%@XyWOwdZ_sbI-{XES`yKH6*zdUCkbk(p%s<6H&%e}v zxqq$yYJZ!5zyH1dkNLmif6)JP|5E`00m6XE0W$&?1Y8qvQ@||&?E!ZOJQDCiz`lS_ z15O4821)``0%r#<3RDML18squ0v`%|K5&2F=Yc;5g$Bh3We1f6tq3v(-4)ay^gz&a zLHmQg3_2Se6+AIGFL+U~Hh67tXYf72PY1sh{CV)%km!)fA+tlOLT(DVGh}1Po{(2U zJ_z|SG&D3ZbY^IIs6KRk=*G}Lg#In`V z6h1F}MYuKG6@GvCOW_}d{~Qq;kseVRp^dmBVspgf5&I*)j|`5S7?~e=edM~x{>VQ? zz7_dxRB+U!sKO|9)a_B5qn?U-H|k_`Y;;!iqUieQ_UH$qUyJ@KCNO4FOmU1hra5L; z%u6w!#`0p5Vhdw6u}!h}#J&>yIX{3unP1AkiQmS5nExjKxFAL_U9eQJMzC4%tl)@{ zC!8cK6&i${!bgRNgl9x@QNBngY8CAf?H8REOU3iVI~1*~H0- zOA_x&d?fM1q>!ZCq?)9@q`gVUC&W)En{exd2PeEYF?eF`#JY(C6JMQpdeY=c%O=?; zJu&I4$>PbSlh;jtaPkLJ!l%rga`Tj(Q{I^xFg17T%BgoxeLI<(tV*s+-kkha3O6Mu zMW1qa%DzDr>#nRFzw@XVfw=KyV9RX|2|_v#)^#Yj8`*;GF6#| z%zHB5&x*;qGV89ar?Y;@PR`b3Z_a*aTKKe*X?IL}a@vXMDbsb+w@yE-idB`V?5e%0 z^Eoqe%sG2u%mt4XoG#2OyshwsB3{w_B4^Q?#WBT8iU*57DoHGDo<4vRCQLpzhugi z#wB}~MlQW}>HSMjFDqKsv+T(7jODj2fBl-cYxLJVxgv1I(iQivIQhHc-);Ea=hv#P zwOxDYy2;nAx$d>=hv;(~bT&F1zu88_%g1sduVRR+m<9sXneL)C_38 z(azKMX^-k=>w0uw*37QysrjmQc5QF%(Ym>H{dM2!3-yEg6E`imY1>VwS1ww4-%7V( zncW#)J zjV+BIubQ)J^Qxa$FJ1koHPLH~Yu;F!ytZ}im+MN_{r(oeTQs-qy*1(1J8%8?w*1?6 z+|IeZ`u4qdB;C<`$LH(kuit%V$ek)?>zhAqncwoDEy8BD zy=%Y1zRlt1&^z92oz}Xkb;zl8{=F@;t-tMDyQcl`9a$Y4JKU}s*PER=om;yCx{O_i zy61N9?uqVM*Yjy_S?}Y0%06e`PaAI7@LK=${%r#x1C0YmHZI)w@xCLwD|Wwp|BUe0P_%Kg)xKTrJgmd9crb3V>_eC^}MpQwA{$dlJRx$mhf zpW6HM6;D6*m-N5f_e{bwo1Yat+xc9`bIs4WpI`U<$rl=4`1Zxx7eC#5!`}B_TK>{I zFPFdk<||jd^0&X1{Pm?*^Iv`bZ?pgQ%xihCJ@xn8zd!MM&g+lAp?c%7f2jWP*qb?T zKK|B>x1M}^=G#y2o3-z`{d4!fc%bOOU*9Qx=kii-ACz$17;U{R%dCJrU*kz_m1f?dHBg#DwEM?Ea2~(N`MYP*?`} z?@0vB5$$>aaoq2dW)c<@6cij3791QF9U2lEEr<*Yixh}sV+FCX;^;7%JUb>cddmq9 z4GoV7kBW$h;zvY8@NpBtXAX%TivsrxBsvH>5XIvp5^gky7tL{h2w(p>?w2`p!AgI) zFo6UHW8x7G*Uvv7Feo@Alry>#?q>14l~IJ_$Ki4Pxc-3wLH@k3X;2x>^Gk@y^3N|< z$0pu7Tt1Wr=z-490W5^0N<#-w6F`mi6c#eJ@Qla7LB) z$?N*`^GRQAzee-nhBnQKp?yb(9zL~h?vdGf&o6oUx?^9z+qlqq!;&SL?-rWwKltR~ z^E+Q({`#rquT~acKk&eN&tLh*gDGy}Z>|k{a?d|jRUg^*)GIHqxnuR!BKJRO%qP$g zSOQxb50NCFXo-nb!wn@RTxi#UY=w`7N(}&u{S}0g6p~89+{B|TBw`Dk^s+LN3_=hI zIWAA~_+a%=N zdP3lyq-TGb7mpHrn`mAZyhJod32zgnFB$?BgtwhDY}4cyzH^A6o3bCKJzDrjN73GXF%+QK53uiyjf zMx^zg92PGhQN!q^cSo_@4{wvAaH&15!}{^hI0xe~@c(5D;2hvdyuX8hS3}H%6H%o$ z*Xpd5aBmRq6X7ZV-tNbR(5exu0U^w-V|BFw?-}C^ju`LC0cHdBmf|(=UQu?nvCL{M z9I4}Kcwg}3Z1r5qw}^I zjrZBiRcIyL@v@pth7krt4|l>-4QjA2VFnYtFkDNkeftz4%56^>A>E8EL}%f1^!~ zp#+Yo0X(UMcTmGl01O&Tu>Me{wm|EP)p!q?Wm{_XS?V0s^~*5gS$7a$?(&j@ zF%r32S6zuN7|9!27`hIYFSJanBb*$(0xL?5H6}pe*MVSsd!|umV3w*pr^#?#eM6nv zqF<-ORU0pPQEcf_y7tU2s{7X%OeV93QEZ-1o2PI4tA$sxF4NH!5Z~qW{{cJbb;S-e zC!n<+7H~iq9@&1LRYs&hh>KDMaO)q}?2KCPXdl6w7mq8qvBOvzO9h5TozF1jkE)(; zhGjgT`j}Dm5Mw^IqmQn%!g`>m9>=v$;qI0Y_qR3|FdGLFr{}2?1;bF4v6g2pS#fXGIK`F1fmNITmBDeDr$$Zvk&jEc1L%8LW)z z8(`i9W>`On8NM&cMzE*%9M7Kb*?ZZE_2j**U5YJaNko^nFWHn=1@Wl#s+M{37pTTg zd!w4=-rH%cSqO{##qbD{(E^h=+vTYFriE}u^}4{oPR&u&i)HGDg(l`d3Gg&bPj=oq zTp{+9L;EDM)Tl8uYEc{g?+3ii$9T$D=*)1wF~fV%Y5VA?fKsE@b2{_PtD&%-t1E`Z zCb*dJ=tlR4GJad`T^z^uV#*s$Rvb+1Xk+z8SK>mM*-~8JU|m}XOY2@;c$~Kqmdo`p z3tQE2ilR?I;7k|kIT9Dg;r~bQtqQBOu7z-6&b2=M4zDU&rq^2Q7SK7|Q-Qq;gi$_f z0tf(C6joLuHE0UXL<^yD>=x@CFK@y!&;K34^!>8)KoBSkh1saE5ncdaUs~a9AP~xm zmzS1!bp}8l{@W36bu5#uq_5h?Xk1cJ>a7cJcF^;r&AGLt47pdXCjxuwT!Mz zZ`9YT4L*$sX*m>BnJV>KokndQG3)|?Y79!2QF>O|i5f{zy=6MAax+g7Mef2PPFTI# zs4uN3slZE6#O51|a5^~xpW(BY?=vzazogQ8RRADDO3bCki$1gBJ&InR0*XGb67c0u z>C92{;U+?3^}IP$3EhBV?_@dh=@+jij44uL8S$74*kkrSRl{hpl$gEtAPwFY7Z$Qt zGl0XsR>1WXi0E#bC|CDTQC44LhNl4N^{5XIp6hfXhl@qI%su2mU=Q&riU_;`0Q;rz zA!I8>Z>2i6qHZHxSh{I*9C&horYU%amRl@S#s@X<+PtjA=T2hB*wv|Go$R!xtz;1A@Uyow-V1ufuT2 ze`oNceX8<@X}dLR%nhDnVK2w5I^vQA3O_)wh&mW{`dTmeOZ5G|EfRy@%Vq+AN95MU@Q9bf5AWhDxR_Oi4p#J z{+K4$_Tiszd?BRl`D3@s{y;fdyNbpjm{P_nSLzx%CsCaSdO=1NqPU_!~Gr^?SX{Fm_Qu2?!Ukt z#!E0fsW$u<4l;g%pd9}~;4jqk$4DWb8mvWZD8+}tp7{imz>|a|eg+SZ@MgK6UGfD8 zWY3VB`(4|lqvSN<2+p2$b6#BW4alVaXE*mmck1^je{j;xedT)I3Gy=`GkgcI?@cW&1Yu4gRqO7BP8tz9I8TT3rPETt z|9L{LJ>us50PAW)u*UQTDA_uMV#W}NGf^bnAiaN{xZy1S6NoEOBsYTgpJS=`Dil6+ z4hHAsf4NB>3IkB`J{T4BJqT!&0nkH2C|UaT$8NIc3~1m~{^c_$oPP#v;3}KH_|nb! zDDVt+uk6o9p-;a6H(c5JPrq|>PKkdZCkbc4AC9@<(VJh$kAy2)`>!9|q~K?Gh=)`3 z&`CG>KMha!aOT{1#!VEb$x*_MYB)ILCeNNCUx3ecom+T{d`38- zLEtzdlgBF)k|s`?3~7>FC=`gKqBxOIIEk;AETdVWR45cr5Xj=BGPxo?A#uXQUqgx| zaR{c0li=t}>lBH^0G7&Rig=|0fWk|*F2dwd9LE<3K)!^X6v-%-iG_TjL@E`_1wz5( z3wk6Ld$3d)UnGy0DdPA-*#y3PRNuvzC>Xeq@FjA&Q~}l|N(Bj%MzSQKP{ay^5`jRf z0Mhs(NuofOlo&UH&jfiKg9Uyhe4$htrw|Kd3YkcefaU@fUgjqxCC1B8v4AfU@kP=& ziA*4pB?=S@g_sXOvBZmACX{3oKmik z2!vuWKTZM8gQk+iVkv|WU{fcGP$hT>+84yd$4j9z*g*x5ArQ+zr3_oTLyz=b`u5AwirROb|eUSPFp##wPNW3Go=5 zNfVN!$ejSJ1eM?@g$Sr%j1dVWN`)vXF^LIIa3I(nCk7ipnN$kyfyO;l#3e}NiHV6A zoice`EE8{1v`;QpOq7TuLOvfN0uGfXK*P!ebfrWJBn#rC009#c#iEHx;2b_5It8&R zkj5)y3I!01SRvR6@g|3OlTH#yr%FW-tCR|8L?);0(vSoH@WpcA4jiPEL%hk63IT8o z9Rw;QloZfNU5@UM@AghYW{634`w zOaieiOcEgyu<FQZ6l;sl964!#zNgfJT^65+Wr z8XVwJsT|`i4qQf4a)MYSr;Gp=f?Wz!L-Y%Q3Sd_xO%TX|6HJ*20*M6NfdMBH#VeWV z0fvP_A{FxE5~L!9TrNj!MuGrJ_(E`>SSZ3CLa+%z84N>#C?41aAYx?<68b0sj7S!b zGY+_1B7?x<$4!hEFhJN2BSknP%HyFPx(xFe_)`x3k;#BdOg=~f#$TdXD2Koj0~Odf z({YORMaIb_lj4P98FUa_2f-enC}n6zCyhd;Dui)hCUg*}5XUQ}I1Mvt6f#8tp$eQa zR6tlrAi=O>S;D@HAQ&VplA%H&g`QEcm(L53Fr$Dg;Y<;ab0NiEqIDc_QVI510i%d2 zz6?@^QAx2>@feUE#e{Tr_x5kxeD~IETeoh#yT@*~J33lBS{;t9Ej?SiFzbRpN84sw zXM0CyS5M!-;1&Si-FrD?Yg>DV3lwhv#hW`Xhjchvod8C~{e2FH?b59~FnJWanr$|a zFJUJ|GK#yL_U4v0S7%#~-C^H$L62IYpG<0XwzfCfyZgF&TrCdQ=9cbJeQ(7?p>~I} zt*NcI+tq8g*#}&<{;l03SZbqC#M&HfEzPc;&Ys>DXZuE5$L38PBar<)9Zm|i+gjV2 z99^C58`^E1eVvY;0WcS+V3{A>w6U)X728@`ZB4DN4rh0Zqi4|8+tbtD++qhRygu5w zZOh=MfgYFBW@~G1anNI&ef{=L9i6R?CR<0RtG&zSaBi`6?%1_!$K8XQ23{V~>>V5WI_x$_dy}oJtFy1G+1WYJ($xtu1ZhV% z*xuY^N5?wsoqcUiyUp3!{M15bY z9m1&H33l4-PM2$AyPc)N(J|oc-nem7Yik<>r>ms}NP~Do`?{Pxo1Km}ds7Qi;jncM zbZ;0K7(h=tT~0@HOS`MPtrr})v9)!}CJ2|7CL18(Sl5PLS9f1O^cJ9wj%FLiTStqd zV~fqT-Q{StH#H*_ptGyj=>#LuD-OG(t;yNj>*{T_+c$JUy!F_~FNc(`@H8|MefPk|j6*fTjba&yvhVHi5A>P`1J38B1ItF@d-Tghlm;(kr zGzdZC>g?+3?uJqCu(des5N|zBh^O8`XIobn#v2S-hYQGSceT4*0Pe=%v9&gVZ$U+K z+aP$@iBb!2*WP1u*f%*k014RMPKOOf8hoI;EuEXYXrmoX_TD~>H%IqiOD9FTHg0m- zyPVA}XtBfIv$53$<|&1ElwB4 z8>4i0pS``U3F8e&aP)2La@boOtxc^Rz3rW?Ev}874j``!vG?`aUEmG`w%Q#%JrE)- ztuRbFyMYQv-=M<ygHgYHutrlN}7g|4)8!%U$4Cd ztg#~%ww9j34rga45Rb_RX=`uq>>Fsccf;sKD(rU1(QZ?$FVfZ10mG!t1@Q(zhplbH zMi)anI%x#5yJJ_ky~9c44XAK#7;wQf%+TrSJNC$7b9Hy@?6$jXO)&HzI_#~z-7pZ^ zaDHc58ik}(z~tAxp%aD{U{Ud?))}2JLpad`Fcx7h1TzqOX=F=h8<5t!VPHcSReTv_ zH=KMh_4W7ng5t{|T?`Vys2ILHr>3T*XW)PPot~ba3f~%%(^7Dkk(}nqCPOwQBRMrK z4X^;t%*x8VJTe8b9>tlL)d`v@7!{`_V@sE6JtYN<@+eM*FCp-`gq6+dvM|($lEjfXvDQOEc23RjkFv(E+ppAeZq5+RFrII#dD* zjz+y`BW95b+61M7f-^Ir5)7T10)Jp3A|Q)4A%^dLDo9fAY<3u@tTv>7@>kw^vv zIyxIzMt7uS;PIe=X&k9Y1BQ`7=m_TE4^U~z5N`m*#;}t}1&WxaPQ?Q1HZUqBB_k8- zhN*y#(8HiBP>LfBHV_%WaVi~97z@xrY9@n)c9>(JA_Y`>s6alFry>=QFurN0fkKEf zBpLbkP(kAjs9+L=CSs8eGy#GJO-DFel+*xPeAMGmdBv zm_=eOkb#i|P_Pn|r)FT*lZKJdb2uK%hK?Xp!&ETP5lB!6Lk~KLilGgp0^^sa5lDz_ zU1T1hWp}-DA#E1OhDO(E?c13!=+< zSQZ2uD2Gpw8w;t#h*(A?Eb|`2h`41Etocz5n9E)d8(bHH=ZEOJAj&0WmX%Np_ppa? za2FcaiGpA~HJbk6K9c^0!ySF^D$;MQXV;&+>rm{Td%}GJmKTRqL*=lAWurjmmT7r8 zWZdDZ;TxlLEh)TQ<-PyOEG~tY?^mhtHYct!QBuo?_Mcbz3lo{FU-|z10^!hZe<>_0 zxuFGK`F`>Kq1{}CSv3UNV65Ly7oB{wVyr#yCZLRmD^KSk!z=IKzkjHoK<1qLtm+&X zeu44K_gk;=!{1`P#(Tf4dW}D%QsH+}AL9>!@%Bw#;}0IR*}?cO*7!rM2f_G0uknWt z*$?>`f9N1)os98;BBLdu8D@{(wq_vzU+Z2f+B` zbg%IT4opo3<5OAV52PFb4xP@T(G?OmcjUL&%*-ed011yEu-fI`F~;7PO<<1 literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/mutagen/can.png b/resources/assets/gendustry/textures/items/mutagen/can.png new file mode 100644 index 0000000000000000000000000000000000000000..315bdd40f611a556c1fca550aa1d7464978eb1b4 GIT binary patch literal 352 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 XIf+&wUMElvr&U(=6uB%=Qh0sFt} literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/mutagentank.png b/resources/assets/gendustry/textures/items/mutagentank.png new file mode 100644 index 0000000000000000000000000000000000000000..bd474256e2003daef02b4fb234fe7f80fb67b845 GIT binary patch literal 1545 zcmV+k2KM=hP)88RN@yPgpd$>5JIf@3H%Nu#Ev}z2`U6jBwE@9LPZFvp>6s|GU+7EJZ;a| z=G?E7P?aRavxy~ZJbrxl+;i^h)1oNCc^*2>`7n;V`KZ;3dcy%WTP@g@rOtdh4R18U zUz?lQ>vmu!5(vT&PY(|8#>GomuGg{G>7dP1(==pKDP$c-eQOz}y0=)XX=eiP)sH{G zNhWcjIgfi=PcZa6y!rZ7^=#m|=ne)*+cr{sr(P_J=u8G-l2|wMsg|+!6K78wK?aUH<^3J>3XJ391ZQp;u#XPhgKEklyht0)* z`R;o>YwbeQbwrdveuV)!Y$t_WX$BvB^f55@q4U{qH-5!xb1q&C{L2pz&@-KMim{N_ z30{klBsCWH67*U?j(i`%cuX)l?rm%Ud_S4A(Wq5;9mNMAiwC1IhP|FLU{b^EOi?{^ zDaV+!JJ~E|7v}MJ<8Szs#3Cq@vCtt~?e;D#+d_ju;rCXHgX0*fF7 zm`7tGM`L9f2IFD*@~aA(1Vu zlA}D=KznN&hG}4*>AFM^N)Df_sQ~pc81|83wivn|AAm%+XfHI&!lM7)PD>eIymS#= z0x6VoOusQ4CxH>`M)SfNOv^-{61eUF9zjH8KgD~oV?d__cG^)=$a&D-Q}>szT&CVV zRBKrnh6lepU_H}yAQbSDMTS0IFA&cqx(|&b93hj@X*@V4V*{Qp-|?}% z+d^Sx2D)h?NSG{8iTD64>Ym^N5(kp=k`1=aq7#iy1{{qQ6a8oV*kn20=C4K>EPV<9 z2}Z6MmMl1U`jkb*qK9JqwDuhl1f>ZFc--1ifn3Pv5uDQUPiDY0j{;Cm+p$jd{)PPE zdmdAG2-hE>S*aYA>R13A=C9B%CDvvu4*Y>y{49s2KmOAX{(zDGkk!G?YW>ID~RCr2jj-7@nHj*;)c_ihP9!O8PD#m55lSO0+`7h)4D!r5IpKsn&&sNsf zRK&kV`o-vBI}gG@{Yqzy9|MyiLVJ$pXbHJ5#usaK7}u_;y@C{)SICS@Mvm&C%#buL zzfl-W!N3dgt-UlU9WpdmsU9^hF(x%b0#KfX+z-e|HwuF3wq~*++3$9hhtUgO$!;io z>6CXodaop#1g)+;j{(_FZ0_#HXJG5@26l2;1f*R0f}Htu21y3kfUVi}J!L?GO=Qt0 zP0Qpqtj5wUn-$rn$#$*iIH$Dm|JfaXd;NM;uGiqpj7US`@d0PP?x3%X$mAp-WdCPR v^1sMA(q>#pmRw!GsGZul&U<_Qj{pMzifoFp$SMeF00000NkvXXu0mjf$N14D literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/mutagentank.psd b/resources/assets/gendustry/textures/items/mutagentank.psd new file mode 100644 index 0000000000000000000000000000000000000000..20c174031aa05f65434f0e2274a374b5a03de717 GIT binary patch literal 27873 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 literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/powermodule.png b/resources/assets/gendustry/textures/items/powermodule.png new file mode 100644 index 0000000000000000000000000000000000000000..866c9e19478ed41c1cb71f0eb2cc8be92e055405 GIT binary patch literal 1299 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 Bz@q>F literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/template.psd b/resources/assets/gendustry/textures/items/template.psd new file mode 100644 index 0000000000000000000000000000000000000000..d32f04a6f7c753af0fc5f7e75d78f42bf47857c5 GIT binary patch literal 37321 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 literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/upgrades/auto.png b/resources/assets/gendustry/textures/items/upgrades/auto.png new file mode 100644 index 0000000000000000000000000000000000000000..638bbbc1d0e32329f8df19f33e9ecdfdb33b4e32 GIT binary patch literal 1143 zcmV--1c>{IP)lvz-k|X*Q|*;J{_(&OLL^cg}atxp$Pc7Nfk>r~&w^tE;00 zke$rU&1v3p96@r|$7IKFbU8Y5Us+i(eF_p|L1HYoyu5s|R4TpwFudK~-u`TUe*WDA zjDYBC0!!e7~sr#bWXNeiX=+Do7Q_(K+Z) zL5(+=Lc367Z}n1q`wC1zV6Agd+J~O_w*S3+dr*E!5%3dX)luLZ<3-@eE9iv-w) zZrw!8l0@MOysfR_DUk4rcM@tP)eyFz9;rDHCRZgp<3t#7U3Tv41hBySB1|FA=a25? z$FLM+yJ5UphpLUkQlaF7#8<*+JfA>B=DQ?GnS6yGoZ++-ho(S0@3Nc(fb=tMVjAl* zx&8)sR5;to1jpgSO=dZbSoKJiX{b>v3+vQ?L_Uw~-@6x|28aRljk` zT_PwTB$tM+f-H}FlS;L2^eRojWVT-coZXs-rhsQSR|TTPc}}HiSk>gm_xAmO-t*v* z9#{mlJj?pd&JJkfKne!Vg!jvZ<2sUMb<3GBJr$RhmX#%`#&%MzO&pBY}>|Giij;1IgvW>a7E_(6M!#cYW0vzkC>m3X#*~qfk+*}v;On=-+jKhp{@~!?TSYJg zLKEWg_;FQLkGU64PEOvEaK~b?vTIG#-jm6=+n}?ka`Ar^$3}&%V{#^wIl=xMbsoAG zd=Q_7*S`&hX@knutIEjabp9;h_rTE2LL$i`L~%7;w7dbTZjT}&y|RqgUf5G++;NU< z%j<>6Sr`oMfIkp|BnmJs8x!L_rL{f16OauZPt2T0%k)`Xj)LFqi|?DB$4ze*e++C?K(|g6E1XL#k+4blEy{4$qCAfSUUo$>u10i}N@*eiFNG zTtTvP0Cpe%PcDsW`9+bhNr7ovt94|R1CS*V`+rOzw7h_c=poEBccAUp@9{ut78lxj zG1bxukJrQAlh+vk*A&Q##KJEk&$u=%t2~1l&*AysDHhOW4-~dm(en^3lY^uC1UX;K zle#F#*hG7e0Bfv#j6`A`^Bd-ma{))<~T{|)}~Z^yarLs&HIniNPw zLqiWnB9SK>8yk^IrMQyN^~`T+=9$U?Sd8>5sfSB1M%^vXWfbaW_8c zJA&}dc^tTK3P11dz-ZS?Xt+Ly=1V`+Y(yJUAWH%RunNR2WSo@x!Ch7kUM+)_?RQ`$ zyc72=UBj-0t9)Ia-Ba^MXpH~+*dAHNGF zuOZ%hn7>l3Og@A$z^eU=l#6wruIF9dzSvdrIrrN-P?p&mLIa7 zt)BwF&jX*T@b)W-YDg!ysz?|wk%-XO7k*zUVld78nlCQpw zt~*@5JKbCQAB}wr-7tB$Ni8-zj0(!CQ6N@Q;Eq5ho9CO?l1}zqVvWb=RUonmP;NMV zgTPR~sJ8!x6gUag-7`_Z z!YwonNys4OgT;rI#M>~<5CTKd&|M(h6p(I60XN{9^NvySoIKc>_dwGPZjd}|-~TCcnS$q9*5u~|YE%l3l*GbrAV=Iw5|4^)WNT7Tb|$O_ zWHXOs?!D9$*{ zB@h&>NYNmQMNhh6tEMWckVw=Xnp)^ZFB*+_>7@sIky;8~q_iNK+KPdtZ3s#h6;}(! zLy?k;;3d*pXbZ+}vzb5djqiIiv&`&f*P5oyp&vYUcfPmp_kG{*`}0N%!w_pJI@VZN zwOUfu=cUV#l_F$ zm%WKHz2W!YzQFoI4xtD@<;u()d~Z?dEPEX|528}inOsr2RH`pxx>m;c=qK3v;GbCd zr;e?Uk7mFV=LnlE7oue2#$o}*4GuKTkOpuJzJ92=ck0x53{E3h)1!jn4`M>EZAW%)yBo#Rc z5@Ze|dMNyqq}v|3fXeA!Jo`M*(`z7K)RD77d{;GaU(a7%t3XdEX!Tx2z+iE=jtof) zf%{%V<;bqVpRuKQ8Xt@sxHvDpm(R}COniOvD&BnUcv}>bMc7>_pwJV5rs(GheXDTDolAeY_jccLiLew3( zT2v|N7XH6yK?2YUsyvsV%0PoPOE%%2o|`f%6q%3*E2p5b6vAoX9grhnB0mBlarH2ipApY zJ8>ypSXh`C85tR)i?Sx~=;`-?j3KKnY2f7jKpC)>FD98;5G&kx-4W65`nThM1sDK2 W{d7{(OZznd0000 zI&N>dy@|0!5hH*#=QJ9PCHG;Li&~&uF3afXs4!E8hK8iwZku^D z8kL=$9rNC{ZPVE(1NqI(O-UpYK5%Xh*iM*>C^#`OA>-rYVp*0^hz?N935aJj0%GiR zIz4%v=3!oSMn*egFowoLhvPVhqd@OOdnA78ifp)ZfS<9Vves@${PVhWJ%jNLS|k$j#XuMZc94Q# z5W)!TfUd<@Ut2Z6<*seKfOcx~axVzOj1SYlCj~m1shkQoy4y1IcuTf_h~#g5k=mbV z^vQt^dZQl&wnxEV0jPmth|cd;t0g~IK1%A-d3iru>QTdV49lP(1?YQb0Tr?Mu!Gl^ zkM2rg>YL1aX~;@RgIOhY3>-KM5Jcb~kxaMJh}#dJOMda9+>oTayRhy9gF(6~9-0DO z4Vix0h!1mLjm*N6`@O)^#p%ctVCUeQm5n^py#U@mEyf$Vc4)eEB|I<%dRO`!pnK;Z zJd^xVvIoXetj~^qULXZlHk)095h07XFqqSjJ0}RsE-BG9Ld(G$)oN9ShleF>ll#g7 z78ZR5=rw&lXoJFn@W2$fcQ}&;%x@^ATZ0D<)_7qd4Op+&>*8Ycr$FBccZ-GNx{_(# zxD)bL9A92uela#SHuEnorIkwM?ez5Y9XQ!?@96q}z-P#DHx11H17pA-e@uK?;4L)0 i{(t0t^6dK&PGO?@F5h0000Am%~bcK|`et43T_V%2f=Xu}fec$t5!F63M<`A*SLmnR= zUt9vghrYf(@`%Ew>U}Phha5IdHg)6Ba z_^L;SNa#W`nfyRi)xE)u6B83R#ofKVy%o>8uJ4x#JP7D-s@{B~!^fz?+AC|C_96SS z$6pL?I5Tws&9N|C#{#9Rtb}128ea>kQP{RsN+nTd^S^MhOeQtkFUlcgujJAGz|$4r zzHx*t*K(1+u_X~hA|8PtNbEeDO$Xa{zK<_Id4YqLz$N}W5mXpK+cx1iAvSGJ!g0d$ zO2D%q5{c}oB>@dOv}C!$ydYug(3|}Cfv4U@a`@#k2?Dh(laryiE_p=Zq-EK`eDOt| z7d;8CvYzJ-S>X*I+#lO^zRiIoN#W0uta#R&uq?d<&OAc18r;VtY_VE`pa&#L=2rD@ zf1_q#5h>Fwczcy{JcL3~--XOG#=PfWQv%B@;_)5(>P9ztB02mD2PTh^7f1#{5V?F- zfIuw?>Sh52-&dc$#Dk2i8QAq+dF|^%uaSvmnRvW#0u~%EJCsm_d$E=T*OdhXDhL8Q zB+P)U3QOolUJGN+59d0=JZi z1P5uqeDWmL9{LforsLwHU1<7S!}}pB9}<9 znWt<_9i#4o~5pZ;qi5kuckHA7&ou zz}?>+hmnXPwe>+{MYnMYxD1ZNy-?k{QQFOHUXM&?EABt|JvtBmfN9Of$>;i^-4RFY z;bT~K^bEdueMjRG7|e3Ra5;(U)ILT&^3-0xy85%<>y9n1-@ajuG`A6LP^ou_X#)X#(+C4Y8R_-D~+e3z2`Z$nfwg zBw%F@OHy-Kd*BF~E?>ckXSXmi20Hg8A?hYhJ@K$t8E+s9N;h1MCXWT7#0V;;joiv5 znAzBl3!Byr5?$yYxUWq?Cmcz|yjZ07{x(F2Oh37i zH6IG3d=Z(biuC3#UMXGOK|!yd1rP?`-n=D4_}{-B|0}=%e~N(p&D~Fh P00000NkvXXu0mjfPxUd} literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/upgrades/hell.png b/resources/assets/gendustry/textures/items/upgrades/hell.png new file mode 100644 index 0000000000000000000000000000000000000000..00a5b46ad40568739cea94cf97f223a91b81336e GIT binary patch literal 931 zcmV;U16=%xP)N7sw*w6fAOpAVpD@NNm`_&IdvUV=zDN)K^n&wUHgc0P!LtwPyNf`n{@G zRnrq(V zPN(zbBdi^bM!)*~{x>HBiAgv+JNr>p)j_^+Fc^G@yLWbW=K7P#{%cmy2AK7WOtbkYuQyc^QtE4KYxW%U8FI{ptu0me zK`gPAv^+kF=)1!u5?B_r+wJ{D64bFB!bmFg9t;b!KLNTry039J1*JdzW5wFKhs7qvXHap7e_pCkIy+#6C= zHXhtVHm~4#MjA^n9!tc^%nIAktq&Sx)>puw1R!Zrcx)H}-J`h#Se#r639Mve9S7Xz zX3Sz83ygVokSP#rE&-r`k$zapGaCYin;Bz`0$St~fQd9g$b9y(d%Xnc>6#ljeczB= zkJr}{y4`x5F~|@TH1&qXP6%(y0@IQ>U^7oOfMb$|`}TJ23C773+nSK0E;-uMhUYfs`LU zLiz~#S|q&8VqlR3b7#V(vG9&ZvV3pOgy~e=IXOA`-tBfj|BFNEa5((Ex3~9|gL2R_ zdj3B!N94V)960?S7=cy(n9OB?PfWc1A3vunC-6sr0RS}8f7eN0zd-;1002ovPDHLk FV1gJ=tC;`* literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/upgrades/humidifier.png b/resources/assets/gendustry/textures/items/upgrades/humidifier.png new file mode 100644 index 0000000000000000000000000000000000000000..7de729ca5a473d2145124d72292ccdf404cd046e GIT binary patch literal 1158 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 ZzyOX%K9NgI#L55w002ovPDHLkV1msNnxy~$ literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/upgrades/prod.png b/resources/assets/gendustry/textures/items/upgrades/prod.png new file mode 100644 index 0000000000000000000000000000000000000000..1ab4df0d72f707b301f3467eb203d523fd20876f GIT binary patch literal 1290 zcmV+l1@-!gP)3RDJc-tMS@D2C?F6N zq&^^^(xi(eV0U*mak&YiKbOB1L`$%2ut?#!J#=ljm{o>4r{!&Y9(Ruj;srlz)* zK;y&U;Gm!>L?aT+Vv}%O8Ws(c=gG-Qx9)-fEE0f)#>dBBGYsR|+o5ftPABKzoIHZoUDpHWktPJ$)RX%-vxFibXswtpVIcWP6L?KI z#@23TqT0sxgpOFs@X<)LqIg7rK@>Tw1mL*rN>7p$LZz*)e9zBbJ^rw+RW)7LM{ec< zzDPc4!oq#cJ!8552j@X5Z z^+o5Fb6CETYt03KBTem-5YiR4YfH^J2H-kDF;S%UVNJtQ^>^gVUFhBUpnRvRu{wcU zb^$3Hn3(}>RLu&ab^>Oo09Uvi0Mae&6opJ-Rtsn=bs)2+d&5-x=Pn@aHQ`AU=ZkCD zW@m7y=NbH*J%j1R69|Pg3OrSksF-CKl}-%zJ&#l(CBLtfE3m6h>sg@4@Uu}a7trZu zaIo(=M59sk#2%8-eQM!jgd-sWH*trR#uE>`fcAJoetSJ%!0Gu3iWdt8x>|FA7E(|w ztzx@-j|8WxS%24)epr$?Ie!e>uoF-AzlgZeUI(A~^)p-x{X*oc*c}kKWfxprxPZRQ zAP)77kf!0kn6D>&0J=z^E19l?7uJfHp8o`w-JfJiW+@AH$6ItkhjTX$_WlXZ!cTtp z0q)(^i+!2<<=WmI`|JDjD{J^@_6W|cPQ$Tnsu>Q-MHBt|)-Ocr@bGY^ySw|obUKa2 z#YH*z;^)WuA4f8k^o6gk;rQ&E`0BS0arV+2?o4!}v*WJ1uvG>>J>$d_mc1Q5^un zVIj}>y{Q9DvRO%%|F@rS#dj#imU&4q*VOiJl-t4P*%6SF7dmg1?vx4Ju zqd2!bg?6KjVn>ygk*k#2(DJoVh=8S~C4BzlC@z)1hM~8?rdA@(Gimwhnb%P$tzqHn z1zapnQyfHP%4!-FCax1i!cx7~&w}i=EWTMfimTrDNX28YsH`Kb$fK535+yTx#+6!Ju43iS)TdE@feiL zwo3OlRYq4@!qp?KyI^63G*8A*rWVd~30euu1|%f>gSK|=%VU^MNr&NymqUAOBEf{L zk`1)2?}DbDaHCk*td^`%Hur?JuGknG8+#*>NId;tG^P1`{(VaSm$S?k z?5h#D_J1G=Y~_zhQx*g-%wYUKeonWXz#jq(0Na+J3Q_$SGXMYp07*qoM6N<$f;F^n AwEzGB literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/upgrades/sealing.png b/resources/assets/gendustry/textures/items/upgrades/sealing.png new file mode 100644 index 0000000000000000000000000000000000000000..b6095b039341498ccee884a9119fd7bda06a80d7 GIT binary patch literal 1279 zcmVUtp$hC%33C=`0r<#O#WUN|%~bWP}PYilbx*LD3Zm5mo0v==R0yxhaKvB1`THIYcX zLw|bgo5c&>3r)hU)xgMF;B0ZbR3uUvanGwcVPvx6{~u>3apLGF`dW3l*R=9iR!y(r{So&lFr6;h;h0~0?T#m$X(;_+wRAW$kX zb_0RT;M>8E@cq}Hpk@1RY}~Zt3gcHTf$C6*ei>=fI%}HborJSQ`RTE5Ff;Wt&PS%< zt*OKHHwF;6{T^t(T4){(r$)XM&wI35@odEsq*4ZHn)BQu0K-S##prN9onL-w^shNF z<_Os6@Mn0i^8j}3eHP(gMsU}*T?D{bQUW(Ji`colhqB=e`VYMVr*}2(?>In`Tt~sGl$C%7+m;tfP!fa`XiWR5;~`A^c&tn- zlkjl&b66kT3QNwZnTSX6#m5JcO3YLGnpo=n|0;n>3?whbaAK&xe03p&f6h&z{-ywC z!zT-uV;3SA8~F+?ZF`YP8#+-0V1}#*bs;whqX$RCyNUXqNHl(=TJ)h9<~F`EQip)8R3+KD19T z6KJ}ZkY*6Qcn%wan?(&^qv7!%=(|gjFA2oML%M1S63H}0cUpkp?(KFdWXKf87!hLk)I29_kY_?!VU7`tawB!L}34$5Wj z1Kg0uMw2FpMh z5VONzm<`LwE-wqX7ZlQ76s03no~h+Mi1*AUI=|dm-Gy2e%KGa(ARz(biKtLgZ010>DP+d^ zpvpLci)RzLeP+Dhy61Bpu(PwvXPyb$e96S_P}U8i;N%Gul^T&1?+ulH2*>u!Lv0v? zlV}?1rZIBnD3rQ>WW*f7UEKik(vRbsss-5zKF~A`zea_y8Ma8RRu{29*5C&vH70&o zea|yU{de=H#CsPmmo%aoaIfM{sJnUo-M;sLVaj&Zvf-w)8x_Z$KHtzczk zg|+JJjTEFyj-YvHfgg5N)rv?j2bAfDaUnYjnwAM<$NLcI0CH1bA$^yfbc9 zbs!OLS1mFxSnUGuKOuYCHit_ z^5tQ;Qffe2)DeqaV37ie?`~95#JMTKyx{WE!*Hjj4=GfL)vc2}(re`{ye9O$za!S) z3Dqs*IF}a6ohqOjscamwNP+cQ<5DoJXc)vPSs-p!cJK&GYI?aG_e|R&KG+$*F7M?| zmDUY#5n@ld#Dherjnh(0^rcBW*B!@ioCQhYZcsH0b1nsKXUfNBfrcV=T$$orGx=q$ z$qKWKW(7;XFgw)x!OfWkOjaBF=MZspCqMkWLX6`3CIa`y_m!QbkfB6RFUhkv>P%1n zwfA;jhOMpb#)K%1WRz)pte+EZRCMrJz`CIzBb*d*5;+OJP&ba?Y+49c#vIC!@!>q5 z1}3utd>?QJw(`T|B_Ue<$KvXKCrk9d|2qChfB^veDh3RYPy-kM O0000RCwCtSIKT9MHGzODr@WRVFnH6 zz^C}=E0U!-jSw1Xet-j?!GR9|2_bG+^2Op}-~2boR=bzlb0NxfqxLW!P}_qKlvJuM zmG8ZXc#&Bm#)zjp#8W4rFD@>gHi6xTqoX6qi{WWESNTYB0?&bGH(t-r&%<97Y=YTM zFmrl(`dwL;Uw@2h*X#Aq$H&LtZju?3=)~FC*$>v*x4Q!`FE2j|+=qvUcb>bh`%#a< zcLQz*y*v1!$2P`0vEJ&su7Bdqo9)Nl0bl+)W0s#onHoCuP?H=@=n#xR(oNyjfLIBL zBtc>$jPh`Egayn>w&fpvmZ3re24)(P&@*NFTFDTuBbu>#U?mj%RSU~&C=68VQT1+r3PQ!IIFU3ou)xX_gOH{a7^`G;-C7}gDVP@N zm=lStXTn71pr!?(ps|5m86rjTktVcqe+raw z2s)t3$T4XcLIJHb)Kns45Ug9QjmOXq7+z3-<&^HnT&S0kp01=}4G-voVv#}xftFS* zJNf`^)-(au52)E0$j7AUf=&JB(i%$mnx2t)wqu6qBnHy9Hw7Xmguy}2X)unJBsp9{ zx08XBQy()5ZK2r}6v{Q*&qZXVBO(zE<61FN<@Tqbe%3-~72K6#uXDj6*FF2XDcB9V zg3L1pXA@Evy4T#@1l06wVgyx_HlscQtVg_h8I45~FvX~9HUtulxyL=>c2``UoSb|=o6WxZFE*u%#p0J&uU>sKZj=T0=)3;| zcM^H*V>j^j|KK)(r~EOw(*>Ik-RAs%{G2{{0)GfF08He?k739AWB>pF07*qoM6N<$ Eg4{tu&;S4c literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/upgrades/territory.png b/resources/assets/gendustry/textures/items/upgrades/territory.png new file mode 100644 index 0000000000000000000000000000000000000000..697c8de4fc88fef381d133f677616ec09221dc29 GIT binary patch literal 960 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 bosGM?esIs$E%G&Q=Iguuq+Qb1*SGv{X=KPO literal 0 HcmV?d00001 diff --git a/resources/assets/gendustry/textures/items/waste.png b/resources/assets/gendustry/textures/items/waste.png new file mode 100644 index 0000000000000000000000000000000000000000..da100cedd5a0c0bdcf757bd505136176b86192ca GIT binary patch literal 1880 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 WC6&Tlkc}tJlVIWPb8QP2qW=R`CRW)1 literal 0 HcmV?d00001 diff --git a/resources/mcmod.info b/resources/mcmod.info new file mode 100644 index 00000000..7250099e --- /dev/null +++ b/resources/mcmod.info @@ -0,0 +1,20 @@ +[ +{ + "modid": "gendustry", + "name": "GenDustry", + "description": "", + "version": "@GendustryVer@", + "url": "bdew.net/mods/", + "updateUrl": "", + "authorList": [ + "bdew" + ], + "credits": "", + "logoFile": "", + "screenshots": [ + ], + "parent":"", + "dependencies": [ + ] +} +] \ No newline at end of file diff --git a/src/cofh/api/energy/IEnergyContainerItem.java b/src/cofh/api/energy/IEnergyContainerItem.java new file mode 100644 index 00000000..0db36758 --- /dev/null +++ b/src/cofh/api/energy/IEnergyContainerItem.java @@ -0,0 +1,59 @@ +/* + * This file belongs to CoFHLib and is here temporarily, untill i implement full TE support + * It's licensed under LGPLv3 + * + * https://github.com/KingLemming/CoFHLib + */ + +package cofh.api.energy; + +import net.minecraft.item.ItemStack; + +/** + * Implement this interface on Item classes that support external manipulation of their internal energy storages. + * + * A reference implementation is provided {@link ItemEnergyContainer}. + * + * @author King Lemming + * + */ +public interface IEnergyContainerItem { + + /** + * Adds energy to a container item. Returns the quantity of energy that was accepted. This should always return 0 if the item cannot be externally charged. + * + * @param container + * ItemStack to be charged. + * @param maxReceive + * Maximum amount of energy to be sent into the item. + * @param simulate + * If TRUE, the charge will only be simulated. + * @return Amount of energy that was (or would have been, if simulated) received by the item. + */ + int receiveEnergy(ItemStack container, int maxReceive, boolean simulate); + + /** + * Removes energy from a container item. Returns the quantity of energy that was removed. This should always return 0 if the item cannot be externally + * discharged. + * + * @param container + * ItemStack to be discharged. + * @param maxExtract + * Maximum amount of energy to be extracted from the item. + * @param simulate + * If TRUE, the discharge will only be simulated. + * @return Amount of energy that was (or would have been, if simulated) extracted from the item. + */ + int extractEnergy(ItemStack container, int maxExtract, boolean simulate); + + /** + * Get the amount of energy currently stored in the container item. + */ + int getEnergyStored(ItemStack container); + + /** + * Get the max amount of energy that can be stored in the container item. + */ + int getMaxEnergyStored(ItemStack container); + +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/Gendustry.scala b/src/net/bdew/gendustry/Gendustry.scala new file mode 100644 index 00000000..40db1539 --- /dev/null +++ b/src/net/bdew/gendustry/Gendustry.scala @@ -0,0 +1,66 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry + +import java.util.logging.Logger +import net.bdew.gendustry.config._ +import net.minecraftforge.common.Configuration +import cpw.mods.fml.common.Mod +import cpw.mods.fml.common.Mod.EventHandler +import cpw.mods.fml.common.event.FMLInitializationEvent +import cpw.mods.fml.common.event.FMLPostInitializationEvent +import cpw.mods.fml.common.event.FMLPreInitializationEvent +import cpw.mods.fml.common.network.NetworkMod +import cpw.mods.fml.common.network.NetworkRegistry +import net.bdew.gendustry.gui.GuiHandler +import java.io.File +import net.bdew.gendustry.machines.apiary.upgrades.Upgrades + +@Mod(modid = Gendustry.modId, version = "@GendustryVer@", name = "Gendustry", dependencies = "required-after:Forestry;required-after:BuildCraft|Core;required-after:bdlib@[@BdLibVer@,)", modLanguage = "scala") +@NetworkMod(clientSideRequired = true, serverSideRequired = false) +object Gendustry { + var log: Logger = null + var instance = this + + final val modId = "gendustry" + final val channel = "bdew.gendustry" + + var configDir: File = null + + def logInfo(msg: String, args: Any*) = log.info(msg.format(args: _*)) + def logWarn(msg: String, args: Any*) = log.warning(msg.format(args: _*)) + + @EventHandler + def preInit(event: FMLPreInitializationEvent) { + log = event.getModLog + configDir = event.getModConfigurationDirectory + TuningLoader.load("tuning") + val config: Configuration = Config.load(event.getSuggestedConfigurationFile) + try { + Ids.init(config) + Blocks.load(config) + Machines.load(config) + Items.load(config) + } finally { + config.save() + } + } + + @EventHandler + def init(event: FMLInitializationEvent) { + NetworkRegistry.instance.registerGuiHandler(this, GuiHandler) + Upgrades.init() + TuningLoader.load("recipes") + } + + @EventHandler + def postInit(event: FMLPostInitializationEvent) { + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/api/ApiaryModifiers.java b/src/net/bdew/gendustry/api/ApiaryModifiers.java new file mode 100644 index 00000000..c1dbab21 --- /dev/null +++ b/src/net/bdew/gendustry/api/ApiaryModifiers.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.api; + +public class ApiaryModifiers { + public float territory = 1; + + //max safe = 10 (degenerating - offspring become unnatural) + public float mutation = 1; + + //increases lifespan + public float lifespan = 1; + + //increases chance to get products each cycle, max safe = 16 (overworked - becomes unnatural) + public float production = 1; + + public float flowering = 1; + + // set to 0 to reduce decay from fatigue + public float geneticDecay = 1; + + public boolean isSealed = false; + public boolean isSelfLighted = false; + public boolean isSunlightSimulated = false; + public boolean isHellish = false; + public boolean isAutomated = false; + public boolean isCollectingPollen = false; + + public float energy = 1; + + public float temperature = 0; + public float humidity = 0; +} diff --git a/src/net/bdew/gendustry/api/IApiaryUpgrade.java b/src/net/bdew/gendustry/api/IApiaryUpgrade.java new file mode 100644 index 00000000..ec4251d2 --- /dev/null +++ b/src/net/bdew/gendustry/api/IApiaryUpgrade.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.api; + +import net.minecraft.item.ItemStack; + +public interface IApiaryUpgrade { + void applyModifiers(ApiaryModifiers mods, ItemStack stack); + + long getStackingId(ItemStack stack); + + int getMaxNumber(ItemStack stack); +} diff --git a/src/net/bdew/gendustry/config/Blocks.scala b/src/net/bdew/gendustry/config/Blocks.scala new file mode 100644 index 00000000..1ce611b8 --- /dev/null +++ b/src/net/bdew/gendustry/config/Blocks.scala @@ -0,0 +1,38 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.config + +import cpw.mods.fml.common.registry.GameRegistry +import net.bdew.gendustry.machines.mproducer.BlockMutagenProducer +import net.bdew.gendustry.machines.mutatron.BlockMutatron +import net.bdew.gendustry.mutagen.BlockMutagen +import net.bdew.gendustry.mutagen.FluidMutagen +import net.bdew.gendustry.test.PowerEmitterBlock +import net.bdew.gendustry.test.PowerEmitterTile +import net.minecraftforge.common.Configuration + +object Blocks { + var mutagenFluid: FluidMutagen = null + var mutagen: BlockMutagen = null + var mutagenProducer: BlockMutagenProducer = null + var mutatron: BlockMutatron = null + var testPowerEmitter: PowerEmitterBlock = null + + def load(cfg: Configuration) { + mutagenFluid = new FluidMutagen + + mutagen = new BlockMutagen(cfg.getBlock("Mutagen", Ids.blockIds.next()).getInt) + GameRegistry.registerBlock(mutagen, "Mutagen") + + testPowerEmitter = new PowerEmitterBlock(cfg.getBlock("Test Power Emitter", Ids.blockIds.next()).getInt) + GameRegistry.registerBlock(testPowerEmitter, "PowerEmitterBlock") + GameRegistry.registerTileEntity(classOf[PowerEmitterTile], "PowerEmitterBlock") + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/config/Config.scala b/src/net/bdew/gendustry/config/Config.scala new file mode 100644 index 00000000..ab5cc206 --- /dev/null +++ b/src/net/bdew/gendustry/config/Config.scala @@ -0,0 +1,27 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.config + +import net.minecraftforge.common.Configuration +import java.io.File + +object Config { + var neiAddSamples = false + + def load(cfg: File): Configuration = { + val c = new Configuration(cfg) + c.load() + c.addCustomCategoryComment("machines enabled", "Disabling a machine will remove it's block registration, loading any world will remove the blocks permanently") + + neiAddSamples = c.get("NEI", "Add samples", true).getBoolean(false) + + return c + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/config/Ids.scala b/src/net/bdew/gendustry/config/Ids.scala new file mode 100644 index 00000000..186db7fd --- /dev/null +++ b/src/net/bdew/gendustry/config/Ids.scala @@ -0,0 +1,40 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.config + +import net.minecraft.block.Block +import net.minecraft.item.Item +import net.minecraftforge.common.Configuration + +object Ids { + + class MyIter(start: Int, check: Array[_], offset: Int = 0) { + var now = start + def next(): Int = { + while (check(now + offset) != null) now += 1 + return now + } + } + + val blockIds = new MyIter(3500, Block.blocksList) + val itemIds = new MyIter(15000, Item.itemsList, 256) + + def init(cfg: Configuration) { + // figure out what's the max id we already use, because forge is stupid + // ignore ids in the top slots as they were probably assigned to resolve conflicts + import scala.collection.JavaConverters._ + + val maxBlock = (cfg.getCategory(Configuration.CATEGORY_BLOCK).values().asScala.map(_.getInt).filter(_ < Block.blocksList.length - 100) ++ Seq(0)).max + 1 + val maxItem = (cfg.getCategory(Configuration.CATEGORY_ITEM).values().asScala.map(_.getInt).filter(_ < Item.itemsList.length - 1000) ++ Seq(0)).max + 1 + + if (maxBlock > blockIds.now) blockIds.now = maxBlock + if (maxItem > itemIds.now) itemIds.now = maxItem + } +} diff --git a/src/net/bdew/gendustry/config/Items.scala b/src/net/bdew/gendustry/config/Items.scala new file mode 100644 index 00000000..211b12d6 --- /dev/null +++ b/src/net/bdew/gendustry/config/Items.scala @@ -0,0 +1,71 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.config + +import cpw.mods.fml.common.registry.GameRegistry +import forestry.api.core.ItemInterface +import net.bdew.gendustry.mutagen.ItemMutagenBucket +import net.bdew.gendustry.mutagen.ItemMutagenCan +import net.minecraft.item.Item +import net.minecraft.item.ItemStack +import net.minecraftforge.common.Configuration +import net.minecraftforge.fluids.FluidContainerRegistry +import net.bdew.gendustry.items.{IndustrialGrafter, GeneTemplate, GeneSample, SimpleItem} +import net.bdew.gendustry.machines.apiary.upgrades.ItemApiaryUpgrade + +object Items { + var mutagenBucket: ItemMutagenBucket = null + var mutagenCan: ItemMutagenCan = null + var labware: SimpleItem = null + var waste: SimpleItem = null + var geneSample: GeneSample = null + var geneSampleBlank: SimpleItem = null + var geneTemplate: GeneTemplate = null + var upgradeItem: ItemApiaryUpgrade = null + var grafter: IndustrialGrafter = null + + def regSimpleItem(cfg: Configuration, name: String): SimpleItem = + regItem(new SimpleItem(cfg.getItem(name, Ids.itemIds.next()).getInt, name), name) + + def regItem[T <: SimpleItem](item: T): T = regItem(item, item.name) + + def regItem[T <: Item](item: T, name: String): T = { + GameRegistry.registerItem(item, name) + GameRegistry.registerCustomItemStack(name, new ItemStack(item)) + return item + } + + def load(cfg: Configuration) { + mutagenBucket = regItem(new ItemMutagenBucket(cfg.getItem("MutagenBucket", Ids.itemIds.next()).getInt),"MutagenBucket") + mutagenCan = regItem(new ItemMutagenCan(cfg.getItem("MutagenCan", Ids.itemIds.next()).getInt), "MutagenCan") + + FluidContainerRegistry.registerFluidContainer(Blocks.mutagenFluid, new ItemStack(mutagenBucket), new ItemStack(Item.bucketEmpty)) + FluidContainerRegistry.registerFluidContainer(Blocks.mutagenFluid, new ItemStack(mutagenCan), ItemInterface.getItem("canEmpty")) + + geneSample = regItem(new GeneSample(cfg.getItem("GeneSample", Ids.itemIds.next()).getInt)) + geneTemplate = regItem(new GeneTemplate(cfg.getItem("GeneTemplate", Ids.itemIds.next()).getInt)) + + upgradeItem = regItem(new ItemApiaryUpgrade(cfg.getItem("ApiaryUpgrade", Ids.itemIds.next()).getInt), "ApiaryUpgrade") + + grafter = regItem(new IndustrialGrafter(cfg.getItem("IndustrialGrafter", Ids.itemIds.next()).getInt), "IndustrialGrafter") + + regSimpleItem(cfg, "MutagenTank") + regSimpleItem(cfg, "BeeReceptacle") + regSimpleItem(cfg, "PowerModule") + regSimpleItem(cfg, "GeneticsProcessor") + regSimpleItem(cfg, "UpgradeFrame") + regSimpleItem(cfg, "ClimateModule") + + labware = regSimpleItem(cfg, "Labware") + waste = regSimpleItem(cfg, "Waste") + geneSampleBlank = regSimpleItem(cfg, "GeneSampleBlank") + + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/config/Machines.scala b/src/net/bdew/gendustry/config/Machines.scala new file mode 100644 index 00000000..8779c527 --- /dev/null +++ b/src/net/bdew/gendustry/config/Machines.scala @@ -0,0 +1,33 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.config + +import net.minecraftforge.common.Configuration +import net.bdew.gendustry.machines.mproducer.MachineMutagenProducer +import net.bdew.gendustry.machines.mutatron.MachineMutatron +import net.bdew.gendustry.machines.apiary.MachineApiary +import net.bdew.gendustry.machines.imprinter.MachineImprinter +import net.bdew.gendustry.machines.sampler.MachineSampler + +object Machines { + var mutagenProducer: MachineMutagenProducer = null + var mutatron: MachineMutatron = null + var apiary: MachineApiary = null + var imprinter: MachineImprinter = null + var sampler: MachineSampler = null + + def load(cfg: Configuration) { + mutagenProducer = new MachineMutagenProducer(cfg) + mutatron = new MachineMutatron(cfg) + apiary = new MachineApiary(cfg) + imprinter = new MachineImprinter(cfg) + sampler = new MachineSampler(cfg) + } +} diff --git a/src/net/bdew/gendustry/config/Tuning.scala b/src/net/bdew/gendustry/config/Tuning.scala new file mode 100644 index 00000000..5ce37447 --- /dev/null +++ b/src/net/bdew/gendustry/config/Tuning.scala @@ -0,0 +1,105 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.config + +import net.bdew.lib.recipes.gencfg._ +import net.bdew.lib.recipes.{RecipeLoader, RecipeParser, Statement, StackRef} +import net.bdew.gendustry.mutagen.MutagenRegistry +import net.minecraftforge.oredict.OreDictionary +import buildcraft.api.recipes.AssemblyRecipe +import java.io.{InputStreamReader, FileReader, File} +import net.bdew.gendustry.Gendustry + +object Tuning extends ConfigSection + +object TuningLoader { + + abstract class EntryModifier extends CfgEntry + + case class EntryModifierAdd(v: Float) extends EntryModifier + + case class EntryModifierSub(v: Float) extends EntryModifier + + case class EntryModifierMul(v: Float) extends EntryModifier + + case class EntryModifierDiv(v: Float) extends EntryModifier + + case class StMutagen(st: StackRef, mb: Int) extends Statement + + case class StAssembly(rec: List[(Char, Int)], power: Int, out: StackRef, cnt: Int) extends Statement + + class Parser extends RecipeParser with GenericConfigParser { + override def statement = mutagen | assembly | super.statement + def mutagen = "mutagen" ~> ":" ~> spec ~ ("->" ~> int) ^^ { + case sp ~ n => StMutagen(sp, n) + } + + def charWithCount = recipeChar ~ ("*" ~> int).? ^^ { + case ch ~ cnt => (ch, cnt.getOrElse(1)) + } + + def assembly = "assembly" ~> ":" ~> (charWithCount <~ ",").+ ~ (int <~ "mj") ~ ("=>" ~> specWithCount) ^^ { + case r ~ p ~ (s ~ n) => StAssembly(r, p, s, n.getOrElse(1)) + } + + override def cfgStatement = cfgAdd | cfgMul | cfgSub | cfgDiv | super.cfgStatement + + def cfgAdd = ident ~ ("+" ~> "=" ~> decimalNumber) ^^ { case id ~ n => CfgVal(id, EntryModifierAdd(n.toFloat)) } + def cfgMul = ident ~ ("*" ~> "=" ~> decimalNumber) ^^ { case id ~ n => CfgVal(id, EntryModifierMul(n.toFloat)) } + def cfgSub = ident ~ ("-" ~> "=" ~> decimalNumber) ^^ { case id ~ n => CfgVal(id, EntryModifierSub(n.toFloat)) } + def cfgDiv = ident ~ ("/" ~> "=" ~> decimalNumber) ^^ { case id ~ n => CfgVal(id, EntryModifierDiv(n.toFloat)) } + } + + class Loader extends RecipeLoader with GenericConfigLoader { + val cfgStore = Tuning + + override def newParser(): RecipeParser = new Parser() + + override def processStatement(s: Statement): Unit = s match { + case StMutagen(st, mb) => + val in = getConcreteStack(st) + MutagenRegistry.register(in, mb) + log.info("Added mutagen source %s -> %d mb".format(in, mb)) + + case StAssembly(rec, power, out, cnt) => + log.info("Adding assembly recipe: %s + %d mj => %s * %d".format(rec, power, out, cnt)) + val outStack = getConcreteStack(out, cnt) + val stacks = rec.map { + case (c, n) => + val s = getConcreteStack(currCharMap(c), n) + if (s.getItemDamage == OreDictionary.WILDCARD_VALUE) { + s.setItemDamage(0) + log.warning("%s added with wildcard metadata which is unsupported, assuming 0".format(s)) + } + log.info("%s -> %s".format(c, s)) + s + } + log.info("Output: %s".format(outStack)) + AssemblyRecipe.assemblyRecipes.add(new AssemblyRecipe(stacks.toArray, power, outStack)) + log.info("Done") + case _ => super.processStatement(s) + } + } + + def load(part: String) { + val f = new File(Gendustry.configDir, "%s-%s.cfg".format(Gendustry.modId, part)) + val r = if (f.exists() && f.canRead) { + new FileReader(f) + } else { + new InputStreamReader(this.getClass.getResourceAsStream("/assets/%s/%s-%s.cfg".format(Gendustry.modId, Gendustry.modId, part))) + } + try { + new Loader().load(r) + } finally { + r.close() + } + } +} + diff --git a/src/net/bdew/gendustry/data/DataSlotPower.scala b/src/net/bdew/gendustry/data/DataSlotPower.scala new file mode 100644 index 00000000..0ac9f338 --- /dev/null +++ b/src/net/bdew/gendustry/data/DataSlotPower.scala @@ -0,0 +1,62 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.data + +import net.minecraft.nbt.NBTTagCompound +import buildcraft.api.power.{IPowerReceptor, PowerHandler} +import net.bdew.lib.data.base.{TileDataSlots, UpdateKind, DataSlot} +import net.bdew.gendustry.machines.PoweredMachine + +case class DataSlotPower(name: String, parent: TileDataSlots, kind: PowerHandler.Type) extends DataSlot { + updateKind = Set(UpdateKind.GUI, UpdateKind.SAVE) + var oldVal = 0F + + require(parent.isInstanceOf[IPowerReceptor]) + val handler = new PowerHandler(parent.asInstanceOf[IPowerReceptor], kind) + + def configure(cfg: PoweredMachine): DataSlotPower = { + handler.configure(cfg.minReceivedEnergy, cfg.maxReceivedEnergy, cfg.activationEnergy, cfg.maxStoredEnergy) + handler.configurePowerPerdition(cfg.powerLoss, cfg.powerLossInterval) + return this + } + + parent.serverTick.listen(checkUpdate) + + updateKind = Set(UpdateKind.GUI, UpdateKind.SAVE) + + def checkUpdate() { + handler.update() + if (getEnergyStored != oldVal) { + oldVal = getEnergyStored + parent.dataSlotChanged(this) + } + } + + def useEnergy(min: Float, max: Float, doUse: Boolean): Float = handler.useEnergy(min, max, doUse) + def getMinEnergyReceived: Float = handler.getMinEnergyReceived + def getMaxEnergyReceived: Float = handler.getMaxEnergyReceived + def getMaxEnergyStored: Float = handler.getMaxEnergyStored + def getActivationEnergy: Float = handler.getActivationEnergy + def getEnergyStored: Float = handler.getEnergyStored + + def save(t: NBTTagCompound, kind: UpdateKind.Value) { + handler.writeToNBT(t, name) + if (kind == UpdateKind.GUI) + t.getCompoundTag(name).setFloat("maxStored", getMaxEnergyStored) + } + + def load(t: NBTTagCompound, kind: UpdateKind.Value) { + handler.readFromNBT(t, name) + if (kind == UpdateKind.GUI) + handler.configure(getMaxEnergyReceived, getMaxEnergyReceived, getActivationEnergy, t.getCompoundTag(name).getFloat("maxStored")) + } +} + + diff --git a/src/net/bdew/gendustry/data/ExposePower.scala b/src/net/bdew/gendustry/data/ExposePower.scala new file mode 100644 index 00000000..a23d1cde --- /dev/null +++ b/src/net/bdew/gendustry/data/ExposePower.scala @@ -0,0 +1,22 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.data + +import buildcraft.api.power.{PowerHandler, IPowerReceptor} +import net.minecraft.world.World +import net.minecraftforge.common.ForgeDirection +import net.bdew.lib.tile.TileExtended + +trait ExposePower extends TileExtended with IPowerReceptor { + def getPowerDataslot(from: ForgeDirection): DataSlotPower + def doWork(workProvider: PowerHandler) {} + def getPowerReceiver(side: ForgeDirection) = getPowerDataslot(side).handler.getPowerReceiver + def getWorld: World = worldObj +} diff --git a/src/net/bdew/gendustry/forestry/GeneRecipe.scala b/src/net/bdew/gendustry/forestry/GeneRecipe.scala new file mode 100644 index 00000000..d5b396a5 --- /dev/null +++ b/src/net/bdew/gendustry/forestry/GeneRecipe.scala @@ -0,0 +1,42 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.forestry + +import net.minecraft.item.crafting.IRecipe +import net.minecraft.item.ItemStack +import net.minecraft.inventory.InventoryCrafting +import net.minecraft.world.World +import net.bdew.gendustry.items.{GeneTemplate, GeneSample} +import net.bdew.gendustry.config.Items + +class GeneRecipe extends IRecipe { + def matches(inv: InventoryCrafting, world: World): Boolean = getCraftingResult(inv) != null + def getCraftingResult(inv: InventoryCrafting): ItemStack = { + var template: ItemStack = null + var samples = Seq.empty[GeneSampleInfo] + for (i <- 0 until 3; j <- 0 until 3) { + val itm = inv.getStackInRowAndColumn(i, j) + if (itm != null && itm.getItem.isInstanceOf[GeneSample]) + samples :+= Items.geneSample.getInfo(itm) + else if (itm != null && itm.getItem.isInstanceOf[GeneTemplate] && template == null) + template = itm + else if (itm != null) + return null + } + if (samples.isEmpty || template == null) return null + val out = template.copy() + for (s <- samples) { + if (!Items.geneTemplate.addSample(out, s)) return null + } + return out + } + def getRecipeSize: Int = 9 + def getRecipeOutput: ItemStack = null +} diff --git a/src/net/bdew/gendustry/forestry/GeneSampleInfo.scala b/src/net/bdew/gendustry/forestry/GeneSampleInfo.scala new file mode 100644 index 00000000..8b616729 --- /dev/null +++ b/src/net/bdew/gendustry/forestry/GeneSampleInfo.scala @@ -0,0 +1,57 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.forestry + +import forestry.api.genetics._ +import net.minecraft.nbt.NBTTagCompound +import forestry.api.apiculture.{EnumBeeChromosome, IBeeRoot} +import forestry.api.arboriculture.{IAlleleGrowth, IAlleleFruit, EnumTreeChromosome, ITreeRoot} +import forestry.api.lepidopterology.{EnumButterflyChromosome, IButterflyRoot} +import net.bdew.lib.Misc + +case class GeneSampleInfo(root: ISpeciesRoot, chromosome: Int, allele: IAllele) { + def writeToNBT(t: NBTTagCompound) { + t.setString("species", root.getUID) + t.setInteger("chromosome", chromosome) + t.setString("allele", allele.getUID) + } + + def getText: String = { + import scala.collection.JavaConverters._ + val chr = root match { + case x: IBeeRoot => EnumBeeChromosome.values()(chromosome).toString + case x: ITreeRoot => EnumTreeChromosome.values()(chromosome).toString + case x: IButterflyRoot => EnumButterflyChromosome.values()(chromosome).toString + case _ => "Invalid" + } + val alstr = allele match { + case i: IAlleleInteger => chr match { + case "GIRTH" => "%d x %d".format(i.getValue, i.getValue) + case "FERTILITY" if !root.isInstanceOf[ITreeRoot] => i.getValue.toString + case "METABOLISM" => i.getValue.toString + case _ => i.getName + } + case f: IAlleleFruit => StringUtil.localize(f.getProvider.getDescription) + case p: IAllelePlantType => if (p.getPlantTypes.isEmpty) "-" else p.getPlantTypes.asScala.mkString(", ") + case b: IAlleleBoolean => if (b.getValue) Misc.toLocal("gendustry.allele.true") else Misc.toLocal("gendustry.allele.false") + case g: IAlleleGrowth => g.getProvider.getDescription + case x => x.getName + } + return "%s: %s".format(Misc.toLocal("gendustry.chromosome." + chr), alstr) + } +} + +object GeneSampleInfo { + def fromNBT(t: NBTTagCompound): GeneSampleInfo = { + val species = AlleleManager.alleleRegistry.getSpeciesRoot(t.getString("species")) + val allele = AlleleManager.alleleRegistry.getAllele(t.getString("allele")) + return GeneSampleInfo(species, t.getInteger("chromosome"), allele) + } +} diff --git a/src/net/bdew/gendustry/forestry/StringUtil.scala b/src/net/bdew/gendustry/forestry/StringUtil.scala new file mode 100644 index 00000000..0b1f7c9f --- /dev/null +++ b/src/net/bdew/gendustry/forestry/StringUtil.scala @@ -0,0 +1,17 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.forestry + +object StringUtil { + val cl = Class.forName("forestry.core.utils.StringUtil") + val mLocalize = cl.getMethod("localize", classOf[String]) + + def localize(s: String) = mLocalize.invoke(null, s).asInstanceOf[String] +} diff --git a/src/net/bdew/gendustry/gui/BlockGuiWrenchable.scala b/src/net/bdew/gendustry/gui/BlockGuiWrenchable.scala new file mode 100644 index 00000000..e452c7b9 --- /dev/null +++ b/src/net/bdew/gendustry/gui/BlockGuiWrenchable.scala @@ -0,0 +1,33 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.gui + +import net.minecraft.world.World +import net.minecraft.entity.player.EntityPlayer +import buildcraft.api.tools.IToolWrench +import net.bdew.gendustry.Gendustry +import net.minecraft.block.Block + +trait BlockGuiWrenchable extends Block { + val guiId: Int + override def onBlockActivated(world: World, x: Int, y: Int, z: Int, player: EntityPlayer, meta: Int, xoffs: Float, yoffs: Float, zoffs: Float): Boolean = { + if (player.isSneaking) { + val equipped = if (player.getCurrentEquippedItem != null) player.getCurrentEquippedItem.getItem else null + if (equipped.isInstanceOf[IToolWrench] && equipped.asInstanceOf[IToolWrench].canWrench(player, x, y, z)) { + if (!world.isRemote) world.destroyBlock(x, y, z, true) + return true + } + return false + } else { + if (!world.isRemote) player.openGui(Gendustry.instance, guiId, world, x, y, z) + return true + } + } +} diff --git a/src/net/bdew/gendustry/gui/GuiHandler.scala b/src/net/bdew/gendustry/gui/GuiHandler.scala new file mode 100644 index 00000000..9408b223 --- /dev/null +++ b/src/net/bdew/gendustry/gui/GuiHandler.scala @@ -0,0 +1,31 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.gui + +import cpw.mods.fml.common.network.IGuiHandler +import scala.collection.mutable +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.world.World + +object GuiHandler extends IGuiHandler { + val guis = mutable.Map.empty[Int, GuiProvider] + + def register(p: GuiProvider) = { + if (guis.isDefinedAt(p.guiId)) + sys.error("GUI ID Collision - %d was registered for %s and attemted to register by %s".format(p.guiId, guis(p.guiId), p)) + guis += (p.guiId -> p) + } + + def getServerGuiElement(ID: Int, player: EntityPlayer, world: World, x: Int, y: Int, z: Int): AnyRef = + guis(ID).getContainer(world.getBlockTileEntity(x, y, z), player) + + def getClientGuiElement(ID: Int, player: EntityPlayer, world: World, x: Int, y: Int, z: Int): AnyRef = + guis(ID).getGui(world.getBlockTileEntity(x, y, z), player) +} diff --git a/src/net/bdew/gendustry/gui/GuiProvider.scala b/src/net/bdew/gendustry/gui/GuiProvider.scala new file mode 100644 index 00000000..26cebd6e --- /dev/null +++ b/src/net/bdew/gendustry/gui/GuiProvider.scala @@ -0,0 +1,25 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.gui + +import net.minecraft.tileentity.TileEntity +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.client.gui.inventory.GuiContainer +import net.minecraft.inventory.Container +import cpw.mods.fml.relauncher.{Side, SideOnly} + +trait GuiProvider { + GuiHandler.register(this) + def guiId: Int + + @SideOnly(Side.CLIENT) + def getGui(te: TileEntity, player: EntityPlayer): GuiContainer + def getContainer(te: TileEntity, player: EntityPlayer): Container +} diff --git a/src/net/bdew/gendustry/gui/Textures.scala b/src/net/bdew/gendustry/gui/Textures.scala new file mode 100644 index 00000000..377c44a5 --- /dev/null +++ b/src/net/bdew/gendustry/gui/Textures.scala @@ -0,0 +1,23 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.gui + +import net.bdew.lib.gui.TextureLocation +import net.minecraft.util.ResourceLocation +import net.bdew.gendustry.Gendustry + +object Textures { + val texture = new ResourceLocation(Gendustry.modId + ":textures/gui/widgets.png") + val tankOverlay = new TextureLocation(texture, 16, 0) + val powerFill = new TextureLocation(texture, 0, 0) + val texturePowerError = new TextureLocation(texture, 32, 0) + def greenProgress(width: Int) = new TextureLocation(texture, 136 - width, 58) + def whiteProgress(width: Int) = new TextureLocation(texture, 136 - width, 73) +} diff --git a/src/net/bdew/gendustry/gui/WidgetMJGauge.scala b/src/net/bdew/gendustry/gui/WidgetMJGauge.scala new file mode 100644 index 00000000..d289a6a2 --- /dev/null +++ b/src/net/bdew/gendustry/gui/WidgetMJGauge.scala @@ -0,0 +1,29 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.gui + +import net.bdew.lib.gui.{Point, TextureLocation, Rect} +import scala.collection.mutable +import java.text.DecimalFormat +import net.bdew.gendustry.data.DataSlotPower +import net.minecraft.client.Minecraft +import net.bdew.lib.gui.widgets.Widget + +class WidgetMJGauge(val rect: Rect, texture: TextureLocation, dslot: DataSlotPower) extends Widget { + val formater = new DecimalFormat("#,###") + + override def draw() { + Minecraft.getMinecraft.renderEngine.bindTexture(texture.resource) + val fill = (dslot.getEnergyStored / dslot.getMaxEnergyStored * rect.h).round + parent.drawTexturedModalRect(rect.x, rect.y + rect.h - fill, texture.x, texture.y + rect.h - fill, rect.w, fill) + } + + override def handleTooltip(p: Point, tip: mutable.MutableList[String]) = tip += formater.format(dslot.getEnergyStored) + "/" + formater.format(dslot.getMaxEnergyStored) + " MJ" +} diff --git a/src/net/bdew/gendustry/items/GeneSample.scala b/src/net/bdew/gendustry/items/GeneSample.scala new file mode 100644 index 00000000..46f339b9 --- /dev/null +++ b/src/net/bdew/gendustry/items/GeneSample.scala @@ -0,0 +1,44 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.items + +import net.minecraft.item.ItemStack +import net.minecraft.nbt.NBTTagCompound +import net.minecraft.entity.player.EntityPlayer +import java.util +import net.bdew.lib.Misc +import net.bdew.gendustry.forestry.GeneSampleInfo +import net.bdew.gendustry.config.Items + +class GeneSample(id: Int) extends SimpleItem(id, "GeneSample") { + + setMaxStackSize(1) + setContainerItem(Items.geneSampleBlank) + + def newStack(info: GeneSampleInfo): ItemStack = { + val stack = new ItemStack(this) + val tag = new NBTTagCompound() + info.writeToNBT(tag) + stack.setTagCompound(tag) + return stack + } + + def getInfo(stack: ItemStack): GeneSampleInfo = GeneSampleInfo.fromNBT(stack.getTagCompound) + + override def addInformation(stack: ItemStack, player: EntityPlayer, l: util.List[_], par4: Boolean) = { + import scala.collection.JavaConverters._ + if (stack.hasTagCompound) { + val tip = l.asInstanceOf[util.List[String]].asScala + val info = getInfo(stack) + tip += Misc.toLocal("gendustry.label.sample." + info.root.getUID) + tip += info.getText + } + } +} diff --git a/src/net/bdew/gendustry/items/GeneTemplate.scala b/src/net/bdew/gendustry/items/GeneTemplate.scala new file mode 100644 index 00000000..6e2c5f02 --- /dev/null +++ b/src/net/bdew/gendustry/items/GeneTemplate.scala @@ -0,0 +1,81 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.items + +import net.minecraft.item.ItemStack +import net.bdew.gendustry.forestry.{GeneRecipe, GeneSampleInfo} +import net.bdew.lib.Misc +import net.minecraft.nbt.{NBTTagList, NBTTagCompound} +import net.minecraft.entity.player.EntityPlayer +import java.util +import cpw.mods.fml.common.registry.GameRegistry +import forestry.api.genetics.{ISpeciesRoot, AlleleManager} + +class GeneTemplate(id: Int) extends SimpleItem(id, "GeneTemplate") { + setMaxStackSize(1) + + GameRegistry.addRecipe(new GeneRecipe) + + override def getUnlocalizedName: String = super.getUnlocalizedName + override def getUnlocalizedName(par1ItemStack: ItemStack): String = super.getUnlocalizedName + + def getSpecies(stack: ItemStack): ISpeciesRoot = + if (stack.hasTagCompound) AlleleManager.alleleRegistry.getSpeciesRoot(stack.getTagCompound.getString("species")) else null + + def getSamples(stack: ItemStack): Iterable[GeneSampleInfo] = { + val tag = stack.getTagCompound + if (tag != null) + return Misc.iterNbtList[NBTTagCompound](tag.getTagList("samples")).map(x => GeneSampleInfo.fromNBT(x)) + else + return Seq.empty[GeneSampleInfo] + } + + def addSample(stack: ItemStack, sample: GeneSampleInfo): Boolean = { + val tag = if (stack.hasTagCompound) { + stack.getTagCompound + } else { + val newTag = new NBTTagCompound() + newTag.setString("species", sample.root.getUID) + newTag.setTag("samples", new NBTTagList()) + stack.setTagCompound(newTag) + newTag + } + if (tag.getString("species") != sample.root.getUID) return false + val samples = new NBTTagList() + for (s <- getSamples(stack) if s.chromosome != sample.chromosome) { + val t = new NBTTagCompound() + s.writeToNBT(t) + samples.appendTag(t) + } + val stag = new NBTTagCompound() + sample.writeToNBT(stag) + samples.appendTag(stag) + tag.setTag("samples", samples) + return true + } + + override def addInformation(stack: ItemStack, player: EntityPlayer, l: util.List[_], par4: Boolean) = { + import scala.collection.JavaConverters._ + val tip = l.asInstanceOf[util.List[String]].asScala + val tag = stack.getTagCompound + if (tag != null && tag.hasKey("species")) { + try { + tip += Misc.toLocal("gendustry.label.template." + tag.getString("species")) + tip ++= getSamples(stack).map(_.getText) + } catch { + case e: Throwable => + e.printStackTrace() + tip += "Error" + } + } else { + tip += Misc.toLocal("gendustry.label.template.blank") + } + } +} diff --git a/src/net/bdew/gendustry/items/IndustrialGrafter.scala b/src/net/bdew/gendustry/items/IndustrialGrafter.scala new file mode 100644 index 00000000..357b7877 --- /dev/null +++ b/src/net/bdew/gendustry/items/IndustrialGrafter.scala @@ -0,0 +1,123 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.items + +import cofh.api.energy.IEnergyContainerItem +import net.minecraft.item.{ItemStack, EnumToolMaterial, ItemTool} +import forestry.api.arboriculture.IToolGrafter +import net.minecraft.world.World +import net.minecraft.entity.player.EntityPlayer +import net.bdew.gendustry.Gendustry +import net.bdew.gendustry.config.Tuning +import net.minecraft.nbt.NBTTagCompound +import net.bdew.lib.Misc +import net.minecraft.block.Block +import net.minecraft.block.material.Material +import net.minecraft.entity.EntityLivingBase +import java.util +import net.minecraft.creativetab.CreativeTabs + +class IndustrialGrafter(id: Int) extends ItemTool(id, 0, EnumToolMaterial.IRON, Array.empty[Block]) with IEnergyContainerItem with IToolGrafter { + val cfg = Tuning.getSection("Items").getSection("IndustrialGrafter") + val rfPerCharge = cfg.getInt("RfPerCharge") + val maxCharge = cfg.getInt("Charges") * rfPerCharge + + setUnlocalizedName(Gendustry.modId + ".grafter") + setMaxStackSize(1) + setMaxDamage(101) + + efficiencyOnProperMaterial = 32 + + def getCharge(stack: ItemStack): Int = { + if (!stack.hasTagCompound) setCharge(stack, 0) + return Misc.clamp(stack.getTagCompound.getInteger("charge"), 0, maxCharge) + } + + def useCharge(stack: ItemStack, uses: Int = 1) { + setCharge(stack, Misc.clamp(getCharge(stack) - uses * rfPerCharge, 0, maxCharge)) + } + + def setCharge(stack: ItemStack, charge: Int) { + if (!stack.hasTagCompound) stack.setTagCompound(new NBTTagCompound()) + stack.getTagCompound.setInteger("charge", charge) + updateDamage(stack) + } + + def updateDamage(stack: ItemStack) { + setDamage(stack, Misc.clamp((100 * (1 - getCharge(stack).toFloat / maxCharge)).round.toInt, 1, 100)) + } + + def stackWithCharge(charge: Int): ItemStack = { + val n = new ItemStack(this) + setCharge(n, charge) + return n + } + + override def setDamage(stack: ItemStack, damage: Int) = super.setDamage(stack, Misc.clamp(damage, 1, 100)) + + override def getStrVsBlock(stack: ItemStack, block: Block, meta: Int): Float = getStrVsBlock(stack, block) + override def getStrVsBlock(stack: ItemStack, block: Block): Float = { + if (getCharge(stack) < rfPerCharge) return 0.1F + if (block.blockMaterial == Material.leaves) return efficiencyOnProperMaterial + return 0.1F + } + + override def onBlockDestroyed(stack: ItemStack, world: World, blockId: Int, x: Int, y: Int, z: Int, player: EntityLivingBase): Boolean = { + if (Block.blocksList(blockId).blockMaterial == Material.leaves) { + val aoe = 2 + if (!world.isRemote && player.isInstanceOf[EntityPlayer]) { + for (dx <- -1 * aoe to aoe; + dy <- -1 * aoe to aoe; + dz <- -1 * aoe to aoe + if dy + y > 0 && dy + y < world.getHeight) { + val bl = Block.blocksList(world.getBlockId(x + dx, y + dy, z + dz)) + if (bl != null && bl.blockMaterial == Material.leaves && getCharge(stack) > rfPerCharge) { + bl.removeBlockByPlayer(world, player.asInstanceOf[EntityPlayer], x + dx, y + dy, z + dz) + useCharge(stack) + } + } + } + useCharge(stack) + return true + } + return false + } + + override def addInformation(stack: ItemStack, player: EntityPlayer, l: util.List[_], par4: Boolean) = { + import scala.collection.JavaConverters._ + val tip = l.asInstanceOf[util.List[String]].asScala + + tip += Misc.toLocalF("gendustry.label.charges", getCharge(stack) / rfPerCharge) + } + + override def getSubItems(par1: Int, tabs: CreativeTabs, l: util.List[_]) { + import scala.collection.JavaConverters._ + val items = l.asInstanceOf[util.List[ItemStack]].asScala + items += new ItemStack(this) + items += stackWithCharge(maxCharge) + } + + override def getItemEnchantability: Int = 0 + override def getIsRepairable(par1ItemStack: ItemStack, par2ItemStack: ItemStack): Boolean = false + override def isBookEnchantable(itemstack1: ItemStack, itemstack2: ItemStack): Boolean = false + + def receiveEnergy(container: ItemStack, maxReceive: Int, simulate: Boolean): Int = { + val charge = getCharge(container) + val canCharge = Misc.clamp(maxCharge - charge, 0, maxReceive) + if (!simulate) setCharge(container, charge + canCharge) + return canCharge + } + + def extractEnergy(container: ItemStack, maxExtract: Int, simulate: Boolean): Int = 0 + def getEnergyStored(container: ItemStack): Int = getCharge(container) + def getMaxEnergyStored(container: ItemStack): Int = maxCharge + + def getSaplingModifier(stack: ItemStack, world: World, player: EntityPlayer, x: Int, y: Int, z: Int): Float = if (getCharge(stack) > rfPerCharge) 100 else 0 +} diff --git a/src/net/bdew/gendustry/items/SimpleItem.scala b/src/net/bdew/gendustry/items/SimpleItem.scala new file mode 100644 index 00000000..c812f584 --- /dev/null +++ b/src/net/bdew/gendustry/items/SimpleItem.scala @@ -0,0 +1,24 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.items + +import net.minecraft.item.Item +import net.bdew.gendustry.Gendustry +import net.minecraft.client.renderer.texture.IconRegister +import cpw.mods.fml.relauncher.{Side, SideOnly} + +class SimpleItem(id: Int, val name: String) extends Item(id) { + setUnlocalizedName(Gendustry.modId + "." + name) + + @SideOnly(Side.CLIENT) + override def registerIcons(reg: IconRegister) { + itemIcon = reg.registerIcon(Gendustry.modId + ":" + name.toLowerCase) + } +} diff --git a/src/net/bdew/gendustry/machines/Machine.scala b/src/net/bdew/gendustry/machines/Machine.scala new file mode 100644 index 00000000..d4905520 --- /dev/null +++ b/src/net/bdew/gendustry/machines/Machine.scala @@ -0,0 +1,37 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines + +import net.minecraft.tileentity.TileEntity +import cpw.mods.fml.common.registry.GameRegistry +import net.bdew.gendustry.Gendustry +import net.minecraft.block.Block +import net.minecraftforge.common.Configuration +import net.bdew.lib.block.HasTE +import net.bdew.gendustry.config.{Tuning, Ids} +import net.minecraft.item.ItemStack + +abstract class Machine(cfg: Configuration, val name: String) { + lazy val tuning = Tuning.getSection("Machines").getSection(name) + + def registerBlock(block: Block) { + GameRegistry.registerBlock(block, name) + GameRegistry.registerCustomItemStack(name, new ItemStack(block)) + if (block.isInstanceOf[HasTE[_]]) { + registerTE(block.asInstanceOf[HasTE[_]].TEClass) + } + } + + def registerTE(teClass: Class[_ <: TileEntity]) { + GameRegistry.registerTileEntity(teClass, "%s.%s".format(Gendustry.modId, name)) + } + + def getBlockId = cfg.getBlock(name, Ids.blockIds.next()).getInt +} diff --git a/src/net/bdew/gendustry/machines/PoweredMachine.scala b/src/net/bdew/gendustry/machines/PoweredMachine.scala new file mode 100644 index 00000000..3001034b --- /dev/null +++ b/src/net/bdew/gendustry/machines/PoweredMachine.scala @@ -0,0 +1,21 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines + +import net.minecraftforge.common.Configuration + +abstract class PoweredMachine(cfg: Configuration, name: String) extends Machine(cfg, name) { + lazy val minReceivedEnergy = tuning.getFloat("MinReceivedEnergy") + lazy val maxReceivedEnergy = tuning.getFloat("MaxReceivedEnergy") + lazy val activationEnergy = tuning.getFloat("ActivationEnergy") + lazy val maxStoredEnergy = tuning.getFloat("MaxStoredEnergy") + lazy val powerLoss = tuning.getInt("PowerLoss") + lazy val powerLossInterval = tuning.getInt("PowerLossInterval") +} diff --git a/src/net/bdew/gendustry/machines/ProcessorMachine.scala b/src/net/bdew/gendustry/machines/ProcessorMachine.scala new file mode 100644 index 00000000..7d17e2f3 --- /dev/null +++ b/src/net/bdew/gendustry/machines/ProcessorMachine.scala @@ -0,0 +1,17 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines + +import net.minecraftforge.common.Configuration + +abstract class ProcessorMachine(cfg: Configuration, name: String) extends PoweredMachine(cfg, name) { + lazy val mjPerItem = tuning.getFloat("MjPerItem") + lazy val powerUseRate = tuning.getFloat("PowerUseRate") +} diff --git a/src/net/bdew/gendustry/machines/TileBaseProcessor.scala b/src/net/bdew/gendustry/machines/TileBaseProcessor.scala new file mode 100644 index 00000000..69cf53fc --- /dev/null +++ b/src/net/bdew/gendustry/machines/TileBaseProcessor.scala @@ -0,0 +1,69 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines + +import net.bdew.lib.tile.TileExtended +import net.bdew.lib.data.base.{UpdateKind, TileDataSlots} +import net.bdew.lib.tile.inventory.{BreakableInventoryTile, SidedInventory, PersistentInventoryTile} +import net.bdew.gendustry.data.{DataSlotPower, ExposePower} +import buildcraft.api.power.PowerHandler.Type +import net.bdew.lib.data.DataSlotFloat +import net.minecraftforge.common.ForgeDirection + +abstract class TileBaseProcessor extends TileExtended +with TileDataSlots +with PersistentInventoryTile +with BreakableInventoryTile +with SidedInventory +with ExposePower { + def cfg: ProcessorMachine + val power = DataSlotPower("power", this, Type.MACHINE).configure(cfg) + val progress = DataSlotFloat("progress", this).setUpdate(UpdateKind.SAVE, UpdateKind.GUI) + + def getPowerDataslot(from: ForgeDirection): DataSlotPower = power + + override def tickServer() { + if (power.getEnergyStored > cfg.activationEnergy) { + + if (!isWorking) + if (tryStart()) + progress := 0 + + if (isWorking) { + + if ((progress < 1) && (power.getEnergyStored > cfg.activationEnergy)) { + val maxConsume = Math.min(Math.max(cfg.powerUseRate * power.getEnergyStored, cfg.activationEnergy), cfg.mjPerItem * (1 - progress)) + val consumed = power.useEnergy(0, maxConsume, true) + progress += consumed / cfg.mjPerItem + } + + if (progress >= 1) { + if (tryFinish()) + progress := 0 + } + } + } + } + + /** + * Return true when an operation is in progress + */ + def isWorking: Boolean + + /** + * Try starting a new operation, return true if succesful + */ + def tryStart(): Boolean + + /** + * Perform output when operation is done, return true if succesful + */ + def tryFinish(): Boolean +} diff --git a/src/net/bdew/gendustry/machines/TileItemProcessor.scala b/src/net/bdew/gendustry/machines/TileItemProcessor.scala new file mode 100644 index 00000000..131b92d1 --- /dev/null +++ b/src/net/bdew/gendustry/machines/TileItemProcessor.scala @@ -0,0 +1,26 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines + +import net.bdew.lib.data.DataSlotItemStack +import net.bdew.lib.data.base.UpdateKind +import net.bdew.lib.items.ItemUtils + +abstract class TileItemProcessor extends TileBaseProcessor { + val output = DataSlotItemStack("output", this).setUpdate(UpdateKind.SAVE) + val outputSlots: Seq[Int] + + def isWorking = output :!= null + + def tryFinish(): Boolean = { + output := ItemUtils.addStackToSlots(output, this, outputSlots, false) + return output :== null + } +} diff --git a/src/net/bdew/gendustry/machines/apiary/BlockApiary.scala b/src/net/bdew/gendustry/machines/apiary/BlockApiary.scala new file mode 100644 index 00000000..2b2d9e00 --- /dev/null +++ b/src/net/bdew/gendustry/machines/apiary/BlockApiary.scala @@ -0,0 +1,59 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.apiary + +import net.bdew.gendustry.Gendustry +import net.minecraft.block.Block +import net.minecraft.block.material.Material +import net.minecraft.client.renderer.texture.IconRegister +import net.minecraft.entity.player.EntityPlayerMP +import net.minecraft.util.Icon +import net.minecraft.world.{IBlockAccess, World} +import cpw.mods.fml.relauncher.Side +import cpw.mods.fml.relauncher.SideOnly +import net.bdew.lib.block.HasTE +import net.bdew.lib.tile.inventory.BreakableInventoryBlock +import net.bdew.gendustry.config.Machines +import net.minecraft.entity.EntityLivingBase +import net.minecraft.item.ItemStack +import net.bdew.gendustry.gui.BlockGuiWrenchable + +class BlockApiary(id: Int) extends Block(id, Material.rock) with HasTE[TileApiary] with BlockGuiWrenchable with BreakableInventoryBlock { + private var icons: Array[Icon] = null + val TEClass = classOf[TileApiary] + lazy val guiId: Int = Machines.apiary.guiId + + setUnlocalizedName(Gendustry.modId + ".apiary") + setHardness(5) + + override def getIcon(side: Int, meta: Int): Icon = if (side < 2) icons(0) else icons(1) + + @SideOnly(Side.CLIENT) + override def registerIcons(reg: IconRegister) { + icons = new Array[Icon](2) + icons(0) = reg.registerIcon(Gendustry.modId + ":apiary/top") + icons(1) = reg.registerIcon(Gendustry.modId + ":apiary/side") + } + + override def getLightValue(world: IBlockAccess, x: Int, y: Int, z: Int): Int = { + val block: Block = Block.blocksList(world.getBlockId(x, y, z)) + if (block != null && block != this) + return block.getLightValue(world, x, y, z) + else if (world.getBlockTileEntity(x, y, z) != null && getTE(world, x, y, z).hasLight) + return 15 + else + return 0 + } + + override def onBlockPlacedBy(world: World, x: Int, y: Int, z: Int, player: EntityLivingBase, stack: ItemStack) { + if (player.isInstanceOf[EntityPlayerMP]) + getTE(world, x, y, z).owner := player.asInstanceOf[EntityPlayerMP].username + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/apiary/ContainerApiary.scala b/src/net/bdew/gendustry/machines/apiary/ContainerApiary.scala new file mode 100644 index 00000000..70355d9f --- /dev/null +++ b/src/net/bdew/gendustry/machines/apiary/ContainerApiary.scala @@ -0,0 +1,82 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.apiary + +import net.minecraft.entity.player.EntityPlayer +import net.bdew.lib.gui.{BaseContainer, SlotValidating} +import net.minecraft.item.ItemStack +import net.minecraft.inventory.{IInventory, Slot} +import net.bdew.lib.items.ItemUtils +import net.bdew.lib.data.base.ContainerDataSlots +import net.bdew.lib.Misc + +class ContainerApiary(val te: TileApiary, player: EntityPlayer) extends BaseContainer(te) with ContainerDataSlots { + lazy val dataSource = te + + addSlotToContainer(new SlotValidating(te, 0, 39, 29)) + addSlotToContainer(new SlotValidating(te, 1, 39, 52)) + + class SlotUpgrade(inv: IInventory, slot: Int, x: Int, y: Int) extends SlotValidating(inv, slot, x, y) { + // Fixes glitch in nei mouse scroll support + override def isItemValid(stack: ItemStack): Boolean = stack == this.getStack || super.isItemValid(stack) + } + + for (i <- 0 to 1; j <- 0 to 1) + addSlotToContainer(new SlotUpgrade(te, 2 + j + i * 2, 70 + j * 18, 43 + i * 18)) + + for (i <- 0 to 2; j <- 0 to 2) + addSlotToContainer(new SlotValidating(te, 6 + j + i * 3, 116 + j * 18, 25 + i * 18)) + + bindPlayerInventory(player.inventory, 8, 84, 142) + + + + override def transferStackInSlot(player: EntityPlayer, slot: Int): ItemStack = { + val stack = getSlot(slot).getStack + if (getSlot(slot).inventory == player.inventory && te.isUpgrade(stack)) { + val canAdd = Misc.min(te.getMaxAdditionalUpgrades(stack), stack.stackSize) + if (canAdd > 0) { + ItemUtils.addStackToSlots(stack.splitStack(canAdd), te, te.slotsUpgrades, true) + } + getSlot(slot).putStack(if (stack.stackSize > 0) stack else null) + return null + } + return super.transferStackInSlot(player, slot) + } + + override def slotClick(slot: Int, button: Int, modifiers: Int, player: EntityPlayer): ItemStack = { + var pstack = player.inventory.getItemStack + if (te.slotsUpgrades.contains(slot) && te.isUpgrade(pstack)) { + val idx = inventorySlots.get(slot).asInstanceOf[Slot].getSlotIndex + if (te.slotsUpgrades.contains(idx) && modifiers == 0 && button <= 1) { + if (te.getStackInSlot(idx) == null || ItemUtils.isSameItem(pstack, te.getStackInSlot(idx))) { + var canAdd = te.getMaxAdditionalUpgrades(pstack) + if (canAdd > 0) { + if (button == 1) canAdd = 1 + var nstack: ItemStack = null + if (canAdd >= pstack.stackSize) { + nstack = pstack + pstack = null + } else { + nstack = pstack.splitStack(canAdd) + } + player.inventory.setItemStack(nstack) + val res = super.slotClick(slot, button, modifiers, player) + player.inventory.setItemStack(pstack) + return res + } + } + } + } + return super.slotClick(slot, button, modifiers, player) + } + + def canInteractWith(entityplayer: EntityPlayer): Boolean = te.isUseableByPlayer(entityplayer) +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/apiary/ErrorCodes.scala b/src/net/bdew/gendustry/machines/apiary/ErrorCodes.scala new file mode 100644 index 00000000..02e206ec --- /dev/null +++ b/src/net/bdew/gendustry/machines/apiary/ErrorCodes.scala @@ -0,0 +1,33 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.apiary + +import net.minecraft.util.Icon + +object ErrorCodes { + + import scala.language.existentials + + private val cEnumErrorCode = Class.forName("forestry.core.EnumErrorCode") + private val mGetIcon = cEnumErrorCode.getMethod("getIcon") + private val mGetDescription = cEnumErrorCode.getMethod("getDescription") + private val mGetHelp = cEnumErrorCode.getMethod("getHelp") + private val cLocalization = Class.forName("forestry.core.utils.Localization") + private lazy val iLocalization = cLocalization.getField("instance").get(null) + private val mGet = cLocalization.getMethod("get", classOf[String]) + + val values = cEnumErrorCode.getEnumConstants + + def isValid(i: Int) = values.isDefinedAt(i) + + def getIcon(i: Int) = mGetIcon.invoke(values(i)).asInstanceOf[Icon] + def getDescription(i: Int) = mGet.invoke(iLocalization, mGetDescription.invoke(values(i)).asInstanceOf[String]).asInstanceOf[String] + def getHelp(i: Int) = mGet.invoke(iLocalization, mGetHelp.invoke(values(i)).asInstanceOf[String]).asInstanceOf[String] +} diff --git a/src/net/bdew/gendustry/machines/apiary/GuiApiary.scala b/src/net/bdew/gendustry/machines/apiary/GuiApiary.scala new file mode 100644 index 00000000..ff27f0db --- /dev/null +++ b/src/net/bdew/gendustry/machines/apiary/GuiApiary.scala @@ -0,0 +1,29 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.apiary + +import net.bdew.gendustry.Gendustry +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.util.ResourceLocation +import net.bdew.lib.gui.{Rect, BaseScreen} +import net.bdew.lib.gui.widgets.WidgetLabel +import net.bdew.gendustry.gui.{WidgetMJGauge, Textures} +import net.bdew.lib.Misc + +class GuiApiary(val te: TileApiary, player: EntityPlayer) extends BaseScreen(new ContainerApiary(te, player), 176, 166) { + val texture = new ResourceLocation(Gendustry.modId + ":textures/gui/apiary.png") + override def initGui() { + super.initGui() + addWidget(new WidgetError(155, 5, te)) + addWidget(new WidgetMJGauge(new Rect(8, 19, 16, 58), Textures.powerFill, te.power)) + addWidget(new WidgetApiaryProgress(new Rect(69, 22, 36, 15), te.guiBreeding, te.guiProgress)) + addWidget(new WidgetLabel(Misc.toLocal("tile.gendustry.apiary.name"), 8, 6, 4210752)) + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/apiary/MachineApiary.scala b/src/net/bdew/gendustry/machines/apiary/MachineApiary.scala new file mode 100644 index 00000000..385fd7f7 --- /dev/null +++ b/src/net/bdew/gendustry/machines/apiary/MachineApiary.scala @@ -0,0 +1,38 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.apiary + +import net.bdew.gendustry.machines.PoweredMachine +import net.minecraft.tileentity.TileEntity +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.inventory.Container +import net.minecraft.client.gui.inventory.GuiContainer +import net.minecraftforge.common.Configuration +import net.bdew.gendustry.gui.GuiProvider +import net.bdew.gendustry.machines.apiary.upgrades.ItemApiaryUpgrade +import net.bdew.gendustry.config.Ids +import cpw.mods.fml.common.registry.GameRegistry +import cpw.mods.fml.relauncher.{Side, SideOnly} + +class MachineApiary(cfg: Configuration) extends PoweredMachine(cfg, "IndustrialApiary") with GuiProvider { + var block: BlockApiary = null + lazy val guiId = 3 + + lazy val baseMjPerTick = tuning.getInt("BaseMjPerTick") + + if (cfg.get("Machines Enabled", name, true).getBoolean(true)) { + block = new BlockApiary(getBlockId) + registerBlock(block) + } + + @SideOnly(Side.CLIENT) + def getGui(te: TileEntity, player: EntityPlayer): GuiContainer = new GuiApiary(te.asInstanceOf[TileApiary], player) + def getContainer(te: TileEntity, player: EntityPlayer): Container = new ContainerApiary(te.asInstanceOf[TileApiary], player) +} diff --git a/src/net/bdew/gendustry/machines/apiary/TileApiary.scala b/src/net/bdew/gendustry/machines/apiary/TileApiary.scala new file mode 100644 index 00000000..3199a5f3 --- /dev/null +++ b/src/net/bdew/gendustry/machines/apiary/TileApiary.scala @@ -0,0 +1,232 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.apiary + +import net.bdew.lib.data._ +import net.bdew.lib.tile.inventory.{BreakableInventoryTile, SidedInventory, PersistentInventoryTile} +import net.bdew.gendustry.data.ExposePower +import forestry.api.apiculture._ +import net.minecraftforge.common.ForgeDirection +import forestry.api.genetics.{AlleleManager, IIndividual} +import net.minecraft.item.ItemStack +import forestry.api.core.{EnumHumidity, EnumTemperature} +import net.bdew.lib.Misc +import forestry.api.arboriculture.EnumGermlingType +import net.bdew.lib.tile.TileExtended +import buildcraft.api.power.PowerHandler.Type +import net.bdew.gendustry.config.Machines +import net.bdew.lib.items.ItemUtils +import net.bdew.gendustry.api.{ApiaryModifiers, IApiaryUpgrade} +import scala.collection.mutable +import net.minecraft.world.biome.BiomeGenBase +import net.bdew.lib.data.base.{UpdateKind, TileDataSlots} +import net.bdew.lib.data.DataSlotFloat +import net.bdew.lib.data.DataSlotInt +import net.bdew.lib.data.DataSlotString +import net.bdew.lib.data.DataSlotBoolean +import net.bdew.gendustry.data.DataSlotPower + +class TileApiary extends TileExtended +with TileDataSlots +with PersistentInventoryTile +with SidedInventory +with BreakableInventoryTile +with ExposePower +with IBeeHousing { + val slotsBees = 0 to 1 + val slotsUpgrades = 2 to 5 + val slotsOutput = 6 to 14 + + var mods = new ApiaryModifiers + var movePrincess = false + + val beeRoot = AlleleManager.alleleRegistry.getSpeciesRoot("rootBees").asInstanceOf[IBeeRoot] + val logic = beeRoot.createBeekeepingLogic(this) + lazy val cfg = Machines.apiary + + val power = DataSlotPower("power", this, Type.MACHINE).configure(cfg) + val errorState = DataSlotInt("error", this).setUpdate(UpdateKind.GUI, UpdateKind.SAVE, UpdateKind.WORLD) + val owner = DataSlotString("owner", this, "").setUpdate(UpdateKind.SAVE) + val guiProgress = DataSlotFloat("progress", this) + val guiBreeding = DataSlotFloat("breeding", this) + + // for client rendering and fx + val hasLight = DataSlotBoolean("haslight", this).setUpdate(UpdateKind.WORLD) + val queen = DataSlotItemStack("queen", this).setUpdate(UpdateKind.WORLD) + + persistLoad.listen(x => { + updateModifiers() + queen := getStackInSlot(0) + }) + + def updateModifiers() { + mods = new ApiaryModifiers + for (upgrade <- Misc.iterSome(inv, slotsUpgrades).filter(isUpgrade)) + getUpgrade(upgrade).applyModifiers(mods, upgrade) + hasLight := mods.isSelfLighted + } + + override def setInventorySlotContents(slot: Int, stack: ItemStack) = { + if (slot == 0) queen := stack + super.setInventorySlotContents(slot, stack) + } + + override def onInventoryChanged() { + updateModifiers() + super.onInventoryChanged() + } + + def doMovePrincess() { + for ((slot, stack) <- Misc.iterSomeEnum(inv, slotsOutput) if stack != null && beeRoot.isMember(stack, EnumBeeType.PRINCESS.ordinal())) { + setInventorySlotContents(0, stack) + setInventorySlotContents(slot, null) + return + } + } + + clientTick.listen(() => + if (beeRoot.isMated(queen) && (errorState :== 1)) { + beeRoot.getMember(queen).doFX(logic.getEffectData, this) + } + ) + + serverTick.listen(() => { + movePrincess = false + + if (power.getEnergyStored >= cfg.baseMjPerTick * mods.energy) { + logic.update() + if ((logic.getQueen != null || logic.getBreedingTime > 0) && (errorState :== 1)) + power.useEnergy(cfg.baseMjPerTick, cfg.baseMjPerTick * mods.energy, true) + } else { + setErrorState(-1) + } + + if (movePrincess && getStackInSlot(0) == null) + doMovePrincess() + + if (logic.getQueen != null) + guiProgress := 1 - (logic.getQueen.getHealth.toFloat / logic.getQueen.getMaxHealth) + else + guiProgress := -1 + + guiBreeding := logic.getBreedingTime.toFloat / logic.getTotalBreedingTime + }) + + def getUpgrade(stack: ItemStack) = stack.getItem.asInstanceOf[IApiaryUpgrade] + def isUpgrade(stack: ItemStack) = stack != null && stack.getItem != null && stack.getItem.isInstanceOf[IApiaryUpgrade] + + def getMaxAdditionalUpgrades(stack: ItemStack): Int = { + if (!isUpgrade(stack)) return 0 + var existing = 0 + val thisId = getUpgrade(stack).getStackingId(stack) + for (upgrade <- Misc.iterSome(inv, slotsUpgrades).filter(isUpgrade)) { + if (getUpgrade(upgrade).getStackingId(upgrade) == thisId) + existing += upgrade.stackSize + } + return getUpgrade(stack).getMaxNumber(stack) - existing + } + + override def isItemValidForSlot(slot: Int, stack: ItemStack): Boolean = { + if (stack == null || stack.getItem == null) return false + if (slotsUpgrades.contains(slot)) { + return getMaxAdditionalUpgrades(stack) >= stack.stackSize + } else if (slot == 0) { + return beeRoot.isMember(stack, EnumBeeType.QUEEN.ordinal()) || beeRoot.isMember(stack, EnumBeeType.PRINCESS.ordinal()) + } else if (slot == 1) { + return beeRoot.isMember(stack, EnumBeeType.DRONE.ordinal()) + } else + return false + } + + def addStats(l: mutable.MutableList[String]) { + l += Misc.toLocalF("gendustry.label.energy", "%.1f".format(cfg.baseMjPerTick * mods.energy)) + l += Misc.toLocalF("gendustry.label.temperature", Misc.toLocal(getTemperature.getName)) + l += Misc.toLocalF("gendustry.label.humidity", Misc.toLocal(getHumidity.getName)) + + if (getQueen != null) { + val bee = beeRoot.getMember(getQueen) + if (bee != null && bee.isAnalyzed) { + val genome = bee.getGenome + l += Misc.toLocalF("gendustry.label.production", "%.0f%%".format(100F * mods.production * genome.getSpeed)) + l += Misc.toLocalF("gendustry.label.flowering", "%.0f%%".format(mods.flowering * genome.getFlowering)) + l += Misc.toLocalF("gendustry.label.lifespan", "%.0f%%".format(mods.lifespan * genome.getLifespan)) + val t = genome.getTerritory.toSeq.map(mods.territory * _) + l += Misc.toLocalF("gendustry.label.territory", "%.0f x %.0f x %.0f".format(t: _*)) + } + } + } + + // Misc + lazy val getBiome = worldObj.getBiomeGenForCoordsBody(xCoord, zCoord) + def getPowerDataslot(from: ForgeDirection) = power + def getSizeInventory = 15 + + override def canInsertItem(slot: Int, stack: ItemStack, side: Int) = slotsBees.contains(slot) && isItemValidForSlot(slot, stack) + override def canExtractItem(slot: Int, stack: ItemStack, side: Int) = slotsOutput.contains(slot) + + // IBeeListener + def onPostQueenDeath(queen: IBee) { + if (mods.isAutomated) movePrincess = true + } + + def onQueenDeath(queen: IBee) {} + def wearOutEquipment(amount: Int) {} + def onQueenChange(stack: ItemStack) {} + def onEggLaid(queen: IBee) = false + def onPollenRetrieved(queen: IBee, pollen: IIndividual, isHandled: Boolean): Boolean = { + if (isHandled) return true + if (!mods.isCollectingPollen) return false + val sproot = pollen.getGenome.getSpeciesRoot + val stack = sproot.getMemberStack(pollen, EnumGermlingType.POLLEN.ordinal()) + addProduct(stack, true) + return true + } + + // IBeeModifier + def getTerritoryModifier(genome: IBeeGenome, currentModifier: Float) = Misc.min(mods.territory, 5) + def getMutationModifier(genome: IBeeGenome, mate: IBeeGenome, currentModifier: Float) = mods.mutation + def getLifespanModifier(genome: IBeeGenome, mate: IBeeGenome, currentModifier: Float) = mods.lifespan + def getProductionModifier(genome: IBeeGenome, currentModifier: Float) = mods.production + def getFloweringModifier(genome: IBeeGenome, currentModifier: Float) = mods.flowering + def getGeneticDecay(genome: IBeeGenome, currentModifier: Float) = mods.geneticDecay + def isSealed = mods.isSealed + def isSelfLighted = mods.isSelfLighted + def isSunlightSimulated = mods.isSunlightSimulated + def isHellish = mods.isHellish + + // IBeeHousing + def setQueen(itemstack: ItemStack) = setInventorySlotContents(0, itemstack) + def setDrone(itemstack: ItemStack) = setInventorySlotContents(1, itemstack) + def getQueen = getStackInSlot(0) + def getDrone = getStackInSlot(1) + def canBreed = true + + // IHousing + def setErrorState(state: Int) = errorState := state + def getOwnerName = owner + def getXCoord = xCoord + def getYCoord = yCoord + def getZCoord = zCoord + def getBiomeId = if (mods.isHellish) BiomeGenBase.hell.biomeID else getBiome.biomeID + def getTemperature: EnumTemperature = { + if (mods.isHellish || EnumTemperature.isBiomeHellish(getBiome.biomeID)) + return EnumTemperature.HELLISH + return EnumTemperature.getFromValue(getBiome.temperature + mods.temperature) + } + def getHumidity = EnumHumidity.getFromValue(getBiome.rainfall + mods.humidity) + def getErrorOrdinal = errorState + def addProduct(product: ItemStack, all: Boolean): Boolean = { + var p = product + if (mods.isAutomated && beeRoot.isMember(product)) + p = ItemUtils.addStackToSlots(p, this, slotsBees, false) + p = ItemUtils.addStackToSlots(p, this, slotsOutput, false) + return p == null + } +} diff --git a/src/net/bdew/gendustry/machines/apiary/WidgetApiaryProgress.scala b/src/net/bdew/gendustry/machines/apiary/WidgetApiaryProgress.scala new file mode 100644 index 00000000..8499c9d0 --- /dev/null +++ b/src/net/bdew/gendustry/machines/apiary/WidgetApiaryProgress.scala @@ -0,0 +1,40 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.apiary + +import net.bdew.lib.gui.{Point, Rect} +import net.bdew.lib.gui.widgets.Widget +import net.bdew.lib.data.DataSlotFloat +import net.bdew.gendustry.gui.Textures +import scala.collection.mutable +import net.bdew.lib.Misc +import net.bdew.gendustry.Gendustry +import net.minecraft.client.Minecraft + +class WidgetApiaryProgress(val rect: Rect, breeding: DataSlotFloat, progress: DataSlotFloat) extends Widget { + val texture = Textures.whiteProgress(rect.w) + + override def handleTooltip(p: Point, tip: mutable.MutableList[String]) { + if (breeding.cval > 0) { + tip += "%s - %.0f%%".format(Misc.toLocal(Gendustry.modId + ".label.breeding"), breeding.cval * 100) + } else if (progress.cval > 0) { + tip += "%s - %.0f%%".format(Misc.toLocal(Gendustry.modId + ".label.working"), progress.cval * 100) + } + } + + override def draw() { + Minecraft.getMinecraft.renderEngine.bindTexture(texture.resource) + if (breeding.cval > 0) { + parent.drawTexturedModalRect(rect.x, rect.y, texture.x, texture.y, (breeding.cval * rect.w).round, rect.h) + } else if (progress.cval > 0) { + parent.drawTexturedModalRect(rect.x, rect.y, texture.x, texture.y, (progress.cval * rect.w).round, rect.h) + } + } +} diff --git a/src/net/bdew/gendustry/machines/apiary/WidgetError.scala b/src/net/bdew/gendustry/machines/apiary/WidgetError.scala new file mode 100644 index 00000000..08472c21 --- /dev/null +++ b/src/net/bdew/gendustry/machines/apiary/WidgetError.scala @@ -0,0 +1,47 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.apiary + +import net.bdew.lib.gui.widgets.Widget +import net.bdew.lib.gui.{Point, Rect} +import net.minecraft.client.renderer.texture.TextureMap +import scala.collection.mutable +import net.bdew.lib.Misc +import net.bdew.gendustry.Gendustry +import net.bdew.gendustry.gui.Textures + +class WidgetError(x: Int, y: Int, apiary: TileApiary) extends Widget { + val rect: Rect = new Rect(x, y, 16, 16) + override def draw() { + val err = apiary.errorState.cval + if (err == -1) { + bindTexture(Textures.texture) + parent.drawTexturedModalRect(rect.x, rect.y, Textures.texturePowerError.x, Textures.texturePowerError.y, rect.w, rect.h) + } else { + bindTexture(TextureMap.locationItemsTexture) + if (ErrorCodes.isValid(err)) { + parent.drawTexturedModelRectFromIcon(rect.x, rect.y, ErrorCodes.getIcon(err), 16, 16) + } else { + parent.drawTexturedModelRectFromIcon(rect.x, rect.y, ErrorCodes.getIcon(0), 16, 16) + } + } + } + override def handleTooltip(p: Point, tip: mutable.MutableList[String]) { + val err = apiary.errorState.cval + if (err == -1) { + tip += Misc.toLocal(Gendustry.modId + ".error.power") + } else if (ErrorCodes.isValid(err)) { + tip += ErrorCodes.getDescription(err) + } else { + tip += ErrorCodes.getDescription(0) + } + apiary.addStats(tip) + } +} diff --git a/src/net/bdew/gendustry/machines/apiary/upgrades/ItemApiaryUpgrade.scala b/src/net/bdew/gendustry/machines/apiary/upgrades/ItemApiaryUpgrade.scala new file mode 100644 index 00000000..f067278e --- /dev/null +++ b/src/net/bdew/gendustry/machines/apiary/upgrades/ItemApiaryUpgrade.scala @@ -0,0 +1,120 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.apiary.upgrades + +import net.minecraft.item.{ItemStack, Item} +import net.bdew.gendustry.api.{ApiaryModifiers, IApiaryUpgrade} +import net.minecraft.client.renderer.texture.IconRegister +import net.bdew.gendustry.Gendustry +import net.minecraft.util.Icon +import cpw.mods.fml.relauncher.{Side, SideOnly} +import net.minecraft.creativetab.CreativeTabs +import java.util +import net.minecraft.entity.player.EntityPlayer +import net.bdew.lib.Misc +import cpw.mods.fml.common.registry.GameRegistry + +class ItemApiaryUpgrade(id: Int) extends Item(id) with IApiaryUpgrade { + val icons = collection.mutable.Map.empty[Int, Icon] + + setHasSubtypes(true) + setMaxDamage(-1) + setUnlocalizedName(Gendustry.modId + ".apiary.upgrade") + + for ((id, upgrade) <- Upgrades.map) + GameRegistry.registerCustomItemStack("upgrade." + upgrade.name, new ItemStack(this, 1, id)) + + def formatModifier(f: Float, base: Float) = (if (f > base) "+" else "") + "%.0f".format((f - base) * 100) + "%" + + override def addInformation(stack: ItemStack, player: EntityPlayer, list: util.List[_], par4: Boolean) { + if (!Upgrades.map.contains(stack.getItemDamage)) return + val upgrade = Upgrades.map(stack.getItemDamage) + val l = list.asInstanceOf[util.List[String]] + val mods = new ApiaryModifiers + + upgrade.mod(mods, 1) + + l.add(Misc.toLocal(Gendustry.modId + ".label.maxinstall") + " " + upgrade.maxNum.toString) + + if (mods.isAutomated) + l.add(Misc.toLocal(Gendustry.modId + ".label.mod.automated")) + if (mods.isHellish) + l.add(Misc.toLocal(Gendustry.modId + ".label.mod.hellish")) + if (mods.isSealed) + l.add(Misc.toLocal(Gendustry.modId + ".label.mod.sealed")) + if (mods.isSelfLighted) + l.add(Misc.toLocal(Gendustry.modId + ".label.mod.selflighted")) + if (mods.isSunlightSimulated) + l.add(Misc.toLocal(Gendustry.modId + ".label.mod.sky")) + if (mods.isCollectingPollen) + l.add(Misc.toLocal(Gendustry.modId + ".label.mod.sieve")) + + if (mods.lifespan != 1) + l.add(Misc.toLocal(Gendustry.modId + ".label.mod.lifespan") + " " + formatModifier(mods.lifespan, 1)) + if (mods.flowering != 1) + l.add(Misc.toLocal(Gendustry.modId + ".label.mod.flowering") + " " + formatModifier(mods.flowering, 1)) + if (mods.geneticDecay != 1) + l.add(Misc.toLocal(Gendustry.modId + ".label.mod.geneticDecay") + " " + formatModifier(mods.geneticDecay, 1)) + if (mods.mutation != 1) + l.add(Misc.toLocal(Gendustry.modId + ".label.mod.mutation") + " " + formatModifier(mods.mutation, 1)) + if (mods.production != 1) + l.add(Misc.toLocal(Gendustry.modId + ".label.mod.production") + " " + formatModifier(mods.production, 1)) + if (mods.territory != 1) + l.add(Misc.toLocal(Gendustry.modId + ".label.mod.territory") + " " + formatModifier(mods.territory, 1)) + + if (mods.humidity != 0) + l.add(Misc.toLocal(Gendustry.modId + ".label.mod.humidity") + " " + formatModifier(mods.humidity, 0)) + if (mods.temperature != 0) + l.add(Misc.toLocal(Gendustry.modId + ".label.mod.temperature") + " " + formatModifier(mods.temperature, 0)) + + if (mods.energy != 1) + l.add(Misc.toLocal(Gendustry.modId + ".label.mod.energy") + " " + formatModifier(mods.energy, 1)) + + } + + def getStackingId(stack: ItemStack) = itemID * Int.MaxValue + stack.getItemDamage + def getMaxNumber(stack: ItemStack): Int = { + if (Upgrades.map.contains(stack.getItemDamage)) + return Upgrades.map(stack.getItemDamage).maxNum + return 0 + } + + def applyModifiers(mods: ApiaryModifiers, stack: ItemStack) { + if (Upgrades.map.contains(stack.getItemDamage)) { + val upg = Upgrades.map(stack.getItemDamage) + upg.mod(mods, Misc.min(upg.maxNum, stack.stackSize)) + } + } + + override def getIconFromDamage(meta: Int): Icon = { + if (icons.contains(meta)) + return icons(meta) + return null + } + + override def getUnlocalizedName(stack: ItemStack): String = { + if (Upgrades.map.contains(stack.getItemDamage)) + return "%s.upgrades.%s".format(Gendustry.modId, Upgrades.map(stack.getItemDamage).name) + return "invalid" + } + + override def getSubItems(par1: Int, par2CreativeTabs: CreativeTabs, list: util.List[_]) { + val l = list.asInstanceOf[util.List[ItemStack]] + for ((id, name) <- Upgrades.map) + l.add(new ItemStack(this, 1, id)) + } + + @SideOnly(Side.CLIENT) + override def registerIcons(reg: IconRegister) { + for ((id, upgrade) <- Upgrades.map) { + icons += id -> reg.registerIcon("%s:upgrades/%s".format(Gendustry.modId, upgrade.name)) + } + } +} diff --git a/src/net/bdew/gendustry/machines/apiary/upgrades/Upgrades.scala b/src/net/bdew/gendustry/machines/apiary/upgrades/Upgrades.scala new file mode 100644 index 00000000..fe2a7a9b --- /dev/null +++ b/src/net/bdew/gendustry/machines/apiary/upgrades/Upgrades.scala @@ -0,0 +1,75 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.apiary.upgrades + +import net.bdew.gendustry.api.ApiaryModifiers +import net.bdew.gendustry.config.TuningLoader._ +import net.bdew.gendustry.config.{Items, Tuning} +import net.bdew.lib.recipes.gencfg.{EntryStr, ConfigSection} +import cpw.mods.fml.common.registry.GameRegistry +import net.minecraft.item.ItemStack + +object Upgrades { + val map = collection.mutable.Map.empty[Int, Upgrade] + type ModFunc = (ApiaryModifiers, Int) => Unit + + case class Upgrade(id: Int, name: String, maxNum: Int, mods: Seq[(ApiaryModifiers, Int) => Unit]) { + def mod(v: ApiaryModifiers, num: Int) { + val n = if (num > maxNum) maxNum else num + mods.foreach(_(v,n)) + } + } + + def makeMod(upg:String, n: String, e: EntryModifier): ModFunc = { + val calc: (Float, Int) => Float = e match { + case EntryModifierAdd(v) => (x, n) => x + v * n + case EntryModifierSub(v) => (x, n) => x - v * n + case EntryModifierMul(v) => (x, n) => x * math.pow(v, n).toFloat + case EntryModifierDiv(v) => (x, n) => x / math.pow(v, n).toFloat + } + n match { + case "lifespan" => (a, n) => a.lifespan = calc(a.lifespan, n) + case "territory" => (a, n) => a.territory = calc(a.territory, n) + case "mutation" => (a, n) => a.mutation = calc(a.mutation, n) + case "production" => (a, n) => a.production = calc(a.production, n) + case "flowering" => (a, n) => a.flowering = calc(a.flowering, n) + case "geneticDecay" => (a, n) => a.geneticDecay = calc(a.geneticDecay, n) + case "energy" => (a, n) => a.energy = calc(a.energy, n) + case "temperature" => (a, n) => a.temperature = calc(a.temperature, n) + case "humidity" => (a, n) => a.humidity = calc(a.humidity, n) + case x => sys.error("Unknown numeric upgrade modifier '%s' in upgrade '%s'".format(x, upg)) + } + } + + def makeBoolMod(upg:String, n: String, b: Boolean): ModFunc = n match { + case "sealed" => (a, n) => a.isSealed = b + case "selfLighted" => (a, n) => a.isSelfLighted = b + case "sunlightSimulated" => (a, n) => a.isSunlightSimulated = b + case "hellish" => (a, n) => a.isHellish = b + case "automated" => (a, n) => a.isAutomated = b + case "collectingPollen" => (a, n) => a.isCollectingPollen = b + case x => sys.error("Unknown boolean upgrade modifier '%s' in upgrade '%s'".format(x, upg)) + } + + def init() { + for ((name, sect) <- Tuning.getSection("Upgrades").filterType(classOf[ConfigSection])) { + val id = sect.getInt("id") + val max = sect.getInt("max") + val mods = sect.flatMap({ + case (pname, EntryStr(_)) => Some(makeBoolMod(name, pname, sect.getBoolean(pname))) + case (pname, x: EntryModifier) => Some(makeMod(name, pname, x)) + case ("id", _) | ("max", _) => None + case (pname, v) => sys.error("Unknown upgrade modifier '%s' - %s in upgrade '%s'".format(pname, v, name)) + }) + map += id -> Upgrade(id, name, max, mods.toSeq) + GameRegistry.registerCustomItemStack("upgrade."+name, new ItemStack(Items.upgradeItem, 1, id)) + } + } +} diff --git a/src/net/bdew/gendustry/machines/imprinter/BlockImprinter.scala b/src/net/bdew/gendustry/machines/imprinter/BlockImprinter.scala new file mode 100644 index 00000000..8fbc263f --- /dev/null +++ b/src/net/bdew/gendustry/machines/imprinter/BlockImprinter.scala @@ -0,0 +1,50 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.imprinter + +import cpw.mods.fml.relauncher.Side +import cpw.mods.fml.relauncher.SideOnly +import net.bdew.gendustry.Gendustry +import net.minecraft.block.Block +import net.minecraft.block.material.Material +import net.minecraft.client.renderer.texture.IconRegister +import net.minecraft.util.Icon +import net.bdew.lib.block.HasTE +import net.bdew.lib.tile.inventory.BreakableInventoryBlock +import net.bdew.gendustry.config.Machines +import net.bdew.gendustry.gui.BlockGuiWrenchable + +class BlockImprinter(id: Int) extends Block(id, Material.rock) with HasTE[TileImprinter] with BreakableInventoryBlock with BlockGuiWrenchable { + val TEClass = classOf[TileImprinter] + private var icons: Array[Icon] = null + lazy val guiId: Int = Machines.imprinter.guiId + + setUnlocalizedName(Gendustry.modId + ".imprinter") + setHardness(5) + + override def getIcon(side: Int, meta: Int): Icon = { + side match { + case 0 => + return icons(0) + case 1 => + return icons(1) + case _ => + return icons(2) + } + } + + @SideOnly(Side.CLIENT) + override def registerIcons(reg: IconRegister) { + icons = new Array[Icon](3) + icons(0) = reg.registerIcon(Gendustry.modId + ":imprinter/bottom") + icons(1) = reg.registerIcon(Gendustry.modId + ":imprinter/top") + icons(2) = reg.registerIcon(Gendustry.modId + ":imprinter/side") + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/imprinter/ContainerImprinter.scala b/src/net/bdew/gendustry/machines/imprinter/ContainerImprinter.scala new file mode 100644 index 00000000..c14f6878 --- /dev/null +++ b/src/net/bdew/gendustry/machines/imprinter/ContainerImprinter.scala @@ -0,0 +1,28 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.imprinter + +import net.bdew.lib.gui.{BaseContainer, SlotValidating} +import net.minecraft.entity.player.EntityPlayer +import net.bdew.lib.data.base.ContainerDataSlots + +class ContainerImprinter(val te: TileImprinter, player: EntityPlayer) extends BaseContainer(te) with ContainerDataSlots { + lazy val dataSource = te + + addSlotToContainer(new SlotValidating(te, 0, 74, 28)) + addSlotToContainer(new SlotValidating(te, 1, 98, 28)) + addSlotToContainer(new SlotValidating(te, 2, 41, 49)) + addSlotToContainer(new SlotValidating(te, 3, 137, 49)) + bindPlayerInventory(player.inventory, 8, 84, 142) + + def canInteractWith(entityplayer: EntityPlayer): Boolean = { + return te.isUseableByPlayer(entityplayer) + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/imprinter/GuiImprinter.scala b/src/net/bdew/gendustry/machines/imprinter/GuiImprinter.scala new file mode 100644 index 00000000..e8924a68 --- /dev/null +++ b/src/net/bdew/gendustry/machines/imprinter/GuiImprinter.scala @@ -0,0 +1,28 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.imprinter + +import net.bdew.gendustry.Gendustry +import net.bdew.gendustry.gui.{WidgetMJGauge, Textures} +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.util.ResourceLocation +import net.bdew.lib.gui.{Rect, BaseScreen} +import net.bdew.lib.gui.widgets.{WidgetLabel, WidgetProgressBar} +import net.bdew.lib.Misc + +class GuiImprinter(val te: TileImprinter, player: EntityPlayer) extends BaseScreen(new ContainerImprinter(te, player), 176, 166) { + val texture: ResourceLocation = new ResourceLocation(Gendustry.modId + ":textures/gui/imprinter.png") + override def initGui() { + super.initGui() + addWidget(new WidgetProgressBar(new Rect(63, 49, 66, 15), Textures.whiteProgress(66), te.progress)) + addWidget(new WidgetMJGauge(new Rect(8, 19, 16, 58), Textures.powerFill, te.power)) + addWidget(new WidgetLabel(Misc.toLocal("tile.gendustry.imprinter.name"), 8, 6, 4210752)) + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/imprinter/MachineImprinter.scala b/src/net/bdew/gendustry/machines/imprinter/MachineImprinter.scala new file mode 100644 index 00000000..d8710e2d --- /dev/null +++ b/src/net/bdew/gendustry/machines/imprinter/MachineImprinter.scala @@ -0,0 +1,37 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.imprinter + +import net.bdew.gendustry.machines.ProcessorMachine +import net.minecraft.tileentity.TileEntity +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.inventory.Container +import net.minecraft.client.gui.inventory.GuiContainer +import net.minecraftforge.common.Configuration +import net.bdew.gendustry.gui.GuiProvider +import cpw.mods.fml.relauncher.{Side, SideOnly} + +class MachineImprinter(cfg: Configuration) extends ProcessorMachine(cfg, "Imprinter") with GuiProvider { + var block: BlockImprinter = null + lazy val guiId = 4 + + lazy val labwareConsumeChance = tuning.getInt("LabwareConsumeChance") + lazy val deathChanceNatural = tuning.getInt("DeathChanceNatural") + lazy val deathChanceArtificial = tuning.getInt("DeathChanceArtificial") + + if (cfg.get("Machines Enabled", name, true).getBoolean(true)) { + block = new BlockImprinter(getBlockId) + registerBlock(block) + } + + @SideOnly(Side.CLIENT) + def getGui(te: TileEntity, player: EntityPlayer): GuiContainer = new GuiImprinter(te.asInstanceOf[TileImprinter], player) + def getContainer(te: TileEntity, player: EntityPlayer): Container = new ContainerImprinter(te.asInstanceOf[TileImprinter], player) +} diff --git a/src/net/bdew/gendustry/machines/imprinter/TileImprinter.scala b/src/net/bdew/gendustry/machines/imprinter/TileImprinter.scala new file mode 100644 index 00000000..376e8096 --- /dev/null +++ b/src/net/bdew/gendustry/machines/imprinter/TileImprinter.scala @@ -0,0 +1,100 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.imprinter + +import net.bdew.gendustry.config.{Items, Machines} +import net.minecraft.item.ItemStack +import forestry.api.genetics.AlleleManager +import net.bdew.gendustry.machines.TileItemProcessor +import net.minecraft.nbt.NBTTagCompound +import forestry.api.apiculture.{EnumBeeType, IBeeRoot, IBee} +import scala.util.Random + +class TileImprinter extends TileItemProcessor { + lazy val cfg = Machines.imprinter + val outputSlots = Seq(3) + def getSizeInventory = 4 + + def tryStart(): Boolean = { + if (getStackInSlot(0) != null && getStackInSlot(1) != null && getStackInSlot(2) != null) { + + val individual = AlleleManager.alleleRegistry.getIndividual(getStackInSlot(2)) + val genome = individual.getGenome.getChromosomes + val root = Items.geneTemplate.getSpecies(getStackInSlot(0)) + + if (root != individual.getGenome.getSpeciesRoot) return false + + if (individual.isInstanceOf[IBee]) { + if (root.asInstanceOf[IBeeRoot].getType(getStackInSlot(2)) != EnumBeeType.DRONE) { + val random = new Random() + if (individual.asInstanceOf[IBee].isNatural) { + if (random.nextInt(100) < Machines.imprinter.deathChanceNatural) { + doStart(new ItemStack(Items.waste)) + return true + } + } else { + if (random.nextInt(100) < Machines.imprinter.deathChanceArtificial) { + doStart(new ItemStack(Items.waste)) + return true + } + } + } + } + + val primary = genome.map(x => if (x == null) null else x.getPrimaryAllele) + val secondary = genome.map(x => if (x == null) null else x.getSecondaryAllele) + + for (x <- Items.geneTemplate.getSamples(getStackInSlot(0))) { + primary(x.chromosome) = x.allele + secondary(x.chromosome) = x.allele + } + + val newStack = getStackInSlot(2).copy() + newStack.stackSize = 1 + + val newTag = new NBTTagCompound() + root.templateAsGenome(primary, secondary).writeToNBT(newTag) + newStack.getTagCompound.setCompoundTag("Genome", newTag) + + doStart(newStack) + + return true + + } else return false + } + + def doStart(s: ItemStack) { + output := s + decrStackSize(2, 1) + if (worldObj.rand.nextInt(100) < cfg.labwareConsumeChance) + decrStackSize(1, 1) + } + + override def isItemValidForSlot(slot: Int, stack: ItemStack): Boolean = { + if (stack == null || stack.getItem == null) return false + slot match { + case 0 => + return (stack.getItem == Items.geneTemplate) && + (inv(2) == null || Items.geneTemplate.getSpecies(stack) == AlleleManager.alleleRegistry.getSpeciesRoot(inv(2))) + case 1 => + return stack.getItem == Items.labware + case 2 => + return (AlleleManager.alleleRegistry.getIndividual(stack) != null) && + (inv(0) == null || Items.geneTemplate.getSpecies(inv(0)) == AlleleManager.alleleRegistry.getSpeciesRoot(stack)) + case _ => + return false + } + } + + allowSided = true + + // can extract the template if input is empty and there's no operation in progress + override def canExtractItem(slot: Int, item: ItemStack, side: Int) = slot == 3 || (slot == 0 && inv(2) == null && (output :== null)) +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/mproducer/BlockMutagenProducer.scala b/src/net/bdew/gendustry/machines/mproducer/BlockMutagenProducer.scala new file mode 100644 index 00000000..531ae6eb --- /dev/null +++ b/src/net/bdew/gendustry/machines/mproducer/BlockMutagenProducer.scala @@ -0,0 +1,50 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.mproducer + +import net.bdew.gendustry.Gendustry +import net.minecraft.block.Block +import net.minecraft.block.material.Material +import net.minecraft.client.renderer.texture.IconRegister +import net.minecraft.util.Icon +import cpw.mods.fml.relauncher.Side +import cpw.mods.fml.relauncher.SideOnly +import net.bdew.lib.block.HasTE +import net.bdew.lib.tile.inventory.BreakableInventoryBlock +import net.bdew.gendustry.config.Machines +import net.bdew.gendustry.gui.BlockGuiWrenchable + +class BlockMutagenProducer(id: Int) extends Block(id, Material.rock) with HasTE[TileMutagenProducer] with BreakableInventoryBlock with BlockGuiWrenchable { + private var icons: Array[Icon] = null + val TEClass = classOf[TileMutagenProducer] + lazy val guiId = Machines.mutagenProducer.guiId + + setUnlocalizedName(Gendustry.modId + ".mutagen.producer") + setHardness(5) + + override def getIcon(side: Int, meta: Int): Icon = { + side match { + case 0 => + return icons(0) + case 1 => + return icons(1) + case _ => + return icons(2) + } + } + + @SideOnly(Side.CLIENT) + override def registerIcons(reg: IconRegister) { + icons = new Array[Icon](3) + icons(0) = reg.registerIcon(Gendustry.modId + ":mutagenproducer/bottom") + icons(1) = reg.registerIcon(Gendustry.modId + ":mutagenproducer/top") + icons(2) = reg.registerIcon(Gendustry.modId + ":mutagenproducer/side") + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/mproducer/ContainerMutagenProducer.scala b/src/net/bdew/gendustry/machines/mproducer/ContainerMutagenProducer.scala new file mode 100644 index 00000000..4d04b537 --- /dev/null +++ b/src/net/bdew/gendustry/machines/mproducer/ContainerMutagenProducer.scala @@ -0,0 +1,23 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.mproducer + +import net.minecraft.entity.player.EntityPlayer +import net.bdew.lib.gui.{BaseContainer, SlotValidating} +import net.bdew.lib.data.base.ContainerDataSlots + +class ContainerMutagenProducer(val te: TileMutagenProducer, player: EntityPlayer) extends BaseContainer(te) with ContainerDataSlots { + lazy val dataSource = te + + addSlotToContainer(new SlotValidating(te, 0, 44, 41)) + bindPlayerInventory(player.inventory, 8, 84, 142) + + def canInteractWith(entityplayer: EntityPlayer): Boolean = te.isUseableByPlayer(entityplayer) +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/mproducer/GuiMutagenProducer.scala b/src/net/bdew/gendustry/machines/mproducer/GuiMutagenProducer.scala new file mode 100644 index 00000000..a6121a6a --- /dev/null +++ b/src/net/bdew/gendustry/machines/mproducer/GuiMutagenProducer.scala @@ -0,0 +1,29 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.mproducer + +import net.bdew.gendustry.Gendustry +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.util.ResourceLocation +import net.bdew.lib.gui.{Rect, BaseScreen} +import net.bdew.lib.gui.widgets.{WidgetLabel, WidgetFluidGauge, WidgetProgressBar} +import net.bdew.lib.Misc +import net.bdew.gendustry.gui.{WidgetMJGauge, Textures} + +class GuiMutagenProducer(val te: TileMutagenProducer, player: EntityPlayer) extends BaseScreen(new ContainerMutagenProducer(te, player), 176, 166) { + val texture = new ResourceLocation(Gendustry.modId + ":textures/gui/mutagenproducer.png") + override def initGui() { + super.initGui() + addWidget(new WidgetProgressBar(new Rect(79, 41, 53, 15), Textures.greenProgress(53), te.progress)) + addWidget(new WidgetMJGauge(new Rect(8, 19, 16, 58), Textures.powerFill, te.power)) + addWidget(new WidgetFluidGauge(new Rect(152, 19, 16, 58), Textures.tankOverlay, te.tank)) + addWidget(new WidgetLabel(Misc.toLocal("tile.gendustry.mutagen.producer.name"), 8, 6, 4210752)) + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/mproducer/MachineMutagenProducer.scala b/src/net/bdew/gendustry/machines/mproducer/MachineMutagenProducer.scala new file mode 100644 index 00000000..b2a4f2e9 --- /dev/null +++ b/src/net/bdew/gendustry/machines/mproducer/MachineMutagenProducer.scala @@ -0,0 +1,35 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.mproducer + +import net.bdew.gendustry.machines.ProcessorMachine +import net.minecraft.tileentity.TileEntity +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.inventory.Container +import net.minecraft.client.gui.inventory.GuiContainer +import net.minecraftforge.common.Configuration +import net.bdew.gendustry.gui.GuiProvider +import cpw.mods.fml.relauncher.{SideOnly, Side} + +class MachineMutagenProducer(cfg: Configuration) extends ProcessorMachine(cfg, "MutagenProducer") with GuiProvider { + var block: BlockMutagenProducer = null + lazy val guiId = 1 + + lazy val tankSize = tuning.getInt("TankSize") + + if (cfg.get("Machines Enabled", name, true).getBoolean(true)) { + block = new BlockMutagenProducer(getBlockId) + registerBlock(block) + } + + @SideOnly(Side.CLIENT) + def getGui(te: TileEntity, player: EntityPlayer): GuiContainer = new GuiMutagenProducer(te.asInstanceOf[TileMutagenProducer], player) + def getContainer(te: TileEntity, player: EntityPlayer): Container = new ContainerMutagenProducer(te.asInstanceOf[TileMutagenProducer], player) +} diff --git a/src/net/bdew/gendustry/machines/mproducer/TileMutagenProducer.scala b/src/net/bdew/gendustry/machines/mproducer/TileMutagenProducer.scala new file mode 100644 index 00000000..92d6cf39 --- /dev/null +++ b/src/net/bdew/gendustry/machines/mproducer/TileMutagenProducer.scala @@ -0,0 +1,74 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.mproducer + +import net.bdew.gendustry.config.{Blocks, Machines} +import net.bdew.gendustry.mutagen.MutagenRegistry +import net.minecraft.item.ItemStack +import net.minecraft.tileentity.TileEntity +import net.minecraftforge.common.ForgeDirection +import net.minecraftforge.fluids._ +import net.bdew.lib.data._ +import net.bdew.lib.tile.ExposeTank +import net.bdew.lib.data.base.UpdateKind +import net.bdew.gendustry.machines.TileBaseProcessor + +class TileMutagenProducer extends TileBaseProcessor with ExposeTank { + lazy val cfg = Machines.mutagenProducer + + val tank = DataSlotTankRestricted("tank", this, cfg.tankSize, Blocks.mutagenFluid.getID).setUpdate(UpdateKind.GUI, UpdateKind.SAVE) + val output = DataSlotInt("output", this).setUpdate(UpdateKind.SAVE) + + def getSizeInventory = 1 + + def getTankFromDirection(dir: ForgeDirection): IFluidTank = tank + + def isWorking = output > 0 + def tryStart(): Boolean = { + if (getStackInSlot(0) != null) { + output := MutagenRegistry.getValue(getStackInSlot(0)) + decrStackSize(0, 1) + return true + } else return false + } + + def tryFinish(): Boolean = { + if (tank.fill(output, false) == output.cval) { + tank.fill(output, true) + output := -1 + return true + } else return false + } + + def sendFluid() { + for (dir <- ForgeDirection.VALID_DIRECTIONS) { + val te: TileEntity = worldObj.getBlockTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ) + if (te != null && te.isInstanceOf[IFluidHandler]) { + val pumped = te.asInstanceOf[IFluidHandler].fill(dir.getOpposite, tank.getFluid, true) + if (pumped > 0) { + tank.drain(pumped, true) + if (tank.getFluidAmount <= 0) return + } + } + } + } + + override def tickServer() { + super.tickServer() + if (tank.getFluidAmount > 0) sendFluid() + } + + allowSided = true + override def isItemValidForSlot(slot: Int, itemstack: ItemStack): Boolean = MutagenRegistry.getValue(itemstack) > 0 + override def canExtractItem(slot: Int, item: ItemStack, side: Int): Boolean = false + + override def fill(from: ForgeDirection, resource: FluidStack, doFill: Boolean) = 0 + override def canFill(from: ForgeDirection, fluid: Fluid) = false +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/mutatron/BlockMutatron.scala b/src/net/bdew/gendustry/machines/mutatron/BlockMutatron.scala new file mode 100644 index 00000000..5552213f --- /dev/null +++ b/src/net/bdew/gendustry/machines/mutatron/BlockMutatron.scala @@ -0,0 +1,50 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.mutatron + +import cpw.mods.fml.relauncher.Side +import cpw.mods.fml.relauncher.SideOnly +import net.bdew.gendustry.Gendustry +import net.minecraft.block.Block +import net.minecraft.block.material.Material +import net.minecraft.client.renderer.texture.IconRegister +import net.minecraft.util.Icon +import net.bdew.lib.block.HasTE +import net.bdew.lib.tile.inventory.BreakableInventoryBlock +import net.bdew.gendustry.config.Machines +import net.bdew.gendustry.gui.BlockGuiWrenchable + +class BlockMutatron(id: Int) extends Block(id, Material.rock) with HasTE[TileMutatron] with BreakableInventoryBlock with BlockGuiWrenchable { + val TEClass = classOf[TileMutatron] + private var icons: Array[Icon] = null + lazy val guiId: Int = Machines.mutatron.guiId + + setUnlocalizedName(Gendustry.modId + ".mutatron") + setHardness(5) + + override def getIcon(side: Int, meta: Int): Icon = { + side match { + case 0 => + return icons(0) + case 1 => + return icons(1) + case _ => + return icons(2) + } + } + + @SideOnly(Side.CLIENT) + override def registerIcons(reg: IconRegister) { + icons = new Array[Icon](3) + icons(0) = reg.registerIcon(Gendustry.modId + ":mutatron/bottom") + icons(1) = reg.registerIcon(Gendustry.modId + ":mutatron/top") + icons(2) = reg.registerIcon(Gendustry.modId + ":mutatron/side") + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/mutatron/ContainerMutatron.scala b/src/net/bdew/gendustry/machines/mutatron/ContainerMutatron.scala new file mode 100644 index 00000000..3c8fa861 --- /dev/null +++ b/src/net/bdew/gendustry/machines/mutatron/ContainerMutatron.scala @@ -0,0 +1,28 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.mutatron + +import net.bdew.lib.gui.{BaseContainer, SlotValidating} +import net.minecraft.entity.player.EntityPlayer +import net.bdew.lib.data.base.ContainerDataSlots + +class ContainerMutatron(val te: TileMutatron, player: EntityPlayer) extends BaseContainer(te) with ContainerDataSlots { + lazy val dataSource = te + + addSlotToContainer(new SlotValidating(te, 0, 60, 30)) + addSlotToContainer(new SlotValidating(te, 1, 60, 53)) + addSlotToContainer(new SlotValidating(te, 2, 142, 41)) + addSlotToContainer(new SlotValidating(te, 3, 98, 17)) + bindPlayerInventory(player.inventory, 8, 84, 142) + + def canInteractWith(entityplayer: EntityPlayer): Boolean = { + return te.isUseableByPlayer(entityplayer) + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/mutatron/GeneticsHelper.scala b/src/net/bdew/gendustry/machines/mutatron/GeneticsHelper.scala new file mode 100644 index 00000000..2870fdaf --- /dev/null +++ b/src/net/bdew/gendustry/machines/mutatron/GeneticsHelper.scala @@ -0,0 +1,104 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.mutatron + +import forestry.api.apiculture.EnumBeeType +import forestry.api.apiculture.IBee +import forestry.api.apiculture.IBeeRoot +import forestry.api.arboriculture.{EnumGermlingType, ITreeRoot} +import forestry.api.genetics._ +import net.minecraft.item.ItemStack +import java.util.Random +import net.bdew.gendustry.config.{Items, Machines} + +object GeneticsHelper { + def checkIndividualType(root: ISpeciesRoot, stack: ItemStack, slot: Int): Boolean = { + (root, slot) match { + case (bees: IBeeRoot, 0) => bees.getType(stack) == EnumBeeType.PRINCESS + case (bees: IBeeRoot, 1) => bees.getType(stack) == EnumBeeType.DRONE + case (trees: ITreeRoot, 0) => trees.getType(stack) == EnumGermlingType.SAPLING + case (trees: ITreeRoot, 1) => trees.getType(stack) == EnumGermlingType.POLLEN + case _ => true + } + } + + def isValidItemForSlot(stack: ItemStack, slot: Int): Boolean = { + val root = AlleleManager.alleleRegistry.getSpeciesRoot(stack) + if (root == null) + return false + return checkIndividualType(root, stack, slot) + } + + def checkMutation(m: IMutation, s1: IAlleleSpecies, s2: IAlleleSpecies): Boolean = { + if (m.getAllele0 == s1 && m.getAllele1 == s2) return true + if (m.getAllele0 == s2 && m.getAllele1 == s1) return true + return false + } + + def getValidMutations(fromStack: ItemStack, toStack: ItemStack): Seq[IMutation] = { + val emptyMutations = Seq.empty[IMutation] + + if (fromStack == null || toStack == null) return emptyMutations + + val root = AlleleManager.alleleRegistry.getSpeciesRoot(fromStack) + if (root == null || !root.isMember(toStack)) return emptyMutations + if (!checkIndividualType(root, fromStack, 0)) return emptyMutations + if (!checkIndividualType(root, toStack, 1)) return emptyMutations + + val fromIndividual = root.getMember(fromStack) + val toIndividual = root.getMember(toStack) + if (fromIndividual == null || toIndividual == null) return emptyMutations + + val fromSpecies = fromIndividual.getGenome.getPrimary + val toSpecies = toIndividual.getGenome.getPrimary + if (fromSpecies == null || toSpecies == null) return emptyMutations + + import scala.collection.JavaConverters._ + + val mutations = root.getCombinations(fromSpecies).asScala + + return mutations.filter(checkMutation(_, fromSpecies, toSpecies)).toSeq + } + + def isPotentialMutationPair(fromStack: ItemStack, toStack: ItemStack): Boolean = { + if (fromStack == null && toStack == null) return false + if (toStack == null) return isValidItemForSlot(fromStack, 0) + if (fromStack == null) return isValidItemForSlot(toStack, 1) + return getValidMutations(fromStack, toStack).size > 0 + } + + def getMutationResult(fromStack: ItemStack, toStack: ItemStack): ItemStack = { + val valid = getValidMutations(fromStack, toStack) + val random = new Random + if (valid.size == 0) return null + + val selected = valid(random.nextInt(valid.size)) + val root = selected.getRoot + val individual = root.templateAsIndividual(selected.getTemplate) + + root match { + case bees: IBeeRoot => + individual.asInstanceOf[IBee].mate(individual) + val original = bees.getMember(fromStack) + if (original.isNatural) { + if (random.nextInt(100) < Machines.mutatron.degradeChanceNatural) + individual.asInstanceOf[IBee].setIsNatural(false) + } else { + if (random.nextInt(100) < Machines.mutatron.deathChanceArtificial) + return new ItemStack(Items.waste) + } + return root.getMemberStack(individual, EnumBeeType.QUEEN.ordinal) + case _: ITreeRoot => + return root.getMemberStack(individual, EnumGermlingType.SAPLING.ordinal) + case _ => + return root.getMemberStack(individual, 0) + } + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/mutatron/GuiMutatron.scala b/src/net/bdew/gendustry/machines/mutatron/GuiMutatron.scala new file mode 100644 index 00000000..f989473d --- /dev/null +++ b/src/net/bdew/gendustry/machines/mutatron/GuiMutatron.scala @@ -0,0 +1,29 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.mutatron + +import net.bdew.gendustry.Gendustry +import net.bdew.gendustry.gui.{WidgetMJGauge, Textures} +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.util.ResourceLocation +import net.bdew.lib.gui.{Rect, BaseScreen} +import net.bdew.lib.gui.widgets.{WidgetLabel, WidgetFluidGauge, WidgetProgressBar} +import net.bdew.lib.Misc + +class GuiMutatron(val te: TileMutatron, player: EntityPlayer) extends BaseScreen(new ContainerMutatron(te, player), 176, 166) { + val texture: ResourceLocation = new ResourceLocation(Gendustry.modId + ":textures/gui/mutatron.png") + override def initGui() { + super.initGui() + addWidget(new WidgetProgressBar(new Rect(89, 41, 40, 15), Textures.greenProgress(40), te.progress)) + addWidget(new WidgetMJGauge(new Rect(8, 19, 16, 58), Textures.powerFill, te.power)) + addWidget(new WidgetFluidGauge(new Rect(32, 19, 16, 58), Textures.tankOverlay, te.tank)) + addWidget(new WidgetLabel(Misc.toLocal("tile.gendustry.mutatron.name"), 8, 6, 4210752)) + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/mutatron/MachineMutatron.scala b/src/net/bdew/gendustry/machines/mutatron/MachineMutatron.scala new file mode 100644 index 00000000..f98dd97d --- /dev/null +++ b/src/net/bdew/gendustry/machines/mutatron/MachineMutatron.scala @@ -0,0 +1,39 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.mutatron + +import net.bdew.gendustry.machines.ProcessorMachine +import net.minecraft.tileentity.TileEntity +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.inventory.Container +import net.minecraft.client.gui.inventory.GuiContainer +import net.minecraftforge.common.Configuration +import net.bdew.gendustry.gui.GuiProvider +import cpw.mods.fml.relauncher.{Side, SideOnly} + +class MachineMutatron(cfg: Configuration) extends ProcessorMachine(cfg, "Mutatron") with GuiProvider { + var block: BlockMutatron = null + lazy val guiId = 2 + + lazy val tankSize = tuning.getInt("TankSize") + lazy val mutagenPerItem = tuning.getInt("MutagenPerItem") + lazy val labwareConsumeChance = tuning.getFloat("LabwareConsumeChance") + lazy val degradeChanceNatural = tuning.getFloat("DegradeChanceNatural") + lazy val deathChanceArtificial = tuning.getFloat("DeathChanceArtificial") + + if (cfg.get("Machines Enabled", name, true).getBoolean(true)) { + block = new BlockMutatron(getBlockId) + registerBlock(block) + } + + @SideOnly(Side.CLIENT) + def getGui(te: TileEntity, player: EntityPlayer): GuiContainer = new GuiMutatron(te.asInstanceOf[TileMutatron], player) + def getContainer(te: TileEntity, player: EntityPlayer): Container = new ContainerMutatron(te.asInstanceOf[TileMutatron], player) +} diff --git a/src/net/bdew/gendustry/machines/mutatron/TileMutatron.scala b/src/net/bdew/gendustry/machines/mutatron/TileMutatron.scala new file mode 100644 index 00000000..6fe69b53 --- /dev/null +++ b/src/net/bdew/gendustry/machines/mutatron/TileMutatron.scala @@ -0,0 +1,61 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.mutatron + +import net.bdew.gendustry.config.{Items, Machines, Blocks} +import net.minecraft.item.ItemStack +import net.minecraftforge.common.ForgeDirection +import net.minecraftforge.fluids._ +import net.bdew.lib.data.DataSlotTankRestricted +import net.bdew.lib.tile.ExposeTank +import net.bdew.gendustry.machines.TileItemProcessor + +class TileMutatron extends TileItemProcessor with ExposeTank { + lazy val cfg = Machines.mutatron + val outputSlots = Seq(2) + + val tank = DataSlotTankRestricted("tank", this, cfg.tankSize, Blocks.mutagenFluid.getID) + + def getSizeInventory = 4 + + def getTankFromDirection(dir: ForgeDirection): IFluidTank = tank + + def tryStart(): Boolean = { + if (getStackInSlot(0) != null && getStackInSlot(1) != null && getStackInSlot(3) != null && tank.getFluidAmount >= cfg.mutagenPerItem) { + output := GeneticsHelper.getMutationResult(getStackInSlot(0), getStackInSlot(1)) + tank.drain(cfg.mutagenPerItem, true) + decrStackSize(0, 1) + decrStackSize(1, 1) + if (worldObj.rand.nextInt(100) < cfg.labwareConsumeChance) + decrStackSize(3, 1) + return true + } else return false + } + + override def isItemValidForSlot(slot: Int, itemstack: ItemStack): Boolean = { + slot match { + case 0 => + return GeneticsHelper.isPotentialMutationPair(itemstack, getStackInSlot(1)) + case 1 => + return GeneticsHelper.isPotentialMutationPair(getStackInSlot(0), itemstack) + case 3 => + return itemstack.getItem == Items.labware + case _ => + return false + } + } + + allowSided = true + override def canExtractItem(slot: Int, item: ItemStack, side: Int) = slot == 2 + + override def canDrain(from: ForgeDirection, fluid: Fluid): Boolean = false + override def drain(from: ForgeDirection, resource: FluidStack, doDrain: Boolean): FluidStack = null + override def drain(from: ForgeDirection, maxDrain: Int, doDrain: Boolean): FluidStack = null +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/sampler/BlockSampler.scala b/src/net/bdew/gendustry/machines/sampler/BlockSampler.scala new file mode 100644 index 00000000..26758b37 --- /dev/null +++ b/src/net/bdew/gendustry/machines/sampler/BlockSampler.scala @@ -0,0 +1,50 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.sampler + +import cpw.mods.fml.relauncher.Side +import cpw.mods.fml.relauncher.SideOnly +import net.bdew.gendustry.Gendustry +import net.minecraft.block.Block +import net.minecraft.block.material.Material +import net.minecraft.client.renderer.texture.IconRegister +import net.minecraft.util.Icon +import net.bdew.lib.block.HasTE +import net.bdew.lib.tile.inventory.BreakableInventoryBlock +import net.bdew.gendustry.config.Machines +import net.bdew.gendustry.gui.BlockGuiWrenchable + +class BlockSampler(id: Int) extends Block(id, Material.rock) with HasTE[TileSampler] with BreakableInventoryBlock with BlockGuiWrenchable { + val TEClass = classOf[TileSampler] + private var icons: Array[Icon] = null + lazy val guiId: Int = Machines.sampler.guiId + + setUnlocalizedName(Gendustry.modId + ".sampler") + setHardness(5) + + override def getIcon(side: Int, meta: Int): Icon = { + side match { + case 0 => + return icons(0) + case 1 => + return icons(1) + case _ => + return icons(2) + } + } + + @SideOnly(Side.CLIENT) + override def registerIcons(reg: IconRegister) { + icons = new Array[Icon](3) + icons(0) = reg.registerIcon(Gendustry.modId + ":sampler/bottom") + icons(1) = reg.registerIcon(Gendustry.modId + ":sampler/top") + icons(2) = reg.registerIcon(Gendustry.modId + ":sampler/side") + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/sampler/ContainerSampler.scala b/src/net/bdew/gendustry/machines/sampler/ContainerSampler.scala new file mode 100644 index 00000000..ac949100 --- /dev/null +++ b/src/net/bdew/gendustry/machines/sampler/ContainerSampler.scala @@ -0,0 +1,28 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.sampler + +import net.bdew.lib.gui.{BaseContainer, SlotValidating} +import net.minecraft.entity.player.EntityPlayer +import net.bdew.lib.data.base.ContainerDataSlots + +class ContainerSampler(val te: TileSampler, player: EntityPlayer) extends BaseContainer(te) with ContainerDataSlots { + lazy val dataSource = te + + addSlotToContainer(new SlotValidating(te, 0, 74, 28)) + addSlotToContainer(new SlotValidating(te, 1, 98, 28)) + addSlotToContainer(new SlotValidating(te, 2, 41, 49)) + addSlotToContainer(new SlotValidating(te, 3, 137, 49)) + bindPlayerInventory(player.inventory, 8, 84, 142) + + def canInteractWith(entityplayer: EntityPlayer): Boolean = { + return te.isUseableByPlayer(entityplayer) + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/sampler/GuiSampler.scala b/src/net/bdew/gendustry/machines/sampler/GuiSampler.scala new file mode 100644 index 00000000..4ecbfc6a --- /dev/null +++ b/src/net/bdew/gendustry/machines/sampler/GuiSampler.scala @@ -0,0 +1,28 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.sampler + +import net.bdew.gendustry.Gendustry +import net.bdew.gendustry.gui.{WidgetMJGauge, Textures} +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.util.ResourceLocation +import net.bdew.lib.gui.{Rect, BaseScreen} +import net.bdew.lib.gui.widgets.{WidgetLabel, WidgetProgressBar} +import net.bdew.lib.Misc + +class GuiSampler(val te: TileSampler, player: EntityPlayer) extends BaseScreen(new ContainerSampler(te, player), 176, 166) { + val texture: ResourceLocation = new ResourceLocation(Gendustry.modId + ":textures/gui/sampler.png") + override def initGui() { + super.initGui() + addWidget(new WidgetProgressBar(new Rect(63, 49, 66, 15), Textures.whiteProgress(66), te.progress)) + addWidget(new WidgetMJGauge(new Rect(8, 19, 16, 58), Textures.powerFill, te.power)) + addWidget(new WidgetLabel(Misc.toLocal("tile.gendustry.sampler.name"), 8, 6, 4210752)) + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/machines/sampler/MachineSampler.scala b/src/net/bdew/gendustry/machines/sampler/MachineSampler.scala new file mode 100644 index 00000000..f7bc28ce --- /dev/null +++ b/src/net/bdew/gendustry/machines/sampler/MachineSampler.scala @@ -0,0 +1,35 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.sampler + +import net.bdew.gendustry.machines.ProcessorMachine +import net.minecraft.tileentity.TileEntity +import net.minecraft.entity.player.EntityPlayer +import net.minecraft.inventory.Container +import net.minecraft.client.gui.inventory.GuiContainer +import net.minecraftforge.common.Configuration +import net.bdew.gendustry.gui.GuiProvider +import cpw.mods.fml.relauncher.{Side, SideOnly} + +class MachineSampler(cfg: Configuration) extends ProcessorMachine(cfg, "Sampler") with GuiProvider { + var block: BlockSampler = null + lazy val guiId = 5 + + lazy val labwareConsumeChance = tuning.getInt("LabwareConsumeChance") + + if (cfg.get("Machines Enabled", name, true).getBoolean(true)) { + block = new BlockSampler(getBlockId) + registerBlock(block) + } + + @SideOnly(Side.CLIENT) + def getGui(te: TileEntity, player: EntityPlayer): GuiContainer = new GuiSampler(te.asInstanceOf[TileSampler], player) + def getContainer(te: TileEntity, player: EntityPlayer): Container = new ContainerSampler(te.asInstanceOf[TileSampler], player) +} diff --git a/src/net/bdew/gendustry/machines/sampler/TileSampler.scala b/src/net/bdew/gendustry/machines/sampler/TileSampler.scala new file mode 100644 index 00000000..d277d3d7 --- /dev/null +++ b/src/net/bdew/gendustry/machines/sampler/TileSampler.scala @@ -0,0 +1,78 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.machines.sampler + +import buildcraft.api.power.PowerHandler.Type +import net.bdew.gendustry.data.{DataSlotPower, ExposePower} +import net.bdew.gendustry.config.{Items, Machines} +import net.minecraft.item.ItemStack +import net.minecraftforge.common.ForgeDirection +import net.bdew.lib.data.{DataSlotItemStack, DataSlotFloat} +import net.bdew.lib.tile.inventory.{BreakableInventoryTile, SidedInventory, PersistentInventoryTile} +import net.bdew.lib.tile.TileExtended +import net.bdew.lib.data.base.{UpdateKind, TileDataSlots} +import forestry.api.genetics.AlleleManager +import net.bdew.gendustry.machines.TileItemProcessor +import scala.util.Random +import net.bdew.gendustry.forestry.GeneSampleInfo + +class TileSampler extends TileItemProcessor { + lazy val cfg = Machines.imprinter + val outputSlots = Seq(3) + + def getSizeInventory = 4 + + def selectRandomAllele(stack: ItemStack): ItemStack = { + val root = AlleleManager.alleleRegistry.getSpeciesRoot(stack) + if (root == null) return new ItemStack(Items.waste) + val member = root.getMember(stack) + val genome = member.getGenome + val chromosomes = genome.getChromosomes.zipWithIndex.filter(_._1!=null) + val alleles = chromosomes.map({ + case (x,n)=>Seq(n -> x.getPrimaryAllele, n-> x.getSecondaryAllele) + }).flatten + + val rand = new Random() + val (chr,allele) = alleles(rand.nextInt(alleles.length)) + return Items.geneSample.newStack(GeneSampleInfo(root, chr, allele)) + } + + def tryStart(): Boolean = { + if (getStackInSlot(0) != null && getStackInSlot(1) != null && getStackInSlot(2) != null) { + + output := selectRandomAllele(getStackInSlot(2)) + + decrStackSize(0, 1) + decrStackSize(2, 1) + if (worldObj.rand.nextInt(100) < cfg.labwareConsumeChance) + decrStackSize(1, 1) + + return true + } else return false + } + + + override def isItemValidForSlot(slot: Int, itemstack: ItemStack): Boolean = { + if (itemstack == null || itemstack.getItem == null) return false + slot match { + case 0 => + return itemstack.getItem == Items.geneSampleBlank + case 1 => + return itemstack.getItem == Items.labware + case 2 => + return AlleleManager.alleleRegistry.getIndividual(itemstack) != null + case _ => + return false + } + } + + allowSided = true + override def canExtractItem(slot: Int, item: ItemStack, side: Int) = slot == 3 +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/mutagen/BlockMutagen.scala b/src/net/bdew/gendustry/mutagen/BlockMutagen.scala new file mode 100644 index 00000000..81bb6817 --- /dev/null +++ b/src/net/bdew/gendustry/mutagen/BlockMutagen.scala @@ -0,0 +1,67 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.mutagen + +import cpw.mods.fml.relauncher.Side +import cpw.mods.fml.relauncher.SideOnly +import net.bdew.gendustry.Gendustry +import net.bdew.gendustry.config.Blocks +import net.bdew.gendustry.config.Items +import net.minecraft.block.material.Material +import net.minecraft.client.renderer.texture.IconRegister +import net.minecraft.item.ItemStack +import net.minecraft.util.Icon +import net.minecraft.world.IBlockAccess +import net.minecraft.world.World +import net.minecraftforge.common.MinecraftForge +import net.minecraftforge.event.Event.Result +import net.minecraftforge.event.ForgeSubscribe +import net.minecraftforge.event.entity.player.FillBucketEvent +import net.minecraftforge.fluids.BlockFluidClassic + +class BlockMutagen(id: Int) extends BlockFluidClassic(id, Blocks.mutagenFluid, Material.water) { + protected var stillIcon: Icon = null + protected var flowingIcon: Icon = null + + Blocks.mutagenFluid.setBlockID(id) + setUnlocalizedName(Gendustry.modId + ".mutagen") + MinecraftForge.EVENT_BUS.register(this) + + override def colorMultiplier(iblockaccess: IBlockAccess, x: Int, y: Int, z: Int): Int = 0x66FF00 + + override def canDisplace(world: IBlockAccess, x: Int, y: Int, z: Int): Boolean = { + if (world.getBlockMaterial(x, y, z).isLiquid) return false + return super.canDisplace(world, x, y, z) + } + + override def displaceIfPossible(world: World, x: Int, y: Int, z: Int): Boolean = { + if (world.getBlockMaterial(x, y, z).isLiquid) return false + return super.displaceIfPossible(world, x, y, z) + } + + @ForgeSubscribe + def onBucketFill(event: FillBucketEvent) { + if (event.world.getBlockMetadata(event.target.blockX, event.target.blockY, event.target.blockZ) != 0) return + if (event.world.getBlockId(event.target.blockX, event.target.blockY, event.target.blockZ) != blockID) return + event.world.setBlockToAir(event.target.blockX, event.target.blockY, event.target.blockZ) + event.result = new ItemStack(Items.mutagenBucket) + event.setResult(Result.ALLOW) + } + + @SideOnly(Side.CLIENT) + override def getIcon(side: Int, meta: Int): Icon = if (side == 0 || side == 1) stillIcon else flowingIcon + + @SideOnly(Side.CLIENT) + override def registerIcons(register: IconRegister) { + stillIcon = register.registerIcon(Gendustry.modId + ":mutagen/still") + flowingIcon = register.registerIcon(Gendustry.modId + ":mutagen/flowing") + Blocks.mutagenFluid.setIcons(stillIcon, flowingIcon) + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/mutagen/FluidMutagen.scala b/src/net/bdew/gendustry/mutagen/FluidMutagen.scala new file mode 100644 index 00000000..ddf3ecbb --- /dev/null +++ b/src/net/bdew/gendustry/mutagen/FluidMutagen.scala @@ -0,0 +1,20 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.mutagen + +import net.minecraftforge.fluids.Fluid +import net.minecraftforge.fluids.FluidRegistry + +class FluidMutagen extends Fluid("Mutagen") { + setDensity(1000) + setViscosity(1000) + setUnlocalizedName("gendustry.mutagen") + FluidRegistry.registerFluid(this) +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/mutagen/ItemMutagenBucket.scala b/src/net/bdew/gendustry/mutagen/ItemMutagenBucket.scala new file mode 100644 index 00000000..c0f31918 --- /dev/null +++ b/src/net/bdew/gendustry/mutagen/ItemMutagenBucket.scala @@ -0,0 +1,26 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.mutagen + +import cpw.mods.fml.relauncher.Side +import cpw.mods.fml.relauncher.SideOnly +import net.bdew.gendustry.Gendustry +import net.bdew.gendustry.config.Blocks +import net.minecraft.client.renderer.texture.IconRegister +import net.minecraft.item.ItemBucket + +class ItemMutagenBucket(id: Int) extends ItemBucket(id, Blocks.mutagen.blockID) { + setUnlocalizedName(Gendustry.modId + ".mutagen.bucket") + + @SideOnly(Side.CLIENT) + override def registerIcons(reg: IconRegister) { + itemIcon = reg.registerIcon(Gendustry.modId + ":mutagen/bucket") + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/mutagen/ItemMutagenCan.scala b/src/net/bdew/gendustry/mutagen/ItemMutagenCan.scala new file mode 100644 index 00000000..ee36f660 --- /dev/null +++ b/src/net/bdew/gendustry/mutagen/ItemMutagenCan.scala @@ -0,0 +1,25 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.mutagen + +import cpw.mods.fml.relauncher.Side +import cpw.mods.fml.relauncher.SideOnly +import net.bdew.gendustry.Gendustry +import net.minecraft.client.renderer.texture.IconRegister +import net.minecraft.item.Item + +class ItemMutagenCan(id: Int) extends Item(id) { + setUnlocalizedName(Gendustry.modId + ".mutagen.can") + + @SideOnly(Side.CLIENT) + override def registerIcons(reg: IconRegister) { + itemIcon = reg.registerIcon(Gendustry.modId + ":mutagen/can") + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/mutagen/MutagenRegistry.scala b/src/net/bdew/gendustry/mutagen/MutagenRegistry.scala new file mode 100644 index 00000000..f33cf0eb --- /dev/null +++ b/src/net/bdew/gendustry/mutagen/MutagenRegistry.scala @@ -0,0 +1,46 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.mutagen + +import net.minecraft.block.Block +import net.minecraft.item.Item +import net.minecraft.item.ItemStack +import scala.collection.mutable +import net.minecraftforge.oredict.OreDictionary + +object MutagenRegistry { + val values = mutable.Map.empty[Int, mutable.Map[Int, Int]] + + def register(block: Block, value: Integer): Unit = register(block.blockID, OreDictionary.WILDCARD_VALUE, value) + def register(item: Item, value: Integer): Unit = register(item.itemID, OreDictionary.WILDCARD_VALUE, value) + def register(item: ItemStack, value: Integer): Unit = register(item.itemID, item.getItemDamage, value) + + def register(id: Int, damage: Int, value: Int) { + if (values.contains(id)) { + values(id) += (damage -> value) + } else { + val sub = mutable.Map.empty[Int, Int] + sub += (damage -> value) + values.put(id, sub) + } + } + + def getValue(item: ItemStack): Int = { + if (!values.contains(item.itemID)) return 0 + val sub = values(item.itemID) + if (sub.contains(item.getItemDamage)) { + return sub(item.getItemDamage) + } else if (sub.contains(OreDictionary.WILDCARD_VALUE)) { + return sub(OreDictionary.WILDCARD_VALUE) + } else { + return 0 + } + } +} \ No newline at end of file diff --git a/src/net/bdew/gendustry/nei/NEIGendustryConfig.scala b/src/net/bdew/gendustry/nei/NEIGendustryConfig.scala new file mode 100644 index 00000000..5d950148 --- /dev/null +++ b/src/net/bdew/gendustry/nei/NEIGendustryConfig.scala @@ -0,0 +1,36 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.nei + +import codechicken.nei.api.{API, IConfigureNEI} +import forestry.api.genetics.{IAlleleSpecies, AlleleManager} +import net.bdew.gendustry.config.{Config, Items} +import net.bdew.gendustry.forestry.GeneSampleInfo + +class NEIGendustryConfig extends IConfigureNEI { + def getName: String = "Gendustry" + def getVersion: String = "@@VERSION@@" + + def addSamples() { + import scala.collection.JavaConverters._ + val species = AlleleManager.alleleRegistry.getRegisteredAlleles.asScala.values.filter(_.isInstanceOf[IAlleleSpecies]) + val combos = species.map({ + case x: IAlleleSpecies => + val root = x.getRoot + val tpl = root.getTemplate(x.getUID) + tpl.toIterable.zipWithIndex.filter(x => x._1 != null && !AlleleManager.alleleRegistry.isBlacklisted(x._1.getUID)).map(x => GeneSampleInfo(root, x._2, x._1)) + }).flatten.toSet + combos.foreach(x => API.addNBTItem(Items.geneSample.newStack(x))) + } + + def loadConfig() = { + if (Config.neiAddSamples) addSamples() + } +} diff --git a/src/net/bdew/gendustry/test/PowerEmitterBlock.scala b/src/net/bdew/gendustry/test/PowerEmitterBlock.scala new file mode 100644 index 00000000..5cce4491 --- /dev/null +++ b/src/net/bdew/gendustry/test/PowerEmitterBlock.scala @@ -0,0 +1,20 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.test + +import net.minecraft.block.Block +import net.minecraft.block.material.Material +import net.bdew.lib.block.HasTE + +class PowerEmitterBlock(id: Int) extends Block(id, Material.iron) with HasTE[PowerEmitterTile] { + val TEClass = classOf[PowerEmitterTile] + setUnlocalizedName("test.power.emitter") + setHardness(1) +} diff --git a/src/net/bdew/gendustry/test/PowerEmitterTile.scala b/src/net/bdew/gendustry/test/PowerEmitterTile.scala new file mode 100644 index 00000000..f3fcba17 --- /dev/null +++ b/src/net/bdew/gendustry/test/PowerEmitterTile.scala @@ -0,0 +1,33 @@ +/* + * Copyright (c) bdew, 2013 + * https://github.com/bdew/gendustry + * + * This mod is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * https://raw.github.com/bdew/gendustry/master/MMPL-1.0.txt + */ + +package net.bdew.gendustry.test + +import net.minecraft.tileentity.TileEntity +import net.minecraftforge.common.ForgeDirection +import buildcraft.api.power.PowerHandler.Type +import buildcraft.api.power.{IPowerEmitter, IPowerReceptor} + +class PowerEmitterTile extends TileEntity with IPowerEmitter { + def canEmitPowerFrom(side: ForgeDirection): Boolean = true + override def updateEntity() { + if (worldObj.isRemote) return + for (dir <- ForgeDirection.VALID_DIRECTIONS) { + val te = worldObj.getBlockTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ) + if (te != null && te.isInstanceOf[IPowerReceptor]) { + val pr = te.asInstanceOf[IPowerReceptor].getPowerReceiver(dir.getOpposite) + if (pr != null) { + val power = pr.getMaxEnergyReceived + if (power > 0) + pr.receiveEnergy(Type.ENGINE, power, dir.getOpposite) + } + } + } + } +}