Compare commits

...
97 Commits
Author SHA1 Message Date
Nedelosk 990fcb8cad Update Version 2017-11-04 00:11:32 +01:00
Nedelosk 327fd1a6b5 Update top Forestry 5.7 2017-11-03 23:50:13 +01:00
Nedelosk b60554e90a Merge remote-tracking branch 'origin/master-MC1.12' into master-MC1.12 2017-10-29 14:53:12 +01:00
Nedelosk 2358e03096 Fix #324, Fix #330 Ecstatic and absolute bees are unobtainable 2017-10-29 14:52:47 +01:00
mezz 23d066df7d Fix #326 Rocky hives spawning too often and causing lag 2017-10-18 21:47:02 -07:00
Nedelosk 07193e39f5 Fix #244, Fix #296 Crash when disabling extratrees module 2017-10-12 15:56:43 +02:00
Nedelosk 59c409b4bb Fix #320 Disabled module causes crash on startup 2017-10-12 12:06:30 +02:00
Nedelosk c6eaf3010c Merge remote-tracking branch 'origin/master-MC1.12' into master-MC1.12 2017-10-12 11:49:46 +02:00
Nedelosk a23491bb0b Fix #322 Leaves in inventory client crash 2017-10-12 11:49:31 +02:00
mezz 1ef2f23604 Update for latest Forestry, add modId to genetic item tooltips 2017-10-03 00:25:17 -07:00
mezz de6028e85d Update to 1.12.2 2017-09-19 21:51:24 -07:00
mezz 4689fef8c3 Revert "Downgrade gradle to 2.14"
This reverts commit f13bfc0a63.
2017-08-28 23:46:11 -07:00
mezz f13bfc0a63 Downgrade gradle to 2.14 2017-08-28 23:13:00 -07:00
mezz 9342817813 Cleanup 2017-08-28 22:59:23 -07:00
mezz caa307e72e Fix #293 Crash when opening Arborist database 2017-08-27 14:58:05 -07:00
mezz 1a9b0839a1 Disable gradle daemon 2017-08-26 16:20:41 -07:00
mezz 03f562a300 Revert "Update gradle to 4.1"
This reverts commit f1e7a198e5.
2017-08-26 16:17:20 -07:00
mezz f1e7a198e5 Update gradle to 4.1 2017-08-26 14:12:10 -07:00
mezz 925649c486 Try adding more ram for gradle 2017-08-26 13:46:37 -07:00
mezz 72ea6b71be Update dependencies 2017-08-26 13:39:38 -07:00
Nedelosk 2794bd076a Update Forestry 2017-08-26 20:34:40 +02:00
mezz 4566890273 Fix #274 Fix stone hive generation, increase water hive generation.
(Thanks to @p-schneider)
2017-08-26 00:00:31 -07:00
mezz 4c03896354 Fix #288 Fix compartments have two tabs selected when first opened 2017-08-25 23:53:58 -07:00
mezz 266657a3ab Cleanup unused imports 2017-08-25 23:13:08 -07:00
mezz 1d97fc17e6 Fix errors when placing fruit press 2017-08-25 23:13:00 -07:00
mezz adef8dc0e4 Fix #290 Compartment Crash on Opening 2017-08-25 23:12:39 -07:00
mezz 37c3231624 Try increasing gradle ram 2017-08-24 23:45:04 -07:00
mezz 06ad753490 Try disabling the gradle daemon 2017-08-24 23:36:47 -07:00
mezz 76cfaaed83 Fix #287 Missing design project from main jar 2017-08-24 23:22:27 -07:00
mezz f400985ab3 Register error states explicitly 2017-08-24 23:03:52 -07:00
mezz a12e293eed Convert anonymous inner classes to static inner classes.
Should fix the build issue, which is caused by the bug described here:
https://github.com/MinecraftForge/Srg2Source/pull/17
2017-08-20 23:48:43 -07:00
mezz de33285994 #284 Fix hive pickblock (fixes Just Enough Resources worldgen recipes) 2017-08-20 21:52:46 -07:00
mezz 6873c36d81 Remove ExtraTrees dependency from Botany
Move shared code to a new Design library mod
2017-08-19 12:49:58 -07:00
mezz 3fc36f8e37 Add 1.12 to accepted Forge versions 2017-08-18 23:23:01 -07:00
mezz 134efac45b Move some block classes from core-api to core 2017-08-18 21:53:02 -07:00
mezz a19fccc5d0 Update to 1.12.1 2017-08-18 21:29:25 -07:00
mezz fc2f1c5930 Improve lumber mill recipe handling 2017-08-17 21:46:38 -07:00
mezz ca4da294b4 Fix #273 Crash with Dimensional Control mod 2017-08-16 22:03:17 -07:00
Nedelosk a41e6d32a1 Merge remote-tracking branch 'origin/master-MC1.12' into master-MC1.12 2017-08-16 23:28:57 +02:00
Nedelosk 12f4f55799 Fix #272 Fruit Name Issue 2017-08-16 23:28:38 +02:00
mezz 9fe388beee Remove genetics-main dependency from extrabees and extratrees 2017-08-16 00:10:34 -07:00
Nedelosk a0f239bd92 Fix missing Planks 2017-08-15 21:41:37 +02:00
Nedelosk 7d88eb7ebb Fix #264 Move recipe registration from postInit to init 2017-08-14 14:55:29 +02:00
Nedelosk 53aa5fc6d6 Fix #263 It Crashes (game won't start) MC1.12 Forge 2443 2017-08-14 14:17:36 +02:00
mezz 57d30512e3 Mark as working on 1.12.1 on CurseForge 2017-08-13 22:04:58 -07:00
mezz 7de1c86d29 Remove the genetics dependency on botany-api 2017-08-13 21:53:59 -07:00
mezz 8fa3d5ece8 Fix a broken translation format string 2017-08-13 20:44:31 -07:00
mezz efc88324c6 Fix cases where we use the Forestry log 2017-08-13 20:44:18 -07:00
mezz 527044da56 Move the apiarist database out of genetics and in to extrabees 2017-08-13 20:42:53 -07:00
mezz 50a0887329 Remove extrabees-api 2017-08-13 19:34:20 -07:00
mezz 79ea282f9b Remove genetics dependency on extrabees 2017-08-13 17:16:08 -07:00
mezz 60395a0ec7 Untangle the Genetics Analyst from the other modules 2017-08-13 16:23:14 -07:00
Nedelosk 5ecb465d01 Clean Up Extra Trees Planks 2017-08-13 21:47:32 +02:00
Nedelosk e9556c44f9 Clean Up Extra Trees 2017-08-13 19:09:18 +02:00
Nedelosk 868cedbf6f Clean Up StyleSheets 2017-08-13 17:11:03 +02:00
Nedelosk 7ede85dfb8 Create punnett stylesheet json file 2017-08-13 15:04:39 +02:00
Nedelosk fab5b82cbe Clean Up Stylesheet loading 2017-08-13 14:43:52 +02:00
Nedelosk fdb9a14962 Merge branch 'master-MC1.12' of https://github.com/ForestryMC/Binnie into master-MC1.12 2017-08-13 12:39:01 +02:00
Nedelosk 92cc62950e Move Tree Breeding System 2017-08-13 12:38:54 +02:00
mezz ef90f2228b Split "api" into one api module for every module 2017-08-12 21:16:54 -07:00
mezz 8600dc9e66 Fix missing core api from output jar 2017-08-12 18:51:18 -07:00
mezz 0f5861f015 Clean up IBorder 2017-08-12 18:42:37 -07:00
mezz 68e966800e Make core only depend on its own api, nothing else 2017-08-12 18:42:37 -07:00
Nedelosk 767723fc02 Remove Unused Import 2017-08-13 02:56:40 +02:00
Nedelosk 7d5b6da9a4 Merge branch 'master-MC1.12' of https://github.com/ForestryMC/Binnie into master-MC1.12 2017-08-13 02:53:27 +02:00
Nedelosk 78687099cd Clean Up Gui 2017-08-13 02:53:20 +02:00
mezz 151ce90672 Clean up EnumFlowerColor 2017-08-12 16:51:58 -07:00
Nedelosk 1a717e2e2c Update Readme.md 2017-08-13 01:26:22 +02:00
Nedelosk 9acfedfa16 Fix #261 Ceramic block issues 2017-08-12 23:48:56 +02:00
Nedelosk f968bfdb38 Clean Up Cocktail Liquid 2017-08-12 22:38:25 +02:00
Nedelosk c247bd1243 Clean Up Fluids 2017-08-12 21:40:55 +02:00
Nedelosk 40f8c11a1b Clean Up Extra Trees Modules 2017-08-12 18:41:48 +02:00
Nedelosk f68d62671f Fix Extra Trees Config property 2017-08-12 17:51:08 +02:00
Nedelosk c7ebb39486 Remove duplicated mcmod.info files 2017-08-12 17:47:50 +02:00
Nedelosk 228958f1d0 Add config handler to the module system 2017-08-12 17:25:44 +02:00
Nedelosk 96b753d37f Move Mutation Item Registration to the Mutation Handler 2017-08-12 16:57:35 +02:00
Nedelosk 9dfe741f38 Fix #258 Crash With Thermal Dynamics 2017-08-12 16:45:52 +02:00
Nedelosk c0f18b9f6a Fix Hive Name 2017-08-12 16:16:59 +02:00
Nedelosk b4568bba62 Clean Up Extra Bee Products 2017-08-12 16:12:02 +02:00
Nedelosk 555f18dd99 Fix #259 All Hives drop the same bee 2017-08-12 14:46:44 +02:00
Nedelosk 7e9bd507d0 Fix #259 All Hives drop the same bee 2017-08-12 14:24:59 +02:00
Nedelosk 7c623fd9a8 Fix design item models 2017-08-12 13:45:18 +02:00
Nedelosk 64e443eda7 Split mcmod.info and add logos 2017-08-12 12:56:49 +02:00
mezz 6ad9c979d6 Refactor Binnie's mods into separate modules (#260) 2017-08-11 22:52:39 -07:00
Nedelosk cd82361a39 Clean Up ModuleManager and remove unused parameter 2017-08-09 23:44:26 +02:00
mezz a502020e47 Fix #253 Additional fixes for game crashes when you open GUI on some blocks 2017-08-08 22:31:00 -07:00
mezz a9a2db67f4 Remove some dead code that is not related to unfinished features 2017-08-08 22:30:59 -07:00
mezz 5b1250ce8a Use lambdas for event handlers 2017-08-08 22:30:59 -07:00
mezz 6668392bd7 Fix bug with ceramic brick in debug world 2017-08-08 22:30:58 -07:00
mezz d3a93abb25 Cleanup 2017-08-08 22:30:50 -07:00
Nedelosk 8a2f686264 Fix #254 Mod Modules are not disabled if the mod is disabled 2017-08-08 16:53:06 +02:00
Nedelosk 2eca542f87 Refactoring Extra Tree Modules 2017-08-08 16:10:35 +02:00
Nedelosk 4421d2ce44 Refactoring Extra Tree Modules 2017-08-08 15:20:44 +02:00
mezz 78b98f07db Fix #253 Game crashes when you open GUI on some blocks 2017-08-07 21:37:31 -07:00
Nedelosk ad20fa2ffc Fix #252 Server startup Crash 2017-08-07 16:56:17 +02:00
Nedelosk b18c195aa9 Refactoring Botany Modules and Fix #252 2017-08-07 16:53:13 +02:00
Nedelosk 235dfca751 Improve Modules 2017-08-06 23:19:40 +02:00
5018 changed files with 22752 additions and 22404 deletions

No files matched your search

+7 -22
View File
@@ -1,28 +1,13 @@
# everything
/*
.gradle
# IntelliJ
/build
/run
/out
.idea
.idea/
*.iml
*.ipr
*.iws
classes/
# folders
!/gradle/wrapper
!/src
# files
!/.gitignore
!/LICENSE.txt
!/license-header.txt
!/README.md
!/gradle.properties
!/build.gradle
!/gradlew
!/gradlew.bat
.gradle/
classes/
build/
run/
out/
/changelog.html
+1 -1
View File
@@ -10,7 +10,7 @@ along with new features such as fully breedable flowers and genetic manipulation
[Wiki](https://binnie.mods.wiki/wiki/Main_Page)
[Latest Builds for 1.11 / 1.11.2](http://jenkins.ic2.player.to/job/Binnie's%201.11.2/)
[Latest Builds for 1.12 ](http://jenkins.ic2.player.to/job/Binnie's%201.12/)
### Mods
+9
View File
@@ -0,0 +1,9 @@
archivesBaseName = 'all-' + mcversion
dependencies {
runtimeOnly project(":botany")
runtimeOnly project(":core")
runtimeOnly project(":extrabees")
runtimeOnly project(":extratrees")
runtimeOnly project(":genetics")
}
+5
View File
@@ -0,0 +1,5 @@
archivesBaseName = 'botany-api-' + mcversion
dependencies {
compile project(":core-api")
}
@@ -1,6 +1,10 @@
package binnie.botany.api;
public class FlowerManager {
import binnie.botany.api.gardening.IGardeningManager;
import binnie.botany.api.genetics.IFlowerFactory;
import binnie.botany.api.genetics.IFlowerRoot;
public class BotanyAPI {
/**
* Convenient access to AlleleManager.alleleRegistry.getSpeciesRoot("rootFlowers")
*/
@@ -1,11 +1,10 @@
package binnie.botany.api;
package binnie.botany.api.gardening;
import javax.annotation.Nullable;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.text.TextFormatting;
import binnie.core.util.I18N;
import net.minecraft.util.text.translation.I18n;
public enum EnumAcidity implements IStringSerializable {
ACID(TextFormatting.RED),
@@ -13,6 +12,7 @@ public enum EnumAcidity implements IStringSerializable {
ALKALINE(TextFormatting.AQUA);
@Nullable
private final
TextFormatting color;
EnumAcidity(@Nullable TextFormatting color) {
@@ -25,10 +25,20 @@ public enum EnumAcidity implements IStringSerializable {
}
public String getLocalisedName(boolean withColor) {
String localisedName = I18N.localise("botany.ph." + getName());
String localisedName = I18n.translateToLocal("botany.ph." + getName());
if (withColor && color != null) {
localisedName += color;
localisedName = color + localisedName;
}
return localisedName;
}
public static EnumAcidity getFromValue(float rawAcidity) {
if(rawAcidity <= -1.0f){
return EnumAcidity.ACID;
}else if(rawAcidity >= 1.0f){
return EnumAcidity.ALKALINE;
}else{
return EnumAcidity.NEUTRAL;
}
}
}
@@ -0,0 +1,5 @@
package binnie.botany.api.gardening;
public enum EnumFertiliserType {
ACID, ALKALINE, NUTRIENT
}
@@ -1,11 +1,11 @@
package binnie.botany.api;
package binnie.botany.api.gardening;
import javax.annotation.Nullable;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.text.TextFormatting;
import binnie.core.util.I18N;
import net.minecraft.util.text.translation.I18n;
public enum EnumMoisture implements IStringSerializable {
DRY(TextFormatting.YELLOW),
@@ -13,7 +13,7 @@ public enum EnumMoisture implements IStringSerializable {
DAMP(TextFormatting.DARK_BLUE);
@Nullable
final TextFormatting color;
private final TextFormatting color;
EnumMoisture(@Nullable TextFormatting color) {
this.color = color;
@@ -25,10 +25,20 @@ public enum EnumMoisture implements IStringSerializable {
}
public String getLocalisedName(boolean withColor) {
String localisedName = I18N.localise("botany.moisture." + getName());
String localisedName = I18n.translateToLocal("botany.moisture." + getName());
if (withColor && color != null) {
localisedName += color;
localisedName = color + localisedName + TextFormatting.GRAY;
}
return localisedName;
}
public static EnumMoisture getFromValue(float rawMoisture) {
if(rawMoisture <= -1.0f){
return EnumMoisture.DRY;
}else if(rawMoisture >= 1.0f){
return EnumMoisture.DAMP;
}else{
return EnumMoisture.NORMAL;
}
}
}
@@ -1,11 +1,11 @@
package binnie.botany.api;
package binnie.botany.api.gardening;
import java.util.Locale;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.text.TextFormatting;
import binnie.core.util.I18N;
import net.minecraft.util.text.translation.I18n;
public enum EnumSoilType implements IStringSerializable {
SOIL(TextFormatting.DARK_GRAY),
@@ -24,6 +24,6 @@ public enum EnumSoilType implements IStringSerializable {
}
public String getTranslated() {
return color + I18N.localise("botany.soil." + getName());
return color + I18n.translateToLocal("botany.soil." + getName());
}
}
@@ -1,4 +1,4 @@
package binnie.botany.api;
package binnie.botany.api.gardening;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
@@ -1,9 +1,12 @@
package binnie.botany.api;
package binnie.botany.api.gardening;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.Map;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
@@ -11,6 +14,8 @@ import net.minecraft.world.World;
import forestry.api.core.EnumTemperature;
import binnie.botany.api.genetics.IFlower;
public interface IGardeningManager {
default boolean isSoil(Block block) {
return block instanceof IBlockSoil;
@@ -28,25 +33,17 @@ public interface IGardeningManager {
float getBiomePH(World world, BlockPos pos);
IBlockState getSoil(EnumSoilType soil, boolean weedKill, EnumMoisture moisture, EnumAcidity acidity);
void plantSoil(World world, BlockPos pos, EnumSoilType soil, EnumMoisture moisture, EnumAcidity acidity);
Collection<ItemStack> getAcidFertilisers();
Collection<ItemStack> getFertilisers(EnumFertiliserType type);
Collection<ItemStack> getAlkalineFertilisers();
Map<EnumFertiliserType, Map<ItemStack, Integer>> getFertilisers();
Collection<ItemStack> getNutrientFertilisers();
void registerFertiliser(EnumFertiliserType type, ItemStack stack, int strength);
void registerAcidFertiliser(ItemStack stack, int strength);
void registerAlkalineFertiliser(ItemStack stack, int strength);
void registerNutrientFertiliser(ItemStack stack, int strength);
boolean isAcidFertiliser(ItemStack stack);
boolean isAlkalineFertiliser(ItemStack stack);
boolean isNutrientFertiliser(ItemStack stack);
boolean isFertiliser(EnumFertiliserType type, ItemStack stack);
int getFertiliserStrength(ItemStack stack);
@@ -65,4 +62,6 @@ public interface IGardeningManager {
boolean isWeedkiller(ItemStack heldItem);
boolean addWeedKiller(World world, BlockPos pos);
boolean onFertiliseSoil(ItemStack heldItem, IBlockSoil soil, World world, BlockPos pos, EntityPlayer player);
}
@@ -0,0 +1,7 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
package binnie.botany.api.gardening;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -1,4 +1,4 @@
package binnie.botany.api;
package binnie.botany.api.genetics;
import java.util.Locale;
@@ -25,7 +25,7 @@ public enum EnumFlowerChromosome implements IChromosomeType {
SAPPINESS(IAlleleFloat.class),
STEM(IAlleleInteger.class);
private Class<? extends IAllele> cls;
private final Class<? extends IAllele> cls;
EnumFlowerChromosome(Class<? extends IAllele> cls) {
this.cls = cls;
@@ -0,0 +1,130 @@
package binnie.botany.api.genetics;
import java.awt.Color;
import binnie.botany.api.BotanyAPI;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.text.translation.I18n;
public enum EnumFlowerColor implements IStringSerializable {
Aquamarine("aquamarine", new Color(8388564)),
Black("black", new Color(2631720)),
Blue("blue", new Color(255)),
Brown("brown", new Color(10824234)),
CadetBlue("cadetBlue", new Color(6266528)),
Chocolate("chocolate", new Color(13789470)),
Coral("coral", new Color(16744272)),
Crimson("crimson", new Color(14423100)),
Cyan("cyan", new Color(65535)),
DarkGoldenrod("darkGoldenrod", new Color(12092939)),
DarkGray("darkGray", new Color(11119017)),
DarkGreen("darkGreen", new Color(25600)),
DarkKhaki("darkKhaki", new Color(12433259)),
DarkOliveGreen("darkOliveGreen", new Color(5597999)),
DarkOrange("darkOrange", new Color(16747520)),
DarkSalmon("darkSalmon", new Color(15308410)),
DarkSeaGreen("darkSeaGreen", new Color(9419915)),
DarkSlateBlue("darkSlateBlue", new Color(4734347)),
DarkSlateGray("darkSlateGray", new Color(3100495)),
DarkTurquoise("darkTurquoise", new Color(52945)),
DarkViolet("darkViolet", new Color(9699539)),
DeepPink("deepPink", new Color(16716947)),
DeepSkyBlue("deepSkyBlue", new Color(49151)),
DimGray("dimGray", new Color(6908265)),
DodgerBlue("dodgerBlue", new Color(2003199)),
Gold("gold", new Color(16766720)),
Goldenrod("goldenrod", new Color(14329120)),
Gray("gray", new Color(8421504)),
Green("green", new Color(32768)),
HotPink("hotPink", new Color(16738740)),
IndianRed("indianRed", new Color(13458524)),
Indigo("indigo", new Color(4915330)),
Khaki("khaki", new Color(15787660)),
Lavender("lavender", new Color(15132410)),
LemonChiffon("lemonChiffon", new Color(16775885)),
LightGray("lightGray", new Color(13882323)),
LightSeaGreen("lightSeaGreen", new Color(2142890)),
LightSteelBlue("lightSteelBlue", new Color(11584734)),
Lime("lime", new Color(65280)),
LimeGreen("limeGreen", new Color(3329330)),
Magenta("magenta", new Color(16711935)),
Maroon("maroon", new Color(8388608)),
MediumAquamarine("mediumAquamarine", new Color(6737322)),
MediumOrchid("mediumOrchid", new Color(12211667)),
MediumPurple("mediumPurple", new Color(9662683)),
MediumSeaGreen("mediumSeaGreen", new Color(3978097)),
MediumVioletRed("mediumVioletRed", new Color(13047173)),
MistyRose("mistyRose", new Color(16770273)),
Navy("navy", new Color(128)),
Olive("olive", new Color(8421376)),
OliveDrab("oliveDrab", new Color(7048739)),
Orange("orange", new Color(16753920)),
PaleGreen("paleGreen", new Color(10025880)),
PaleTurquoise("paleTurquoise", new Color(11529966)),
PaleVioletRed("paleVioletRed", new Color(14381203)),
Peru("peru", new Color(13468991)),
Pink("pink", new Color(16761035)),
Plum("plum", new Color(14524637)),
Purple("purple", new Color(8388736)),
Red("red", new Color(16711680)),
RosyBrown("rosyBrown", new Color(12357519)),
RoyalBlue("royalBlue", new Color(4286945)),
Salmon("salmon", new Color(16416882)),
SandyBrown("sandyBrown", new Color(16032864)),
SeaGreen("seaGreen", new Color(3050327)),
Sienna("sienna", new Color(10506797)),
SkyBlue("skyBlue", new Color(8900331)),
SlateBlue("slateBlue", new Color(6970061)),
SlateGray("slateGray", new Color(7372944)),
SpringGreen("springGreen", new Color(65407)),
SteelBlue("steelBlue", new Color(4620980)),
Tan("tan", new Color(13808780)),
Teal("teal", new Color(32896)),
Thistle("thistle", new Color(14204888)),
Turquoise("turquoise", new Color(4251856)),
Violet("violet", new Color(15631086)),
Wheat("wheat", new Color(16113331)),
White("white", new Color(16777215)),
Yellow("yellow", new Color(16776960)),
YellowGreen("yellowGreen", new Color(10145074));
public static final EnumFlowerColor[] VALUES = values();
private final String ident;
private final IAlleleFlowerColor allele;
EnumFlowerColor(String ident, Color color) {
this.ident = ident;
int r = color.getRed();
int g = color.getGreen();
int b = color.getBlue();
r = (int) (0.45 * (r + 214));
g = (int) (0.45 * (g + 174));
b = (int) (0.45 * (b + 131));
Color colorWilted = new Color(r, g, b);
String uid = "botany.color" + name();
allele = BotanyAPI.flowerFactory.createFlowerColorAllele(uid, ordinal(), color, colorWilted, name().toLowerCase(), uid, true);
}
public String getIdent() {
return ident;
}
public static EnumFlowerColor get(int i) {
return values()[Math.max(0, i) % values().length];
}
public String getDisplayName() {
return I18n.translateToLocal("botany.color." + getName());
}
@Override
public String getName() {
return name().toLowerCase();
}
public IAlleleFlowerColor getFlowerColorAllele() {
return allele;
}
}
@@ -1,4 +1,4 @@
package binnie.botany.api;
package binnie.botany.api.genetics;
import forestry.api.genetics.ISpeciesType;
@@ -8,7 +8,7 @@ public enum EnumFlowerStage implements ISpeciesType {
POLLEN("Pollen");
public static final EnumFlowerStage[] VALUES = values();
String name;
private final String name;
EnumFlowerStage(String name) {
this.name = name;
@@ -19,9 +19,7 @@ public enum EnumFlowerStage implements ISpeciesType {
}
public static EnumFlowerStage getStage(int age) {
return age == 0
? EnumFlowerStage.SEED
: EnumFlowerStage.FLOWER;
return age == 0 ? EnumFlowerStage.SEED : EnumFlowerStage.FLOWER;
}
public String getName() {
@@ -0,0 +1,6 @@
package binnie.botany.api.genetics;
import forestry.api.genetics.IAlleleInteger;
public interface IAlleleFlowerColor extends IFlowerColor, IAlleleInteger {
}
@@ -1,4 +1,4 @@
package binnie.botany.api;
package binnie.botany.api.genetics;
import net.minecraft.world.World;
@@ -1,4 +1,4 @@
package binnie.botany.api;
package binnie.botany.api.genetics;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
@@ -10,6 +10,9 @@ import forestry.api.core.IModelManager;
import forestry.api.genetics.IAlleleProperty;
import forestry.api.genetics.IAlleleSpecies;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
public interface IAlleleFlowerSpecies extends IAlleleSpecies, IAlleleProperty<IAlleleFlowerSpecies> {
IFlowerType getType();
@@ -1,7 +1,10 @@
package binnie.botany.api;
package binnie.botany.api.genetics;
import forestry.api.genetics.IAlleleSpeciesBuilder;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
public interface IAlleleFlowerSpeciesBuilder extends IAlleleSpeciesBuilder {
@Override
IAlleleFlowerSpecies build();
@@ -1,4 +1,4 @@
package binnie.botany.api;
package binnie.botany.api.genetics;
import forestry.api.genetics.IBreedingTracker;
@@ -1,4 +1,4 @@
package binnie.botany.api;
package binnie.botany.api.genetics;
public interface IColorMix {
IFlowerColor getColorFirst();
@@ -0,0 +1,76 @@
package binnie.botany.api.genetics;
import javax.annotation.Nullable;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import forestry.api.genetics.IIndividual;
public interface IFlower extends IIndividual {
/**
* @return Flowers's genetic information.
*/
@Override
IFlowerGenome getGenome();
/**
* @return Genetic information of the flower's mate, null if unmated.
*/
@Nullable
IFlowerGenome getMate();
/**
* Mate with the given flower.
*
* @param flower the {@link IFlower} to mate this one with.
*/
void mate(IFlower flower);
/**
* Remove the mate of the flower.
*/
void removeMate();
IFlower getOffspring(World world, BlockPos pos);
/**
* @return The current age of the flower.
*/
int getAge();
/**
* Set the current age of the flower.
*/
void setAge(int age);
/**
* Age the flower.
*/
void age();
/**
* @return Maximum age of the flower.
*/
int getMaxAge();
/**
* @return true if the flower is wilted.
*/
boolean isWilted();
/**
* Set that the flower is wilted.
*/
void setWilted(boolean wilted);
/**
* @return true if the flower has flowered.
*/
boolean hasFlowered();
/**
* Set that the flower has flowered.
*/
void setFlowered(boolean flowered);
}
@@ -1,4 +1,4 @@
package binnie.botany.api;
package binnie.botany.api.genetics;
import forestry.api.genetics.IAlleleInteger;
@@ -1,4 +1,4 @@
package binnie.botany.api;
package binnie.botany.api.genetics;
import net.minecraft.item.ItemStack;
@@ -0,0 +1,14 @@
package binnie.botany.api.genetics;
import java.awt.Color;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IClassification;
public interface IFlowerFactory {
IAlleleFlowerSpeciesBuilder createSpecies(String modId, String uid, String unlocalizedName, String authority, String unlocalizedDescription, boolean isDominant, IClassification branch, String binomial, IFlowerType flowerType);
IFlowerMutationBuilder createMutation(IAlleleFlowerSpecies allele0, IAlleleFlowerSpecies allele1, IAllele[] result, int chance);
IAlleleFlowerColor createFlowerColorAllele(String uid, int id, Color color, Color colorWilted, String name, String unlocalizedName, boolean isDominant);
}
@@ -1,9 +1,12 @@
package binnie.botany.api;
package binnie.botany.api.genetics;
import forestry.api.core.EnumTemperature;
import forestry.api.genetics.EnumTolerance;
import forestry.api.genetics.IGenome;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
public interface IFlowerGenome extends IGenome {
@Override
IAlleleFlowerSpecies getPrimary();
@@ -1,4 +1,4 @@
package binnie.botany.api;
package binnie.botany.api.genetics;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
@@ -1,4 +1,4 @@
package binnie.botany.api;
package binnie.botany.api.genetics;
import forestry.api.genetics.IMutationBuilder;
@@ -1,4 +1,4 @@
package binnie.botany.api;
package binnie.botany.api.genetics;
import javax.annotation.Nullable;
import java.util.Collection;
@@ -1,4 +1,4 @@
package binnie.botany.api;
package binnie.botany.api.genetics;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
@@ -17,8 +17,6 @@ public interface IFlowerType<I extends IFlowerType<I>> extends Comparable<I> {
String getName();
int getID();
int getSections();
int ordinal();
@@ -0,0 +1,7 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
package binnie.botany.api.genetics;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
+9
View File
@@ -0,0 +1,9 @@
archivesBaseName = 'botany-' + mcversion
dependencies {
compile project(":core")
compile project(":botany-api")
compile project(":extratrees-api")
compile project(":genetics-api")
compile project(":design")
}
@@ -0,0 +1,124 @@
package binnie.botany;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.genetics.TolerancePh;
import binnie.botany.genetics.gui.analyst.FlowerAnalystPagePlugin;
import binnie.botany.gui.BotanyGUI;
import binnie.botany.network.PacketID;
import binnie.botany.proxy.Proxy;
import binnie.core.BinnieCore;
import binnie.core.Constants;
import binnie.core.gui.IBinnieGUID;
import binnie.core.modules.BlankModuleContainer;
import binnie.core.modules.BotanyModuleUIDs;
import binnie.core.modules.ModuleManager;
import binnie.core.network.BinniePacketHandler;
import binnie.core.network.IPacketID;
import binnie.core.proxy.IProxyCore;
import binnie.genetics.api.GeneticsApi;
import binnie.genetics.api.acclimatiser.IAcclimatiserManager;
import binnie.genetics.api.analyst.IAnalystManager;
@Mod(
modid = Constants.BOTANY_MOD_ID,
name = "Binnie's Botany",
acceptedMinecraftVersions = Constants.ACCEPTED_MINECRAFT_VERSIONS,
dependencies = "required-after:" + Constants.CORE_MOD_ID + ";"
+ "after:" + Constants.GENETICS_MOD_ID + ";"
+ "after:" + Constants.DESIGN_MOD_ID + ";"
)
public class Botany extends BlankModuleContainer {
public static final float AGE_CHANCE = 0.2f;
@SuppressWarnings("NullableProblems")
@Mod.Instance(Constants.BOTANY_MOD_ID)
public static Botany instance;
@SuppressWarnings("NullableProblems")
@SidedProxy(clientSide = "binnie.botany.proxy.ProxyClient", serverSide = "binnie.botany.proxy.ProxyServer")
public static Proxy proxy;
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent evt) {
super.preInit(evt);
IAnalystManager analystManager = GeneticsApi.analystManager;
if (analystManager != null) {
analystManager.registerAnalystPagePlugin(new FlowerAnalystPagePlugin());
}
if(ModuleManager.isModuleEnabled(Constants.BOTANY_MOD_ID, BotanyModuleUIDs.FLOWERS)) {
IAcclimatiserManager acclimatiserManager = GeneticsApi.acclimatiserManager;
if (acclimatiserManager != null) {
acclimatiserManager.addTolerance(EnumFlowerChromosome.HUMIDITY_TOLERANCE, acclimatiserManager.getHumidityToleranceType());
acclimatiserManager.addTolerance(EnumFlowerChromosome.TEMPERATURE_TOLERANCE, acclimatiserManager.getTemperatureToleranceType());
acclimatiserManager.addTolerance(EnumFlowerChromosome.PH_TOLERANCE, new TolerancePh());
}
}
}
@Mod.EventHandler
public void init(FMLInitializationEvent evt) {
super.init(evt);
}
@Mod.EventHandler
public void postInit(FMLPostInitializationEvent evt) {
super.postInit(evt);
}
@Override
protected void registerModules() {
}
@Override
public IBinnieGUID[] getGUIDs() {
return BotanyGUI.values();
}
@Override
public Class<?>[] getConfigs() {
return new Class[0];
}
@Override
public IPacketID[] getPacketIDs() {
return PacketID.values();
}
@Override
public IProxyCore getProxy() {
return Botany.proxy;
}
@Override
public String getChannel() {
return "BOT";
}
@Override
public String getModId() {
return Constants.BOTANY_MOD_ID;
}
@Override
protected Class<? extends BinniePacketHandler> getPacketHandler() {
return PacketHandler.class;
}
@Override
public boolean isAvailable() {
return BinnieCore.isBotanyActive();
}
public static class PacketHandler extends BinniePacketHandler {
public PacketHandler() {
super(Botany.instance);
}
}
}
@@ -10,17 +10,12 @@ import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.core.util.I18N;
public class CreativeTabBotany extends CreativeTabs {
public static CreativeTabs instance = new CreativeTabBotany();
public static final CreativeTabs INSTANCE = new CreativeTabBotany();
public CreativeTabBotany() {
super("Botany");
}
@Override
public ItemStack getIconItemStack() {
return new ItemStack(Blocks.RED_FLOWER, 1, 5);
}
@Override
@SideOnly(Side.CLIENT)
public String getTranslatedTabLabel() {
@@ -36,6 +31,6 @@ public class CreativeTabBotany extends CreativeTabs {
@Override
@SideOnly(Side.CLIENT)
public ItemStack getTabIconItem() {
return new ItemStack(Blocks.YELLOW_FLOWER);
return new ItemStack(Blocks.RED_FLOWER, 1, 5);
}
}
@@ -0,0 +1,274 @@
package binnie.botany;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
import forestry.api.climate.IClimateInfo;
import forestry.api.core.EnumTemperature;
import forestry.api.core.ForestryAPI;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumFertiliserType;
import binnie.botany.api.gardening.EnumMoisture;
import binnie.botany.api.gardening.EnumSoilType;
import binnie.botany.api.gardening.IBlockSoil;
import binnie.botany.api.gardening.IGardeningManager;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.blocks.BlockPlant;
import binnie.botany.blocks.BlockSoil;
import binnie.botany.modules.ModuleGardening;
import binnie.core.util.OreDictionaryUtil;
public class GardeningManager implements IGardeningManager {
private final Map<EnumFertiliserType, Map<ItemStack, Integer>> fertilisers = new LinkedHashMap<>();
public GardeningManager() {
for(EnumFertiliserType type : EnumFertiliserType.values()){
fertilisers.put(type, new LinkedHashMap<>());
}
}
@Override
public boolean isSoil(Block block) {
return block instanceof IBlockSoil;
}
@Override
public boolean isSoil(Item item) {
return item instanceof ItemBlock && isSoil(((ItemBlock) item).getBlock());
}
@Override
public boolean isSoil(ItemStack item) {
return isSoil(item.getItem());
}
@Override
public EnumMoisture getNaturalMoisture(World world, BlockPos pos) {
float moisture = getBiomeMoisture(world, pos);
for (int offsetX = -1; offsetX < 2; ++offsetX) {
for (int offsetY = -1; offsetY < 2; ++offsetY) {
if (offsetX != 0 || offsetY != 0) {
Block block = world.getBlockState(pos.add(offsetX, 0, offsetY)).getBlock();
if (block == Blocks.SAND) {
moisture -= 1.5;
} else if (block == Blocks.WATER) {
moisture += 1.5;
}
}
}
}
if (world.isRainingAt(pos.up())) {
moisture += 1.5;
}
for (int offsetX = -1; offsetX < 2; ++offsetX) {
for (int offsetY = -1; offsetY < 2; ++offsetY) {
if (offsetX != 0 || offsetY != 0) {
Block block = world.getBlockState(pos.add(offsetX, 0, offsetY)).getBlock();
if (block == Blocks.GRAVEL && moisture > 0.0f) {
moisture *= 0.4f;
}
}
}
}
return EnumMoisture.getFromValue(moisture);
}
@Override
public EnumAcidity getNaturalPH(World world, BlockPos pos) {
float acidity = getBiomePH(world, pos);
return EnumAcidity.getFromValue(acidity);
}
@Override
public float getBiomeMoisture(World world, BlockPos pos) {
IClimateInfo info = ForestryAPI.climateManager.getInfo(world, pos);
double humidity = info.getHumidity();
double temperature = info.getTemperature();
double moisture = 3.2 * (humidity - 0.5) - 0.4 * (1.0 + temperature + 0.5 * temperature * temperature) + 1.1 - 1.6 * (temperature - 0.9) * (temperature - 0.9) - 0.002 * (pos.getY() - 64);
return (float) ((moisture == 0.0) ? moisture : ((moisture < 0.0) ? (-Math.sqrt(moisture * moisture)) : Math.sqrt(moisture * moisture)));
}
@Override
public float getBiomePH(World world, BlockPos pos) {
IClimateInfo info = ForestryAPI.climateManager.getInfo(world, pos);
double humidity = info.getHumidity();
double temperature = info.getTemperature();
return (float) (-3.0 * (humidity - 0.5) + 0.5 * (temperature - 0.699999988079071) * (temperature - 0.699999988079071) + 0.02f * (pos.getY() - 64) - 0.15000000596046448);
}
@Override
public IBlockState getSoil(EnumSoilType soil, boolean weedKill, EnumMoisture moisture, EnumAcidity acidity) {
IBlockState blockState = getSoilBlock(soil, weedKill).getDefaultState();
return blockState.withProperty(BlockSoil.MOISTURE, moisture).withProperty(BlockSoil.ACIDITY, acidity);
}
@Override
public void plantSoil(World world, BlockPos pos, EnumSoilType soil, EnumMoisture moisture, EnumAcidity acidity) {
IBlockState blockState = getSoil(soil, false, moisture, acidity);
world.setBlockState(pos, blockState, 2);
}
public Map<EnumFertiliserType, Map<ItemStack, Integer>> getFertilisers() {
return fertilisers;
}
@Override
public Collection<ItemStack> getFertilisers(EnumFertiliserType type) {
Set<ItemStack> items = fertilisers.get(type).keySet();
return Collections.unmodifiableSet(items);
}
@Override
public boolean isFertiliser(EnumFertiliserType type, ItemStack stack) {
Collection<ItemStack> fertilisers = getFertilisers(type);
for (ItemStack fertiliser : fertilisers) {
if (!fertiliser.isEmpty() && fertiliser.isItemEqual(stack)) {
return true;
}
}
return false;
}
@Override
public void registerFertiliser(EnumFertiliserType type, ItemStack stack, int strength) {
fertilisers.get(type).put(stack, strength);
}
@Override
public int getFertiliserStrength(ItemStack stack) {
for(EnumFertiliserType type : EnumFertiliserType.values()) {
for (Map.Entry<ItemStack, Integer> entry : fertilisers.get(type).entrySet()) {
if (entry.getKey().isItemEqual(stack)) {
return entry.getValue();
}
}
}
return 1;
}
@Override
public boolean onFertiliseSoil(ItemStack heldItem, IBlockSoil soil, World world, BlockPos pos, EntityPlayer player) {
int fertiliserStrength = getFertiliserStrength(heldItem);
if (isFertiliser(EnumFertiliserType.NUTRIENT, heldItem) && soil.getType(world, pos) != EnumSoilType.FLOWERBED) {
EnumSoilType type = soil.getType(world, pos);
int next = Math.min(type.ordinal() + fertiliserStrength, 2);
if (soil.fertilise(world, pos, EnumSoilType.values()[next])) {
if(!player.capabilities.isCreativeMode) {
heldItem.shrink(1);
}
return true;
}
}
if (isFertiliser(EnumFertiliserType.ACID, heldItem) && soil.getPH(world, pos) != EnumAcidity.ACID) {
EnumAcidity pH = soil.getPH(world, pos);
int next = Math.max(pH.ordinal() - fertiliserStrength, 0);
if (soil.setPH(world, pos, EnumAcidity.values()[next])) {
if(!player.capabilities.isCreativeMode) {
heldItem.shrink(1);
}
return true;
}
}
if (isFertiliser(EnumFertiliserType.ALKALINE, heldItem) && soil.getPH(world, pos) != EnumAcidity.ALKALINE) {
EnumAcidity pH = soil.getPH(world, pos);
int next = Math.min(pH.ordinal() + fertiliserStrength, 2);
if (soil.setPH(world, pos, EnumAcidity.values()[next])) {
if(!player.capabilities.isCreativeMode) {
heldItem.shrink(1);
}
return true;
}
}
return false;
}
@Override
public boolean canTolerate(@Nullable IFlower flower, World world, BlockPos pos) {
if (flower == null) {
return false;
}
IBlockState soil = world.getBlockState(pos.down());
Biome biome = world.getBiome(pos);
EnumAcidity acidity = soil.getValue(BlockSoil.ACIDITY);
EnumMoisture moisture = soil.getValue(BlockSoil.MOISTURE);
EnumTemperature temperature = EnumTemperature.getFromValue(biome.getTemperature());
return canTolerate(flower, acidity, moisture, temperature);
}
@Override
public EnumSoilType getSoilType(World world, BlockPos pos) {
IBlockState blockState = world.getBlockState(pos);
if (blockState.getBlock() instanceof IBlockSoil) {
IBlockSoil soil = ((IBlockSoil) blockState.getBlock());
return soil.getType(world, pos);
}
return EnumSoilType.SOIL;
}
@Override
public Block getSoilBlock(EnumSoilType type) {
return getSoilBlock(type, false);
}
@Override
public Block getSoilBlock(EnumSoilType type, boolean weedKill) {
switch (type) {
case FLOWERBED:
return weedKill ? ModuleGardening.flowerbedNoWeed : ModuleGardening.flowerbed;
case LOAM:
return weedKill ? ModuleGardening.loamNoWeed : ModuleGardening.loam;
default:
return weedKill ? ModuleGardening.soilNoWeed : ModuleGardening.soil;
}
}
@Override
public boolean canTolerate(IFlower flower, EnumAcidity acidity, EnumMoisture moisture, EnumTemperature temperature) {
IFlowerGenome genome = flower.getGenome();
return genome.canTolerate(acidity) && genome.canTolerate(moisture) && genome.canTolerate(temperature);
}
@Override
public boolean isWeedkiller(ItemStack heldItem) {
return OreDictionaryUtil.hasOreName(heldItem, "weedkiller");
}
@Override
public boolean addWeedKiller(World world, BlockPos pos) {
IBlockState oldState = world.getBlockState(pos);
if (!(oldState.getBlock() instanceof IBlockSoil)) {
return false;
}
EnumSoilType type = getSoilType(world, pos);
IBlockState newState = getSoil(type, true, oldState.getValue(BlockSoil.MOISTURE), oldState.getValue(BlockSoil.ACIDITY));
boolean done = world.setBlockState(pos, newState, 2);
if (done && BlockPlant.isWeed(world, pos.up())) {
world.setBlockToAir(pos.up());
}
return done;
}
}
@@ -1,4 +1,4 @@
package binnie.botany.ceramic;
package binnie.botany.blocks;
import javax.annotation.Nullable;
import java.util.ArrayList;
@@ -28,8 +28,8 @@ import forestry.api.core.IModelManager;
import forestry.core.blocks.IColoredBlock;
import binnie.botany.CreativeTabBotany;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.core.BinnieCore;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.tile.TileCeramic;
import binnie.core.util.TileUtil;
public class BlockCeramic extends Block implements IColoredBlock, IItemModelRegister {
@@ -38,7 +38,7 @@ public class BlockCeramic extends Block implements IColoredBlock, IItemModelRegi
setHardness(1.0f);
setResistance(5.0f);
setRegistryName("ceramic");
setCreativeTab(CreativeTabBotany.instance);
setCreativeTab(CreativeTabBotany.INSTANCE);
}
@Override
@@ -50,8 +50,8 @@ public class BlockCeramic extends Block implements IColoredBlock, IItemModelRegi
}
@Override
public List<ItemStack> getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
return Collections.emptyList();
public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
}
@Override
@@ -62,7 +62,7 @@ public class BlockCeramic extends Block implements IColoredBlock, IItemModelRegi
drops = Collections.singletonList(ceramic.getStack());
}
boolean hasBeenBroken = world.setBlockToAir(pos);
if (hasBeenBroken && BinnieCore.getBinnieProxy().isSimulating(world) && drops.size() > 0 && (player == null || !player.capabilities.isCreativeMode)) {
if (hasBeenBroken && !world.isRemote && drops.size() > 0 && (player == null || !player.capabilities.isCreativeMode)) {
for (ItemStack drop : drops) {
spawnAsEntity(world, pos, drop);
}
@@ -1,4 +1,4 @@
package binnie.botany.ceramic.brick;
package binnie.botany.blocks;
import javax.annotation.Nullable;
import java.util.ArrayList;
@@ -50,11 +50,13 @@ import forestry.core.blocks.properties.UnlistedBlockAccess;
import forestry.core.blocks.properties.UnlistedBlockPos;
import forestry.core.models.BlockModelEntry;
import binnie.Constants;
import binnie.core.Constants;
import binnie.botany.CreativeTabBotany;
import binnie.botany.ceramic.TileCeramic;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.core.BinnieCore;
import binnie.botany.ceramic.brick.CeramicBrickPair;
import binnie.botany.ceramic.brick.CeramicBrickType;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.tile.TileCeramic;
import binnie.botany.tile.TileCeramicBrick;
import binnie.core.block.IMultipassBlock;
import binnie.core.models.DefaultStateMapper;
import binnie.core.models.ModelManager;
@@ -69,12 +71,12 @@ public class BlockCeramicBrick extends Block implements IMultipassBlock<CeramicB
setHardness(1.0f);
setResistance(5.0f);
setRegistryName("ceramicBrick");
setCreativeTab(CreativeTabBotany.instance);
setCreativeTab(CreativeTabBotany.INSTANCE);
}
@Override
public List<ItemStack> getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
return Collections.emptyList();
public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
}
@Override
@@ -85,7 +87,7 @@ public class BlockCeramicBrick extends Block implements IMultipassBlock<CeramicB
drops = Collections.singletonList(ceramic.getStack());
}
boolean hasBeenBroken = world.setBlockToAir(pos);
if (hasBeenBroken && BinnieCore.getBinnieProxy().isSimulating(world) && drops.size() > 0 && (player == null || !player.capabilities.isCreativeMode)) {
if (hasBeenBroken && !world.isRemote && drops.size() > 0 && (player == null || !player.capabilities.isCreativeMode)) {
for (ItemStack drop : drops) {
spawnAsEntity(world, pos, drop);
}
@@ -168,7 +170,7 @@ public class BlockCeramicBrick extends Block implements IMultipassBlock<CeramicB
public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) {
ItemStack stack = placer.getHeldItem(hand);
CeramicBrickPair pair = new CeramicBrickPair(stack);
return getDefaultState().withProperty(TYPE, pair.type);
return getDefaultState().withProperty(TYPE, pair.getType());
}
@Override
@@ -176,7 +178,7 @@ public class BlockCeramicBrick extends Block implements IMultipassBlock<CeramicB
TileCeramicBrick ceramic = TileUtil.getTile(worldIn, pos, TileCeramicBrick.class);
if (ceramic != null) {
CeramicBrickPair pair = new CeramicBrickPair(stack);
ceramic.setColors(pair.colorFirst, pair.colorSecond);
ceramic.setColors(pair.getColorFirst(), pair.getColorSecond());
}
}
@@ -233,7 +235,7 @@ public class BlockCeramicBrick extends Block implements IMultipassBlock<CeramicB
if (ceramic != null) {
return ceramic.pair();
}
return null;
return CeramicBrickPair.EMPTY;
}
@Override
@@ -247,14 +249,16 @@ public class BlockCeramicBrick extends Block implements IMultipassBlock<CeramicB
public void registerSprites(ITextureManager manager) {
TextureMap textureMap = Minecraft.getMinecraft().getTextureMapBlocks();
for (CeramicBrickType type : CeramicBrickType.VALUES) {
type.sprites = new TextureAtlasSprite[3];
TextureAtlasSprite[] sprites = new TextureAtlasSprite[3];
for (int i = 0; i < 3; ++i) {
type.sprites[i] = textureMap.registerSprite(new ResourceLocation(Constants.BOTANY_MOD_ID + ":blocks/ceramic." + type.id + "." + i));
ResourceLocation location = new ResourceLocation(Constants.BOTANY_MOD_ID + ":blocks/ceramic." + type.getId() + "." + i);
sprites[i] = textureMap.registerSprite(location);
}
type.setSprites(sprites);
}
}
private class CeramicBrickMeshDefinition implements ItemMeshDefinition {
private static class CeramicBrickMeshDefinition implements ItemMeshDefinition {
@Override
public ModelResourceLocation getModelLocation(ItemStack stack) {
return new ModelResourceLocation(Constants.BOTANY_MOD_ID + ":ceramicBrick", "inventory");
@@ -1,28 +1,28 @@
package binnie.botany.ceramic;
package binnie.botany.blocks;
import binnie.design.DesignHelper;
import binnie.design.blocks.BlockDesign;
import binnie.design.blocks.DesignBlock;
import net.minecraft.block.material.Material;
import net.minecraft.item.ItemStack;
import binnie.botany.CreativeTabBotany;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.botany.ceramic.CeramicColor;
import binnie.botany.ceramic.CeramicDesignSystem;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.core.util.I18N;
import binnie.extratrees.api.IDesign;
import binnie.extratrees.carpentry.BlockDesign;
import binnie.extratrees.carpentry.DesignBlock;
import binnie.extratrees.carpentry.ModuleCarpentry;
import binnie.design.api.IDesign;
public class BlockCeramicPatterned extends BlockDesign {
public BlockCeramicPatterned() {
super(CeramicDesignSystem.instance, Material.ROCK);
setHardness(1.0f);
setResistance(5.0f);
setCreativeTab(CreativeTabBotany.instance);
setRegistryName("ceramicPattern");
}
@Override
public ItemStack getCreativeStack(IDesign design) {
return ModuleCarpentry.getItemStack(this, CeramicColor.get(EnumFlowerColor.White), CeramicColor.get(EnumFlowerColor.Black), design);
return DesignHelper.getItemStack(this, CeramicColor.get(EnumFlowerColor.White), CeramicColor.get(EnumFlowerColor.Black), design);
}
@Override
@@ -1,320 +1,311 @@
package binnie.botany.flower;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.properties.PropertyInteger;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumBlockRenderType;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import com.mojang.authlib.GameProfile;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IStateMapperRegister;
import forestry.core.blocks.IColoredBlock;
import binnie.botany.Botany;
import binnie.botany.api.IFlower;
import binnie.botany.api.IFlowerGenome;
import binnie.botany.api.IFlowerRoot;
import binnie.botany.api.IFlowerType;
import binnie.botany.core.BotanyCore;
import binnie.botany.genetics.EnumFlowerType;
import binnie.botany.genetics.FlowerDefinition;
import binnie.botany.network.PacketID;
import binnie.core.BinnieCore;
import binnie.core.network.packet.MessageNBT;
import binnie.core.util.TileUtil;
public class BlockFlower extends BlockContainer implements IColoredBlock, IStateMapperRegister {
public static final AxisAlignedBB FLOWER_BLOCK_AABB = new AxisAlignedBB(0.3D, 0.0D, 0.3D, 0.7D, 0.6D, 0.7D);
/* PROPERTIES */
public static final PropertyFlower FLOWER = new PropertyFlower("flower", IFlowerType.class);
public static final PropertyInteger SECTION = PropertyInteger.create("section", 0, EnumFlowerType.highestSection - 1);
public static final PropertyBool FLOWERED = PropertyBool.create("flowered");
public static final PropertyBool SEED = PropertyBool.create("seed");
public BlockFlower() {
super(Material.PLANTS);
setTickRandomly(true);
setRegistryName("flower");
setSoundType(SoundType.PLANT);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityFlower();
}
@Override
@SideOnly(Side.CLIENT)
public void registerStateMapper() {
ModelLoader.setCustomStateMapper(this, new StateMapperFlower());
}
@Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
ItemStack heldItem = player.getHeldItemMainhand();
if (heldItem.isEmpty() || heldItem.getItem() != BinnieCore.getFieldKit() || !player.isSneaking()) {
return false;
}
if (world.isRemote) {
return true;
}
TileEntity tile = world.getTileEntity(pos);
if (!(tile instanceof TileEntityFlower)) {
return true;
}
TileEntityFlower tileFlower = (TileEntityFlower) tile;
IFlower flower = tileFlower.getFlower();
if (flower == null) {
return true;
}
IFlowerGenome flowerGenome = flower.getGenome();
NBTTagCompound info = new NBTTagCompound();
info.setString("Species", flowerGenome.getPrimary().getUID());
info.setString("Species2", flowerGenome.getSecondary().getUID());
info.setFloat("Age", flower.getAge() / flowerGenome.getLifespan());
info.setShort("Colour", (short) flowerGenome.getPrimaryColor().getID());
info.setShort("Colour2", (short) flowerGenome.getSecondaryColor().getID());
info.setBoolean("Wilting", flower.isWilted());
info.setBoolean("Flowered", flower.hasFlowered());
Botany.proxy.sendToPlayer(new MessageNBT(PacketID.FIELDKIT.ordinal(), info), player);
heldItem.damageItem(1, player);
return true;
}
@Override
@Nullable
public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) {
return null;
}
@Override
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) {
TileEntity tile = source.getTileEntity(pos);
if (tile instanceof TileEntityFlower) {
TileEntityFlower flower = (TileEntityFlower) tile;
if (flower.getType().getSections() > 1) {
return FULL_BLOCK_AABB;
}
}
return FLOWER_BLOCK_AABB;
}
@Override
public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World world, BlockPos pos) {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileEntityFlower) {
TileEntityFlower flower = (TileEntityFlower) tile;
if (flower.getType().getSections() > 1) {
return FULL_BLOCK_AABB.offset(pos);
}
}
return FLOWER_BLOCK_AABB.offset(pos);
}
@Override
public boolean isOpaqueCube(IBlockState state) {
return false;
}
@Override
public boolean isFullCube(IBlockState state) {
return false;
}
@Override
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) {
super.onBlockPlacedBy(world, pos, state, placer, stack);
IFlowerRoot flowerRoot = BotanyCore.getFlowerRoot();
TileEntity flower = world.getTileEntity(pos);
if (!BinnieCore.getBinnieProxy().isSimulating(world)) {
if (flower != null && flower instanceof TileEntityFlower) {
IFlower f = flowerRoot.getMember(stack);
if (f != null) {
((TileEntityFlower) flower).setRender(new TileEntityFlower.RenderInfo(f, (TileEntityFlower) flower));
}
}
return;
}
TileEntity below = world.getTileEntity(pos.down());
if (flower != null && flower instanceof TileEntityFlower) {
if (below instanceof TileEntityFlower) {
((TileEntityFlower) flower).setSection(((TileEntityFlower) below).getSection());
} else {
GameProfile owner = (placer instanceof EntityPlayer) ? ((EntityPlayer) placer).getGameProfile() : null;
((TileEntityFlower) flower).create(stack, owner);
}
}
flowerRoot.tryGrowSection(world, pos);
}
@Override
@SideOnly(Side.CLIENT)
public int colorMultiplier(IBlockState state, @Nullable IBlockAccess world, @Nullable BlockPos pos, int tintIndex) {
if (world != null && pos != null) {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileEntityFlower) {
TileEntityFlower flower = (TileEntityFlower) tile;
if (tintIndex == 0) {
return flower.getStemColour();
} else if (tintIndex == 1) {
return flower.getPrimaryColour();
}
return flower.getSecondaryColour();
}
}
return 0xffffff;
}
@Override
public boolean canPlaceBlockAt(World world, BlockPos pos) {
return super.canPlaceBlockAt(world, pos) && canBlockStay(world, pos);
}
public boolean canBlockStay(World world, BlockPos pos) {
TileEntity tile = world.getTileEntity(pos);
IBlockState downState = world.getBlockState(pos.down());
if (tile instanceof TileEntityFlower && ((TileEntityFlower) tile).getSection() > 0) {
return downState.getBlock() == Botany.flower;
}
return canPlaceBlockOn(downState.getBlock());
}
protected boolean canPlaceBlockOn(Block block) {
return block == Blocks.GRASS
|| block == Blocks.DIRT
|| block == Blocks.FARMLAND
|| BotanyCore.getGardening().isSoil(block);
}
@Override
@SideOnly(Side.CLIENT)
public EnumBlockRenderType getRenderType(IBlockState state) {
return EnumBlockRenderType.MODEL;
}
@Override
@SideOnly(Side.CLIENT)
public EnumOffsetType getOffsetType() {
return EnumOffsetType.XZ;
}
@Override
@SideOnly(Side.CLIENT)
public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) {
TileEntityFlower flower = TileUtil.getTile(world, pos, TileEntityFlower.class);
if (flower != null && flower.getType() != null) {
state = state.withProperty(FLOWER, flower.getType());
state = state.withProperty(FLOWERED, flower.isFlowered());
state = state.withProperty(SECTION, flower.getRenderSection());
state = state.withProperty(SEED, flower.getAge() == 0);
} else {
state = state.withProperty(FLOWER, FlowerDefinition.Dandelion.getSpecies().getType());
state = state.withProperty(FLOWERED, false);
state = state.withProperty(SEED, false);
}
return state;
}
@Override
protected BlockStateContainer createBlockState() {
return new BlockStateContainer(this, FLOWER, FLOWERED, SECTION, SEED);
}
@Override
public int getMetaFromState(IBlockState state) {
return 0;
}
@Override
public BlockRenderLayer getBlockLayer() {
return BlockRenderLayer.CUTOUT;
}
@Override
public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) {
checkAndDropBlock(worldIn, pos);
TileEntity tile = worldIn.getTileEntity(pos);
if (tile instanceof TileEntityFlower) {
TileEntityFlower flower = (TileEntityFlower) tile;
if (flower.getSection() == 0 && flower.getFlower() != null && flower.getFlower().getAge() > 0 && flower.getFlower().getGenome().getPrimary().getType().getSections() > 1 && worldIn.getBlockState(pos.up()).getBlock() != Botany.flower) {
dropBlockAsItem(worldIn, pos, worldIn.getBlockState(pos), 0);
worldIn.setBlockToAir(pos);
}
}
}
@Override
public void updateTick(World world, BlockPos pos, IBlockState state, Random rand) {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileEntityFlower) {
((TileEntityFlower) tile).randomUpdate(rand);
checkAndDropBlock(world, pos);
return;
}
world.setBlockToAir(pos);
}
protected void checkAndDropBlock(World world, BlockPos pos) {
if (!canBlockStay(world, pos)) {
dropBlockAsItem(world, pos, world.getBlockState(pos), 0);
world.setBlockToAir(pos);
}
}
@Override
public NonNullList<ItemStack> getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
NonNullList<ItemStack> drops = NonNullList.create();
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileEntityFlower && ((TileEntityFlower) tile).getSection() == 0) {
ItemStack flower = ((TileEntityFlower) tile).getItemStack();
if (!flower.isEmpty()) {
drops.add(flower);
}
}
return drops;
}
@Override
public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) {
List<ItemStack> drops = getDrops(world, pos, world.getBlockState(pos), 0);
boolean hasBeenBroken = world.setBlockToAir(pos);
if (hasBeenBroken && BinnieCore.getBinnieProxy().isSimulating(world) && drops.size() > 0 && (player == null || !player.capabilities.isCreativeMode)) {
for (ItemStack drop : drops) {
spawnAsEntity(world, pos, drop);
}
}
return hasBeenBroken;
}
}
package binnie.botany.blocks;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Random;
import binnie.botany.tile.FlowerRenderInfo;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.properties.PropertyInteger;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumBlockRenderType;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import com.mojang.authlib.GameProfile;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IStateMapperRegister;
import forestry.core.blocks.IColoredBlock;
import binnie.botany.Botany;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.api.genetics.IFlowerRoot;
import binnie.botany.api.genetics.IFlowerType;
import binnie.botany.blocks.properties.PropertyFlower;
import binnie.botany.core.BotanyCore;
import binnie.botany.genetics.EnumFlowerType;
import binnie.botany.genetics.FlowerDefinition;
import binnie.botany.models.StateMapperFlower;
import binnie.botany.modules.ModuleFlowers;
import binnie.botany.network.PacketID;
import binnie.botany.tile.TileEntityFlower;
import binnie.core.BinnieCore;
import binnie.core.network.packet.MessageNBT;
import binnie.core.util.TileUtil;
public class BlockFlower extends BlockContainer implements IColoredBlock, IStateMapperRegister {
public static final AxisAlignedBB FLOWER_BLOCK_AABB = new AxisAlignedBB(0.3D, 0.0D, 0.3D, 0.7D, 0.6D, 0.7D);
/* PROPERTIES */
public static final PropertyFlower FLOWER = new PropertyFlower("flower", IFlowerType.class);
public static final PropertyInteger SECTION = PropertyInteger.create("section", 0, EnumFlowerType.highestSection - 1);
public static final PropertyBool FLOWERED = PropertyBool.create("flowered");
public static final PropertyBool SEED = PropertyBool.create("seed");
public BlockFlower() {
super(Material.PLANTS);
setTickRandomly(true);
setRegistryName("flower");
setSoundType(SoundType.PLANT);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityFlower();
}
@Override
@SideOnly(Side.CLIENT)
public void registerStateMapper() {
ModelLoader.setCustomStateMapper(this, new StateMapperFlower());
}
@Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
ItemStack heldItem = player.getHeldItemMainhand();
if (heldItem.isEmpty() || heldItem.getItem() != BinnieCore.getFieldKit() || !player.isSneaking()) {
return false;
}
if (world.isRemote) {
return true;
}
TileEntity tile = world.getTileEntity(pos);
if (!(tile instanceof TileEntityFlower)) {
return true;
}
TileEntityFlower tileFlower = (TileEntityFlower) tile;
IFlower flower = tileFlower.getFlower();
if (flower == null) {
return true;
}
IFlowerGenome flowerGenome = flower.getGenome();
NBTTagCompound info = new NBTTagCompound();
info.setString("Species", flowerGenome.getPrimary().getUID());
info.setString("Species2", flowerGenome.getSecondary().getUID());
info.setFloat("Age", flower.getAge() / flowerGenome.getLifespan());
info.setShort("Colour", (short) flowerGenome.getPrimaryColor().getID());
info.setShort("Colour2", (short) flowerGenome.getSecondaryColor().getID());
info.setBoolean("Wilting", flower.isWilted());
info.setBoolean("Flowered", flower.hasFlowered());
Botany.proxy.sendToPlayer(new MessageNBT(PacketID.FIELDKIT.ordinal(), info), player);
heldItem.damageItem(1, player);
return true;
}
@Override
@Nullable
public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) {
return null;
}
@Override
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) {
TileEntity tile = source.getTileEntity(pos);
if (tile instanceof TileEntityFlower) {
TileEntityFlower flower = (TileEntityFlower) tile;
if (flower.getType().getSections() > 1) {
return FULL_BLOCK_AABB;
}
}
return FLOWER_BLOCK_AABB.offset(getOffset(state, source, pos));
}
@Override
public boolean isOpaqueCube(IBlockState state) {
return false;
}
@Override
public boolean isFullCube(IBlockState state) {
return false;
}
@Override
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) {
super.onBlockPlacedBy(world, pos, state, placer, stack);
IFlowerRoot flowerRoot = BotanyCore.getFlowerRoot();
TileEntity flower = world.getTileEntity(pos);
if (!!world.isRemote) {
if (flower != null && flower instanceof TileEntityFlower) {
IFlower f = flowerRoot.getMember(stack);
if (f != null) {
((TileEntityFlower) flower).setRender(new FlowerRenderInfo(f, (TileEntityFlower) flower));
}
}
return;
}
TileEntity below = world.getTileEntity(pos.down());
if (flower != null && flower instanceof TileEntityFlower) {
if (below instanceof TileEntityFlower) {
((TileEntityFlower) flower).setSection(((TileEntityFlower) below).getSection());
} else {
GameProfile owner = (placer instanceof EntityPlayer) ? ((EntityPlayer) placer).getGameProfile() : null;
((TileEntityFlower) flower).create(stack, owner);
}
}
flowerRoot.tryGrowSection(world, pos);
}
@Override
@SideOnly(Side.CLIENT)
public int colorMultiplier(IBlockState state, @Nullable IBlockAccess world, @Nullable BlockPos pos, int tintIndex) {
if (world != null && pos != null) {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileEntityFlower) {
TileEntityFlower flower = (TileEntityFlower) tile;
if (tintIndex == 0) {
return flower.getStemColour();
} else if (tintIndex == 1) {
return flower.getPrimaryColour();
}
return flower.getSecondaryColour();
}
}
return 0xffffff;
}
@Override
public boolean canPlaceBlockAt(World world, BlockPos pos) {
return super.canPlaceBlockAt(world, pos) && canBlockStay(world, pos);
}
public boolean canBlockStay(World world, BlockPos pos) {
TileEntity tile = world.getTileEntity(pos);
IBlockState downState = world.getBlockState(pos.down());
if (tile instanceof TileEntityFlower && ((TileEntityFlower) tile).getSection() > 0) {
return downState.getBlock() == ModuleFlowers.flower;
}
return canPlaceBlockOn(downState.getBlock());
}
protected boolean canPlaceBlockOn(Block block) {
return block == Blocks.GRASS
|| block == Blocks.DIRT
|| block == Blocks.FARMLAND
|| BotanyCore.getGardening().isSoil(block);
}
@Override
@SideOnly(Side.CLIENT)
public EnumBlockRenderType getRenderType(IBlockState state) {
return EnumBlockRenderType.MODEL;
}
@Override
@SideOnly(Side.CLIENT)
public EnumOffsetType getOffsetType() {
return EnumOffsetType.XZ;
}
@Override
@SideOnly(Side.CLIENT)
public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) {
TileEntityFlower flower = TileUtil.getTile(world, pos, TileEntityFlower.class);
if (flower != null && flower.getType() != null) {
state = state.withProperty(FLOWER, flower.getType());
state = state.withProperty(FLOWERED, flower.isFlowered());
state = state.withProperty(SECTION, flower.getRenderSection());
state = state.withProperty(SEED, flower.getAge() == 0);
} else {
state = state.withProperty(FLOWER, FlowerDefinition.Dandelion.getSpecies().getType());
state = state.withProperty(FLOWERED, false);
state = state.withProperty(SEED, false);
}
return state;
}
@Override
protected BlockStateContainer createBlockState() {
return new BlockStateContainer(this, FLOWER, FLOWERED, SECTION, SEED);
}
@Override
public int getMetaFromState(IBlockState state) {
return 0;
}
@Override
public BlockRenderLayer getBlockLayer() {
return BlockRenderLayer.CUTOUT;
}
@Override
public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) {
checkAndDropBlock(worldIn, pos);
TileEntity tile = worldIn.getTileEntity(pos);
if (tile instanceof TileEntityFlower) {
TileEntityFlower flower = (TileEntityFlower) tile;
if (flower.getSection() == 0 && flower.getFlower() != null && flower.getFlower().getAge() > 0 && flower.getFlower().getGenome().getPrimary().getType().getSections() > 1 && worldIn.getBlockState(pos.up()).getBlock() != ModuleFlowers.flower) {
dropBlockAsItem(worldIn, pos, worldIn.getBlockState(pos), 0);
worldIn.setBlockToAir(pos);
}
}
}
@Override
public void updateTick(World world, BlockPos pos, IBlockState state, Random rand) {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileEntityFlower) {
((TileEntityFlower) tile).randomUpdate(rand);
checkAndDropBlock(world, pos);
return;
}
world.setBlockToAir(pos);
}
protected void checkAndDropBlock(World world, BlockPos pos) {
if (!canBlockStay(world, pos)) {
dropBlockAsItem(world, pos, world.getBlockState(pos), 0);
world.setBlockToAir(pos);
}
}
@Override
public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileEntityFlower && ((TileEntityFlower) tile).getSection() == 0) {
ItemStack flower = ((TileEntityFlower) tile).getItemStack();
if (!flower.isEmpty()) {
drops.add(flower);
}
}
}
@Override
public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) {
List<ItemStack> drops = getDrops(world, pos, world.getBlockState(pos), 0);
boolean hasBeenBroken = world.setBlockToAir(pos);
if (hasBeenBroken && !world.isRemote && drops.size() > 0 && (player == null || !player.capabilities.isCreativeMode)) {
for (ItemStack drop : drops) {
spawnAsEntity(world, pos, drop);
}
}
return hasBeenBroken;
}
}
@@ -1,7 +1,5 @@
package binnie.botany.gardening;
package binnie.botany.blocks;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import net.minecraft.block.Block;
@@ -25,8 +23,8 @@ import forestry.api.core.IItemModelRegister;
import forestry.api.core.IModelManager;
import binnie.botany.CreativeTabBotany;
import binnie.botany.api.EnumSoilType;
import binnie.botany.api.IBlockSoil;
import binnie.botany.api.gardening.EnumSoilType;
import binnie.botany.api.gardening.IBlockSoil;
import binnie.botany.core.BotanyCore;
public class BlockPlant extends BlockBush implements IItemModelRegister {
@@ -34,7 +32,7 @@ public class BlockPlant extends BlockBush implements IItemModelRegister {
public BlockPlant() {
setRegistryName("plant");
setCreativeTab(CreativeTabBotany.instance);
setCreativeTab(CreativeTabBotany.INSTANCE);
setTickRandomly(true);
setSoundType(SoundType.PLANT);
}
@@ -52,10 +50,9 @@ public class BlockPlant extends BlockBush implements IItemModelRegister {
@Override
@SideOnly(Side.CLIENT)
public void registerModel(Item item, IModelManager manager) {
int index = 0;
for (PlantType type : PlantType.values()) {
manager.registerItemModel(item, index, type.getName());
index++;
for (int i = 0;i < PlantType.values().length;i++) {
PlantType type = PlantType.getType(i);
manager.registerItemModel(item, i, type.getName());
}
}
@@ -71,12 +68,12 @@ public class BlockPlant extends BlockBush implements IItemModelRegister {
@Override
public IBlockState getStateFromMeta(int meta) {
return getDefaultState().withProperty(PLANT_TYPE, PlantType.values()[meta]);
return getDefaultState().withProperty(PLANT_TYPE, PlantType.getType(meta));
}
@Override
public List<ItemStack> getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
return new ArrayList<>();
public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
}
@Override
@@ -1,4 +1,4 @@
package binnie.botany.gardening;
package binnie.botany.blocks;
import javax.annotation.Nullable;
import java.util.Random;
@@ -29,14 +29,18 @@ import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IItemModelRegister;
import forestry.api.core.IModelManager;
import binnie.botany.Botany;
import binnie.core.Constants;
import binnie.botany.CreativeTabBotany;
import binnie.botany.api.EnumAcidity;
import binnie.botany.api.EnumMoisture;
import binnie.botany.api.EnumSoilType;
import binnie.botany.api.IBlockSoil;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
import binnie.botany.api.gardening.EnumSoilType;
import binnie.botany.api.gardening.IBlockSoil;
import binnie.botany.core.BotanyCore;
import binnie.core.modules.BotanyModuleUIDs;
import binnie.botany.modules.ModuleFlowers;
import binnie.botany.modules.ModuleGardening;
import binnie.core.util.I18N;
import binnie.core.modules.ModuleManager;
public class BlockSoil extends Block implements IBlockSoil, IItemModelRegister {
public static final PropertyEnum<EnumMoisture> MOISTURE = PropertyEnum.create("moisture", EnumMoisture.class);
@@ -50,7 +54,7 @@ public class BlockSoil extends Block implements IBlockSoil, IItemModelRegister {
this.type = type;
this.weedKilled = weedKilled;
setUnlocalizedName("botany.soil." + type.getName());
setCreativeTab(CreativeTabBotany.instance);
setCreativeTab(CreativeTabBotany.INSTANCE);
setRegistryName(blockName);
setTickRandomly(true);
setLightOpacity(255);
@@ -222,7 +226,7 @@ public class BlockSoil extends Block implements IBlockSoil, IItemModelRegister {
if (!world.isAirBlock(pos)) {
return;
}
world.setBlockState(pos, Botany.gardening().plant.getStateFromMeta(PlantType.WEEDS.ordinal()), 2);
world.setBlockState(pos, ModuleGardening.plant.getStateFromMeta(PlantType.WEEDS.ordinal()), 2);
}
}
@@ -257,7 +261,8 @@ public class BlockSoil extends Block implements IBlockSoil, IItemModelRegister {
return false;
}
IBlockState old = world.getBlockState(pos);
return world.setBlockState(pos, BotanyCore.getGardening().getSoilBlock(maxLevel, weedKilled).getDefaultState().withProperty(ACIDITY, old.getValue(ACIDITY)).withProperty(MOISTURE, old.getValue(MOISTURE)), 2);
IBlockState newState = BotanyCore.getGardening().getSoil(maxLevel, weedKilled, old.getValue(MOISTURE), old.getValue(ACIDITY));
return world.setBlockState(pos, newState, 2);
}
@Override
@@ -267,7 +272,8 @@ public class BlockSoil extends Block implements IBlockSoil, IItemModelRegister {
return false;
}
IBlockState old = world.getBlockState(pos);
return world.setBlockState(pos, BotanyCore.getGardening().getSoilBlock(minLevel, weedKilled).getDefaultState().withProperty(ACIDITY, old.getValue(ACIDITY)).withProperty(MOISTURE, old.getValue(MOISTURE)), 2);
IBlockState newState = BotanyCore.getGardening().getSoil(minLevel, weedKilled, old.getValue(MOISTURE), old.getValue(ACIDITY));
return world.setBlockState(pos, newState, 2);
}
@Override
@@ -293,11 +299,13 @@ public class BlockSoil extends Block implements IBlockSoil, IItemModelRegister {
@Override
public boolean canSustainPlant(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing direction, IPlantable plantable) {
IBlockState plant = plantable.getPlant(world, pos.up());
if (plant.getBlock() == Botany.flower) {
return true;
if(ModuleManager.isModuleEnabled(Constants.BOTANY_MOD_ID, BotanyModuleUIDs.FLOWERS)) {
if (plant.getBlock() == ModuleFlowers.flower) {
return true;
}
}
if (plant.getBlock() == Botany.gardening().plant) {
if (plant.getBlock() == ModuleGardening.plant) {
return !weedKilled || !BlockPlant.isWeed(world, pos);
}
return world instanceof World && Blocks.DIRT.canSustainPlant(state, world, pos, direction, plantable);
@@ -1,8 +1,7 @@
package binnie.botany.ceramic;
package binnie.botany.blocks;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
@@ -36,7 +35,7 @@ import forestry.api.core.IModelManager;
import forestry.core.blocks.IColoredBlock;
import binnie.botany.CreativeTabBotany;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.core.block.BlockMetadata;
import binnie.core.block.IBlockMetadata;
import binnie.core.block.TileEntityMetadata;
@@ -45,7 +44,7 @@ import binnie.core.util.I18N;
public class BlockStainedGlass extends Block implements IBlockMetadata, IColoredBlock, IItemModelRegister {
public BlockStainedGlass() {
super(Material.GLASS);
setCreativeTab(CreativeTabBotany.instance);
setCreativeTab(CreativeTabBotany.INSTANCE);
setRegistryName("stained");
setSoundType(SoundType.GLASS);
setHardness(0.3F);
@@ -106,8 +105,8 @@ public class BlockStainedGlass extends Block implements IBlockMetadata, IColored
}
@Override
public List<ItemStack> getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
return Collections.emptyList();
public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
}
@Override
@@ -1,9 +1,9 @@
package binnie.botany.gardening;
package binnie.botany.blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IStringSerializable;
import binnie.botany.Botany;
import binnie.botany.modules.ModuleGardening;
public enum PlantType implements IStringSerializable {
WEEDS("weeds", true),
@@ -12,8 +12,8 @@ public enum PlantType implements IStringSerializable {
DEAD_FLOWER("dead_flower"),
DECAYING_FLOWER("decaying_flower");
String name;
boolean isWeed;
private final String name;
private final boolean isWeed;
PlantType(String name) {
this(name, false);
@@ -24,12 +24,15 @@ public enum PlantType implements IStringSerializable {
this.isWeed = isWeed;
}
public static PlantType get(int id) {
return values()[id % values().length];
public static PlantType getType(int meta){
if(meta >= values().length){
meta = values().length-1;
}
return values()[meta];
}
public ItemStack get() {
return new ItemStack(Botany.gardening().plant, 1, ordinal());
return new ItemStack(ModuleGardening.plant, 1, ordinal());
}
public boolean isWeed() {
@@ -1,7 +1,7 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.flower;
package binnie.botany.blocks;
import javax.annotation.ParametersAreNonnullByDefault;
@@ -1,4 +1,4 @@
package binnie.botany.flower;
package binnie.botany.blocks.properties;
import com.google.common.base.Optional;
@@ -11,8 +11,8 @@ import net.minecraft.block.properties.PropertyHelper;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IAllele;
import binnie.botany.api.IAlleleFlowerSpecies;
import binnie.botany.api.IFlowerType;
import binnie.botany.api.genetics.IAlleleFlowerSpecies;
import binnie.botany.api.genetics.IFlowerType;
public class PropertyFlower<I extends IFlowerType<I>> extends PropertyHelper<I> {
public PropertyFlower(String name, Class<I> flowerTypeClass) {
@@ -0,0 +1,9 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.blocks.properties;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -5,10 +5,10 @@ import java.util.Map;
import net.minecraft.item.ItemStack;
import binnie.botany.Botany;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.modules.ModuleCeramic;
import binnie.core.block.TileEntityMetadata;
import binnie.extratrees.api.IDesignMaterial;
import binnie.design.api.IDesignMaterial;
public class CeramicColor implements IDesignMaterial {
private final static Map<EnumFlowerColor, CeramicColor> map = new LinkedHashMap<>();
@@ -19,7 +19,7 @@ public class CeramicColor implements IDesignMaterial {
}
}
EnumFlowerColor color;
private final EnumFlowerColor color;
CeramicColor(EnumFlowerColor color) {
this.color = color;
@@ -31,7 +31,7 @@ public class CeramicColor implements IDesignMaterial {
@Override
public ItemStack getStack() {
return TileEntityMetadata.getItemStack(Botany.gardening().ceramic, color.ordinal());
return TileEntityMetadata.getItemStack(ModuleCeramic.ceramic, color.ordinal());
}
@Override
@@ -48,4 +48,8 @@ public class CeramicColor implements IDesignMaterial {
public int getColour() {
return color.getFlowerColorAllele().getColor(false);
}
public int getMaterialIndex() {
return color.ordinal();
}
}
@@ -15,24 +15,22 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.Botany;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.botany.items.BotanyItems;
import binnie.core.AbstractMod;
import binnie.extratrees.api.IDesignMaterial;
import binnie.extratrees.api.IDesignSystem;
import binnie.extratrees.api.IPattern;
import binnie.extratrees.carpentry.DesignerManager;
import binnie.extratrees.carpentry.EnumPattern;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.items.CeramicItems;
import binnie.botany.modules.ModuleCeramic;
import binnie.design.EnumPattern;
import binnie.design.api.IDesignMaterial;
import binnie.design.api.IDesignSystem;
import binnie.design.api.IPattern;
public class CeramicDesignSystem implements IDesignSystem {
public static CeramicDesignSystem instance = new CeramicDesignSystem();
Map<Integer, TextureAtlasSprite> primary;
Map<Integer, TextureAtlasSprite> secondary;
public static final CeramicDesignSystem instance = new CeramicDesignSystem();
private final Map<Integer, TextureAtlasSprite> primary;
private final Map<Integer, TextureAtlasSprite> secondary;
CeramicDesignSystem() {
primary = new HashMap<>();
secondary = new HashMap<>();
DesignerManager.instance.registerDesignSystem(this);
}
@Override
@@ -52,7 +50,7 @@ public class CeramicDesignSystem implements IDesignSystem {
@Override
public int getMaterialIndex(IDesignMaterial id) {
return ((CeramicColor) id).color.ordinal();
return ((CeramicColor) id).getMaterialIndex();
}
public String getTexturePath() {
@@ -63,8 +61,9 @@ public class CeramicDesignSystem implements IDesignSystem {
@Nullable
@SideOnly(Side.CLIENT)
public TextureAtlasSprite getPrimarySprite(IPattern pattern) {
if (pattern instanceof EnumPattern) {
return primary.get(((EnumPattern) pattern).ordinal());
int index = pattern.getIndex();
if (index >= 0 && index < primary.size()) {
return primary.get(index);
}
return null;
}
@@ -73,8 +72,9 @@ public class CeramicDesignSystem implements IDesignSystem {
@Nullable
@SideOnly(Side.CLIENT)
public TextureAtlasSprite getSecondarySprite(IPattern pattern) {
if (pattern instanceof EnumPattern) {
return secondary.get(((EnumPattern) pattern).ordinal());
int index = pattern.getIndex();
if (index >= 0 && index < secondary.size()) {
return secondary.get(index);
}
return null;
}
@@ -84,26 +84,26 @@ public class CeramicDesignSystem implements IDesignSystem {
public void registerSprites() {
TextureMap textureMap = Minecraft.getMinecraft().getTextureMapBlocks();
for (EnumPattern pattern : EnumPattern.values()) {
ResourceLocation primaryLocation = new ResourceLocation(getMod().getModID(), getTexturePath() + "/" + pattern.toString().toLowerCase() + ".0");
ResourceLocation secondaryLocation = new ResourceLocation(getMod().getModID(), getTexturePath() + "/" + pattern.toString().toLowerCase() + ".1");
primary.put(pattern.ordinal(), textureMap.registerSprite(primaryLocation));
secondary.put(pattern.ordinal(), textureMap.registerSprite(secondaryLocation));
ResourceLocation primaryLocation = new ResourceLocation(getModId(), getTexturePath() + "/" + pattern.toString().toLowerCase() + ".0");
ResourceLocation secondaryLocation = new ResourceLocation(getModId(), getTexturePath() + "/" + pattern.toString().toLowerCase() + ".1");
primary.put(pattern.getIndex(), textureMap.registerSprite(primaryLocation));
secondary.put(pattern.getIndex(), textureMap.registerSprite(secondaryLocation));
}
}
public AbstractMod getMod() {
return Botany.instance;
public String getModId() {
return Botany.instance.getModId();
}
@Override
public ItemStack getAdhesive() {
return BotanyItems.MORTAR.get(1);
return CeramicItems.MORTAR.get(1);
}
@Override
@Nullable
public IDesignMaterial getMaterial(ItemStack itemStack) {
return (itemStack.getItem() == Item.getItemFromBlock(Botany.gardening().ceramic))
return (itemStack.getItem() == Item.getItemFromBlock(ModuleCeramic.ceramic))
? getMaterial(itemStack.getItemDamage())
: null;
}
@@ -10,20 +10,20 @@ import net.minecraft.nbt.NBTTagInt;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.Botany;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.modules.ModuleCeramic;
import binnie.core.util.I18N;
public class CeramicBrickPair {
public static final CeramicBrickPair EMPTY = new CeramicBrickPair(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkSeaGreen, CeramicBrickType.TILE);
public final EnumFlowerColor colorFirst;
public final EnumFlowerColor colorSecond;
private final EnumFlowerColor colorFirst;
private final EnumFlowerColor colorSecond;
public CeramicBrickType type;
public int ordinal;
private CeramicBrickType type;
private int ordinal;
CeramicBrickPair(EnumFlowerColor colorFirst, EnumFlowerColor colorSecond, CeramicBrickType type) {
public CeramicBrickPair(EnumFlowerColor colorFirst, EnumFlowerColor colorSecond, CeramicBrickType type) {
this.colorFirst = colorFirst;
this.colorSecond = colorSecond;
this.type = type;
@@ -53,7 +53,7 @@ public class CeramicBrickPair {
}
public ItemStack getStack(int i) {
ItemStack stack = new ItemStack(Botany.gardening().ceramicBrick, i);
ItemStack stack = new ItemStack(ModuleCeramic.ceramicBrick, i);
stack.setTagInfo("id", new NBTTagInt(ordinal()));
return stack;
}
@@ -63,7 +63,7 @@ public class CeramicBrickPair {
if (type.canDouble() && colorSecond != colorFirst) {
name = name + " & " + colorSecond.getFlowerColorAllele().getColorName();
}
return I18N.localise("botany.ceramic.type." + type.id + ".name", name);
return I18N.localise("botany.ceramic.type." + type.getId() + ".name", name);
}
public int ordinal() {
@@ -72,7 +72,7 @@ public class CeramicBrickPair {
@SideOnly(Side.CLIENT)
public TextureAtlasSprite getSprite(int pass) {
TextureAtlasSprite[] sprites = type.sprites;
TextureAtlasSprite[] sprites = type.getSprites();
Preconditions.checkState(sprites != null, "Sprites have not been registered.");
return sprites[pass];
}
@@ -87,4 +87,20 @@ public class CeramicBrickPair {
return obj instanceof CeramicBrickPair
&& ((CeramicBrickPair) obj).type == type;
}
public EnumFlowerColor getColorFirst() {
return colorFirst;
}
public EnumFlowerColor getColorSecond() {
return colorSecond;
}
public CeramicBrickType getType() {
return type;
}
public void setType(CeramicBrickType type) {
this.type = type;
}
}
@@ -11,9 +11,9 @@ import net.minecraft.util.IStringSerializable;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.Botany;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.botany.items.BotanyItems;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.items.CeramicItems;
import binnie.botany.modules.ModuleCeramic;
import binnie.core.block.TileEntityMetadata;
public enum CeramicBrickType implements IStringSerializable {
@@ -30,7 +30,7 @@ public enum CeramicBrickType implements IStringSerializable {
if (isMortar(stack)) {
++mortars;
} else {
if (stack.getItem() != Item.getItemFromBlock(Botany.gardening().ceramic)) {
if (stack.getItem() != Item.getItemFromBlock(ModuleCeramic.ceramic)) {
return ItemStack.EMPTY;
}
++blocks;
@@ -69,8 +69,8 @@ public enum CeramicBrickType implements IStringSerializable {
if (stacks.size() == 1) {
ItemStack stack3 = stacks.get(0);
CeramicBrickPair type3 = new CeramicBrickPair(stack3);
if (type3.type == CeramicBrickType.VERTICAL_LARGE_BRICK) {
type3.type = this;
if (type3.getType() == CeramicBrickType.VERTICAL_LARGE_BRICK) {
type3.setType(this);
return type3.getStack(1);
}
return ItemStack.EMPTY;
@@ -82,14 +82,14 @@ public enum CeramicBrickType implements IStringSerializable {
int a = 0;
int b = 0;
for (ItemStack stack4 : stacks) {
if (stack4.getItem() != Item.getItemFromBlock(Botany.gardening().ceramicBrick)) {
if (stack4.getItem() != Item.getItemFromBlock(ModuleCeramic.ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type4 = new CeramicBrickPair(stack4);
if (type4.type != CeramicBrickType.TILE) {
if (type4.getType() != CeramicBrickType.TILE) {
return ItemStack.EMPTY;
}
int color5 = type4.colorFirst.ordinal();
int color5 = type4.getColorFirst().ordinal();
if (colors[0] == -1) {
colors[0] = color5;
a++;
@@ -122,14 +122,14 @@ public enum CeramicBrickType implements IStringSerializable {
int altCounter = 0;
for (ItemStack stack2 : stacks) {
int alt = (altCounter != 0 && altCounter != 3) ? 1 : 0;
if (stack2.getItem() != Item.getItemFromBlock(Botany.gardening().ceramicBrick)) {
if (stack2.getItem() != Item.getItemFromBlock(ModuleCeramic.ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type = new CeramicBrickPair(stack2);
if (type.type != CeramicBrickType.TILE) {
if (type.getType() != CeramicBrickType.TILE) {
return ItemStack.EMPTY;
}
int color2 = type.colorFirst.ordinal();
int color2 = type.getColorFirst().ordinal();
if (colors[alt] == -1) {
colors[alt] = color2;
} else if (colors[alt] != color2) {
@@ -148,15 +148,15 @@ public enum CeramicBrickType implements IStringSerializable {
}
int[] colors = {-1, -1};
for (ItemStack stack2 : stacks) {
if (stack2.getItem() != Item.getItemFromBlock(Botany.gardening().ceramicBrick)) {
if (stack2.getItem() != Item.getItemFromBlock(ModuleCeramic.ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type2 = new CeramicBrickPair(stack2);
if (type2.type != CeramicBrickType.SPLIT) {
if (type2.getType() != CeramicBrickType.SPLIT) {
return ItemStack.EMPTY;
}
int color3 = type2.colorFirst.ordinal();
int color4 = type2.colorSecond.ordinal();
int color3 = type2.getColorFirst().ordinal();
int color4 = type2.getColorSecond().ordinal();
if (colors[0] == -1) {
colors[0] = color3;
colors[1] = color4;
@@ -177,21 +177,21 @@ public enum CeramicBrickType implements IStringSerializable {
}
int[] colors = {-1, -1};
for (ItemStack stack2 : stacks) {
if (stack2.getItem() != Item.getItemFromBlock(Botany.gardening().ceramicBrick)) {
if (stack2.getItem() != Item.getItemFromBlock(ModuleCeramic.ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type2 = new CeramicBrickPair(stack2);
if (type2.isTwoColors()) {
return ItemStack.EMPTY;
}
int color3 = type2.colorFirst.ordinal();
if (type2.type == CeramicBrickType.SPLIT) {
int color3 = type2.getColorFirst().ordinal();
if (type2.getType() == CeramicBrickType.SPLIT) {
if (colors[1] != -1) {
return ItemStack.EMPTY;
}
colors[1] = color3;
} else {
if (type2.type != CeramicBrickType.CHEQUERED) {
if (type2.getType() != CeramicBrickType.CHEQUERED) {
return ItemStack.EMPTY;
}
if (colors[0] == -1) {
@@ -200,7 +200,7 @@ public enum CeramicBrickType implements IStringSerializable {
return ItemStack.EMPTY;
}
}
int color4 = type2.colorSecond.ordinal();
int color4 = type2.getColorSecond().ordinal();
}
if (colors[0] == -1 || colors[1] == -1) {
return ItemStack.EMPTY;
@@ -229,11 +229,11 @@ public enum CeramicBrickType implements IStringSerializable {
public static final CeramicBrickType[] VALUES = values();
public String id;
private final String id;
@SideOnly(Side.CLIENT)
@Nullable
TextureAtlasSprite[] sprites;
private TextureAtlasSprite[] sprites;
CeramicBrickType(String id) {
this.id = id;
@@ -255,18 +255,18 @@ public enum CeramicBrickType implements IStringSerializable {
}
ItemStack stack5 = stacks.get(0);
CeramicBrickPair type = new CeramicBrickPair(stack5);
if (type.type == CeramicBrickType.LARGE_BRICK) {
type.type = CeramicBrickType.VERTICAL_LARGE_BRICK;
if (type.getType() == CeramicBrickType.LARGE_BRICK) {
type.setType(CeramicBrickType.VERTICAL_LARGE_BRICK);
return type.getStack(1);
}
if (type.type == CeramicBrickType.BRICK) {
type.type = CeramicBrickType.VERTICAL_BRICK;
if (type.getType() == CeramicBrickType.BRICK) {
type.setType(CeramicBrickType.VERTICAL_BRICK);
return type.getStack(1);
}
if (type.type == CeramicBrickType.STRIPE_BRICK) {
type.type = CeramicBrickType.VERTICAL_STRIPE_BRICK;
if (type.getType() == CeramicBrickType.STRIPE_BRICK) {
type.setType(CeramicBrickType.VERTICAL_STRIPE_BRICK);
return type.getStack(1);
}
return ItemStack.EMPTY;
@@ -276,13 +276,13 @@ public enum CeramicBrickType implements IStringSerializable {
if (stacks.size() == 1) {
ItemStack stack5 = stacks.get(0);
CeramicBrickPair type = new CeramicBrickPair(stack5);
if (type.type == CeramicBrickType.VERTICAL_BRICK) {
type.type = ceramicType;
if (type.getType() == CeramicBrickType.VERTICAL_BRICK) {
type.setType(ceramicType);
return type.getStack(1);
}
if (type.type == CeramicBrickType.STRIPE_BRICK) {
type.type = ceramicType;
if (type.getType() == CeramicBrickType.STRIPE_BRICK) {
type.setType(ceramicType);
return type.getStack(1);
}
return ItemStack.EMPTY;
@@ -290,17 +290,17 @@ public enum CeramicBrickType implements IStringSerializable {
int[] colors = {-1, -1};
for (int index2 = 0; index2 < stacks.size(); ++index2) {
ItemStack stack4 = stacks.get(index2);
if (stack4.getItem() != Item.getItemFromBlock(Botany.gardening().ceramicBrick)) {
if (stack4.getItem() != Item.getItemFromBlock(ModuleCeramic.ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type4 = new CeramicBrickPair(stack4);
if (type4.type != CeramicBrickType.LARGE_BRICK) {
if (type4.getType() != CeramicBrickType.LARGE_BRICK) {
return ItemStack.EMPTY;
}
int color5 = type4.colorFirst.ordinal();
int color6 = type4.colorSecond.ordinal();
int color5 = type4.getColorFirst().ordinal();
int color6 = type4.getColorSecond().ordinal();
int alt2 = (index2 != 0 && index2 != 3) ? 1 : 0;
if (ceramicType == CeramicBrickType.STRIPE_BRICK) {
alt2 = 0;
@@ -319,11 +319,26 @@ public enum CeramicBrickType implements IStringSerializable {
}
protected boolean isMortar(ItemStack stack) {
return stack.getItem() == Botany.gardening().misc && stack.getItemDamage() == BotanyItems.MORTAR.ordinal();
return stack.getItem() == ModuleCeramic.misc && stack.getItemDamage() == CeramicItems.MORTAR.ordinal();
}
@Override
public String getName() {
return id;
}
public String getId() {
return id;
}
@Nullable
@SideOnly(Side.CLIENT)
public TextureAtlasSprite[] getSprites() {
return sprites;
}
@SideOnly(Side.CLIENT)
public void setSprites(TextureAtlasSprite[] sprites) {
this.sprites = sprites;
}
}
@@ -0,0 +1,25 @@
package binnie.botany.core;
import binnie.botany.GardeningManager;
import binnie.botany.api.BotanyAPI;
import binnie.botany.api.gardening.IGardeningManager;
import binnie.botany.api.genetics.IFlowerRoot;
import binnie.botany.genetics.FlowerRoot;
public class BotanyCore {
public static final int CHANCE_INTERPOLLINATION = 20;
public static IFlowerRoot getFlowerRoot() {
if (BotanyAPI.flowerRoot == null) {
BotanyAPI.flowerRoot = new FlowerRoot();
}
return BotanyAPI.flowerRoot;
}
public static IGardeningManager getGardening() {
if (BotanyAPI.gardening == null) {
BotanyAPI.gardening = new GardeningManager();
}
return BotanyAPI.gardening;
}
}
@@ -1,4 +1,4 @@
package binnie.botany.farm;
package binnie.botany.farming;
import com.google.common.base.Preconditions;
@@ -12,25 +12,25 @@ import forestry.api.circuits.ICircuitLayout;
import forestry.api.farming.FarmDirection;
import forestry.api.farming.IFarmHousing;
import binnie.botany.api.EnumAcidity;
import binnie.botany.api.EnumMoisture;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
import binnie.core.circuits.BinnieCircuit;
import binnie.core.util.I18N;
public class CircuitGarden extends BinnieCircuit {
private boolean isManual;
private GardenLogic logic;
private final GardenLogic logic;
public CircuitGarden(EnumMoisture moisture, @Nullable EnumAcidity ph, boolean manual, boolean fertilised, ItemStack recipe, ItemStack icon) {
super(getName(moisture, ph, manual, fertilised), 4, getLayout(manual), recipe);
isManual = manual;
logic = new GardenLogic(moisture, ph, isManual, fertilised, icon, I18N.localise(getUnlocalizedName()));
String info = I18N.localise("botany.moisture") + ": " + moisture.getLocalisedName(true);
String info = I18N.localise("botany.moisture") + ": " + moisture.getLocalisedName(true) + TextFormatting.GRAY + ", ";
if (ph != null) {
info += TextFormatting.GRAY + ", " + I18N.localise("botany.ph") + ": " + moisture.getLocalisedName(true);
info += I18N.localise("botany.ph") + ": " + ph.getLocalisedName(true) + TextFormatting.GRAY + ", ";
}
String fertilizedKey = fertilised ? "for.binnie.circuit.garden.fertilized" : "for.binnie.circuit.garden.unfertilized";
info += TextFormatting.GRAY + " " + I18N.localise(fertilizedKey);
info += (fertilised ? TextFormatting.GREEN : TextFormatting.RED) + I18N.localise(fertilizedKey) + TextFormatting.GRAY;
addTooltipString(I18N.localise("for.binnie.circuit.garden.info", info));
}
@@ -1,4 +1,4 @@
package binnie.botany.farm;
package binnie.botany.farming;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
@@ -10,7 +10,7 @@ import net.minecraft.world.World;
import forestry.api.farming.IFarmLogic;
public abstract class FarmLogic implements IFarmLogic {
boolean isManual;
private boolean isManual;
@Override
public IFarmLogic setManual(boolean flag) {
@@ -46,4 +46,8 @@ public abstract class FarmLogic implements IFarmLogic {
protected final void setBlock(World world, BlockPos pos, Block block, int meta) {
world.setBlockState(pos, block.getStateFromMeta(meta), 2);
}
public boolean isManual() {
return isManual;
}
}
@@ -1,4 +1,4 @@
package binnie.botany.farm;
package binnie.botany.farming;
import javax.annotation.Nullable;
@@ -12,17 +12,17 @@ import net.minecraft.world.World;
import forestry.api.farming.ICrop;
import forestry.api.farming.IFarmable;
import binnie.botany.Botany;
import binnie.botany.api.EnumFlowerStage;
import binnie.botany.api.IFlower;
import binnie.botany.api.IFlowerRoot;
import binnie.botany.api.genetics.EnumFlowerStage;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerRoot;
import binnie.botany.core.BotanyCore;
import binnie.botany.flower.TileEntityFlower;
import binnie.botany.modules.ModuleFlowers;
import binnie.botany.tile.TileEntityFlower;
public class FarmableFlower implements IFarmable {
@Override
public boolean isSaplingAt(World world, BlockPos pos) {
return world.getBlockState(pos) == Botany.flower;
return world.getBlockState(pos) == ModuleFlowers.flower;
}
@Nullable
@@ -38,7 +38,7 @@ public class FarmableFlower implements IFarmable {
IFlowerRoot flowerRoot = BotanyCore.getFlowerRoot();
ItemStack mature = flowerRoot.getMemberStack(flower, EnumFlowerStage.FLOWER);
ItemStack seed = flowerRoot.getMemberStack(flower, EnumFlowerStage.SEED);
if (mature != null && seed != null) {
if (!mature.isEmpty() && !seed.isEmpty()) {
world.setBlockState(pos, Blocks.AIR.getDefaultState(), 2);
return new FlowerCrop(pos, mature, seed);
}
@@ -1,12 +1,12 @@
package binnie.botany.farm;
package binnie.botany.farming;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import binnie.botany.api.IFlower;
import binnie.botany.api.IFlowerRoot;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerRoot;
import binnie.botany.core.BotanyCore;
public class FarmableVanillaFlower extends FarmableFlower {
@@ -1,4 +1,4 @@
package binnie.botany.farm;
package binnie.botany.farming;
import javax.annotation.Nullable;
import java.util.Collections;
@@ -10,8 +10,8 @@ import net.minecraft.util.math.BlockPos;
import forestry.api.farming.ICrop;
public class FlowerCrop implements ICrop {
NonNullList<ItemStack> drops = NonNullList.create();
BlockPos position;
private final NonNullList<ItemStack> drops = NonNullList.create();
private final BlockPos position;
public FlowerCrop(BlockPos pos, ItemStack... drops) {
Collections.addAll(this.drops, drops);
@@ -1,4 +1,4 @@
package binnie.botany.farm;
package binnie.botany.farming;
import javax.annotation.Nullable;
import java.util.ArrayList;
@@ -9,6 +9,7 @@ import java.util.Objects;
import java.util.stream.Collectors;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
@@ -29,39 +30,40 @@ import forestry.api.farming.IFarmable;
import forestry.core.owner.IOwnedTile;
import forestry.core.utils.BlockUtil;
import binnie.Binnie;
import binnie.botany.Botany;
import binnie.botany.api.EnumAcidity;
import binnie.botany.api.EnumMoisture;
import binnie.botany.api.EnumSoilType;
import binnie.botany.api.IBlockSoil;
import binnie.botany.api.IGardeningManager;
import binnie.core.Binnie;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumFertiliserType;
import binnie.botany.api.gardening.EnumMoisture;
import binnie.botany.api.gardening.EnumSoilType;
import binnie.botany.api.gardening.IBlockSoil;
import binnie.botany.api.gardening.IGardeningManager;
import binnie.botany.core.BotanyCore;
import binnie.botany.flower.TileEntityFlower;
import binnie.botany.modules.ModuleGardening;
import binnie.botany.tile.TileEntityFlower;
import binnie.core.liquid.ManagerLiquid;
public class GardenLogic extends FarmLogic {
List<IFarmable> farmables;
private EnumMoisture moisture;
private final List<IFarmable> farmables;
private final EnumMoisture moisture;
@Nullable
private EnumAcidity acidity;
private boolean fertilised;
private String name;
private final EnumAcidity acidity;
private final boolean fertilised;
private final String name;
private NonNullList<ItemStack> produce;
private ItemStack icon;
public GardenLogic(EnumMoisture moisture2, @Nullable EnumAcidity acidity2, boolean isManual, boolean isFertilised, ItemStack icon2, String name2) {
this.isManual = isManual;
public GardenLogic(EnumMoisture moisture, @Nullable EnumAcidity acidity, boolean isManual, boolean isFertilised, ItemStack icon, String name) {
this.setManual(isManual);
this.moisture = moisture;
this.acidity = acidity;
this.fertilised = isFertilised;
this.icon = icon;
this.name = name;
produce = NonNullList.create();
farmables = new ArrayList<>();
farmables.add(new FarmableFlower());
farmables.add(new FarmableVanillaFlower());
moisture = moisture2;
acidity = acidity2;
fertilised = isFertilised;
icon = icon2;
name = name2;
}
@Override
@@ -80,8 +82,8 @@ public class GardenLogic extends FarmLogic {
return gardening.isSoil(itemstack.getItem()) ||
itemstack.getItem() == Item.getItemFromBlock(Blocks.SAND) ||
itemstack.getItem() == Item.getItemFromBlock(Blocks.DIRT) ||
gardening.isAcidFertiliser(itemstack) ||
gardening.isAlkalineFertiliser(itemstack);
gardening.isFertiliser(EnumFertiliserType.ACID, itemstack) ||
gardening.isFertiliser(EnumFertiliserType.ALKALINE, itemstack);
}
@Override
@@ -94,7 +96,7 @@ public class GardenLogic extends FarmLogic {
@Override
public boolean cultivate(World world, IFarmHousing farmHousing, BlockPos pos, FarmDirection direction, int extent) {
return maintainSoil(world, pos, direction, extent, farmHousing) ||
(!isManual && maintainWater(world, pos, direction, extent, farmHousing)) ||
(!isManual() && maintainWater(world, pos, direction, extent, farmHousing)) ||
maintainCrops(world, pos.up(), direction, extent, farmHousing);
}
@@ -113,14 +115,14 @@ public class GardenLogic extends FarmLogic {
}
}
if (getBlock(world, position.up()) == Botany.gardening().plant) {
if (getBlock(world, position.up()) == ModuleGardening.plant) {
world.setBlockToAir(position.up());
} else {
if (acidity != null && gardening.isSoil(getBlock(world, position))) {
IBlockSoil soil = (IBlockSoil) getBlock(world, position);
EnumAcidity pH = soil.getPH(world, position);
if (pH.ordinal() < acidity.ordinal()) {
ItemStack stack = getAvailableAlkaline(housing);
ItemStack stack = getAvailableFertiliser(housing, EnumFertiliserType.ALKALINE);
if (!stack.isEmpty() && soil.setPH(world, position, EnumAcidity.values()[pH.ordinal() + 1])) {
NonNullList<ItemStack> resources = NonNullList.create();
resources.add(stack);
@@ -129,7 +131,7 @@ public class GardenLogic extends FarmLogic {
}
}
if (pH.ordinal() > acidity.ordinal()) {
ItemStack stack = getAvailableAcid(housing);
ItemStack stack = getAvailableFertiliser(housing, EnumFertiliserType.ACID);
if (!stack.isEmpty() && soil.setPH(world, position, EnumAcidity.values()[pH.ordinal() - 1])) {
NonNullList<ItemStack> resources = NonNullList.create();
resources.add(stack);
@@ -143,11 +145,12 @@ public class GardenLogic extends FarmLogic {
ItemStack block = getAsItemStack(world, position);
ItemStack loam = getAvailableLoam(housing);
if (isWaste(block) && !loam.isEmpty()) {
produce.addAll(Blocks.DIRT.getDrops(world, position, Block.getBlockFromItem(block.getItem()).getStateFromMeta(block.getItemDamage()), 0));
IBlockState blockState = Block.getBlockFromItem(block.getItem()).getStateFromMeta(block.getItemDamage());
Blocks.DIRT.getDrops(produce, world, position, blockState, 0);
setBlock(world, position, Blocks.AIR, 0);
return trySetSoil(world, position, loam, housing);
}
} else if (!isManual) {
} else if (!isManual()) {
if (!isWaterBlock(world, position)) {
if (i % 2 == 0) {
return trySetSoil(world, position, housing);
@@ -231,7 +234,7 @@ public class GardenLogic extends FarmLogic {
for (EnumMoisture moist : moistures) {
for (EnumAcidity acid : acidities) {
for (Block type : new Block[]{Botany.gardening().flowerbed, Botany.gardening().loam, Botany.gardening().soil}) {
for (Block type : new Block[]{ModuleGardening.flowerbed, ModuleGardening.loam, ModuleGardening.soil}) {
int meta = acid.ordinal() * 3 + moist.ordinal();
NonNullList<ItemStack> resources = NonNullList.create();
ItemStack resourceStack = new ItemStack(type, 1, meta);
@@ -263,7 +266,7 @@ public class GardenLogic extends FarmLogic {
}
if (loam.getItem() == Item.getItemFromBlock(Blocks.DIRT)) {
loam = new ItemStack(Botany.gardening().soil, 1, 4);
loam = new ItemStack(ModuleGardening.soil, 1, 4);
}
setBlock(world, position, ((ItemBlock) loam.getItem()).getBlock(), loam.getItemDamage());
@@ -314,13 +317,18 @@ public class GardenLogic extends FarmLogic {
@Override
public Collection<ICrop> harvest(World world, BlockPos pos, FarmDirection direction, int extent) {
if (isManual) {
if (isManual()) {
return Collections.emptyList();
}
return farmables.stream().map(farmable -> farmable.getCropAt(world, pos.up(), world.getBlockState(pos.up())))
.filter(Objects::nonNull).collect(Collectors.toList());
}
@Override
public void addSoil(ItemStack resource, IBlockState soilState, boolean hasMetaData) {
// all {@link IBlockSoil} are soil, and nothing else
}
@Override
public ResourceLocation getTextureMap() {
return TextureMap.LOCATION_BLOCKS_TEXTURE;
@@ -370,21 +378,8 @@ public class GardenLogic extends FarmLogic {
return false;
}
public ItemStack getAvailableAcid(IFarmHousing housing) {
for (ItemStack stack : BotanyCore.getGardening().getAcidFertilisers()) {
if (!stack.isEmpty()) {
NonNullList<ItemStack> resources = NonNullList.create();
resources.add(stack);
if (housing.getFarmInventory().hasResources(resources)) {
return stack;
}
}
}
return ItemStack.EMPTY;
}
public ItemStack getAvailableAlkaline(IFarmHousing housing) {
for (ItemStack stack : BotanyCore.getGardening().getAlkalineFertilisers()) {
public ItemStack getAvailableFertiliser(IFarmHousing housing, EnumFertiliserType type) {
for (ItemStack stack : BotanyCore.getGardening().getFertilisers(type)) {
if (!stack.isEmpty()) {
NonNullList<ItemStack> resources = NonNullList.create();
resources.add(stack);
@@ -1,7 +1,7 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.core.mod.config;
package binnie.botany.farming;
import javax.annotation.ParametersAreNonnullByDefault;
@@ -1,26 +1,27 @@
package binnie.botany.genetics;
import java.awt.Color;
import binnie.botany.api.genetics.IAlleleFlowerColor;
import binnie.core.util.I18N;
import forestry.api.genetics.IAlleleInteger;
import binnie.botany.api.IFlowerColor;
import binnie.core.util.I18N;
public class AlleleFlowerColor implements IAlleleFlowerColor {
private final int color;
private final String uid;
private final boolean isDominant;
private final String name;
private final String unlocalizedName;
private final int colorWilted;
private final int id;
public class FlowerColorAllele implements IFlowerColor, IAlleleInteger {
private int color;
private String uid;
private boolean isDominant;
private String name;
private String unlocalizedName;
private int colorDis;
private int id;
public FlowerColorAllele(String uid, int id, int color, int colorDis, String name, String unlocalizedName, boolean isDominant) {
this.color = color;
public AlleleFlowerColor(String uid, int id, Color color, Color colorWilted, String name, String unlocalizedName, boolean isDominant) {
this.color = color.getRGB();
this.uid = uid;
this.isDominant = isDominant;
this.name = name;
this.unlocalizedName = unlocalizedName;
this.colorDis = colorDis;
this.colorWilted = colorWilted.getRGB();
this.id = id;
}
@@ -55,8 +56,8 @@ public class FlowerColorAllele implements IFlowerColor, IAlleleInteger {
}
@Override
public int getColor(boolean dis) {
return dis ? colorDis : color;
public int getColor(boolean wilted) {
return wilted ? colorWilted : color;
}
@Override
@@ -1,13 +1,13 @@
package binnie.botany.genetics;
import binnie.botany.api.BotanyAPI;
import net.minecraft.entity.player.EntityPlayer;
import forestry.api.genetics.IBreedingTracker;
import forestry.api.genetics.IIndividual;
import forestry.core.genetics.BreedingTracker;
import binnie.Binnie;
import binnie.botany.api.IBotanistTracker;
import binnie.botany.api.genetics.IBotanistTracker;
public class BotanistTracker extends BreedingTracker implements IBotanistTracker {
public BotanistTracker(String s) {
@@ -20,7 +20,7 @@ public class BotanistTracker extends BreedingTracker implements IBotanistTracker
@Override
protected IBreedingTracker getBreedingTracker(EntityPlayer player) {
return Binnie.GENETICS.getFlowerRoot().getBreedingTracker(player.world, player.getGameProfile());
return BotanyAPI.flowerRoot.getBreedingTracker(player.world, player.getGameProfile());
}
@Override
@@ -0,0 +1,43 @@
package binnie.botany.genetics;
import binnie.botany.api.genetics.IColorMix;
import binnie.botany.api.genetics.IFlowerColor;
public final class ColorMix implements IColorMix {
private final IFlowerColor colorFirst;
private final IFlowerColor colorSecond;
private final IFlowerColor result;
private final int chance;
public ColorMix(IFlowerColor colorFirst, IFlowerColor colorSecond, IFlowerColor result, int chance) {
this.colorFirst = colorFirst;
this.colorSecond = colorSecond;
this.result = result;
this.chance = chance;
}
@Override
public IFlowerColor getColorFirst() {
return colorFirst;
}
@Override
public IFlowerColor getColorSecond() {
return colorSecond;
}
@Override
public boolean isMutation(IFlowerColor colorFirst, IFlowerColor colorSecond) {
return (colorFirst == this.colorFirst && colorSecond == this.colorSecond) || (colorFirst == this.colorSecond && colorSecond == this.colorFirst);
}
@Override
public int getChance() {
return chance;
}
@Override
public IFlowerColor getResult() {
return result;
}
}
@@ -11,66 +11,66 @@ import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IModelManager;
import binnie.Constants;
import binnie.botany.api.EnumFlowerStage;
import binnie.botany.api.IFlowerType;
import binnie.core.Constants;
import binnie.botany.api.genetics.EnumFlowerStage;
import binnie.botany.api.genetics.IFlowerType;
public enum EnumFlowerType implements IFlowerType<EnumFlowerType> {
Dandelion,
Poppy,
Orchid,
Allium,
Bluet,
Tulip,
Daisy,
Cornflower,
Pansy,
Iris,
Lavender(2),
Viola,
Daffodil,
Dahlia,
Peony(2),
Rose(2),
Lilac(2),
Hydrangea(2),
Foxglove(2),
Zinnia,
Mums,
Marigold,
Geranium,
Azalea,
Primrose,
Aster,
Carnation,
Lily,
Yarrow,
DANDELION,
POPPY,
ORCHID,
ALLIUM,
BLUET,
TULIP,
DAISY,
CORNFLOWER,
PANSY,
IRIS,
LAVENDER(2),
VIOLA,
DAFFODIL,
DAHLIA,
PEONY(2),
ROSE(2),
LILAC(2),
HYDRANGEA(2),
FOXGLOVE(2),
ZINNIA,
MUMS,
MARIGOLD,
GERANIUM,
AZALEA,
PRIMROSE,
ASTER,
CARNATION,
LILY,
YARROW,
Petunia,
Agapanthus,
Fuchsia,
Dianthus,
Forget,
Anemone,
Aquilegia,
Edelweiss,
Scabious,
Coneflower,
Gaillardia,
Auricula,
Camellia(2),
Goldenrod(2),
Althea(2),
Penstemon(2),
Delphinium(2),
Hollyhock(2);
AGAPANTHUS,
FUCHSIA,
DIANTHUS,
FORGET,
ANEMONE,
AQUILEGIA,
EDELWEISS,
SCABIOUS,
CONEFLOWER,
GAILLARDIA,
AURICULA,
CAMELLIA(2),
GOLDENROD(2),
ALTHEA(2),
PENSTEMON(2),
DELPHINIUM(2),
HOLLYHOCK(2);
public static EnumFlowerType[] VALUES = values();
public static int highestSection = 2;
int sections;
ModelResourceLocation flower;
ModelResourceLocation seed;
ModelResourceLocation pollen;
private final int sections;
private ModelResourceLocation flower;
private ModelResourceLocation seed;
private ModelResourceLocation pollen;
EnumFlowerType() {
this(1);
@@ -101,11 +101,6 @@ public enum EnumFlowerType implements IFlowerType<EnumFlowerType> {
return flower;
}
@Override
public int getID() {
return ordinal();
}
@Override
public int getSections() {
return sections;
@@ -2,7 +2,6 @@ package binnie.botany.genetics;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Random;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.math.BlockPos;
@@ -10,57 +9,56 @@ import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World;
import forestry.api.arboriculture.EnumTreeChromosome;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IChromosome;
import forestry.core.genetics.Chromosome;
import forestry.core.genetics.Individual;
import forestry.core.utils.Translator;
import binnie.botany.api.EnumFlowerChromosome;
import binnie.botany.api.IAlleleFlowerSpecies;
import binnie.botany.api.IColorMix;
import binnie.botany.api.IFlower;
import binnie.botany.api.IFlowerColor;
import binnie.botany.api.IFlowerGenome;
import binnie.botany.api.IFlowerMutation;
import binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.api.genetics.IAlleleFlowerSpecies;
import binnie.botany.api.genetics.IColorMix;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerColor;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.api.genetics.IFlowerMutation;
import binnie.botany.core.BotanyCore;
import binnie.core.util.I18N;
public class Flower extends Individual implements IFlower {
public IFlowerGenome genome;
private final IFlowerGenome genome;
@Nullable
public IFlowerGenome mate;
private IFlowerGenome mate;
private int age;
private boolean wilting;
private boolean flowered;
public Flower(NBTTagCompound nbt) {
super(nbt);
public Flower(NBTTagCompound compound) {
super(compound);
if (nbt.hasKey("Age")) {
age = nbt.getInteger("Age");
if (compound.hasKey("Age")) {
age = compound.getInteger("Age");
} else {
age = 0;
}
wilting = nbt.hasKey("Wilt") && nbt.getBoolean("Wilt");
wilting = compound.hasKey("Wilt") && compound.getBoolean("Wilt");
if (nbt.hasKey("Flowered")) {
flowered = nbt.getBoolean("Flowered");
if (compound.hasKey("Flowered")) {
flowered = compound.getBoolean("Flowered");
} else {
flowered = age > 0;
}
if (nbt.hasKey("Genome")) {
genome = new FlowerGenome(nbt.getCompoundTag("Genome"));
if (compound.hasKey("Genome")) {
genome = new FlowerGenome(compound.getCompoundTag("Genome"));
} else {
genome = BotanyCore.getFlowerRoot().templateAsGenome(BotanyCore.getFlowerRoot().getDefaultTemplate());
}
if (nbt.hasKey("Mate")) {
mate = new FlowerGenome(nbt.getCompoundTag("Mate"));
if (compound.hasKey("Mate")) {
mate = new FlowerGenome(compound.getCompoundTag("Mate"));
}
}
@@ -102,20 +100,20 @@ public class Flower extends Individual implements IFlower {
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound nbttagcompound2) {
NBTTagCompound nbttagcompound = super.writeToNBT(nbttagcompound2);
nbttagcompound.setInteger("Age", age);
nbttagcompound.setBoolean("Wilt", wilting);
nbttagcompound.setBoolean("Flowered", flowered);
NBTTagCompound nbtGenome = new NBTTagCompound();
genome.writeToNBT(nbtGenome);
nbttagcompound.setTag("Genome", nbtGenome);
public NBTTagCompound writeToNBT(NBTTagCompound compound) {
super.writeToNBT(compound);
compound.setInteger("Age", age);
compound.setBoolean("Wilt", wilting);
compound.setBoolean("Flowered", flowered);
NBTTagCompound compoundGenome = new NBTTagCompound();
genome.writeToNBT(compoundGenome);
compound.setTag("Genome", compoundGenome);
if (mate != null) {
NBTTagCompound nbtMate = new NBTTagCompound();
mate.writeToNBT(nbtMate);
nbttagcompound.setTag("Mate", nbtMate);
NBTTagCompound compundMate = new NBTTagCompound();
mate.writeToNBT(compundMate);
compound.setTag("Mate", compundMate);
}
return nbttagcompound;
return compound;
}
@Override
@@ -123,25 +121,6 @@ public class Flower extends Individual implements IFlower {
return genome;
}
private IChromosome inheritChromosome(Random rand, IChromosome parentFirst, IChromosome parentSecond) {
IAllele choiceFirst;
if (rand.nextBoolean()) {
choiceFirst = parentFirst.getPrimaryAllele();
} else {
choiceFirst = parentFirst.getSecondaryAllele();
}
IAllele choiceSecond;
if (rand.nextBoolean()) {
choiceSecond = parentSecond.getPrimaryAllele();
} else {
choiceSecond = parentSecond.getSecondaryAllele();
}
if (rand.nextBoolean()) {
return new Chromosome(choiceFirst, choiceSecond);
}
return new Chromosome(choiceSecond, choiceFirst);
}
@Override
public void mate(IFlower other) {
mate = new FlowerGenome(other.getGenome().getChromosomes());
@@ -155,9 +134,9 @@ public class Flower extends Individual implements IFlower {
@Override
public IFlower copy() {
NBTTagCompound nbttagcompound = new NBTTagCompound();
writeToNBT(nbttagcompound);
return new Flower(nbttagcompound);
NBTTagCompound compound = new NBTTagCompound();
writeToNBT(compound);
return new Flower(compound);
}
@Override
@@ -229,17 +208,17 @@ public class Flower extends Individual implements IFlower {
private IChromosome[] mutateSpecies(World world, BlockPos pos, IFlowerGenome genomeFirst, IFlowerGenome genomeSecond) {
IChromosome[] parentFirst = genomeFirst.getChromosomes();
IChromosome[] parentSecond = genomeSecond.getChromosomes();
IAlleleFlowerSpecies alleleFrist;
IAlleleFlowerSpecies alleleFirst;
IAlleleFlowerSpecies alleleSecond;
IFlowerGenome genome0;
IFlowerGenome genome2;
if (world.rand.nextBoolean()) {
alleleFrist = (IAlleleFlowerSpecies) parentFirst[EnumTreeChromosome.SPECIES.ordinal()].getPrimaryAllele();
alleleFirst = (IAlleleFlowerSpecies) parentFirst[EnumTreeChromosome.SPECIES.ordinal()].getPrimaryAllele();
alleleSecond = (IAlleleFlowerSpecies) parentSecond[EnumTreeChromosome.SPECIES.ordinal()].getSecondaryAllele();
genome0 = genomeFirst;
genome2 = genomeSecond;
} else {
alleleFrist = (IAlleleFlowerSpecies) parentSecond[EnumTreeChromosome.SPECIES.ordinal()].getPrimaryAllele();
alleleFirst = (IAlleleFlowerSpecies) parentSecond[EnumTreeChromosome.SPECIES.ordinal()].getPrimaryAllele();
alleleSecond = (IAlleleFlowerSpecies) parentFirst[EnumTreeChromosome.SPECIES.ordinal()].getSecondaryAllele();
genome0 = genomeSecond;
genome2 = genomeFirst;
@@ -276,7 +255,7 @@ public class Flower extends Individual implements IFlower {
IChromosome[] template = null;
for (IFlowerMutation mutation2 : BotanyCore.getFlowerRoot().getMutations(true)) {
float chance = mutation2.getChance(world, pos, alleleFrist, alleleSecond, genome0, genome2);
float chance = mutation2.getChance(world, pos, alleleFirst, alleleSecond, genome0, genome2);
if (chance > 0.0f && world.rand.nextFloat() * 100.0f < chance && template == null) {
template = BotanyCore.getFlowerRoot().templateAsChromosomes(mutation2.getTemplate());
}
@@ -18,10 +18,10 @@ import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.genetics.IAlleleInteger;
import forestry.api.genetics.IAlyzerPlugin;
import binnie.botany.api.EnumFlowerChromosome;
import binnie.botany.api.EnumFlowerStage;
import binnie.botany.api.FlowerManager;
import binnie.botany.api.IFlower;
import binnie.botany.api.BotanyAPI;
import binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.api.genetics.EnumFlowerStage;
import binnie.botany.api.genetics.IFlower;
import binnie.core.gui.geometry.Area;
import binnie.core.gui.renderer.RenderUtil;
import binnie.core.util.I18N;
@@ -51,11 +51,11 @@ public class FlowerAlyzerPlugin implements IAlyzerPlugin {
EnumFlowerChromosome.PH_TOLERANCE
};
private int lastTopOffset;
private int rowSize = 12;
private int margin = 10;
private final int rowSize = 12;
private final int margin = 10;
private int guiLeft;
private int guiTop;
private HashMap<String, ItemStack> iconStacks = new HashMap<>();
private final HashMap<String, ItemStack> iconStacks = new HashMap<>();
public FlowerAlyzerPlugin() {
@@ -65,11 +65,13 @@ public class FlowerAlyzerPlugin implements IAlyzerPlugin {
}
@SideOnly(Side.CLIENT)
public void drawLine(GuiScreen gui, int xOffset, String msg, int color) {
gui.mc.fontRenderer.drawString(msg, guiLeft + xOffset, guiTop + lastTopOffset + margin, color);
}
public void drawChromosom(GuiScreen gui, EnumFlowerChromosome chromosome, IFlower flower) {
@SideOnly(Side.CLIENT)
public void drawChromosome(GuiScreen gui, EnumFlowerChromosome chromosome, IFlower flower) {
drawLine(gui, COLUMN_0, StringUtils.capitalize(chromosome.getName()), 0xEEEEEE);
drawLine(gui, COLUMN_1, I18N.localise(flower.getGenome().getActiveAllele(chromosome).getUnlocalizedName()), 0xEEEEEE);
drawLine(gui, COLUMN_2, I18N.localise(flower.getGenome().getInactiveAllele(chromosome).getUnlocalizedName()), 0xEEEEEE);
@@ -86,7 +88,7 @@ public class FlowerAlyzerPlugin implements IAlyzerPlugin {
lastTopOffset = 10;
guiLeft = (gui.width - 246) / 2;
guiTop = (gui.height - 238) / 2;
IFlower flower = FlowerManager.flowerRoot.getMember(itemStack);
IFlower flower = BotanyAPI.flowerRoot.getMember(itemStack);
if (flower == null) {
return;
}
@@ -109,7 +111,7 @@ public class FlowerAlyzerPlugin implements IAlyzerPlugin {
guiTop += rowSize * 3;
for (EnumFlowerChromosome chromosom : firstPageChromosome) {
drawChromosom(gui, chromosom, flower);
drawChromosome(gui, chromosom, flower);
}
@@ -122,17 +124,17 @@ public class FlowerAlyzerPlugin implements IAlyzerPlugin {
guiLeft = (gui.width - 246) / 2;
guiTop = (gui.height - 238) / 2;
IFlower f = FlowerManager.flowerRoot.getMember(itemStack);
IFlower f = BotanyAPI.flowerRoot.getMember(itemStack);
for (EnumFlowerChromosome chromosome : secondPageColorChromosome) {
drawChromosom(gui, chromosome, f);
drawChromosome(gui, chromosome, f);
RenderUtil.drawSolidRect(new Area(guiLeft + COLUMN_1, guiTop + lastTopOffset + margin, 50, 10), ((IAlleleInteger) f.getGenome().getActiveAllele(chromosome)).getValue());
RenderUtil.drawSolidRect(new Area(guiLeft + COLUMN_2, guiTop + lastTopOffset + margin, 50, 10), ((IAlleleInteger) f.getGenome().getInactiveAllele(chromosome)).getValue());
newLine();
}
for (EnumFlowerChromosome chromosome : secondPageToleranceChromosome) {
drawChromosom(gui, chromosome, f);
drawChromosome(gui, chromosome, f);
newLine();
}
@@ -1,5 +1,7 @@
package binnie.botany.genetics;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeSet;
import net.minecraft.entity.player.EntityPlayer;
@@ -14,14 +16,22 @@ import forestry.api.genetics.IMutation;
import forestry.api.genetics.ISpeciesRoot;
import forestry.api.genetics.ISpeciesType;
import binnie.Binnie;
import binnie.botany.api.EnumFlowerChromosome;
import binnie.botany.api.EnumFlowerStage;
import binnie.botany.api.IBotanistTracker;
import binnie.botany.api.BotanyAPI;
import binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.api.genetics.EnumFlowerStage;
import binnie.botany.api.genetics.IBotanistTracker;
import binnie.botany.core.BotanyCore;
import binnie.core.Binnie;
import binnie.core.api.genetics.IFieldKitPlugin;
import binnie.core.api.gui.IPoint;
import binnie.core.api.gui.ITexture;
import binnie.core.genetics.BreedingSystem;
import binnie.core.genetics.ForestryAllele;
import binnie.core.genetics.Tolerance;
import binnie.core.gui.geometry.Point;
import binnie.core.gui.resource.textures.StandardTexture;
import binnie.core.texture.BinnieCoreTexture;
import binnie.core.util.I18N;
public class FlowerBreedingSystem extends BreedingSystem {
@@ -37,7 +47,7 @@ public class FlowerBreedingSystem extends BreedingSystem {
@Override
public ISpeciesRoot getSpeciesRoot() {
return Binnie.GENETICS.getFlowerRoot();
return BotanyAPI.flowerRoot;
}
@Override
@@ -94,44 +104,74 @@ public class FlowerBreedingSystem extends BreedingSystem {
public void addExtraAlleles(IChromosomeType chromosome, TreeSet<IAllele> alleles) {
switch ((EnumFlowerChromosome) chromosome) {
case FERTILITY:
for (ForestryAllele.Fertility a : ForestryAllele.Fertility.values()) {
alleles.add(a.getAllele());
for (ForestryAllele.Fertility fertility : ForestryAllele.Fertility.values()) {
alleles.add(fertility.getAllele());
}
break;
case LIFESPAN:
for (ForestryAllele.Lifespan a2 : ForestryAllele.Lifespan.values()) {
alleles.add(a2.getAllele());
for (ForestryAllele.Lifespan lifespan : ForestryAllele.Lifespan.values()) {
alleles.add(lifespan.getAllele());
}
break;
case HUMIDITY_TOLERANCE:
case PH_TOLERANCE:
case TEMPERATURE_TOLERANCE:
for (Tolerance a3 : Tolerance.values()) {
alleles.add(a3.getAllele());
for (Tolerance tolerance : Tolerance.values()) {
alleles.add(tolerance.getAllele());
}
break;
case PRIMARY:
case SECONDARY:
case STEM:
for (EnumFlowerColor a4 : EnumFlowerColor.values()) {
alleles.add(a4.getFlowerColorAllele());
for (EnumFlowerColor color : EnumFlowerColor.values()) {
alleles.add(color.getFlowerColorAllele());
}
break;
case SAPPINESS:
for (ForestryAllele.Sappiness a5 : ForestryAllele.Sappiness.values()) {
alleles.add(a5.getAllele());
for (ForestryAllele.Sappiness sappiness : ForestryAllele.Sappiness.values()) {
alleles.add(sappiness.getAllele());
}
break;
case TERRITORY:
for (ForestryAllele.Territory a6 : ForestryAllele.Territory.values()) {
alleles.add(a6.getAllele());
for (ForestryAllele.Territory territory : ForestryAllele.Territory.values()) {
alleles.add(territory.getAllele());
}
break;
}
}
@Override
public IFieldKitPlugin getFieldKitPlugin() {
return new FieldKitPlugin();
}
private static class FieldKitPlugin implements IFieldKitPlugin {
@Override
public Map<IChromosomeType, IPoint> getChromosomePickerPositions() {
Map<IChromosomeType, IPoint> positions = new HashMap<>();
positions.put(EnumFlowerChromosome.SPECIES, new Point(35, 81));
positions.put(EnumFlowerChromosome.PRIMARY, new Point(36, 28));
positions.put(EnumFlowerChromosome.SECONDARY, new Point(27, 13));
positions.put(EnumFlowerChromosome.FERTILITY, new Point(47, 15));
positions.put(EnumFlowerChromosome.TERRITORY, new Point(54, 31));
positions.put(EnumFlowerChromosome.EFFECT, new Point(15, 55));
positions.put(EnumFlowerChromosome.LIFESPAN, new Point(23, 38));
positions.put(EnumFlowerChromosome.TEMPERATURE_TOLERANCE, new Point(17, 77));
positions.put(EnumFlowerChromosome.HUMIDITY_TOLERANCE, new Point(52, 51));
positions.put(EnumFlowerChromosome.PH_TOLERANCE, new Point(54, 80));
positions.put(EnumFlowerChromosome.SAPPINESS, new Point(41, 42));
positions.put(EnumFlowerChromosome.STEM, new Point(37, 63));
return positions;
}
@Override
public ITexture getTypeTexture() {
return new StandardTexture(0, 96, 96, 96, BinnieCoreTexture.GUI_BREEDING);
}
}
}
File diff suppressed because it is too large. Load diff
@@ -6,6 +6,7 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import binnie.botany.api.genetics.EnumFlowerColor;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
@@ -23,24 +24,24 @@ import forestry.api.genetics.IClassification;
import forestry.core.genetics.alleles.AlleleHelper;
import forestry.core.genetics.alleles.EnumAllele;
import binnie.Constants;
import binnie.botany.api.EnumAcidity;
import binnie.botany.api.EnumFlowerChromosome;
import binnie.botany.api.EnumFlowerStage;
import binnie.botany.api.EnumMoisture;
import binnie.botany.api.FlowerManager;
import binnie.botany.api.IAlleleFlowerSpecies;
import binnie.botany.api.IAlleleFlowerSpeciesBuilder;
import binnie.botany.api.IFlower;
import binnie.botany.api.IFlowerDefinition;
import binnie.botany.api.IFlowerGenome;
import binnie.botany.api.IFlowerMutationBuilder;
import binnie.botany.api.IFlowerRoot;
import binnie.botany.api.IFlowerType;
import binnie.core.Constants;
import binnie.botany.api.BotanyAPI;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
import binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.api.genetics.EnumFlowerStage;
import binnie.botany.api.genetics.IAlleleFlowerSpecies;
import binnie.botany.api.genetics.IAlleleFlowerSpeciesBuilder;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerDefinition;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.api.genetics.IFlowerMutationBuilder;
import binnie.botany.api.genetics.IFlowerRoot;
import binnie.botany.api.genetics.IFlowerType;
import binnie.botany.core.BotanyCore;
public enum FlowerDefinition implements IFlowerDefinition {
Dandelion("Dandelion", "taraxacum", "officinale", EnumFlowerType.Dandelion, EnumFlowerColor.Yellow) {
Dandelion("Dandelion", "taraxacum", "officinale", EnumFlowerType.DANDELION, EnumFlowerColor.Yellow) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
}
@@ -59,7 +60,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
// vanilla
}
},
Poppy("Poppy", "papaver", "rhoeas", EnumFlowerType.Poppy, EnumFlowerColor.Red) {
Poppy("Poppy", "papaver", "rhoeas", EnumFlowerType.POPPY, EnumFlowerColor.Red) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setTemperature(EnumTemperature.WARM);
@@ -79,7 +80,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
// vanilla
}
},
Orchid("Orchid", "vanda", "coerulea", EnumFlowerType.Orchid, EnumFlowerColor.DeepSkyBlue) {
Orchid("Orchid", "vanda", "coerulea", EnumFlowerType.ORCHID, EnumFlowerColor.DeepSkyBlue) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setPH(EnumAcidity.ACID);
@@ -97,7 +98,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
// vanilla
}
},
Allium("Allium", "allium", "giganteum", EnumFlowerType.Allium, EnumFlowerColor.MediumPurple) {
Allium("Allium", "allium", "giganteum", EnumFlowerType.ALLIUM, EnumFlowerColor.MediumPurple) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setPH(EnumAcidity.ALKALINE);
@@ -115,7 +116,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
// vanilla
}
},
Bluet("Bluet", "houstonia", "caerulea", EnumFlowerType.Bluet, EnumFlowerColor.Lavender, EnumFlowerColor.Khaki) {
Bluet("Bluet", "houstonia", "caerulea", EnumFlowerType.BLUET, EnumFlowerColor.Lavender, EnumFlowerColor.Khaki) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setMoisture(EnumMoisture.DAMP);
@@ -134,7 +135,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
// vanilla
}
},
Tulip("Tulip", "tulipa", "agenensis", EnumFlowerType.Tulip, EnumFlowerColor.Violet) {
Tulip("Tulip", "tulipa", "agenensis", EnumFlowerType.TULIP, EnumFlowerColor.Violet) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
}
@@ -152,7 +153,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
// vanilla
}
},
Daisy("Daisy", "leucanthemum", "vulgare", EnumFlowerType.Daisy, EnumFlowerColor.White, EnumFlowerColor.Yellow) {
Daisy("Daisy", "leucanthemum", "vulgare", EnumFlowerType.DAISY, EnumFlowerColor.White, EnumFlowerColor.Yellow) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setTemperature(EnumTemperature.WARM);
@@ -172,7 +173,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
// vanilla
}
},
Cornflower("Cornflower", "centaurea", "cyanus", EnumFlowerType.Cornflower, EnumFlowerColor.SkyBlue) {
Cornflower("Cornflower", "centaurea", "cyanus", EnumFlowerType.CORNFLOWER, EnumFlowerColor.SkyBlue) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
}
@@ -191,7 +192,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Dandelion, Tulip, 10);
}
},
Pansy("Pansy", "viola", "tricolor", EnumFlowerType.Pansy, EnumFlowerColor.Pink, EnumFlowerColor.Purple) {
Pansy("Pansy", "viola", "tricolor", EnumFlowerType.PANSY, EnumFlowerColor.Pink, EnumFlowerColor.Purple) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setPH(EnumAcidity.ACID);
@@ -210,7 +211,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Tulip, Viola, 5);
}
},
Iris("Iris", "iris", "germanica", EnumFlowerType.Iris, EnumFlowerColor.LightGray, EnumFlowerColor.Purple) {
Iris("Iris", "iris", "germanica", EnumFlowerType.IRIS, EnumFlowerColor.LightGray, EnumFlowerColor.Purple) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setPH(EnumAcidity.ACID);
@@ -229,7 +230,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Orchid, Viola, 10);
}
},
Lavender("Lavender", "Lavandula", "angustifolia", EnumFlowerType.Lavender, EnumFlowerColor.MediumOrchid) {
Lavender("Lavender", "Lavandula", "angustifolia", EnumFlowerType.LAVENDER, EnumFlowerColor.MediumOrchid) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setTemperature(EnumTemperature.WARM);
@@ -249,7 +250,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Allium, Viola, 10);
}
},
Viola("Viola", "viola", "odorata", EnumFlowerType.Viola, EnumFlowerColor.MediumPurple, EnumFlowerColor.SlateBlue) {
Viola("Viola", "viola", "odorata", EnumFlowerType.VIOLA, EnumFlowerColor.MediumPurple, EnumFlowerColor.SlateBlue) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setPH(EnumAcidity.ACID);
@@ -267,7 +268,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Orchid, Poppy, 15);
}
},
Daffodil("Daffodil", "narcissus", "pseudonarcissus", EnumFlowerType.Daffodil, EnumFlowerColor.Yellow, EnumFlowerColor.Gold) {
Daffodil("Daffodil", "narcissus", "pseudonarcissus", EnumFlowerType.DAFFODIL, EnumFlowerColor.Yellow, EnumFlowerColor.Gold) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
}
@@ -284,7 +285,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Dandelion, Poppy, 10);
}
},
Dahlia("Dahlia", "dahlia", "variabilis", EnumFlowerType.Dahlia, EnumFlowerColor.HotPink, EnumFlowerColor.DeepPink) {
Dahlia("Dahlia", "dahlia", "variabilis", EnumFlowerType.DAHLIA, EnumFlowerColor.HotPink, EnumFlowerColor.DeepPink) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
}
@@ -302,7 +303,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Daisy, Allium, 15);
}
},
Peony("Peony", "paeonia", "suffruticosa", EnumFlowerType.Peony, EnumFlowerColor.Thistle) {
Peony("Peony", "paeonia", "suffruticosa", EnumFlowerType.PEONY, EnumFlowerColor.Thistle) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setPH(EnumAcidity.ALKALINE);
@@ -322,7 +323,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
// vanilla
}
},
Rose("Rose", "rosa", "rubiginosa", EnumFlowerType.Rose, EnumFlowerColor.Red) {
Rose("ROSE", "rosa", "rubiginosa", EnumFlowerType.ROSE, EnumFlowerColor.Red) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setPH(EnumAcidity.ACID);
@@ -341,7 +342,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
// vanilla
}
},
Lilac("Lilac", "syringa", "vulgaris", EnumFlowerType.Lilac, EnumFlowerColor.Plum) {
Lilac("Lilac", "syringa", "vulgaris", EnumFlowerType.LILAC, EnumFlowerColor.Plum) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setPH(EnumAcidity.ALKALINE);
@@ -359,7 +360,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
protected void registerMutations() {
}
},
Hydrangea("Hydrangea", "hydrangea", "macrophylla", EnumFlowerType.Hydrangea, EnumFlowerColor.DeepSkyBlue) {
Hydrangea("Hydrangea", "hydrangea", "macrophylla", EnumFlowerType.HYDRANGEA, EnumFlowerColor.DeepSkyBlue) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setMoisture(EnumMoisture.DAMP);
@@ -379,7 +380,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Peony, Bluet, 10);
}
},
Foxglove("Foxglove", "digitalis", "purpurea", EnumFlowerType.Foxglove, EnumFlowerColor.HotPink) {
Foxglove("Foxglove", "digitalis", "purpurea", EnumFlowerType.FOXGLOVE, EnumFlowerColor.HotPink) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
}
@@ -400,7 +401,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
// vanilla
}
},
Zinnia("Zinnia", "zinnia", "elegans", EnumFlowerType.Zinnia, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Yellow) {
Zinnia("Zinnia", "zinnia", "elegans", EnumFlowerType.ZINNIA, EnumFlowerColor.MediumVioletRed, EnumFlowerColor.Yellow) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
}
@@ -419,7 +420,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
Zinnia.registerMutation(Dahlia, Marigold, 5);
}
},
Chrysanthemum("Chrysanthemum", "chrysanthemum", "\u00ef?? grandiflorum", EnumFlowerType.Mums, EnumFlowerColor.Violet) {
Chrysanthemum("Chrysanthemum", "chrysanthemum", "\u00ef?? grandiflorum", EnumFlowerType.MUMS, EnumFlowerColor.Violet) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
}
@@ -439,7 +440,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Geranium, Rose, 10);
}
},
Marigold("Marigold", "calendula", "officinalis", EnumFlowerType.Marigold, EnumFlowerColor.Gold, EnumFlowerColor.DarkOrange) {
Marigold("Marigold", "calendula", "officinalis", EnumFlowerType.MARIGOLD, EnumFlowerColor.Gold, EnumFlowerColor.DarkOrange) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setTemperature(EnumTemperature.WARM);
@@ -459,7 +460,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Daisy, Dandelion, 10);
}
},
Geranium("Geranium", "geranium", "maderense", EnumFlowerType.Geranium, EnumFlowerColor.DeepPink) {
Geranium("Geranium", "geranium", "maderense", EnumFlowerType.GERANIUM, EnumFlowerColor.DeepPink) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setTemperature(EnumTemperature.WARM);
@@ -480,7 +481,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Tulip, Orchid, 15);
}
},
Azalea("Azalea", "rhododendrons", "aurigeranum", EnumFlowerType.Azalea, EnumFlowerColor.HotPink) {
Azalea("Azalea", "rhododendrons", "aurigeranum", EnumFlowerType.AZALEA, EnumFlowerColor.HotPink) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setPH(EnumAcidity.ACID);
@@ -495,7 +496,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Orchid, Geranium, 5);
}
},
Primrose("Primrose", "primula", "vulgaris", EnumFlowerType.Primrose, EnumFlowerColor.Red, EnumFlowerColor.Gold) {
Primrose("Primrose", "primula", "vulgaris", EnumFlowerType.PRIMROSE, EnumFlowerColor.Red, EnumFlowerColor.Gold) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setPH(EnumAcidity.ACID);
@@ -513,7 +514,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Chrysanthemum, Auricula, 5);
}
},
Aster("Aster", "aster", "amellus", EnumFlowerType.Aster, EnumFlowerColor.MediumPurple, EnumFlowerColor.Goldenrod) {
Aster("Aster", "aster", "amellus", EnumFlowerType.ASTER, EnumFlowerColor.MediumPurple, EnumFlowerColor.Goldenrod) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
}
@@ -529,7 +530,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Daisy, Tulip, 10);
}
},
Carnation("Carnation", "dianthus", "caryophyllus", EnumFlowerType.Carnation, EnumFlowerColor.Crimson, EnumFlowerColor.White) {
Carnation("Carnation", "dianthus", "caryophyllus", EnumFlowerType.CARNATION, EnumFlowerColor.Crimson, EnumFlowerColor.White) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setPH(EnumAcidity.ALKALINE);
@@ -547,7 +548,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Dianthus, Rose, 5);
}
},
Lily("Lily", "lilium", "auratum", EnumFlowerType.Lily, EnumFlowerColor.Pink, EnumFlowerColor.Gold) {
Lily("Lily", "lilium", "auratum", EnumFlowerType.LILY, EnumFlowerColor.Pink, EnumFlowerColor.Gold) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setTemperature(EnumTemperature.WARM);
@@ -567,7 +568,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Tulip, Chrysanthemum, 5);
}
},
Yarrow("Yarrow", "achillea", "millefolium", EnumFlowerType.Yarrow, EnumFlowerColor.Yellow) {
Yarrow("Yarrow", "achillea", "millefolium", EnumFlowerType.YARROW, EnumFlowerColor.Yellow) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setPH(EnumAcidity.ACID);
@@ -606,7 +607,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Tulip, Dahlia, 5);
}
},
Agapanthus("Agapanthus", "agapanthus", "praecox", EnumFlowerType.Agapanthus, EnumFlowerColor.DeepSkyBlue) {
Agapanthus("Agapanthus", "agapanthus", "praecox", EnumFlowerType.AGAPANTHUS, EnumFlowerColor.DeepSkyBlue) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setTemperature(EnumTemperature.WARM);
@@ -626,7 +627,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Allium, Geranium, 5);
}
},
Fuchsia("Fuchsia", "fuchsia", "magellanica", EnumFlowerType.Fuchsia, EnumFlowerColor.DeepPink, EnumFlowerColor.MediumOrchid) {
Fuchsia("Fuchsia", "fuchsia", "magellanica", EnumFlowerType.FUCHSIA, EnumFlowerColor.DeepPink, EnumFlowerColor.MediumOrchid) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setTemperature(EnumTemperature.WARM);
@@ -646,7 +647,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Foxglove, Dahlia, 5);
}
},
Dianthus("Dianthus", "dianthus", "barbatus", EnumFlowerType.Dianthus, EnumFlowerColor.Crimson, EnumFlowerColor.HotPink) {
Dianthus("Dianthus", "dianthus", "barbatus", EnumFlowerType.DIANTHUS, EnumFlowerColor.Crimson, EnumFlowerColor.HotPink) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setPH(EnumAcidity.ALKALINE);
@@ -667,7 +668,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Tulip, Poppy, 15);
}
},
Forget("Forget-me-nots", "myosotis", "arvensis", EnumFlowerType.Forget, EnumFlowerColor.LightSteelBlue) {
Forget("Forget-me-nots", "myosotis", "arvensis", EnumFlowerType.FORGET, EnumFlowerColor.LightSteelBlue) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setPH(EnumAcidity.ACID);
@@ -686,7 +687,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Orchid, Bluet, 10);
}
},
Anemone("Anemone", "anemone", "coronaria", EnumFlowerType.Anemone, EnumFlowerColor.Red, EnumFlowerColor.MistyRose) {
Anemone("Anemone", "anemone", "coronaria", EnumFlowerType.ANEMONE, EnumFlowerColor.Red, EnumFlowerColor.MistyRose) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
}
@@ -705,7 +706,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
FlowerDefinition.Anemone.registerMutation(FlowerDefinition.Aquilegia, FlowerDefinition.Rose, 5);
}
},
Aquilegia("Aquilegia", "aquilegia", "vulgaris", EnumFlowerType.Aquilegia, EnumFlowerColor.SlateBlue, EnumFlowerColor.Thistle) {
Aquilegia("Aquilegia", "aquilegia", "vulgaris", EnumFlowerType.AQUILEGIA, EnumFlowerColor.SlateBlue, EnumFlowerColor.Thistle) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
}
@@ -721,7 +722,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Iris, Poppy, 5);
}
},
Edelweiss("Edelweiss", "leontopodium", "alpinum", EnumFlowerType.Edelweiss, EnumFlowerColor.White, EnumFlowerColor.Khaki) {
Edelweiss("Edelweiss", "leontopodium", "alpinum", EnumFlowerType.EDELWEISS, EnumFlowerColor.White, EnumFlowerColor.Khaki) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setPH(EnumAcidity.ALKALINE);
@@ -742,7 +743,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
FlowerDefinition.Edelweiss.registerMutation(FlowerDefinition.Peony, FlowerDefinition.Bluet, 5);
}
},
Scabious("Scabious", "scabiosa", "columbaria", EnumFlowerType.Scabious, EnumFlowerColor.RoyalBlue) {
Scabious("Scabious", "scabiosa", "columbaria", EnumFlowerType.SCABIOUS, EnumFlowerColor.RoyalBlue) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
}
@@ -761,7 +762,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Allium, Cornflower, 5);
}
},
Coneflower("Coneflower", "echinacea", "purpurea", EnumFlowerType.Coneflower, EnumFlowerColor.Violet, EnumFlowerColor.DarkOrange) {
Coneflower("Coneflower", "echinacea", "purpurea", EnumFlowerType.CONEFLOWER, EnumFlowerColor.Violet, EnumFlowerColor.DarkOrange) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
}
@@ -778,7 +779,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Tulip, Cornflower, 5);
}
},
Gaillardia("Gaillardia", "gaillardia", "aristata", EnumFlowerType.Gaillardia, EnumFlowerColor.DarkOrange, EnumFlowerColor.Yellow) {
Gaillardia("Gaillardia", "gaillardia", "aristata", EnumFlowerType.GAILLARDIA, EnumFlowerColor.DarkOrange, EnumFlowerColor.Yellow) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setMoisture(EnumMoisture.DAMP);
@@ -800,7 +801,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Dandelion, Marigold, 5);
}
},
Auricula("Auricula", "primula", "auricula", EnumFlowerType.Auricula, EnumFlowerColor.Red, EnumFlowerColor.Yellow) {
Auricula("Auricula", "primula", "auricula", EnumFlowerType.AURICULA, EnumFlowerColor.Red, EnumFlowerColor.Yellow) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setPH(EnumAcidity.ACID);
@@ -820,7 +821,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Poppy, Geranium, 10);
}
},
Camellia("Camellia", "camellia", "japonica", EnumFlowerType.Camellia, EnumFlowerColor.Crimson) {
Camellia("Camellia", "camellia", "japonica", EnumFlowerType.CAMELLIA, EnumFlowerColor.Crimson) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setPH(EnumAcidity.ACID);
@@ -840,7 +841,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Hydrangea, Rose, 5);
}
},
Goldenrod("Goldenrod", "solidago", "canadensis", EnumFlowerType.Goldenrod, EnumFlowerColor.Gold) {
Goldenrod("Goldenrod", "solidago", "canadensis", EnumFlowerType.GOLDENROD, EnumFlowerColor.Gold) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
}
@@ -858,7 +859,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Lilac, Marigold, 10);
}
},
Althea("Althea", "althaea", "officinalis", EnumFlowerType.Althea, EnumFlowerColor.Thistle, EnumFlowerColor.MediumOrchid) {
Althea("Althea", "althaea", "officinalis", EnumFlowerType.ALTHEA, EnumFlowerColor.Thistle, EnumFlowerColor.MediumOrchid) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setTemperature(EnumTemperature.WARM);
@@ -879,7 +880,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Hydrangea, Iris, 5);
}
},
Penstemon("Penstemon", "penstemon", "digitalis", EnumFlowerType.Penstemon, EnumFlowerColor.MediumOrchid, EnumFlowerColor.Thistle) {
Penstemon("Penstemon", "penstemon", "digitalis", EnumFlowerType.PENSTEMON, EnumFlowerColor.MediumOrchid, EnumFlowerColor.Thistle) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setMoisture(EnumMoisture.DRY);
@@ -901,7 +902,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Peony, Lilac, 5);
}
},
Delphinium("Delphinium", "delphinium", "staphisagria", EnumFlowerType.Delphinium, EnumFlowerColor.DarkSlateBlue) {
Delphinium("Delphinium", "delphinium", "staphisagria", EnumFlowerType.DELPHINIUM, EnumFlowerColor.DarkSlateBlue) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
flowerSpecies.setMoisture(EnumMoisture.DAMP);
@@ -922,7 +923,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
registerMutation(Lilac, Bluet, 5);
}
},
Hollyhock("Hollyhock", "Alcea", "rosea", EnumFlowerType.Hollyhock, EnumFlowerColor.Black, EnumFlowerColor.Gold) {
Hollyhock("Hollyhock", "Alcea", "rosea", EnumFlowerType.HOLLYHOCK, EnumFlowerColor.Black, EnumFlowerColor.Gold) {
@Override
protected void setSpeciesProperties(IAlleleFlowerSpeciesBuilder flowerSpecies) {
}
@@ -943,14 +944,15 @@ public enum FlowerDefinition implements IFlowerDefinition {
public static FlowerDefinition[] VALUES = values();
private final IAlleleFlowerSpecies species;
IFlowerType<EnumFlowerType> type;
String name;
String binomial;
String branchName;
List<IAllele[]> variantTemplates;
private final IFlowerType<EnumFlowerType> type;
private final String name;
private final String binomial;
private final String branchName;
private final List<IAllele[]> variantTemplates;
@Nullable
IClassification branch;
EnumFlowerColor primaryColor, secondaryColor;
private IClassification branch;
private final EnumFlowerColor primaryColor;
private final EnumFlowerColor secondaryColor;
private IAllele[] template;
private IFlowerGenome genome;
@@ -962,12 +964,9 @@ public enum FlowerDefinition implements IFlowerDefinition {
this(name, branch, binomial, type, true, primaryColor, secondaryColor);
}
FlowerDefinition(String name, String branch, String binomial, IFlowerType<EnumFlowerType> type, boolean isDominant, EnumFlowerColor colour) {
this(name, branch, binomial, type, isDominant, colour, colour);
}
FlowerDefinition(String name, String branch, String binomial, IFlowerType<EnumFlowerType> flowerType, boolean isDominant, EnumFlowerColor primaryColor, EnumFlowerColor secondaryColor) {
String uid = Constants.BOTANY_MOD_ID + ".flower" + this;
String modId = Constants.BOTANY_MOD_ID;
String uid = modId + ".flower" + this;
String unlocalizedDescription = "botany.description.flower" + this;
String unlocalizedName = "botany.flowers.species." + name;
@@ -979,7 +978,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
this.primaryColor = primaryColor;
this.secondaryColor = secondaryColor;
IAlleleFlowerSpeciesBuilder speciesBuilder = FlowerManager.flowerFactory.createSpecies(uid, unlocalizedName, "Binnie's Mod Team", unlocalizedDescription, isDominant, getBranch(), binomial, flowerType);
IAlleleFlowerSpeciesBuilder speciesBuilder = BotanyAPI.flowerFactory.createSpecies(modId, uid, unlocalizedName, "Binnie's Mod Team", unlocalizedDescription, isDominant, getBranch(), binomial, flowerType);
setSpeciesProperties(speciesBuilder);
species = speciesBuilder.build();
if (this.branch != null) {
@@ -1005,7 +1004,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
}
public static void preInitFlowers() {
MinecraftForge.EVENT_BUS.post(new AlleleSpeciesRegisterEvent(FlowerManager.flowerRoot, IAlleleFlowerSpecies.class));
MinecraftForge.EVENT_BUS.post(new AlleleSpeciesRegisterEvent(BotanyAPI.flowerRoot, IAlleleFlowerSpecies.class));
for (FlowerDefinition def : values()) {
@SuppressWarnings("unchecked")
IFlowerType<EnumFlowerType> type = def.species.getType();
@@ -1106,7 +1105,7 @@ public enum FlowerDefinition implements IFlowerDefinition {
markAllelesAsValid(EnumBeeChromosome.HUMIDITY_TOLERANCE, EnumFlowerChromosome.PH_TOLERANCE);
markAllelesAsValid(EnumTreeChromosome.SAPPINESS, EnumFlowerChromosome.SAPPINESS);
template = Arrays.copyOf(FlowerTemplates.getDefaultTemplate(), EnumFlowerChromosome.values().length);
template = Arrays.copyOf(BotanyAPI.flowerRoot.getDefaultTemplate(), EnumFlowerChromosome.values().length);
AlleleHelper.getInstance().set(template, EnumFlowerChromosome.SPECIES, species);
AlleleHelper.getInstance().set(template, EnumFlowerChromosome.TEMPERATURE_TOLERANCE, EnumAllele.Tolerance.BOTH_1);
AlleleHelper.getInstance().set(template, EnumFlowerChromosome.PRIMARY, primaryColor.getFlowerColorAllele());
@@ -1122,6 +1121,6 @@ public enum FlowerDefinition implements IFlowerDefinition {
}
protected final IFlowerMutationBuilder registerMutation(FlowerDefinition parent1, FlowerDefinition parent2, int chance) {
return FlowerManager.flowerFactory.createMutation(parent1.species, parent2.species, getTemplate(), chance);
return BotanyAPI.flowerFactory.createMutation(parent1.species, parent2.species, getTemplate(), chance);
}
}
@@ -0,0 +1,36 @@
package binnie.botany.genetics;
import java.awt.Color;
import binnie.botany.api.genetics.IAlleleFlowerColor;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IClassification;
import binnie.botany.api.BotanyAPI;
import binnie.botany.api.genetics.IAlleleFlowerSpecies;
import binnie.botany.api.genetics.IAlleleFlowerSpeciesBuilder;
import binnie.botany.api.genetics.IFlowerFactory;
import binnie.botany.api.genetics.IFlowerMutationBuilder;
import binnie.botany.api.genetics.IFlowerType;
import binnie.botany.genetics.allele.AlleleFlowerSpecies;
import binnie.botany.models.FlowerSpriteManager;
public class FlowerFactory implements IFlowerFactory {
@Override
public IAlleleFlowerSpeciesBuilder createSpecies(String modId, String uid, String unlocalizedName, String authority, String unlocalizedDescription, boolean isDominant, IClassification branch, String binomial, IFlowerType flowerType) {
FlowerSpriteManager.initSprites(flowerType);
return new AlleleFlowerSpecies(modId, uid, unlocalizedName, authority, unlocalizedDescription, isDominant, branch, binomial, flowerType);
}
@Override
public IFlowerMutationBuilder createMutation(IAlleleFlowerSpecies allele0, IAlleleFlowerSpecies allele1, IAllele[] result, int chance) {
FlowerMutation mutation = new FlowerMutation(allele0, allele1, result, chance);
BotanyAPI.flowerRoot.registerMutation(mutation);
return mutation;
}
@Override
public IAlleleFlowerColor createFlowerColorAllele(String uid, int id, Color color, Color colorWilted, String name, String unlocalizedName, boolean isDominant) {
return new AlleleFlowerColor(uid, id, color, colorWilted, name, unlocalizedName, isDominant);
}
}
@@ -15,14 +15,14 @@ import forestry.api.genetics.IChromosome;
import forestry.api.genetics.ISpeciesRoot;
import forestry.core.genetics.Genome;
import binnie.Binnie;
import binnie.botany.api.EnumAcidity;
import binnie.botany.api.EnumFlowerChromosome;
import binnie.botany.api.EnumMoisture;
import binnie.botany.api.FlowerManager;
import binnie.botany.api.IAlleleFlowerSpecies;
import binnie.botany.api.IFlowerGenome;
import binnie.botany.api.IFlowerType;
import binnie.core.Binnie;
import binnie.botany.api.BotanyAPI;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
import binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.api.genetics.IAlleleFlowerSpecies;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.api.genetics.IFlowerType;
import binnie.botany.core.BotanyCore;
public class FlowerGenome extends Genome implements IFlowerGenome {
@@ -36,15 +36,15 @@ public class FlowerGenome extends Genome implements IFlowerGenome {
@Nullable
public static IAlleleFlowerSpecies getSpecies(ItemStack itemStack) {
if (!FlowerManager.flowerRoot.isMember(itemStack)) {
if (!BotanyAPI.flowerRoot.isMember(itemStack)) {
return null;
}
IAlleleSpecies species = getSpeciesDirectly(FlowerManager.flowerRoot, itemStack);
IAlleleSpecies species = getSpeciesDirectly(BotanyAPI.flowerRoot, itemStack);
if (species instanceof IAlleleFlowerSpecies) {
return (IAlleleFlowerSpecies) species;
}
return (IAlleleFlowerSpecies) getActiveAllele(itemStack, EnumFlowerChromosome.SPECIES, FlowerManager.flowerRoot);
return (IAlleleFlowerSpecies) getActiveAllele(itemStack, EnumFlowerChromosome.SPECIES, BotanyAPI.flowerRoot);
}
@Override
@@ -63,18 +63,18 @@ public class FlowerGenome extends Genome implements IFlowerGenome {
}
@Override
public FlowerColorAllele getPrimaryColor() {
return ((FlowerColorAllele) getActiveAllele(EnumFlowerChromosome.PRIMARY));
public AlleleFlowerColor getPrimaryColor() {
return ((AlleleFlowerColor) getActiveAllele(EnumFlowerChromosome.PRIMARY));
}
@Override
public FlowerColorAllele getSecondaryColor() {
return ((FlowerColorAllele) getActiveAllele(EnumFlowerChromosome.SECONDARY));
public AlleleFlowerColor getSecondaryColor() {
return ((AlleleFlowerColor) getActiveAllele(EnumFlowerChromosome.SECONDARY));
}
@Override
public FlowerColorAllele getStemColor() {
return ((FlowerColorAllele) getActiveAllele(EnumFlowerChromosome.STEM));
public AlleleFlowerColor getStemColor() {
return ((AlleleFlowerColor) getActiveAllele(EnumFlowerChromosome.STEM));
}
@Override
@@ -8,11 +8,11 @@ import forestry.api.genetics.IAllele;
import forestry.api.genetics.IMutation;
import forestry.core.genetics.mutations.Mutation;
import binnie.botany.api.IAlleleFlowerSpecies;
import binnie.botany.api.IFlowerGenome;
import binnie.botany.api.IFlowerMutation;
import binnie.botany.api.IFlowerMutationBuilder;
import binnie.botany.api.IFlowerRoot;
import binnie.botany.api.genetics.IAlleleFlowerSpecies;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.api.genetics.IFlowerMutation;
import binnie.botany.api.genetics.IFlowerMutationBuilder;
import binnie.botany.api.genetics.IFlowerRoot;
import binnie.botany.core.BotanyCore;
public class FlowerMutation extends Mutation implements IFlowerMutation, IFlowerMutationBuilder {
@@ -8,6 +8,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import binnie.botany.api.genetics.EnumFlowerColor;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -25,26 +26,28 @@ import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IMutation;
import forestry.api.genetics.ISpeciesType;
import forestry.core.genetics.SpeciesRoot;
import forestry.core.genetics.alleles.AlleleHelper;
import forestry.core.genetics.alleles.EnumAllele;
import binnie.botany.Botany;
import binnie.botany.api.EnumFlowerChromosome;
import binnie.botany.api.EnumFlowerStage;
import binnie.botany.api.IAlleleFlowerSpecies;
import binnie.botany.api.IBotanistTracker;
import binnie.botany.api.IColorMix;
import binnie.botany.api.IFlower;
import binnie.botany.api.IFlowerGenome;
import binnie.botany.api.IFlowerMutation;
import binnie.botany.api.IFlowerRoot;
import binnie.botany.flower.TileEntityFlower;
import binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.api.genetics.EnumFlowerStage;
import binnie.botany.api.genetics.IAlleleFlowerSpecies;
import binnie.botany.api.genetics.IBotanistTracker;
import binnie.botany.api.genetics.IColorMix;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.api.genetics.IFlowerMutation;
import binnie.botany.api.genetics.IFlowerRoot;
import binnie.botany.modules.ModuleFlowers;
import binnie.botany.tile.TileEntityFlower;
public class FlowerRoot extends SpeciesRoot implements IFlowerRoot {
static final String UID = "rootFlowers";
public static int flowerSpeciesCount = -1;
public static ArrayList<IFlower> flowerTemplates = new ArrayList<>();
private static ArrayList<IFlowerMutation> flowerMutations = new ArrayList<>();
private static ArrayList<IColorMix> colourMixes = new ArrayList<>();
Map<ItemStack, IFlower> conversions;
private static final String UID = "rootFlowers";
private static int flowerSpeciesCount = -1;
private static final ArrayList<IFlower> flowerTemplates = new ArrayList<>();
private static final ArrayList<IFlowerMutation> flowerMutations = new ArrayList<>();
private static final ArrayList<IColorMix> colourMixes = new ArrayList<>();
private final Map<ItemStack, IFlower> conversions;
public FlowerRoot() {
conversions = new HashMap<>();
@@ -97,11 +100,11 @@ public class FlowerRoot extends SpeciesRoot implements IFlowerRoot {
@Nullable
public EnumFlowerStage getType(ItemStack stack) {
Item item = stack.getItem();
if (Botany.flowerItem == item) {
if (ModuleFlowers.flowerItem == item) {
return EnumFlowerStage.SEED;
} else if (Botany.pollen == item) {
} else if (ModuleFlowers.pollen == item) {
return EnumFlowerStage.POLLEN;
} else if (Botany.seed == item) {
} else if (ModuleFlowers.seed == item) {
return EnumFlowerStage.SEED;
}
return null;
@@ -113,13 +116,13 @@ public class FlowerRoot extends SpeciesRoot implements IFlowerRoot {
return ItemStack.EMPTY;
}
Item flowerItem = Botany.flowerItem;
Item flowerItem = ModuleFlowers.flowerItem;
if (type == EnumFlowerStage.SEED) {
flowerItem = Botany.seed;
flowerItem = ModuleFlowers.seed;
} else if (type == EnumFlowerStage.POLLEN) {
flowerItem = Botany.pollen;
flowerItem = ModuleFlowers.pollen;
}
if (flowerItem != Botany.flowerItem) {
if (flowerItem != ModuleFlowers.flowerItem) {
((IFlower) flower).setAge(0);
}
@@ -189,7 +192,20 @@ public class FlowerRoot extends SpeciesRoot implements IFlowerRoot {
@Override
public IAllele[] getDefaultTemplate() {
return FlowerTemplates.getDefaultTemplate();
IAllele[] alleles = new IAllele[EnumFlowerChromosome.values().length];
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.SPECIES, FlowerDefinition.Poppy.getSpecies());
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.PRIMARY, EnumFlowerColor.Red.getFlowerColorAllele());
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.SECONDARY, EnumFlowerColor.Red.getFlowerColorAllele());
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.FERTILITY, EnumAllele.Fertility.NORMAL);
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.TERRITORY, EnumAllele.Territory.AVERAGE);
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.EFFECT, ModuleFlowers.alleleEffectNone);
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.LIFESPAN, EnumAllele.Lifespan.NORMAL);
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.TEMPERATURE_TOLERANCE, EnumAllele.Tolerance.NONE);
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.HUMIDITY_TOLERANCE, EnumAllele.Tolerance.NONE);
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.PH_TOLERANCE, EnumAllele.Tolerance.NONE);
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.SAPPINESS, EnumAllele.Sappiness.AVERAGE);
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.STEM, EnumFlowerColor.Green.getFlowerColorAllele());
return alleles;
}
@Override
@@ -281,7 +297,7 @@ public class FlowerRoot extends SpeciesRoot implements IFlowerRoot {
}
public boolean plant(World world, BlockPos pos, IFlower flower, GameProfile owner) {
boolean set = world.setBlockState(pos, Botany.flower.getDefaultState());
boolean set = world.setBlockState(pos, ModuleFlowers.flower.getDefaultState());
if (!set) {
return false;
}
@@ -318,7 +334,7 @@ public class FlowerRoot extends SpeciesRoot implements IFlowerRoot {
return;
}
world.setBlockState(pos.up(), Botany.flower.getDefaultState());
world.setBlockState(pos.up(), ModuleFlowers.flower.getDefaultState());
TileEntity flowerAbove = world.getTileEntity(pos.up());
if (flowerAbove != null && flowerAbove instanceof TileEntityFlower) {
((TileEntityFlower) flowerAbove).setSection(section + 1);
@@ -0,0 +1,21 @@
package binnie.botany.genetics;
import binnie.botany.api.BotanyAPI;
import binnie.botany.api.gardening.EnumFertiliserType;
import binnie.botany.api.gardening.IGardeningManager;
import binnie.genetics.api.acclimatiser.IToleranceType;
import net.minecraft.item.ItemStack;
public class TolerancePh implements IToleranceType {
@Override
public float getEffect(ItemStack stack) {
IGardeningManager gardening = BotanyAPI.gardening;
if (gardening.isFertiliser(EnumFertiliserType.ACID, stack)) {
return -0.5f * gardening.getFertiliserStrength(stack);
}
if (gardening.isFertiliser(EnumFertiliserType.ALKALINE, stack)) {
return 0.5f * gardening.getFertiliserStrength(stack);
}
return 0;
}
}
@@ -1,11 +1,11 @@
package binnie.botany.genetics;
package binnie.botany.genetics.allele;
import net.minecraft.world.World;
import forestry.api.genetics.IEffectData;
import binnie.botany.api.IAlleleFlowerEffect;
import binnie.botany.api.IFlowerGenome;
import binnie.botany.api.genetics.IAlleleFlowerEffect;
import binnie.botany.api.genetics.IFlowerGenome;
public class AlleleEffectNone implements IAlleleFlowerEffect {
@Override
@@ -1,4 +1,4 @@
package binnie.botany.genetics;
package binnie.botany.genetics.allele;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
@@ -12,13 +12,13 @@ import forestry.api.genetics.IClassification;
import forestry.api.genetics.ISpeciesRoot;
import forestry.core.genetics.alleles.AlleleSpecies;
import binnie.botany.api.EnumAcidity;
import binnie.botany.api.EnumFlowerChromosome;
import binnie.botany.api.EnumFlowerStage;
import binnie.botany.api.EnumMoisture;
import binnie.botany.api.IAlleleFlowerSpecies;
import binnie.botany.api.IAlleleFlowerSpeciesBuilder;
import binnie.botany.api.IFlowerType;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
import binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.api.genetics.EnumFlowerStage;
import binnie.botany.api.genetics.IAlleleFlowerSpecies;
import binnie.botany.api.genetics.IAlleleFlowerSpeciesBuilder;
import binnie.botany.api.genetics.IFlowerType;
import binnie.botany.core.BotanyCore;
public class AlleleFlowerSpecies extends AlleleSpecies implements IAlleleFlowerSpecies, IAlleleFlowerSpeciesBuilder {
@@ -27,6 +27,7 @@ public class AlleleFlowerSpecies extends AlleleSpecies implements IAlleleFlowerS
private EnumMoisture moisture = EnumMoisture.NORMAL;
public AlleleFlowerSpecies(
String modId,
String uid,
String unlocalizedName,
String authority,
@@ -35,7 +36,7 @@ public class AlleleFlowerSpecies extends AlleleSpecies implements IAlleleFlowerS
IClassification branch,
String binomial,
IFlowerType flowerType) {
super(uid, unlocalizedName, authority, unlocalizedDescription, isDominant, branch, binomial);
super(modId, uid, unlocalizedName, authority, unlocalizedDescription, isDominant, branch, binomial);
this.flowerType = flowerType;
}
@@ -0,0 +1,9 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.genetics.allele;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -0,0 +1,94 @@
package binnie.botany.genetics.gui.analyst;
import binnie.core.api.gui.IArea;
import binnie.core.api.gui.ITitledWidget;
import binnie.core.gui.controls.core.Control;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.genetics.IAlleleSpecies;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.api.genetics.IFlowerType;
import binnie.botany.gui.database.ControlColorDisplay;
import binnie.botany.models.FlowerSpriteManager;
import binnie.core.api.gui.IWidget;
import binnie.core.gui.controls.ControlTextCentered;
import binnie.core.gui.geometry.Point;
import binnie.core.gui.minecraft.control.ControlIconDisplay;
import binnie.core.gui.renderer.RenderUtil;
import binnie.core.util.I18N;
import binnie.genetics.api.analyst.AnalystConstants;
@SideOnly(Side.CLIENT)
public class AnalystPageAppearance extends Control implements ITitledWidget {
public AnalystPageAppearance(IWidget parent, IArea area, IFlower flower) {
super(parent, area);
setColor(3355443);
int y = 4;
IFlowerGenome genome = flower.getGenome();
IAlleleSpecies species = genome.getPrimary();
new ControlTextCentered(this, y, TextFormatting.UNDERLINE + getTitle()).setColor(getColor());
y += 12;
ControlColorDisplay a = new ControlColorDisplay(this, getWidth() / 2 - 28, y, genome.getPrimaryColor());
a.addTooltip(I18N.localise(AnalystConstants.APPEARANCE_KEY + ".primary"));
ControlColorDisplay b = new ControlColorDisplay(this, getWidth() / 2 - 8, y, genome.getSecondaryColor());
b.addTooltip(I18N.localise(AnalystConstants.APPEARANCE_KEY + ".secondary"));
ControlColorDisplay c = new ControlColorDisplay(this, getWidth() / 2 + 12, y, genome.getStemColor());
c.addTooltip(I18N.localise(AnalystConstants.APPEARANCE_KEY + ".stem"));
y += 26;
IFlowerType type = genome.getType();
int sections = type.getSections();
int width = (sections > 1) ? 50 : 100;
new FlowerIconDisplay(this, width, y, sections, flower, type);
}
@Override
public String getTitle() {
return I18N.localise(AnalystConstants.APPEARANCE_KEY + ".title");
}
private static class FlowerIconDisplay extends ControlIconDisplay {
private final int width;
private final int sections;
private final IFlower flower;
private final IFlowerType type;
public FlowerIconDisplay(AnalystPageAppearance analystPageAppearance, int width, int y, int sections, IFlower flower, IFlowerType type) {
super(analystPageAppearance, (analystPageAppearance.getWidth() - width) / 2, y - ((sections == 1) ? 0 : 0));
this.width = width;
this.sections = sections;
this.flower = flower;
this.type = type;
}
@Override
@SideOnly(Side.CLIENT)
public void onRenderForeground(int guiWidth, int guiHeight) {
GlStateManager.pushMatrix();
float scale = width / 16.0f;
int dy = (sections > 1) ? 16 : 0;
GlStateManager.scale(scale, scale, 1.0f);
RenderUtil.setColour(flower.getGenome().getStemColor().getColor(false));
if (sections > 1) {
RenderUtil.drawSprite(Point.ZERO, FlowerSpriteManager.getStem(type, 1, true));
}
RenderUtil.drawSprite(new Point(0, dy), FlowerSpriteManager.getStem(type, 0, true));
RenderUtil.setColour(flower.getGenome().getPrimaryColor().getColor(false));
if (sections > 1) {
RenderUtil.drawSprite(Point.ZERO, FlowerSpriteManager.getPetal(type, 1, true));
}
RenderUtil.drawSprite(new Point(0, dy), FlowerSpriteManager.getPetal(type, 0, true));
RenderUtil.setColour(flower.getGenome().getSecondaryColor().getColor(false));
if (sections > 1) {
RenderUtil.drawSprite(Point.ZERO, FlowerSpriteManager.getVariant(type, 1, true));
}
RenderUtil.drawSprite(new Point(0, dy), FlowerSpriteManager.getVariant(type, 0, true));
GlStateManager.popMatrix();
}
}
}
@@ -1,31 +1,32 @@
package binnie.genetics.gui.analyst.flower;
package binnie.botany.genetics.gui.analyst;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.TextFormatting;
import binnie.botany.Botany;
import binnie.botany.api.EnumAcidity;
import binnie.botany.api.EnumMoisture;
import binnie.botany.api.IFlower;
import binnie.botany.gardening.BlockSoil;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.blocks.BlockSoil;
import binnie.botany.modules.ModuleGardening;
import binnie.core.api.gui.IArea;
import binnie.core.api.gui.ITitledWidget;
import binnie.core.api.gui.IWidget;
import binnie.core.genetics.Tolerance;
import binnie.core.gui.IWidget;
import binnie.core.gui.controls.ControlText;
import binnie.core.gui.controls.ControlTextCentered;
import binnie.core.gui.controls.ControlToleranceBar;
import binnie.core.gui.controls.core.Control;
import binnie.core.gui.geometry.Area;
import binnie.core.gui.geometry.TextJustification;
import binnie.core.gui.minecraft.control.ControlItemDisplay;
import binnie.core.util.I18N;
import binnie.genetics.gui.analyst.AnalystConstants;
import binnie.genetics.gui.analyst.ControlAnalystPage;
import binnie.genetics.gui.analyst.ControlToleranceBar;
import binnie.genetics.api.analyst.AnalystConstants;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.TextFormatting;
public class AnalystPageSoil extends ControlAnalystPage {
public AnalystPageSoil(IWidget parent, Area area, IFlower flower) {
public class AnalystPageSoil extends Control implements ITitledWidget {
public AnalystPageSoil(IWidget parent, IArea area, IFlower flower) {
super(parent, area);
setColor(6697728);
EnumMoisture moisture = flower.getGenome().getPrimary().getMoisture();
@@ -81,7 +82,7 @@ public class AnalystPageSoil extends ControlAnalystPage {
recomPH = EnumAcidity.ALKALINE;
}
}
ItemStack stack = new ItemStack(Botany.gardening().soil, 1, BlockSoil.getMeta(recomPH, recomMoisture));
ItemStack stack = new ItemStack(ModuleGardening.soil, 1, BlockSoil.getMeta(recomPH, recomMoisture));
ControlItemDisplay recomSoil = new ControlItemDisplay(this, (getWidth() - 24) / 2, y, 24);
recomSoil.setItemStack(stack);
recomSoil.setTooltip();
@@ -92,7 +93,7 @@ public class AnalystPageSoil extends ControlAnalystPage {
for (EnumAcidity a : EnumSet.range(EnumAcidity.ACID, EnumAcidity.ALKALINE)) {
for (EnumMoisture b : EnumSet.range(EnumMoisture.DRY, EnumMoisture.DAMP)) {
if (Tolerance.canTolerate(pH, a, pHTol) && Tolerance.canTolerate(moisture, b, moistureTol) && (a != recomPH || b != recomMoisture)) {
stacks.add(new ItemStack(Botany.gardening().soil, 1, BlockSoil.getMeta(a, b)));
stacks.add(new ItemStack(ModuleGardening.soil, 1, BlockSoil.getMeta(a, b)));
}
}
}
@@ -107,35 +108,47 @@ public class AnalystPageSoil extends ControlAnalystPage {
}
protected void createMoisture(IWidget parent, int x, int y, int w, int h, EnumMoisture value, forestry.api.genetics.EnumTolerance tol) {
new ControlToleranceBar<EnumMoisture>(parent, x, y, w, h, EnumMoisture.class) {
@Override
protected String getName(EnumMoisture value) {
return value.getLocalisedName(false);
}
@Override
protected int getColour(EnumMoisture value) {
return (new int[]{13434828, 6737151, 3368703})[value.ordinal()];
}
}.setValues(value, tol);
new MoistureBar(parent, x, y, w, h).setValues(value, tol);
}
protected void createAcidity(IWidget parent, int x, int y, int w, int h, EnumAcidity value, forestry.api.genetics.EnumTolerance tol) {
new ControlToleranceBar<EnumAcidity>(parent, x, y, w, h, EnumAcidity.class) {
@Override
protected String getName(EnumAcidity value) {
return value.getLocalisedName(false);
}
@Override
protected int getColour(EnumAcidity value) {
return (new int[]{16711782, 65280, 26367})[value.ordinal()];
}
}.setValues(value, tol);
new AcidityBar(parent, x, y, w, h).setValues(value, tol);
}
@Override
public String getTitle() {
return I18N.localise(AnalystConstants.SOIL_KEY + ".title");
}
private static class MoistureBar extends ControlToleranceBar<EnumMoisture> {
public MoistureBar(IWidget parent, int x, int y, int w, int h) {
super(parent, x, y, w, h, EnumMoisture.class);
}
@Override
protected String getName(EnumMoisture value) {
return value.getLocalisedName(false);
}
@Override
protected int getColour(EnumMoisture value) {
return (new int[]{13434828, 6737151, 3368703})[value.ordinal()];
}
}
private static class AcidityBar extends ControlToleranceBar<EnumAcidity> {
public AcidityBar(IWidget parent, int x, int y, int w, int h) {
super(parent, x, y, w, h, EnumAcidity.class);
}
@Override
protected String getName(EnumAcidity value) {
return value.getLocalisedName(false);
}
@Override
protected int getColour(EnumAcidity value) {
return (new int[]{16711782, 65280, 26367})[value.ordinal()];
}
}
}
@@ -0,0 +1,118 @@
package binnie.botany.genetics.gui.analyst;
import java.util.List;
import binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.core.Constants;
import binnie.core.api.gui.IArea;
import binnie.core.api.gui.ITitledWidget;
import binnie.core.api.gui.IWidget;
import binnie.core.gui.controls.ControlTextCentered;
import binnie.core.util.I18N;
import binnie.core.util.TimeUtil;
import binnie.genetics.api.analyst.IAnalystManager;
import binnie.genetics.api.analyst.IAnalystPagePlugin;
import binnie.genetics.api.analyst.IBiologyPlugin;
import binnie.genetics.api.analyst.IClimatePlugin;
import binnie.genetics.api.analyst.AnalystConstants;
import forestry.api.genetics.EnumTolerance;
import forestry.api.genetics.IAlleleTolerance;
import forestry.api.genetics.IIndividual;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class FlowerAnalystPagePlugin implements IAnalystPagePlugin<IFlower> {
@Override
public boolean handles(IIndividual individual) {
return individual instanceof IFlower;
}
@Override
@SideOnly(Side.CLIENT)
public void addAnalystPages(IFlower individual, IWidget parent, IArea pageSize, List<ITitledWidget> analystPages, IAnalystManager analystManager) {
analystPages.add(analystManager.createClimatePage(parent, pageSize, individual, new ClimatePlugin()));
analystPages.add(new AnalystPageSoil(parent, pageSize, individual));
analystPages.add(analystManager.createBiologyPage(parent, pageSize, individual, new BiologyPlugin()));
analystPages.add(new AnalystPageAppearance(parent, pageSize, individual));
}
private static class BiologyPlugin implements IBiologyPlugin<IFlower> {
@Override
@SideOnly(Side.CLIENT)
public int addBiologyPages(IFlower flower, IWidget parent, int y, IAnalystManager analystManager) {
y += 10;
int butterflySpawn2 = Math.round(Constants.SPAWN_KOEF / (flower.getGenome().getSappiness() * 0.2f));
new ControlTextCentered(parent, y, I18N.localise(AnalystConstants.BIOLOGY_KEY + ".mothSpawn", TimeUtil.getTimeString(butterflySpawn2)))
.setColor(parent.getColor());
y += 30;
int fertility = flower.getGenome().getFertility();
float chanceDispersal = 0.8f;
chanceDispersal += 0.2f * fertility;
if (chanceDispersal > 1.0f) {
chanceDispersal = 1.0f;
}
float chancePollinate = 0.6f;
chancePollinate += 0.25f * fertility;
if (chancePollinate > 1.0f) {
chancePollinate = 1.0f;
}
float maxAge = flower.getMaxAge();
float ageChance = flower.getGenome().getAgeChance();
float dispersalTime = Constants.SPAWN_KOEF / chanceDispersal;
float pollinateTime = Constants.SPAWN_KOEF / chancePollinate;
float lifespan2 = maxAge * 20.0f * 68.27f / ageChance;
float floweringLifespan = (maxAge - 1) * 20.0f * 68.27f / ageChance - Constants.SPAWN_KOEF;
new ControlTextCentered(parent, y, I18N.localise(AnalystConstants.BIOLOGY_KEY + ".averageLifespan"))
.setColor(parent.getColor());
y += 12;
new ControlTextCentered(parent, y, TextFormatting.BOLD + TimeUtil.getMCDayString(lifespan2))
.setColor(parent.getColor());
y += 22;
new ControlTextCentered(parent, y, I18N.localise(AnalystConstants.BIOLOGY_KEY + ".seedDispersal"))
.setColor(parent.getColor());
y += 12;
new ControlTextCentered(parent, y, TextFormatting.ITALIC + I18N.localise(AnalystConstants.BIOLOGY_KEY + ".perLifetime", (int) (floweringLifespan / dispersalTime)))
.setColor(parent.getColor());
y += 22;
new ControlTextCentered(parent, y, I18N.localise(AnalystConstants.BIOLOGY_KEY + ".pollination"))
.setColor(parent.getColor());
y += 12;
new ControlTextCentered(parent, y, TextFormatting.ITALIC + I18N.localise(AnalystConstants.BIOLOGY_KEY + ".perLifetime", (int) (floweringLifespan / pollinateTime)))
.setColor(parent.getColor());
y += 22;
return y;
}
}
private static class ClimatePlugin implements IClimatePlugin<IFlower> {
@Override
public EnumTolerance getTemperatureTolerance(IFlower flower) {
IFlowerGenome genome = flower.getGenome();
IAlleleTolerance tolerance = (IAlleleTolerance) genome.getActiveAllele(EnumFlowerChromosome.TEMPERATURE_TOLERANCE);
return tolerance.getValue();
}
@Override
public EnumTolerance getHumidityTolerance(IFlower flower) {
return EnumTolerance.BOTH_5;
}
@Override
public boolean showHumiditySection() {
return false;
}
}
}
@@ -0,0 +1,9 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.genetics.gui.analyst;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -1,5 +1,6 @@
package binnie.botany.core;
package binnie.botany.gui;
import binnie.design.gui.WindowDesigner;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.tileentity.TileEntity;
@@ -14,22 +15,27 @@ import binnie.core.gui.minecraft.Window;
public enum BotanyGUI implements IBinnieGUID {
DATABASE,
DATABASE_NEI;
DATABASE_MASTER,
TILEWORKER;
@Override
public Window getWindow(EntityPlayer player, World world, int x, int y, int z, Side side) {
Window window = null;
TileEntity tileEntity = world.getTileEntity(new BlockPos(x, y, z));
IInventory object = null;
final TileEntity tileEntity = world.getTileEntity(new BlockPos(x, y, z));
IInventory inventory = null;
if (tileEntity instanceof IInventory) {
object = (IInventory) tileEntity;
inventory = (IInventory) tileEntity;
}
switch (this) {
case DATABASE:
case DATABASE_NEI: {
case DATABASE_MASTER: {
window = WindowBotanistDatabase.create(player, side, this != BotanyGUI.DATABASE);
break;
}
case TILEWORKER: {
window = WindowDesigner.create(player, inventory, side);
break;
}
}
return window;
}
@@ -4,10 +4,10 @@ import net.minecraft.client.util.ITooltipFlag;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.api.IFlowerColor;
import binnie.botany.api.genetics.IFlowerColor;
import binnie.core.gui.Attribute;
import binnie.core.gui.ITooltip;
import binnie.core.gui.IWidget;
import binnie.core.api.gui.IWidget;
import binnie.core.gui.Tooltip;
import binnie.core.gui.controls.core.Control;
import binnie.core.gui.controls.core.IControlValue;
@@ -40,6 +40,7 @@ public class ControlColorDisplay extends Control implements IControlValue<IFlowe
}
@Override
@SideOnly(Side.CLIENT)
public void getTooltip(Tooltip tooltip, ITooltipFlag tooltipFlag) {
super.getTooltip(tooltip, tooltipFlag);
tooltip.add(value.getColorName());
@@ -1,12 +1,12 @@
package binnie.botany.gui.database;
import binnie.botany.api.IColorMix;
import binnie.core.gui.IWidget;
import binnie.botany.api.genetics.IColorMix;
import binnie.core.api.gui.IWidget;
import binnie.core.gui.controls.listbox.ControlListBox;
public class ControlColorMixBox extends ControlListBox<IColorMix> {
private int index;
private Type type;
private final Type type;
public ControlColorMixBox(IWidget parent, int x, int y, int width, int height, Type type) {
super(parent, x, y, width, height, 12);
@@ -1,6 +1,6 @@
package binnie.botany.gui.database;
import binnie.botany.api.IColorMix;
import binnie.botany.api.genetics.IColorMix;
import binnie.core.gui.controls.listbox.ControlList;
import binnie.core.gui.controls.listbox.ControlOption;
@@ -4,25 +4,25 @@ import net.minecraft.client.util.ITooltipFlag;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.api.IColorMix;
import binnie.botany.api.genetics.IColorMix;
import binnie.core.gui.Attribute;
import binnie.core.gui.CraftGUI;
import binnie.core.gui.ITooltip;
import binnie.core.gui.IWidget;
import binnie.core.api.gui.IWidget;
import binnie.core.gui.Tooltip;
import binnie.core.gui.controls.core.Control;
import binnie.core.gui.database.DatabaseConstants;
import binnie.core.gui.geometry.Point;
import binnie.core.gui.resource.Texture;
import binnie.core.gui.resource.minecraft.CraftGUITextureSheet;
import binnie.core.gui.resource.minecraft.StandardTexture;
import binnie.core.gui.resource.textures.Texture;
import binnie.core.gui.resource.textures.CraftGUITextureSheet;
import binnie.core.gui.resource.textures.StandardTexture;
import binnie.core.util.I18N;
public class ControlColorMixSymbol extends Control implements ITooltip {
static Texture MutationPlus = new StandardTexture(2, 94, 16, 16, CraftGUITextureSheet.CONTROLS_2);
static Texture MutationArrow = new StandardTexture(20, 94, 32, 16, CraftGUITextureSheet.CONTROLS_2);
IColorMix value;
int type;
private static final Texture MUTATION_PLUS = new StandardTexture(2, 94, 16, 16, CraftGUITextureSheet.CONTROLS);
private static final Texture MUTATION_ARROW = new StandardTexture(20, 94, 32, 16, CraftGUITextureSheet.CONTROLS);
private final IColorMix value;
private final int type;
protected ControlColorMixSymbol(IWidget parent, int x, int y, int type, IColorMix value) {
super(parent, x, y, 16 + type * 16, 16);
@@ -36,17 +36,12 @@ public class ControlColorMixSymbol extends Control implements ITooltip {
public void onRenderBackground(int guiWidth, int guiHeight) {
super.onRenderBackground(guiWidth, guiHeight);
if (type == 0) {
CraftGUI.RENDER.texture(ControlColorMixSymbol.MutationPlus, Point.ZERO);
CraftGUI.RENDER.texture(ControlColorMixSymbol.MUTATION_PLUS, Point.ZERO);
} else {
CraftGUI.RENDER.texture(ControlColorMixSymbol.MutationArrow, Point.ZERO);
CraftGUI.RENDER.texture(ControlColorMixSymbol.MUTATION_ARROW, Point.ZERO);
}
}
public void setValue(IColorMix value) {
this.value = value;
setColor(0xffffff);
}
@Override
public void getTooltip(Tooltip tooltip, ITooltipFlag tooltipFlag) {
if (type == 1) {
@@ -3,7 +3,7 @@ package binnie.botany.gui.database;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.api.IFlowerColor;
import binnie.botany.api.genetics.IFlowerColor;
import binnie.core.gui.Attribute;
import binnie.core.gui.CraftGUI;
import binnie.core.gui.controls.listbox.ControlList;
@@ -13,8 +13,8 @@ import binnie.core.gui.geometry.Point;
@SideOnly(Side.CLIENT)
public class ControlColorOption extends ControlTextOption<IFlowerColor> {
private ControlColorDisplay controlBee;
private Point boxPosition;
private final ControlColorDisplay controlBee;
private final Point boxPosition;
public ControlColorOption(ControlList<IFlowerColor> controlList, IFlowerColor option, int y) {
super(controlList, option, option.getColorName(), y);
@@ -3,10 +3,10 @@ package binnie.botany.gui.database;
import java.util.ArrayList;
import java.util.List;
import binnie.botany.api.IColorMix;
import binnie.botany.api.IFlowerColor;
import binnie.botany.api.genetics.IColorMix;
import binnie.botany.api.genetics.IFlowerColor;
import binnie.botany.core.BotanyCore;
import binnie.core.gui.IWidget;
import binnie.core.api.gui.IWidget;
import binnie.core.gui.controls.ControlText;
import binnie.core.gui.controls.ControlTextCentered;
import binnie.core.gui.database.DatabaseConstants;
@@ -15,8 +15,8 @@ import binnie.core.gui.database.PageAbstract;
import binnie.core.util.I18N;
public class PageColorMix extends PageAbstract<IFlowerColor> {
ControlText title;
ControlColorMixBox list;
private final ControlText title;
private final ControlColorMixBox list;
public PageColorMix(IWidget parent, DatabaseTab tab) {
super(parent, tab);
@@ -3,10 +3,10 @@ package binnie.botany.gui.database;
import java.util.ArrayList;
import java.util.List;
import binnie.botany.api.IColorMix;
import binnie.botany.api.IFlowerColor;
import binnie.botany.api.genetics.IColorMix;
import binnie.botany.api.genetics.IFlowerColor;
import binnie.botany.core.BotanyCore;
import binnie.core.gui.IWidget;
import binnie.core.api.gui.IWidget;
import binnie.core.gui.controls.ControlText;
import binnie.core.gui.controls.ControlTextCentered;
import binnie.core.gui.database.DatabaseConstants;
@@ -15,13 +15,13 @@ import binnie.core.gui.database.PageAbstract;
import binnie.core.util.I18N;
public class PageColorMixResultant extends PageAbstract<IFlowerColor> {
ControlText pageSpeciesFurther_Title;
ControlColorMixBox pageSpeciesFurther_List;
private final ControlText pageSpeciesFurtherTitle;
private final ControlColorMixBox pageSpeciesFurtherList;
public PageColorMixResultant(IWidget parent, DatabaseTab tab) {
super(parent, tab);
pageSpeciesFurther_Title = new ControlTextCentered(this, 8, I18N.localise(DatabaseConstants.BOTANY_PAGES_KEY + ".species_further.title"));
pageSpeciesFurther_List = new ControlColorMixBox(this, 4, 20, 136, 152, ControlColorMixBox.Type.RESULTANT);
pageSpeciesFurtherTitle = new ControlTextCentered(this, 8, I18N.localise(DatabaseConstants.BOTANY_PAGES_KEY + ".species_further.title"));
pageSpeciesFurtherList = new ControlColorMixBox(this, 4, 20, 136, 152, ControlColorMixBox.Type.RESULTANT);
}
@Override
@@ -32,6 +32,6 @@ public class PageColorMixResultant extends PageAbstract<IFlowerColor> {
mixes.add(mix);
}
}
pageSpeciesFurther_List.setOptions(mixes);
pageSpeciesFurtherList.setOptions(mixes);
}
}
@@ -1,19 +1,19 @@
package binnie.botany.gui.database;
import binnie.botany.api.BotanyAPI;
import net.minecraft.item.ItemStack;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IAlleleSpecies;
import forestry.api.genetics.IIndividual;
import binnie.Binnie;
import binnie.botany.api.EnumFlowerChromosome;
import binnie.botany.api.EnumFlowerStage;
import binnie.botany.api.IAlleleFlowerSpecies;
import binnie.botany.api.IFlower;
import binnie.botany.api.IFlowerGenome;
import binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.api.genetics.EnumFlowerStage;
import binnie.botany.api.genetics.IAlleleFlowerSpecies;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.core.BotanyCore;
import binnie.core.gui.IWidget;
import binnie.core.api.gui.IWidget;
import binnie.core.gui.controls.ControlText;
import binnie.core.gui.controls.core.Control;
import binnie.core.gui.controls.scroll.ControlScrollableContent;
@@ -34,14 +34,14 @@ public class PageSpeciesFlowerGenome extends PageSpecies {
@Override
public void onValueChanged(IAlleleSpecies species) {
deleteAllChildren();
IAllele[] template = Binnie.GENETICS.getFlowerRoot().getTemplate(species.getUID());
IAllele[] template = BotanyAPI.flowerRoot.getTemplate(species.getUID());
if (template == null) {
return;
}
IFlower tree = Binnie.GENETICS.getFlowerRoot().templateAsIndividual(template);
IFlowerGenome genome = tree.getGenome();
IAlleleFlowerSpecies treeSpecies = genome.getPrimary();
IFlower flower = BotanyAPI.flowerRoot.templateAsIndividual(template);
IFlowerGenome genome = flower.getGenome();
IAlleleFlowerSpecies flowerSpecies = genome.getPrimary();
int w = 144;
int h = 176;
new ControlText(this, new Area(0, 4, w, 16), I18N.localise(DatabaseConstants.BOTANY_GENOME_KEY + ".title"), TextJustification.MIDDLE_CENTER);
@@ -54,15 +54,15 @@ public class PageSpeciesFlowerGenome extends PageSpecies {
int th = 14;
int th2 = 18;
new ControlText(contents, new Area(0, y, w2, th), I18N.localise(DatabaseConstants.BOTANY_GENOME_KEY + ".temp"), TextJustification.MIDDLE_RIGHT);
new ControlText(contents, new Area(w2, y, w3, th), treeSpecies.getTemperature().getName(), TextJustification.MIDDLE_LEFT);
new ControlText(contents, new Area(w2, y, w3, th), flowerSpecies.getTemperature().getName(), TextJustification.MIDDLE_LEFT);
y += th;
new ControlText(contents, new Area(0, y, w2, th), I18N.localise(DatabaseConstants.BOTANY_GENOME_KEY + ".moist"), TextJustification.MIDDLE_RIGHT);
new ControlText(contents, new Area(w2, y, w3, th), treeSpecies.getMoisture().getLocalisedName(false), TextJustification.MIDDLE_LEFT);
new ControlText(contents, new Area(w2, y, w3, th), flowerSpecies.getMoisture().getLocalisedName(false), TextJustification.MIDDLE_LEFT);
y += th;
new ControlText(contents, new Area(0, y, w2, th), I18N.localise(DatabaseConstants.BOTANY_GENOME_KEY + ".ph"), TextJustification.MIDDLE_RIGHT);
new ControlText(contents, new Area(w2, y, w3, th), treeSpecies.getPH().getLocalisedName(false), TextJustification.MIDDLE_LEFT);
new ControlText(contents, new Area(w2, y, w3, th), flowerSpecies.getPH().getLocalisedName(false), TextJustification.MIDDLE_LEFT);
y += th;
new ControlText(contents, new Area(0, y, w2, th), I18N.localise(DatabaseConstants.BOTANY_GENOME_KEY + ".fertility"), TextJustification.MIDDLE_RIGHT);
@@ -82,7 +82,7 @@ public class PageSpeciesFlowerGenome extends PageSpecies {
int x = w2;
int tot = 0;
for (IIndividual vid : BotanyCore.getFlowerRoot().getIndividualTemplates()) {
if (vid.getGenome().getPrimary() == treeSpecies) {
if (vid.getGenome().getPrimary() == flowerSpecies) {
if (tot > 0 && tot % 3 == 0) {
x -= 54;
y += 18;
@@ -4,17 +4,19 @@ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import binnie.core.api.gui.IArea;
import binnie.core.gui.controls.page.ControlPage;
import binnie.core.gui.database.ModeWidgets;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.Binnie;
import binnie.botany.Botany;
import binnie.botany.api.IFlowerColor;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.core.AbstractMod;
import binnie.core.gui.IWidget;
import binnie.botany.api.genetics.IFlowerColor;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.modules.ModuleFlowers;
import binnie.core.api.gui.IWidget;
import binnie.core.gui.controls.listbox.ControlListBox;
import binnie.core.gui.database.DatabaseConstants;
import binnie.core.gui.database.DatabaseTab;
@@ -27,15 +29,12 @@ import binnie.core.gui.database.PageSpeciesMutations;
import binnie.core.gui.database.PageSpeciesOverview;
import binnie.core.gui.database.PageSpeciesResultant;
import binnie.core.gui.database.WindowAbstractDatabase;
import binnie.core.gui.geometry.Area;
import binnie.core.gui.minecraft.Window;
import binnie.core.util.I18N;
public class WindowBotanistDatabase extends WindowAbstractDatabase {
private ControlListBox<EnumFlowerColor> selectionBoxColors;
public WindowBotanistDatabase(EntityPlayer player, Side side, boolean nei) {
super(player, side, nei, Binnie.GENETICS.flowerBreedingSystem, 130);
super(player, side, nei, ModuleFlowers.flowerBreedingSystem, 130);
}
public static Window create(EntityPlayer player, Side side, boolean nei) {
@@ -45,22 +44,27 @@ public class WindowBotanistDatabase extends WindowAbstractDatabase {
@Override
@SideOnly(Side.CLIENT)
protected void addTabs() {
new PageSpeciesOverview(getInfoPages(Mode.SPECIES), new DatabaseTab(Botany.instance, "species.overview", 0));
new PageSpeciesFlowerGenome(getInfoPages(Mode.SPECIES), new DatabaseTab(Botany.instance, "genome.title", 0));
new PageSpeciesClassification(getInfoPages(Mode.SPECIES), new DatabaseTab(Botany.instance, "species.classification", 0));
new PageSpeciesResultant(getInfoPages(Mode.SPECIES), new DatabaseTab(Botany.instance, "species.resultant", 0));
new PageSpeciesMutations(getInfoPages(Mode.SPECIES), new DatabaseTab(Botany.instance, "species.further", 0));
new PageBranchOverview(getInfoPages(Mode.BRANCHES), new DatabaseTab(Botany.instance, "branches.overview", 0));
new PageBranchSpecies(getInfoPages(Mode.BRANCHES), new DatabaseTab(Botany.instance, "branches.species", 0));
createMode(FlowerMode.Color, new FlowerColorModeWidgets());
new PageColorMixResultant(getInfoPages(FlowerMode.Color), new DatabaseTab(Botany.instance, "color.resultant", 0));
new PageColorMix(getInfoPages(FlowerMode.Color), new DatabaseTab(Botany.instance, "color.further", 0));
new PageBreeder(getInfoPages(Mode.BREEDER), getUsername(), new DatabaseTab(Botany.instance, "breeder", 0));
new PageSpeciesOverview(getInfoPages(Mode.SPECIES), new DatabaseTab(Botany.instance, "species.overview"));
new PageSpeciesFlowerGenome(getInfoPages(Mode.SPECIES), new DatabaseTab(Botany.instance, "genome.title"));
new PageSpeciesClassification(getInfoPages(Mode.SPECIES), new DatabaseTab(Botany.instance, "species.classification"));
new PageSpeciesResultant(getInfoPages(Mode.SPECIES), new DatabaseTab(Botany.instance, "species.resultant"));
new PageSpeciesMutations(getInfoPages(Mode.SPECIES), new DatabaseTab(Botany.instance, "species.further"));
new PageBranchOverview(getInfoPages(Mode.BRANCHES), new DatabaseTab(Botany.instance, "branches.overview"));
new PageBranchSpecies(getInfoPages(Mode.BRANCHES), new DatabaseTab(Botany.instance, "branches.species"));
createMode(FlowerMode.Color, new ModeWidgets(FlowerMode.Color, this, (area, modePage) -> {
FlowerColorControlListBox listBox = new FlowerColorControlListBox(modePage, area);
List<IFlowerColor> colors = Arrays.stream(EnumFlowerColor.values()).map(EnumFlowerColor::getFlowerColorAllele).collect(Collectors.toList());
listBox.setOptions(colors);
return listBox;
}));
new PageColorMixResultant(getInfoPages(FlowerMode.Color), new DatabaseTab(Botany.instance, "color.resultant"));
new PageColorMix(getInfoPages(FlowerMode.Color), new DatabaseTab(Botany.instance, "color.further"));
new PageBreeder(getInfoPages(Mode.BREEDER), getUsername(), new DatabaseTab(Botany.instance, "breeder"));
}
@Override
protected AbstractMod getMod() {
return Botany.instance;
protected String getModId() {
return Botany.instance.getModId();
}
@Override
@@ -78,22 +82,14 @@ public class WindowBotanistDatabase extends WindowAbstractDatabase {
}
@SideOnly(Side.CLIENT)
private class FlowerColorModeWidgets extends ModeWidgets {
public FlowerColorModeWidgets() {
super(FlowerMode.Color, WindowBotanistDatabase.this);
private static class FlowerColorControlListBox extends ControlListBox<IFlowerColor> {
public FlowerColorControlListBox(ControlPage<IDatabaseMode> modePage, IArea area) {
super(modePage, area.xPos(), area.yPos(), area.width(), area.height(), 12);
}
@Override
public void createListBox(Area area) {
listBox = new ControlListBox<IFlowerColor>(modePage, area.xPos(), area.yPos(), area.width(), area.height(), 12) {
@Override
public IWidget createOption(IFlowerColor value, int y) {
return new ControlColorOption(getContent(), value, y);
}
};
List<IFlowerColor> colors = Arrays.stream(EnumFlowerColor.values()).map(c -> c.getFlowerColorAllele()).collect(Collectors.toList());
listBox.setOptions(colors);
public IWidget createOption(IFlowerColor value, int y) {
return new ControlColorOption(getContent(), value, y);
}
}
}
@@ -1,7 +1,7 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.farm;
package binnie.botany.gui;
import javax.annotation.ParametersAreNonnullByDefault;
@@ -5,7 +5,10 @@ import java.util.Locale;
import net.minecraft.item.ItemStack;
import binnie.botany.Botany;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.modules.ModuleGardening;
import binnie.core.item.IItemMiscProvider;
import binnie.core.util.I18N;
@@ -19,15 +22,18 @@ public enum BotanyItems implements IItemMiscProvider {
MORTAR,
WEEDKILLER;
String name;
private final String name;
BotanyItems() {
name = name().toLowerCase(Locale.ENGLISH);
}
@Override
@SideOnly(Side.CLIENT)
public void addInformation(List<String> tooltip) {
// ignored
if(this == MORTAR){
tooltip.add(I18N.localise("item.botany.mortar.tooltip"));
}
}
@Override
@@ -42,7 +48,7 @@ public enum BotanyItems implements IItemMiscProvider {
@Override
public ItemStack get(int size) {
return new ItemStack(Botany.gardening().misc, size, ordinal());
return new ItemStack(ModuleGardening.misc, size, ordinal());
}
@Override
@@ -0,0 +1,49 @@
package binnie.botany.items;
import java.util.List;
import java.util.Locale;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.modules.ModuleCeramic;
import binnie.core.item.IItemMiscProvider;
import binnie.core.util.I18N;
public enum CeramicItems implements IItemMiscProvider {
MORTAR;
private final String name;
CeramicItems() {
name = name().toLowerCase(Locale.ENGLISH);
}
@Override
@SideOnly(Side.CLIENT)
public void addInformation(List<String> tooltip) {
// ignored
}
@Override
public String getDisplayName(ItemStack stack) {
return I18N.localise("item.botany." + name + ".name");
}
@Override
public String getModelPath() {
return name;
}
@Override
public ItemStack get(int size) {
return new ItemStack(ModuleCeramic.misc, size, ordinal());
}
@Override
public boolean isActive() {
return true;
}
}
@@ -1,4 +1,4 @@
package binnie.botany.flower;
package binnie.botany.items;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
@@ -15,8 +15,8 @@ public enum EnumTubeInsulate {
public static final EnumTubeInsulate[] VALUES = values();
int color;
String uid;
private final int color;
private final String uid;
EnumTubeInsulate(int color, String uid) {
this.color = color;
@@ -1,4 +1,4 @@
package binnie.botany.flower;
package binnie.botany.items;
import binnie.core.util.I18N;
@@ -10,8 +10,8 @@ public enum EnumTubeMaterial {
public static final EnumTubeMaterial[] VALUES = values();
int color;
String uid;
private final int color;
private final String uid;
EnumTubeMaterial(int color, String uid) {
this.color = color;
Loaded 100 of 5018 files, more files were not shown because too many files have changed in this diff. Show more