Compare commits

..
100 Commits
Author SHA1 Message Date
Nedelosk 2b9b105211 Add deprecated circuit replacement and Version 5.8 2018-02-03 12:45:27 +01:00
Nedelosk 8b10349309 Merge pull request #1948 from ForestryMC/farm
Reintroduce the old-style farm and Rebalance electron tubes
2018-02-03 12:10:48 +01:00
Nedelosk 0d26b6b2f2 Merge pull request #1965 from temp1011/mc-1.12
Add IMC messages for dimension blacklist
2018-02-03 12:08:05 +01:00
temp1011 3e5de52efd fix imports 2018-02-02 00:18:41 +00:00
temp1011 e30e9f4ab9 Add IMC messages for mods to blacklist dimensions in 2018-02-02 00:07:59 +00:00
Nedelosk 05d1eb87ce Round fertilizer values 2018-01-28 22:54:35 +01:00
Nedelosk 7679dfc393 Make cultivation farms more expensive 2018-01-28 18:38:29 +01:00
Nedelosk bb52acc67c Fix #1955 Add Filter Sorting to fix a server sided bug 2018-01-23 16:24:56 +01:00
Nedelosk 3caf8cbfef Update Lang 2018-01-23 15:36:38 +01:00
Nedelosk 207f15ed0b Remove unneeded GL state changes 2018-01-23 15:29:30 +01:00
Nedelosk c5178be225 Add missing fluid handler capability to the planter 2018-01-22 19:54:14 +01:00
Nedelosk cd7250604e Add missing farm logic localisation 2018-01-22 18:56:25 +01:00
Nedelosk 533c9d0b2a Clean Up API 2018-01-20 21:29:07 +01:00
Nedelosk c00fa15f0e Improve fertilizer config and Clean Up 2018-01-20 21:00:21 +01:00
Nedelosk ce3dea42e3 Pull from branch 'mc-1.12' 2018-01-20 19:28:34 +01:00
Nedelosk 287cb8cb87 Rebalance electron tubes and add ender farm 2018-01-20 18:05:31 +01:00
Nedelosk 10fec50457 Improve Farm Logic System and add ring farm layout 2018-01-20 02:35:33 +01:00
Nedelosk 43c61c18c0 Fix broken model baker uvs 2018-01-15 19:23:54 +01:00
Nedelosk dca593f7d8 Fix #1945 Database duping trees / bees 2018-01-15 19:18:59 +01:00
Nedelosk 4c874fcf7d Update Lang 2018-01-15 19:12:54 +01:00
Nedelosk e62a2f1199 Merge branch 'mc-1.12' of https://github.com/ForestryMC/ForestryMC into pipe-1.12 2018-01-15 19:05:11 +01:00
Nedelosk 8ab94e6741 Improve genetic filter implementation 2018-01-15 19:03:52 +01:00
Nedelosk 1278c09064 Move the filter logic to a separate interface 2018-01-15 19:03:51 +01:00
Nedelosk ed0b884bce Change default filter rule 2018-01-15 19:03:50 +01:00
Nedelosk 85f413f857 Improve Filter collision box 2018-01-15 19:03:49 +01:00
Nedelosk 3cc298b0f1 Remove unused texture 2018-01-15 19:03:49 +01:00
Nedelosk 8b0d54f3ec Add sorting block (Genetic Filter) 2018-01-15 19:03:48 +01:00
temp1011 40445462f1 Add more Dimension Config Blacklists for world generation (#1942) 2018-01-14 12:16:36 -08:00
temp1011 8eea336fdb Removing overworked bees mechanic, cap production modifier at 16x (#1946) 2018-01-14 12:15:45 -08:00
Nedelosk 521514f3d2 Remove Unused Files 2018-01-14 02:53:56 +01:00
Nedelosk cc50a05f43 Reintroduce the old-style farm 2018-01-14 02:35:12 +01:00
Nedelosk 1fc56c3b20 Merge pull request #1941 from phillipasmith1995/mc-1.12
Adds dimension blacklist for hive generation.
2018-01-08 17:17:18 +01:00
phillipasmith1995 9cee882788 Adds dimension blacklist for hive generation. 2018-01-08 09:24:17 -06:00
phillipasmith1995 9404f769bb Merge branch 'mc-1.12' of https://github.com/phillipasmith1995/ForestryMC into mc-1.12
# Conflicts:
#	src/main/java/forestry/apiculture/HiveConfig.java
2018-01-08 09:21:51 -06:00
phillipasmith1995 7b8b317ffe Adds dimension blacklist for hive generation. 2018-01-08 09:18:49 -06:00
phillipasmith1995 b40a6d4ec9 Adds dimension blacklist for hive generation. 2018-01-08 00:52:34 -06:00
Nedelosk 42865951a9 Move the worktable into a separate module 2018-01-07 02:18:11 +01:00
Nedelosk a058c3f8c9 Merge remote-tracking branch 'origin/mc-1.12' into 1.12 2018-01-07 00:21:00 +01:00
Nedelosk a83e428d29 Merge pull request #1938 from temp1011/analyzerpowerconfig
Add power config for Analyzer
2018-01-07 00:20:37 +01:00
temp1011 9c41566485 Should be all of them (hopefully) 2018-01-06 23:18:34 +00:00
temp1011 842b9c7199 Add power config for analyzer 2018-01-06 22:51:36 +00:00
Nedelosk cbb0c15783 Fix #1061 Squeezer is very "liberal" regarding oredict in Recipes 2018-01-06 23:23:46 +01:00
Nedelosk cbc6f9acff Update Lang Git-Module 2018-01-06 22:39:08 +01:00
Nedelosk 03ecce51cc Fix #1937 Backpacks do not hold previously defined items 2018-01-06 22:33:29 +01:00
Nedelosk 644145ac92 Fix #1399 Add Hive Generation Blacklist 2018-01-06 22:19:37 +01:00
Nedelosk 850a7e2919 Fix #1884 Tin can / wax capsule cannot pick up fluid blocks in world 2018-01-06 20:56:15 +01:00
Nedelosk 1f54359836 Fix Crate Registration 2018-01-06 17:14:08 +01:00
Nedelosk debde28aba Merge remote-tracking branch 'origin/mc-1.12' into 1.12 2018-01-06 16:51:38 +01:00
Nedelosk a2aa07c917 Fix #1916 Client Crash with new version 2018-01-06 16:51:13 +01:00
Nedelosk 3c9572eb83 Fix #1874 Crash when adding bee to BQM quest / chestloot 2018-01-06 16:21:47 +01:00
Nedelosk 03fd954781 Merge pull request #1930 from temp1011/mc-1.12
Some minor additions
2018-01-06 16:07:20 +01:00
Nedelosk 2002dff3c9 Fix #1920 Crate registration only on client side 2018-01-06 15:57:16 +01:00
temp1011 d9ade6dae0 No biome check 2018-01-06 14:34:20 +00:00
Nedelosk 3b547c1b87 Fix #1919 Butterfly Model throws NullPointerException 2018-01-06 14:39:43 +01:00
Nedelosk 05070982dc Improve Database Recipe 2018-01-06 13:20:35 +01:00
temp1011 9833dbb01f Merge branch 'mc-1.12' into mc-1.12 2018-01-05 18:10:22 +00:00
temp1011 e67ef8adec Merge branch 'mc-1.12' into mc-1.12 2018-01-05 16:56:54 +00:00
temp1011 b5b4ff2de6 Fix hive flammability
Hive placed in the overworld burned whereas hive placed in nether did not in my tests. Hopefully this works better.
2018-01-05 16:13:40 +00:00
Nedelosk f78e21e31a Merge remote-tracking branch 'origin/mc-1.12' into 1.12 2018-01-05 16:42:56 +01:00
Nedelosk 457962c716 Fix #1932 Client Tile Updates Depending On Apiculture Module 2018-01-05 16:36:00 +01:00
temp1011 7a0dde1140 Woops 2018-01-02 20:36:16 +00:00
temp1011 5f7f7fbed6 add damage option to hives based on config 2017-12-30 23:24:45 +00:00
temp1011 c107c75cbe update config in apiculture 2017-12-30 23:22:19 +00:00
temp1011 8ed4fa8d7b make non hellish hives flammable 2017-12-30 00:09:41 +00:00
mezz 5a10d8a0b2 Fix "Invalid property value detected" error logs from Buildcraft 2017-12-26 19:30:14 -08:00
Nedelosk 16c3fae45d Fix #1918 Fix #1912 packet handler issue with latest Forge (14.23.1.2574+) 2017-12-18 20:25:21 +01:00
Nedelosk b3be6a8f02 Fix Broken Sockets 2017-12-17 16:07:12 +01:00
Nedelosk aac4d730d6 Merge remote-tracking branch 'origin/mc-1.12' into 1.12 2017-12-17 15:45:32 +01:00
Nedelosk dacd2741a3 Fix #1907 Electric engine doesn't update configuration properly 2017-12-17 15:41:01 +01:00
Nedelosk 2f47114015 Fix #1901 Custom Backpack Model Registration 2017-12-17 15:26:43 +01:00
Nedelosk b7ae349314 Fix #1906 Willow leaves can be used to create an x-ray 2017-12-17 10:38:20 +01:00
Remy A fbea338462 Fix resurrected ender dragons having no AI (#1908) 2017-12-12 21:48:56 -08:00
mezz b07e5a1556 Revert "Slightly improve render performance of genetic items (bee, trees, etc)"
This reverts commit 3df3d9121e.
2017-11-29 22:00:21 -08:00
Nedelosk 13f49fc930 Merge remote-tracking branch 'origin/mc-1.12' into 1.12 2017-11-24 00:04:05 +01:00
Nedelosk 3c4b025c74 Fix #1893 False Module Container ID 2017-11-24 00:03:41 +01:00
mezz 3df3d9121e Slightly improve render performance of genetic items (bee, trees, etc) 2017-11-11 22:04:39 -08:00
mezz 58ab49d66e Stop viscous fluids from making water flowing sounds 2017-11-11 20:51:27 -08:00
Nedelosk 37893d8aca Fix #1890 NPE with Quark 2017-11-08 20:33:59 +01:00
Nedelosk 9814601ff2 Fix backward compatibility 2017-11-03 23:10:10 +01:00
Nedelosk 11e8a06a48 Clean Up Module System 2017-11-03 22:38:13 +01:00
Nedelosk 26f44a2862 Fix Module System 2017-11-03 21:34:21 +01:00
Nedelosk 3073473b0e Fix Api 2017-11-03 19:55:25 +01:00
Nedelosk 61af8ba6c9 Improve Module System 2017-11-03 18:40:44 +01:00
Nedelosk 3e60c43b30 Merge remote-tracking branch 'origin/mc-1.12' into mc-1.12 2017-11-03 17:01:50 +01:00
Nedelosk e9ae149ba2 Fix GreenhouseEventHandler 2017-11-03 16:58:31 +01:00
Nedelosk b62ec72422 Change the plugin system to a module system and split up modules
-Changed plugin system to a module
-Renamed forestry plugins to modules
-Mod integration plugins are still called plugins
-Moved the woodpile from the arboriculture module to the charcoal module
-Moved the backpacks from the storage module to the backpacks module
-Moved the crates from the storage module to the creates module
-Added the database module with a new storage block for individuals
-Added a species plugin interface to handle the database gui
-Added some alyzer methods to the species plugin to move the alyzer
integration later to it
2017-11-03 16:56:02 +01:00
Nedelosk 50ef3d8b2c Update Lang 2017-11-03 16:46:09 +01:00
Nedelosk a0e15f76ca Move some classes to the api and fix broken api classes 2017-11-03 16:09:17 +01:00
Nedelosk e7766d3ad9 Remove experimental code 2017-11-02 16:12:06 +01:00
Nedelosk 4e096e7338 Remove unused resources 2017-11-02 16:06:17 +01:00
Nedelosk 88fd031fb4 Change the plugin system to a module system and slit up modules
-Moved the woodpile from the arboriculture module to the charcoal module
-Moved the backpacks from the storage module to the backpacks module
-Moved the crates from the storage module to the creates module
-Added the database module with a new storage for individuals
-Added a gui element system to improve the alyzer api
-Added a species plugin interface to handle the database gui
-Added some alyzer methods to the species plugin to move the alyzer
integration later to it
2017-11-02 16:03:33 +01:00
Nedelosk ee272de168 Fix #1866 Block State Interaction Issues With Pokecube and Forestry 2017-10-12 11:55:06 +02:00
Nedelosk 1faaa6e297 Merge remote-tracking branch 'origin/mc-1.12' into mc-1.12 2017-10-07 14:44:34 +02:00
Nedelosk 6c86447891 Fix Mystical Agriculture Inferium Seeds and update Integration 2017-10-07 14:41:13 +02:00
Nedelosk 905e81c2b9 Fix #1860 Mystical Agriculture Integration (Could not find item) 2017-10-07 14:25:20 +02:00
Nedelosk 25bb682f7d Fix #1856 Non Glass Fluids in Thermionic Fabricator are not getting used up. 2017-10-07 14:15:38 +02:00
Nedelosk 18e10f617c Fix #1863 Bottler does not empty bottles 2017-10-07 14:08:30 +02:00
mezz e0a0ab5594 Add modId to alleles and use new Forge item.getCreatorModId feature 2017-10-03 00:03:46 -07:00
Nedelosk 29d96db1e8 Merge remote-tracking branch 'origin/mc-1.12' into mc-1.12 2017-09-30 16:16:12 +02:00
Nedelosk 3769ec42d2 Fix #1857 Couldn't find resource table forestry:chests/village_naturalist 2017-09-30 16:15:52 +02:00
603 changed files with 16910 additions and 4212 deletions

No files matched your search

-2
View File
@@ -161,8 +161,6 @@ curseforge {
changelog = file('changelog.html')
changelogType = 'html'
releaseType = 'beta'
addGameVersion '1.12'
addGameVersion '1.12.1'
}
}
Executable → Regular
+5 -5
View File
@@ -1,14 +1,14 @@
mcversion=1.12.2
forgeversion=14.23.0.2486
forgeversion=14.23.1.2582
mcp_mappings=snapshot_20170918
curse_project_id=59751
tesla_version=1.0.60
tesla_mcversion=1.12
jei_version=4.7.8.92
jei_mcversion=1.12.1
jei_version=4.8.5.138
jei_mcversion=1.12.2
ic2_version=2.8.24-ex112
version_major=5
version_minor=5
version_patch=6
version_minor=8
version_patch=0
+1 -1
Submodule lang updated: c3244f4499...c560d52707.
+28 -13
View File
@@ -15,8 +15,11 @@ import com.google.common.base.Preconditions;
import javax.annotation.Nullable;
import java.io.File;
import net.minecraft.item.Item;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fml.common.Mod;
@@ -27,6 +30,7 @@ import net.minecraftforge.fml.common.event.FMLInterModComms.IMCEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.minecraftforge.fml.common.registry.GameRegistry;
@@ -34,6 +38,7 @@ import net.minecraftforge.fml.common.registry.GameRegistry;
import forestry.api.core.ForestryAPI;
import forestry.api.core.ForestryEvent;
import forestry.core.EventHandlerCore;
import forestry.core.advancements.AdvancementManager;
import forestry.core.climate.ClimateStates;
import forestry.core.config.Config;
import forestry.core.config.Constants;
@@ -45,9 +50,11 @@ import forestry.core.multiblock.MultiblockEventHandler;
import forestry.core.network.PacketHandler;
import forestry.core.proxy.Proxies;
import forestry.core.worldgen.WorldGenerator;
import forestry.plugins.PluginManager;
import forestry.plugins.compat.PluginIC2;
import forestry.plugins.compat.PluginNatura;
import forestry.modules.ForestryModules;
import forestry.modules.ModuleManager;
import forestry.plugins.ForestryCompatPlugins;
import forestry.plugins.PluginIC2;
import forestry.plugins.PluginNatura;
/**
* Forestry Minecraft Mod
@@ -59,8 +66,8 @@ import forestry.plugins.compat.PluginNatura;
name = Constants.MOD_NAME,
version = Constants.VERSION,
guiFactory = "forestry.core.config.ForestryGuiConfigFactory",
acceptedMinecraftVersions = "[1.12, 1.12.2]",
dependencies = "required-after:forge@[14.21.1.2395,);"
acceptedMinecraftVersions = "[1.12.2,1.13.0)",
dependencies = "required-after:forge@[14.23.0.2500,);"
+ "after:jei@[4.7.8.91,);"
+ "after:" + PluginIC2.modId + ";"
+ "after:" + PluginNatura.modId + ";"
@@ -81,6 +88,9 @@ public class Forestry {
EnumErrorCode.init();
FluidRegistry.enableUniversalBucket();
MinecraftForge.EVENT_BUS.register(this);
ModuleManager moduleManager = ModuleManager.getInstance();
ForestryAPI.moduleManager = moduleManager;
moduleManager.registerContainers(new ForestryModules(), new ForestryCompatPlugins());
}
@Nullable
@@ -107,19 +117,23 @@ public class Forestry {
MinecraftForge.EVENT_BUS.post(new ForestryEvent.PreInit(this, event));
PluginManager.runSetup(event);
ModuleManager.runSetup(event);
ModuleManager.getInternalHandler().runSetup();
String gameMode = Config.gameMode;
Preconditions.checkState(gameMode != null);
ForestryAPI.activeMode = new GameMode(gameMode);
PluginManager.runPreInit(event.getSide());
ModuleManager.getInternalHandler().runPreInit(event.getSide());
}
@SubscribeEvent(priority = EventPriority.LOWEST)
public void registerItems(RegistryEvent.Register<Item> event) {
ModuleManager.getInternalHandler().runRegisterBackpacksAndCrates();
}
@SubscribeEvent
public void registerModels(ModelRegistryEvent event) {
PluginManager.runRegisterBackpacksAndCrates();
Proxies.render.registerModels();
}
@@ -128,14 +142,15 @@ public class Forestry {
// Register gui handler
NetworkRegistry.INSTANCE.registerGuiHandler(this, new GuiHandler());
PluginManager.runInit();
ModuleManager.getInternalHandler().runInit();
Proxies.render.registerItemAndBlockColors();
AdvancementManager.registerTriggers();
}
@EventHandler
public void postInit(FMLPostInitializationEvent event) {
PluginManager.runPostInit();
ModuleManager.getInternalHandler().runPostInit();
// Register world generator
WorldGenerator worldGenerator = new WorldGenerator();
@@ -145,12 +160,12 @@ public class Forestry {
Proxies.common.registerTickHandlers(worldGenerator);
// Handle IMC messages.
PluginManager.processIMCMessages(FMLInterModComms.fetchRuntimeMessages(ForestryAPI.instance));
ModuleManager.getInternalHandler().processIMCMessages(FMLInterModComms.fetchRuntimeMessages(ForestryAPI.instance));
}
@EventHandler
public void serverStarting(FMLServerStartingEvent event) {
PluginManager.serverStarting(event.getServer());
ModuleManager.serverStarting(event.getServer());
}
@Nullable
@@ -160,6 +175,6 @@ public class Forestry {
@EventHandler
public void processIMCMessages(IMCEvent event) {
PluginManager.processIMCMessages(event.getMessages());
ModuleManager.getInternalHandler().processIMCMessages(event.getMessages());
}
}
@@ -14,6 +14,7 @@ public interface IBeeFactory {
* Automatically registered with AlleleManager.alleleRegistry.registerAllele()
* See IAlleleBeeSpeciesBuilder and IAlleleSpeciesBuilder for adding additional properties to the returned species.
*
* @param modId The modId of the mod that is creating the species
* @param uid Unique Identifier for this species
* @param dominant Whether this species is genetically dominant (false means it is recessive)
* @param authority Authority for the binomial name, e.g. "Sengir" on species of base Forestry.
@@ -24,8 +25,9 @@ public interface IBeeFactory {
* @param primaryColor The outline color of this species
* @param secondaryColor The body color of this species
* @return a new bee species allele.
* @since Forestry 5.6.0.
*/
IAlleleBeeSpeciesBuilder createSpecies(String uid, boolean dominant, String authority, String unlocalizedName, String unlocalizedDescription, IClassification branch, String binomial, int primaryColor, int secondaryColor);
IAlleleBeeSpeciesBuilder createSpecies(String modId, String uid, boolean dominant, String authority, String unlocalizedName, String unlocalizedDescription, IClassification branch, String binomial, int primaryColor, int secondaryColor);
/**
* Creates a new bee branch.
@@ -36,4 +38,10 @@ public interface IBeeFactory {
* @return a new bee branch
*/
IClassification createBranch(String uid, String scientific);
/**
* @deprecated since Forestry 5.6.0. use {@link #createSpecies(String, String, boolean, String, String, String, IClassification, String, int, int)}
*/
@Deprecated
IAlleleBeeSpeciesBuilder createSpecies(String uid, boolean dominant, String authority, String unlocalizedName, String unlocalizedDescription, IClassification branch, String binomial, int primaryColor, int secondaryColor);
}
@@ -37,10 +37,15 @@ public interface IBeekeepingMode {
*/
boolean isFatigued(IBee queen, IBeeHousing housing);
/**
* @return true if the queen is being overworked in the bee housing (with chance). will trigger a negative effect.
/**
* @return true if the queen is being overworked in the bee housing (with chance). will trigger a negative effect.
* @deprecated bees max out at 16x productivity instead of being overworked.
* TODO remove this method in 1.13
*/
boolean isOverworked(IBee queen, IBeeHousing housing);
@Deprecated
default boolean isOverworked(IBee queen, IBeeHousing housing) {
return false;
}
/**
* @return true if the genetic structure of the queen is breaking down during spawning of the offspring (with chance). will trigger a negative effect.
@@ -8,9 +8,10 @@ package forestry.api.apiculture.hives;
import java.util.List;
import java.util.Locale;
import forestry.api.apiculture.IHiveDrop;
import net.minecraft.util.IStringSerializable;
import forestry.api.apiculture.IHiveDrop;
public interface IHiveRegistry {
/* Forestry Hive Names */
@@ -5,9 +5,10 @@
******************************************************************************/
package forestry.api.arboriculture;
import net.minecraft.util.text.translation.I18n;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IFruitFamily;
import forestry.core.utils.Translator;
public enum EnumFruitFamily implements IFruitFamily {
PRUNES("prunes", "Prunus domestica"),
@@ -37,12 +38,12 @@ public enum EnumFruitFamily implements IFruitFamily {
@Override
public String getName() {
return Translator.translateToLocal("for.family." + uid);
return I18n.translateToLocal("for.family." + uid);
}
@Override
public String getDescription() {
return Translator.translateToLocal("for.family." + uid + ".description");
return I18n.translateToLocal("for.family." + uid + ".description");
}
}
@@ -19,6 +19,4 @@ public interface IAlleleFruit extends IAlleleProperty<IAlleleFruit> {
@Nullable
String getModelName();
String getModID();
}
@@ -7,15 +7,18 @@ package forestry.api.arboriculture;
import java.util.Collection;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.common.EnumPlantType;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IModelManager;
import forestry.api.genetics.IAlleleProperty;
import forestry.api.genetics.IAlleleSpecies;
import forestry.api.genetics.IFruitFamily;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.common.EnumPlantType;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public interface IAlleleTreeSpecies extends IAlleleSpecies, IAlleleProperty<IAlleleTreeSpecies> {
@@ -36,11 +39,6 @@ public interface IAlleleTreeSpecies extends IAlleleSpecies, IAlleleProperty<IAll
* @return Tree generator for this species.
*/
ITreeGenerator getGenerator();
/**
* @return The modid from the mod of the species.
*/
String getModID();
/**
* @return Float between 0 and 1 representing the rarity of the species, will affect spawn rate. If it's 0, it will not spawn.
@@ -14,7 +14,10 @@ public interface ICharcoalPileWall {
int getCharcoalAmount();
boolean matches(IBlockState state);
@Deprecated
NonNullList<ItemStack> getDisplyItems();
NonNullList<ItemStack> getDisplayItems();
}
@@ -5,32 +5,12 @@
******************************************************************************/
package forestry.api.arboriculture;
import javax.annotation.Nullable;
import java.awt.Color;
import forestry.api.genetics.IClassification;
public interface ITreeFactory {
/**
* Creates a new tree species.
* Automatically registered with AlleleManager.alleleRegistry.registerAllele()
* See IAlleleTreeSpeciesBuilder and IAlleleSpeciesBuilder for adding additional properties to the returned species.
*
* @param uid Unique Identifier for this species
* @param unlocalizedName Unlocalized name for this species
* @param authority Authority for the binomial name, e.g. "Sengir" on species of base Forestry.
* @param unlocalizedDescription Unlocalized description for this species
* @param dominant Whether this species is genetically dominant (false means it is recessive)
* @param branch Classification of this species
* @param binomial Binomial name of the species sans genus. "humboldti" will have the bee species flavour name be "Apis humboldti". Feel free to use fun names or null.
* @param modID The modID from the mod of the species
* @param leafSpriteProvider The leaf sprite provider for this species
* @param germlingModelProvider The germling model provider for this species
* @param woodProvider The wood texture provider. It is used to get wood textures for the charcoal pile.
* @param generator The tree generator
* @return a new tree species allele.
*/
IAlleleTreeSpeciesBuilder createSpecies(String uid, String unlocalizedName, String authority, String unlocalizedDescription, boolean dominant, IClassification branch, String binomial, String modID, ILeafSpriteProvider leafSpriteProvider, IGermlingModelProvider germlingModelProvider, IWoodProvider woodProvider, ITreeGenerator generator);
/**
* Creates a new tree species.
* Automatically registered with AlleleManager.alleleRegistry.registerAllele()
@@ -48,10 +28,18 @@ public interface ITreeFactory {
* @param germlingModelProvider The germling model provider for this species
* @param woodProvider The wood texture provider. It is used to get wood textures for the charcoal pile.
* @param generator The tree generator
* @param leafProvider The leaf provider
* @return a new tree species allele.
*/
IAlleleTreeSpeciesBuilder createSpecies(String uid, String unlocalizedName, String authority, String unlocalizedDescription, boolean dominant, IClassification branch, String binomial, String modID, ILeafSpriteProvider leafSpriteProvider, IGermlingModelProvider germlingModelProvider, IWoodProvider woodProvider, ITreeGenerator generator, ILeafProvider leafProvider);
IAlleleTreeSpeciesBuilder createSpecies(String uid, String unlocalizedName, String authority, String unlocalizedDescription, boolean dominant, IClassification branch, String binomial, String modID, ILeafSpriteProvider leafSpriteProvider, IGermlingModelProvider germlingModelProvider, IWoodProvider woodProvider, ITreeGenerator generator, @Nullable ILeafProvider leafProvider);
/**
* @deprecated since Forestry 5.6.0. use {@link #createSpecies(String, String, String, String, boolean, IClassification, String, String, ILeafSpriteProvider, IGermlingModelProvider, IWoodProvider, ITreeGenerator, ILeafProvider)}
*/
@Deprecated
IAlleleTreeSpeciesBuilder createSpecies(String uid, String unlocalizedName, String authority, String unlocalizedDescription, boolean dominant, IClassification branch, String binomial, String modID, ILeafSpriteProvider leafSpriteProvider, IGermlingModelProvider germlingModelProvider, IWoodProvider woodProvider, ITreeGenerator generator);
/**
* Get one of the built-in Forestry leaf types. Default type is deciduous.
*/
@@ -5,9 +5,10 @@
******************************************************************************/
package forestry.api.arboriculture;
import forestry.api.genetics.IGenome;
import net.minecraft.item.ItemStack;
import forestry.api.genetics.IGenome;
public interface ITreeGenome extends IGenome {
@Override
@@ -37,6 +38,8 @@ public interface ITreeGenome extends IGenome {
int getGirth();
boolean getFireproof();
IAlleleLeafEffect getEffect();
/**
@@ -5,13 +5,15 @@
******************************************************************************/
package forestry.api.arboriculture;
import forestry.api.core.ITextureManager;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.ITextureManager;
public interface IWoodProvider {
@SideOnly(Side.CLIENT)
void registerSprites(Item item, ITextureManager manager);
@@ -29,11 +31,15 @@ public interface IWoodProvider {
/**
* The amount of charcoal dropped from a charcoal pile of this wood.
* @deprecated Will be removed in 1.13
*/
@Deprecated
int getCarbonization();
/**
* The chance that a pile has to drop a extra charcoal
* @deprecated Will be removed in 1.13
*/
@Deprecated
float getCharcoalChance(int numberOfCharcoal);
}
@@ -5,10 +5,11 @@
******************************************************************************/
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@API(apiVersion = "4.2.1", owner = "ForestryAPI|core", provides = "ForestryAPI|arboriculture")
@API(apiVersion = "4.3.0", owner = "ForestryAPI|core", provides = "ForestryAPI|arboriculture")
package forestry.api.arboriculture;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
import net.minecraftforge.fml.common.API;
import mcp.MethodsReturnNonnullByDefault;
@@ -7,11 +7,17 @@ package forestry.api.circuits;
import java.util.List;
import net.minecraft.util.text.translation.I18n;
public interface ICircuit {
String getUID();
String getUnlocalizedName();
default String getLocalizedName(){
return I18n.translateToLocal(getUnlocalizedName());
}
boolean isCircuitable(Object tile);
void onInsertion(int slot, Object tile);
@@ -18,6 +18,8 @@ public interface ICircuitRegistry {
void registerCircuit(ICircuit circuit);
void registerDeprecatedCircuitReplacement(String deprecatedCircuit, ICircuit replacement);
@Nullable
ICircuit getCircuit(String uid);
@@ -6,7 +6,7 @@
package forestry.api.climate;
/**
* @deprecated Use IClimateState
* @deprecated TODO: Remove in 1.13, Use IClimateState
*/
@Deprecated
public interface IClimateInfo {
@@ -11,7 +11,7 @@ import net.minecraft.world.World;
public interface IClimateManager {
/**
* @deprecated Use {@link IClimateStates#create(float, float)}
* @deprecated Use {@link IClimateStates#create(float, float, ClimateStateType)}
*/
@Deprecated
IClimateInfo createInfo(float temperature, float humidity);
@@ -7,14 +7,18 @@ package forestry.api.core;
import java.util.Set;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.climate.IClimateStates;
import forestry.greenhouse.api.climate.IClimateFactory;
import forestry.api.climate.IClimateManager;
import forestry.api.climate.IClimateStates;
import forestry.api.farming.IFarmRegistry;
import forestry.api.farming.IFarmable;
import forestry.api.farming.ISimpleFarmLogic;
import forestry.api.modules.IModuleContainer;
import forestry.api.modules.IModuleManager;
/**
* Forestry's API is divided into several subcategories to make it easier to understand.
@@ -51,17 +55,20 @@ public class ForestryAPI {
public static IModelManager modelManager;
public static IClimateManager climateManager;
/**
* A factory to create climate related things.
* @since 5.3.4
*/
public static IClimateFactory climateFactory;
/**
* Instance of the module manager of forestry.
* This can be used to register {@link IModuleContainer}s in the constructor of your mod.
*/
public static IModuleManager moduleManager;
/**
*
*/
public static IClimateStates states;
/**
* A registry for register fertilizers, {@link IFarmabeles}s and {@link ISimpleFarmLogic}s
* A registry for register fertilizers, {@link IFarmable}s and {@link ISimpleFarmLogic}s
*/
public static IFarmRegistry farmRegistry;
@@ -76,10 +83,20 @@ public class ForestryAPI {
public static IForestryConstants forestryConstants;
/**
* The currently enabled Forestry plugins.
* The currently enabled Forestry modules.
* Can be used to check if certain features are available, for example:
* ForestryAPI.enabledPlugins.contains("APICULTURE")
* ForestryAPI.enabledModules.contains(new ResourceLocation("forestry", "apiculture"))
*/
public static Set<ResourceLocation> enabledModules;
/**
* The currently enabled Forestry modules.
* Can be used to check if certain features are available, for example:
* ForestryAPI.enabledPlugins.contains("forestry.apiculture")
*
* @deprecated Use {@link #enabledModules}
*/
@Deprecated
public static Set<String> enabledPlugins;
/**
@@ -61,7 +61,10 @@ public abstract class ForestryEvent extends Event {
/**
* Posted before forestry registers all items and blocks.
*
* @deprecated removed in 1.13
*/
@Deprecated
public static class PreInit extends ForestryEvent{
/**
* The main mod instance for Forestry.
@@ -0,0 +1,13 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.core;
/**
* The alignment of the text in a text gui element.
*/
public enum GuiElementAlignment {
LEFT, CENTER, RIGHT
}
@@ -5,6 +5,7 @@
******************************************************************************/
package forestry.api.core;
import javax.annotation.Nullable;
import java.util.Set;
public interface IErrorStateRegistry {
@@ -12,6 +13,7 @@ public interface IErrorStateRegistry {
void addAlias(IErrorState state, String name);
@Nullable
IErrorState getErrorState(short id);
IErrorState getErrorState(String name);
@@ -0,0 +1,43 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.core;
import javax.annotation.Nullable;
import java.util.Collections;
import java.util.List;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public interface IGuiElement {
int getX();
int getY();
int getWidth();
int getHeight();
void setXOffset(int xOffset);
void setYOffset(int yOffset);
@Nullable
IGuiElement getParent();
void setParent(@Nullable IGuiElement parent);
void draw(int startX, int startY);
@SideOnly(Side.CLIENT)
default List<String> getToolTip(int mouseX, int mouseY){
return Collections.emptyList();
}
@SideOnly(Side.CLIENT)
boolean isMouseOver(int mouseX, int mouseY);
}
@@ -0,0 +1,54 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.core;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IAlleleInteger;
import forestry.api.genetics.IAlleleSpecies;
import forestry.api.genetics.IAlleleTolerance;
import forestry.api.genetics.IBreedingTracker;
import forestry.api.genetics.IMutation;
/**
* A helper interface to create gui elements.
*/
@SideOnly(Side.CLIENT)
public interface IGuiElementFactory {
IGuiElementHelper createHelper(IGuiElementLayout element);
/* GENETIC*/
/**
* @param dominant True if you want the dominant color and false if you want the recessive color.
*
* @return The color code that forestry uses to show if a allele is dominant (true) or recessive (false).
*/
int getColorCoding(boolean dominant);
/**
* @return Null if the mutation is secret and undiscovered. {@link IMutation#isSecret()}
*/
IGuiElement createMutation(int x, int y, int width, int height, IMutation mutation, IAllele species, IBreedingTracker breedingTracker);
/**
* @return Null if the mutation is secret and undiscovered. {@link IMutation#isSecret()}
*/
IGuiElement createMutationResultant(int x, int y, int width, int height, IMutation mutation, IBreedingTracker breedingTracker);
IGuiElement createFertilityInfo(IAlleleInteger fertilityAllele, int x, int texOffset);
IGuiElement createToleranceInfo(IAlleleTolerance toleranceAllele, IAlleleSpecies species, String text);
/* LAYOUTS */
IGuiElementLayout createHorizontal(int xPos, int yPos, int height);
IGuiElementLayout createVertical(int xPos, int yPos, int width);
IGuiElementLayout createPanel(int xPos, int yPos, int width, int height);
}
@@ -0,0 +1,98 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.core;
import java.util.function.Function;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IGuiElementLayoutHelper.LayoutFactory;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IAlleleInteger;
import forestry.api.genetics.IAlleleSpecies;
import forestry.api.genetics.IAlleleTolerance;
import forestry.api.genetics.IBreedingTracker;
import forestry.api.genetics.IChromosomeType;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IMutation;
/**
* A helper interface to add gui elements.
*/
@SideOnly(Side.CLIENT)
public interface IGuiElementHelper {
/**
* Adds a {@link IGuiElement} to the parent of this.
*/
void add(IGuiElement element);
/**
* Centers a element to the center of the x axis of the parent element.
*
* @return the element
*/
IGuiElement centerElement(IGuiElement element);
/**
* Creates and adds an item gui element.
*/
void addItem(int x, ItemStack itemStack);
IGuiElementLayoutHelper layoutHelper(LayoutFactory layoutFactory, int width, int height);
/**
* Adds the chromosomeName and the name of the active/not active allele, of the chromosome, with {@link #addText}.
*/
void addAllele(String chromosomeName, IIndividual individual, IChromosomeType chromosome, boolean active);
/**
* Adds the chromosomeName and the result of toString with {@link #addText}.
*/
<A extends IAllele> void addAllele(String chromosomeName, Function<A, String> toString, IIndividual individual, IChromosomeType chromosome, boolean active);
void addFertilityInfo(IAlleleInteger fertilityAllele, int x, int texOffset);
void addToleranceInfo(IAlleleTolerance toleranceAllele, IAlleleSpecies species, String text);
void addMutation(int x, int y, int width, int height, IMutation mutation, IAllele species, IBreedingTracker breedingTracker);
void addMutationResultant(int x, int y, int width, int height, IMutation mutation, IBreedingTracker breedingTracker);
/**
* Adds a text element with the default color,the align {@link GuiElementAlignment#LEFT} and the height 12.
*/
void addText(String text);
/**
* Adds a text element with the align {@link GuiElementAlignment#LEFT} and the height 12.
*/
void addText(String text, int color);
/**
* Adds a text element with the default color and the height 12.
*/
void addText(String text, GuiElementAlignment align);
/**
* Adds a text element with the height 12.
*/
void addText(String text,GuiElementAlignment align, int color);
/**
* Adds a text element.
*/
void addText(int x, int height, String text, GuiElementAlignment align, int color);
/**
* @return The element to which all elements are added.
*/
IGuiElement getParent();
IGuiElementFactory factory();
}
@@ -0,0 +1,67 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.core;
import java.util.Collection;
import java.util.List;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public interface IGuiElementLayout extends IGuiElement {
/**
* Adds a element to this layout.
*/
IGuiElementLayout addElement(IGuiElement element);
/**
* Removes a element from this layout.
*/
IGuiElementLayout removeElement(IGuiElement element);
default IGuiElementLayout addElements(IGuiElement... elements){
for(IGuiElement element : elements){
addElement(element);
}
return this;
}
default IGuiElementLayout removeElements(IGuiElement... elements){
for(IGuiElement element : elements){
removeElement(element);
}
return this;
}
default IGuiElementLayout addElements(Collection<IGuiElement> elements){
elements.forEach(element -> addElement(element));
return this;
}
default IGuiElementLayout removeElements(Collection<IGuiElement> elements){
elements.forEach(element -> removeElement(element));
return this;
}
List<IGuiElement> getElements();
IGuiElementLayout setDistance(int distance);
void addTooltip(String line);
/**
* @return The tooltip that is displayed if the mouse is over this element and no element of this layout is under it.
*/
List<String> getTooltip();
/**
* @return The distance between the different elements of this layout.
*/
int getDistance();
int getSize();
}
@@ -0,0 +1,41 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.core;
import java.util.Collection;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public interface IGuiElementLayoutHelper {
/**
* @return Only false if the helper has no space to add this element.
*/
boolean add(IGuiElement element);
/**
* Removes all layouts and resets all variables of this helper.
*/
void clear();
/**
* Adds the layouts to the parent of the {@link IGuiElementHelper}. And calls {@link #clear()}
*/
void finish();
/**
* @return All layouts that were created with the help of this helper since the last {@link #clear()} or {@link #finish()}.
*/
Collection<IGuiElementLayout> layouts();
interface LayoutFactory {
/**
* A factory method to create new layouts if the last layout is full.
*/
IGuiElementLayout createLayout(int xOffset, int yOffset);
}
}
@@ -12,13 +12,17 @@ import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.common.model.IModelState;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
/**
* A model baker to make custom models
*
* @deprecated TODO Remove in 1.13: Not needed in the api
*/
@Deprecated
@SideOnly(Side.CLIENT)
public interface IModelBaker {
@@ -15,6 +15,10 @@ import net.minecraft.util.EnumFacing;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
/**
* @deprecated TODO Remove in 1.13: Not needed in the api
*/
@Deprecated
@SideOnly(Side.CLIENT)
public interface IModelBakerModel extends IBakedModel {
@@ -8,9 +8,14 @@ package forestry.api.core;
import net.minecraft.client.renderer.ItemMeshDefinition;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
/**
* @deprecated TODO Remove in 1.13: Not needed in the api
*/
@Deprecated
@SideOnly(Side.CLIENT)
public interface IModelManager {
@@ -5,7 +5,7 @@
******************************************************************************/
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@API(apiVersion = "5.2.0", owner = "Forestry", provides = "ForestryAPI|core")
@API(apiVersion = "5.7.0", owner = "Forestry", provides = "ForestryAPI|core")
package forestry.api.core;
import javax.annotation.ParametersAreNonnullByDefault;
@@ -5,14 +5,16 @@
******************************************************************************/
package forestry.api.farming;
import java.util.LinkedHashMap;
import java.util.Map;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import java.util.LinkedHashMap;
import java.util.Map;
import net.minecraft.item.ItemStack;
//TODO: Remove this class in 1.13
@Deprecated
public class Farmables {
/**
* Can be used to add IFarmables to some of the vanilla farm logics.
@@ -5,12 +5,14 @@
******************************************************************************/
package forestry.api.farming;
import forestry.api.core.IErrorLogicSource;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3i;
import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidStack;
import forestry.api.core.IErrorLogicSource;
public interface IFarmHousing extends IErrorLogicSource {
BlockPos getCoords();
@@ -33,10 +35,36 @@ public interface IFarmHousing extends IErrorLogicSource {
* Will remove the appropriate germling from the farm's inventory.
* It's up to the logic to only call this on a valid location.
*
* @deprecated TODO remove this method in 1.13
*
* @return true if planting was successful, false otherwise.
*/
@Deprecated
boolean plantGermling(IFarmable farmable, World world, BlockPos pos);
/**
* Callback for {@link IFarmLogic}s to plant a sapling, seed, germling, stem.
* Will remove the appropriate germling from the farm's inventory.
* It's up to the logic to only call this on a valid location.
*
* @return true if planting was successful, false otherwise.
*/
default boolean plantGermling(IFarmable farmable, World world, BlockPos pos, FarmDirection direction){
return plantGermling(farmable, world, pos);
}
default boolean isValidPlatform(World world, BlockPos pos){
return false;
}
default boolean isSquare(){
return false;
}
default boolean canPlantSoil(boolean manual){
return true;
}
/* INTERACTION WITH HATCHES */
IFarmInventory getFarmInventory();
@@ -27,4 +27,6 @@ public interface IFarmInventory {
IInventory getResourcesInventory();
IInventory getFertilizerInventory();
}
@@ -8,39 +8,136 @@ package forestry.api.farming;
import java.util.Collection;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.ForestryAPI;
/**
* The IFarmLogic is used by farm blocks and multi-blocks to cultivate and harvest crops and plants.
*
* Every farm block has only ony one logic a multi-block farm has four, one for every direction.
*/
public interface IFarmLogic {
/**
* @return The amount of fertilizer that the {@link IFarmHousing} automatically removes after this logic cultivated
* a block or harvested a crop.
*/
int getFertilizerConsumption();
/**
* @param hydrationModifier A modifier that depends on the weather and the biome of the farm.
*
* @return The amount of water that the {@link IFarmHousing} automatically removes after this logic cultivated
* a block or harvested a crop.
*/
int getWaterConsumption(float hydrationModifier);
/**
* Checks if the given stack is a resource or a soil that this logic uses to grow plants on or to create other
* products like peat.
*/
boolean isAcceptedResource(ItemStack itemstack);
/**
* Checks if the given stack is a germling (plantable sapling, seed, etc.) for any {@link IFarmable} of this farm.
*/
boolean isAcceptedGermling(ItemStack itemstack);
/**
* Collects all items that are laying on the ground and are in the {@link IFarmHousing#getArea()} of the farm.
*
* @param world The world of the farm.
* @param farmHousing The farm that uses this logic.
*
* @return A collection that contains all items that were collected.
*/
NonNullList<ItemStack> collect(World world, IFarmHousing farmHousing);
/**
* Tries to cultivate one or more blocks at the given position and with the given extent.
*
* @param world The world of the farm.
* @param farmHousing The farm that uses this logic.
* @param pos The position at that the logic should start to cultivate.
* @param direction The direction of the extension.
* @param extent How many blocks this logic has to cultivate after it cultivated the block at the given position.
* The positions of the next blocks are having a offset in the given direction.
* @return True if the logic has cultivated any block.
*/
boolean cultivate(World world, IFarmHousing farmHousing, BlockPos pos, FarmDirection direction, int extent);
/**
* Tries to harvest one or more blocks at the given position and with the given extent.
*
* @param world The world of the farm.
* @param pos The position at that the logic should start to harvest.
* @param direction The direction of the extension.
* @param extent How many blocks this logic tries to harvest after it has tried to harvested the block at the given position.
* The positions of the next blocks are having a offset in the given direction.
* @return True if the logic has cultivated any block.
*/
Collection<ICrop> harvest(World world, BlockPos pos, FarmDirection direction, int extent);
IFarmLogic setManual(boolean manual);
/**
* Returns the {@link IFarmProperties} that created this logic.
*
* @since Forestry 5.8
*
* @return Returns the {@link IFarmProperties} that created this logic. Returns a fake instance from
* {@link IFarmRegistry#createFakeInstance(IFarmLogic)} if the logic is older that Forestry 5.8.
* TODO: Remove "default" from this method in 1.13
*/
default IFarmProperties getProperties(){
return ForestryAPI.farmRegistry.createFakeInstance(this);
}
void addSoil(ItemStack resource, IBlockState soilState, boolean hasMetaData);
@SideOnly(Side.CLIENT)
ResourceLocation getTextureMap();
/**
* @deprecated Since Forestry 5.8 logic instances are created at the constructor of the {@link IFarmProperties} and
* have a immutable manual state. TODO Remove this method in 1.13
*/
@Deprecated
default IFarmLogic setManual(boolean manual){
return this;
}
/**
* Use {@link IFarmRegistry#getProperties(String)} to get the {@link IFarmProperties} for the farm logic and register the soil
* with {@link IFarmProperties#registerSoil(ItemStack, IBlockState, boolean)}.
*/
@Deprecated
default void addSoil(ItemStack resource, IBlockState soilState, boolean hasMetaData){
//
}
default String getUnlocalizedName(){
return "";
}
/**
* @return Localized short, human-readable identifier used in the farm gui and in tooltips.
*/
String getName();
/* GUI ONLY */
/**
* @deprecated No longer needed because mc always uses the same map for blocks and items.
* TODO remove this method in 1.13
*/
@Deprecated
@SideOnly(Side.CLIENT)
default ResourceLocation getTextureMap(){
return TextureMap.LOCATION_BLOCKS_TEXTURE;
}
/**
* @return the itemStack that represents this farm logic. Used as an icon for the farm logic.
*/
@@ -0,0 +1,48 @@
package forestry.api.farming;
import java.util.Collection;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemStack;
/**
* @since Forestry 5.8
*/
public interface IFarmProperties {
/**
* Can be used to register a {@link IBlockState} as a valid soil.
*/
default void registerSoil(ItemStack resource, IBlockState soilState){
registerSoil(resource, soilState, false);
}
/**
* Can be used to register a {@link IBlockState} as a valid soil.
*/
void registerSoil(ItemStack resource, IBlockState soilState, boolean hasMetaData);
/**
* Adds the {@link IFarmable}s that where registered with the given identifier.
*/
void registerFarmables(String identifier);
/**
* @return true if the given block state is a valid soil state.
*/
boolean isAcceptedSoil(IBlockState blockState);
/**
* @return true if the given stack is the {@link ItemStack} of a soil.
*/
boolean isAcceptedResource(ItemStack itemStack);
Collection<ISoil> getSoils();
Collection<IFarmable> getFarmables();
/**
* Returns the instance of the manual or managed {@link IFarmLogic}.
*/
IFarmLogic getLogic(boolean manuel);
}
@@ -7,6 +7,7 @@ package forestry.api.farming;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.function.BiFunction;
import net.minecraft.item.ItemStack;
@@ -14,15 +15,35 @@ public interface IFarmRegistry {
/**
* Registers farming logic in registry under given identifier
* @param identifier Valid identifiers: farmArboreal farmWheat farmGourd farmInfernal farmPoales farmSucculentes farmVegetables farmShroom
* @param identifier Valid identifiers: farmArboreal farmCrops farmGourd farmInfernal farmPoales farmSucculentes farmShroom
* @param logic corresponding instance of logic
*
* @deprecated Since Forestry 5.8. Use {@link #registerLogic(String, BiFunction, String...)} or
* {@link #registerLogic(String, IFarmProperties)}.
*/
void registerFarmLogic(String identifier, IFarmLogic logic);
@Deprecated
void registerLogic(String identifier, IFarmLogic logic);
/**
* Registers farming logic in registry
* @since Forestry 5.8
*/
IFarmProperties registerLogic(String identifier, IFarmProperties farmInstance);
/**
* Registers farming logic in registry under given identifier
*
* @param identifier Valid identifiers: farmArboreal farmCrops farmGourd farmInfernal farmPoales farmSucculentes farmShroom
* @param logicFactory factory that creates the corresponding instance of logic
* @param farmablesIdentifiers Identifiers: farmArboreal farmCrops farmGourd farmInfernal farmPoales farmSucculentes farmShroom
* @since Forestry 5.8
*/
IFarmProperties registerLogic(String identifier, BiFunction<IFarmProperties, Boolean, IFarmLogic> logicFactory, String... farmablesIdentifiers);
/**
* Can be used to add IFarmables to some of the vanilla farm logics.
* <p>
* Identifiers: farmArboreal farmWheat farmGourd farmInfernal farmPoales farmSucculentes farmVegetables farmShroom
* Identifiers: farmArboreal farmCrops farmGourd farmInfernal farmPoales farmSucculentes farmShroom
*/
void registerFarmables(String identifier, IFarmable... farmable);
@@ -32,14 +53,18 @@ public interface IFarmRegistry {
* Can be used to create a simple version of a farm logic, like the vanilla vegetable or wheat farm logic.
*
* @return Null if the farming plugin is not active.
*
* @deprecated Since Forestry 5.8. Use {@link #createCropLogic(IFarmProperties, boolean, ISimpleFarmLogic)} instead.
*/
@Nullable
IFarmLogic createLogic(ISimpleFarmLogic simpleFarmLogic);
@Deprecated
default IFarmLogic createLogic(ISimpleFarmLogic simpleFarmLogic){
return null;
}
/**
*
* @param itemStack
* @param value The value of the fertitlizer.The value of the forestry fertelizer is 500.
* @param value The value of the fertitlizer. The value of the forestry fertelizer is 500.
*/
void registerFertilizer(ItemStack itemStack, int value);
@@ -47,5 +72,28 @@ public interface IFarmRegistry {
* @return The value of the fertitlizer
*/
int getFertilizeValue(ItemStack itemStack);
/**
* Returns a fake {@link IFarmProperties} that returns the given logic at {@link IFarmProperties#getLogic(boolean)}.
*
* @since Forestry 5.8
* @deprecated Only for backwards comparability.
*/
@Deprecated
IFarmProperties createFakeInstance(IFarmLogic logic);
/**
* Can be used to create a simple version of a farm logic, like the vanilla vegetable or wheat farm logic.
*
* @return Null if the farming plugin is not active.
*/
@Nullable
IFarmLogic createCropLogic(IFarmProperties instance, boolean isManual, ISimpleFarmLogic simpleFarmLogic);
/**
* @since Forestry 5.8
*/
@Nullable
IFarmProperties getProperties(String identifier);
}
@@ -20,8 +20,19 @@ public interface IFarmable {
/**
* @return true if the block at the given location is a "sapling" for this type, i.e. a non-harvestable immature version of the crop.
* @deprecated Since Forestry 5.8. Use the version below. TODO Remove this method in 1.13
*/
boolean isSaplingAt(World world, BlockPos pos);
@Deprecated
default boolean isSaplingAt(World world, BlockPos pos){
return false;
}
/**
* @return true if the block at the given location is a "sapling" for this type, i.e. a non-harvestable immature version of the crop.
*/
default boolean isSaplingAt(World world, BlockPos pos, IBlockState blockState){
return isSaplingAt(world, pos);
}
/**
* @return {@link ICrop} if the block at the given location is a harvestable and mature crop, null otherwise.
@@ -8,7 +8,9 @@ package forestry.api.farming;
import net.minecraft.item.ItemStack;
/**
* A simple version of the IFarmLogic.
* A simple version of the IFarmLogic.
*
* @apiNote TODO Remove this in 1.13
*/
public interface ISimpleFarmLogic {
@@ -16,7 +18,11 @@ public interface ISimpleFarmLogic {
* @return the itemStack that represents this farm logic. Used as an icon for the farm logic.
*/
ItemStack getIconItemStack();
/**
* @deprecated Since 5.8
*/
@Deprecated
Iterable<IFarmable> getSeeds();
String getName();
@@ -0,0 +1,16 @@
package forestry.api.farming;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemStack;
/**
* @since Forestry 5.8
*/
public interface ISoil {
ItemStack getResource();
IBlockState getSoilState();
boolean hasMetaData();
}
@@ -5,10 +5,11 @@
******************************************************************************/
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@API(apiVersion = "2.2.0", owner = "ForestryAPI|core", provides = "ForestryAPI|farming")
@API(apiVersion = "5.8.0", owner = "ForestryAPI|core", provides = "ForestryAPI|farming")
package forestry.api.farming;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
import net.minecraftforge.fml.common.API;
@@ -23,4 +23,9 @@ public class AlleleManager {
* Creates Forestry alleles.
*/
public static IAlleleFactory alleleFactory;
/**
* @since 5.8
*/
public static IFilterRegistry filterRegistry;
}
@@ -0,0 +1,15 @@
package forestry.api.genetics;
/**
* Every instance of this enum represents a tab in the database.
*/
public enum EnumDatabaseTab {
//Used to display information about the active species of the individual.
ACTIVE_SPECIES,
//Used to display information about the inactive species of the individual.
INACTIVE_SPECIES,
//Used to display information about the products of the active species of the individual.
PRODUCTS,
//Used to display information about the mutations of the active species of the individual.
MUTATIONS;
}
@@ -0,0 +1,17 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.genetics;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityInject;
public class GeneticCapabilities {
/**
* Capability for {@link IFilterLogic}.
*/
@CapabilityInject(IFilterLogic.class)
public static Capability<IFilterLogic> FILTER_LOGIC;
}
@@ -21,6 +21,14 @@ public interface IAllele {
*/
String getUID();
/**
* @return modId of the mod that created this allele
* @since Forestry 5.6.0
*/
default String getModID() {
return "forestry";
}
/**
* @return true if the allele is dominant, false otherwise.
*/
@@ -5,10 +5,14 @@
******************************************************************************/
package forestry.api.genetics;
import forestry.api.apiculture.IBeekeepingMode;
import java.util.Collection;
import java.util.Collections;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import forestry.api.apiculture.IBeekeepingMode;
/**
* Keeps track of who bred, discovered, and researched which species in a world.
*
@@ -67,6 +71,13 @@ public interface IBreedingTracker {
*/
boolean isDiscovered(IAlleleSpecies species);
/**
* @return A collection that contains the {@link IAllele#getUID()}s of all discovered species.
*/
default Collection<String> getDiscoveredSpecies(){
return Collections.emptyList();
}
/**
* Register a successfully researched mutation.
* Mutations are normally researched in the Escritoire.
@@ -0,0 +1,37 @@
package forestry.api.genetics;
import javax.annotation.Nullable;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IGuiElementHelper;
/**
* A tab of the database screen that shows some information about a {@link IIndividual}.
*/
@SideOnly(Side.CLIENT)
public interface IDatabaseTab<I extends IIndividual> {
/**
* Creates the gui elements that are displayed if this tab is selected in the database.
*
* @param individual The individual that is currently in the database selected.
* @param elementHelper A helper to create the gui elements.
*/
void createElements(IGuiElementHelper elementHelper, I individual, ItemStack itemStack);
/**
* @return The slot of this tab.
*/
EnumDatabaseTab getTab();
/**
* Can be used to give the tab a custom tooltip.
*/
@Nullable
default String getTooltip(I individual){
return null;
}
}
@@ -0,0 +1,27 @@
package forestry.api.genetics;
public interface IFilterData {
/**
* If the root is present, returns the root,
* otherwise throws {@code NoSuchElementException}.
*/
ISpeciesRoot getRoot();
/**
* If the individual is present, returns the individual,
* otherwise throws {@code NoSuchElementException}.
*/
IIndividual getIndividual();
/**
* If the type is present, returns the type,
* otherwise throws {@code NoSuchElementException}.
*/
ISpeciesType getType();
/**
* @return True if this data contains a root, individual and type.
*/
boolean isPresent();
}
@@ -0,0 +1,56 @@
package forestry.api.genetics;
import javax.annotation.Nullable;
import java.io.IOException;
import java.util.Collection;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.EnumFacing;
import net.minecraft.world.WorldServer;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.INbtReadable;
import forestry.api.core.INbtWritable;
public interface IFilterLogic extends INbtWritable, INbtReadable {
void writeGuiData(PacketBuffer data);
@SideOnly(Side.CLIENT)
void readGuiData(PacketBuffer data) throws IOException;
Collection<EnumFacing> getValidDirections(ItemStack itemStack, EnumFacing from);
boolean isValid(ItemStack itemStack, EnumFacing facing);
boolean isValid(EnumFacing facing, ItemStack itemStack, IFilterData filterData);
boolean isValidAllelePair(EnumFacing orientation, String activeUID, String inactiveUID);
IFilterRuleType getRule(EnumFacing facing);
boolean setRule(EnumFacing facing, IFilterRuleType rule);
@Nullable
IAllele getGenomeFilter(EnumFacing facing, int index, boolean active);
boolean setGenomeFilter(EnumFacing facing, int index, boolean active, @Nullable IAllele allele);
void sendToServer(EnumFacing facing, int index, boolean active, @Nullable IAllele allele);
void sendToServer(EnumFacing facing, IFilterRuleType rule);
INetworkHandler getNetworkHandler();
interface INetworkHandler{
/**
* Sends the data of the logic to the client of all players that have the gui currently open.
*
* @param player The player that changed the filter.
*/
void sendToPlayers(IFilterLogic logic, WorldServer server, EntityPlayer player);
}
}
@@ -0,0 +1,40 @@
package forestry.api.genetics;
import javax.annotation.Nullable;
import java.util.Collection;
import forestry.api.core.ILocatable;
/**
* @since 5.8
*/
public interface IFilterRegistry {
/**
* Registers a filter rule.
*/
void registerFilter(IFilterRuleType rule);
Collection<IFilterRuleType> getRules();
IFilterRuleType getDefaultRule();
@Nullable
IFilterRuleType getRule(String uid);
@Nullable
IFilterRuleType getRule(int id);
int getId(IFilterRuleType rule);
IFilterLogic createLogic(ILocatable locatable, IFilterLogic.INetworkHandler networkHandler);
default IFilterRuleType getRuleOrDefault(String uid){
IFilterRuleType rule = getRule(uid);
return rule != null ? rule : getDefaultRule();
}
default IFilterRuleType getRuleOrDefault(int id){
IFilterRuleType rule = getRule(id);
return rule != null ? rule : getDefaultRule();
}
}
@@ -0,0 +1,17 @@
package forestry.api.genetics;
import javax.annotation.Nullable;
import net.minecraft.item.ItemStack;
public interface IFilterRule {
boolean isValid(ItemStack itemStack, IFilterData data);
/**
* If a root with this uid is registered, the filter will only get stack with individuals from this root.
*/
@Nullable
default String getRootUID() {
return null;
}
}
@@ -0,0 +1,27 @@
package forestry.api.genetics;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public interface IFilterRuleType extends IFilterRule {
void addLogic(IFilterRule logic);
/**
* @return True if a other logic can be added to this type.
*/
boolean isContainer();
/**
* @return A unique identifier for the rule.
*/
String getUID();
@SideOnly(Side.CLIENT)
TextureAtlasSprite getSprite();
@SideOnly(Side.CLIENT)
ResourceLocation getTextureMap();
}
@@ -14,17 +14,38 @@ import forestry.api.core.INbtWritable;
*/
public interface IGenome extends INbtWritable {
/**
* @return The active species of this genome.
*/
IAlleleSpecies getPrimary();
/**
* @return The inactive species of this genome.
*/
IAlleleSpecies getSecondary();
/**
* @return A array with all chromosomes of this genome.
*/
IChromosome[] getChromosomes();
/**
* @return The active allele of this chromosome type.
*/
IAllele getActiveAllele(IChromosomeType chromosomeType);
/**
* @return The inactive allele of this chromosome type.
*/
IAllele getInactiveAllele(IChromosomeType chromosomeType);
/**
* @return true if the given other IGenome has the amount of chromosomes and their alleles are identical.
*/
boolean isGeneticEqual(IGenome other);
/**
* @return The root of this species and describes the class of species of this genome.
*/
ISpeciesRoot getSpeciesRoot();
}
@@ -12,6 +12,9 @@ import net.minecraft.util.math.BlockPos;
*/
public interface IHousing {
/**
* The coordinates of the housing.
*/
BlockPos getCoordinates();
}
@@ -16,10 +16,19 @@ import forestry.api.core.INbtWritable;
*/
public interface IIndividual extends INbtWritable {
/**
* @return The uid of the active species of this individual.
*/
String getIdent();
/**
* @return The display name of the active species of this individual.
*/
String getDisplayName();
/**
* Adds some information about the individual to the list.
*/
void addTooltip(List<String> list);
/**
@@ -29,12 +38,24 @@ public interface IIndividual extends INbtWritable {
*/
boolean analyze();
/**
* @return true if the IIndividual has been analyzed previously.
*/
boolean isAnalyzed();
/**
* @return true if the active species of this individual has a effect.
*/
boolean hasEffect();
/**
* @return true if the active species of this individual is secret.
*/
boolean isSecret();
/**
* @return The genetic data of this individual.
*/
IGenome getGenome();
/**
@@ -49,6 +70,9 @@ public interface IIndividual extends INbtWritable {
*/
IIndividual copy();
/**
* @return true if this individual has the same active and inactive species.
*/
boolean isPureBred(IChromosomeType chromosomeType);
}
@@ -0,0 +1,107 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.genetics;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Map;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IGuiElementHelper;
/**
* An ISpeciesPlugin provides methods that are used in the alyzer and database to display information about an
* individual.
*/
@SideOnly(Side.CLIENT)
public interface ISpeciesPlugin<I extends IIndividual> {
/**
* A map that contains a {@link ItemStack} for every possible {@link IAlleleSpecies}.
* This item stack represents the species in the database and alyzer gui.
*
* The key of the map is the uid of the species.
*/
Map<String, ItemStack> getIndividualStacks();
/* ALYZER */
/**
* Creates the first page of the alyzer.
*
* @param gui A instance of the alyzer gui.
* @param elementHelper A helper to create the gui elements.
* @param individual The individual that is currently in the alyzer slot.
*/
default void createFirstPage(GuiScreen gui, IGuiElementHelper elementHelper, I individual){
}
/**
* Creates the second page of the alyzer.
*
* @param gui A instance of the alyzer gui.
* @param elementHelper A helper to create the gui elements.
* @param individual The individual that is currently in the alyzer slot.
*/
default void createSecondPage(GuiScreen gui, IGuiElementHelper elementHelper, I individual){
}
/**
* Creates the third page of the alyzer. This page is usually used to display the products of the individual.
*
* @param gui A instance of the alyzer gui.
* @param elementHelper A helper to create the gui elements.
* @param individual The individual that is currently in the alyzer slot.
*/
default void createThirdPage(GuiScreen gui, IGuiElementHelper elementHelper, I individual){
}
/**
* The hints that will be shown in the alyzer gui.
*/
List<String> getHints();
/* DATABASE */
/**
* Provides a instance of a {@link IDatabaseTab} that is used to display information about the species of a individual in the
* database.
*
* @param active True if this tab is used to display the active species of the individual.
*
* @return null if this plugin does not support the database.
*/
default IDatabaseTab<I> getSpeciesTab(boolean active){
return null;
}
/**
* Can be used to provide a custom products tab for the database.
* If this is Null forestry uses the default mutation tab to display the products.
*/
@Nullable
default IDatabaseTab<I> getProductsTab(){
return null;
}
/**
* Can be used to provide a custom mutation tab for the database.
* If this is Null forestry uses the default mutation tab to display the mutations.
*/
@Nullable
default IDatabaseTab<I> getMutationTab(){
return null;
}
/**
* A item stack that represents the database tab in the database gui.
*/
ItemStack getTabDatabaseIconItem(EnumDatabaseTab tab);
}
@@ -11,12 +11,15 @@ import java.util.List;
import java.util.Map;
import java.util.Random;
import com.mojang.authlib.GameProfile;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import com.mojang.authlib.GameProfile;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
/**
* Describes a class of species (i.e. bees, trees, butterflies), provides helper functions and access to common functionality.
*/
@@ -72,6 +75,9 @@ public interface ISpeciesRoot {
@Nullable
<O extends Object, I extends IIndividual> IIndividualTranslator<I, O> getTranslator(Object translatorKey);
@Nullable
<O extends Object, I extends IIndividual> I translateMember(O objectToTranslator);
@Nullable
ISpeciesType getType(ItemStack itemStack);
@@ -160,6 +166,12 @@ public interface ISpeciesRoot {
*/
List<? extends IMutation> getCombinations(IAllele other);
/**
* @param other Allele to match mutations against.
* @return All registered mutations the give allele is resolute of.
*/
List<? extends IMutation> getResultantMutations(IAllele other);
/**
* @return all possible mutations that result from breeding two species
* @since Forestry 3.7
@@ -197,4 +209,19 @@ public interface ISpeciesRoot {
* Plugin to add information for the handheld genetic analyzer.
*/
IAlyzerPlugin getAlyzerPlugin();
/**
* A array with the size of 4. With the database tabs of this {@link IIndividual}.
*/
//IDatabaseTab[] getDatabaseTabs();
/**
* Plugin to add information for the handheld genetic analyzer and the database.
* @since 5.7
*/
@Nullable
@SideOnly(Side.CLIENT)
default ISpeciesPlugin getSpeciesPlugin(){
return null;
}
}
@@ -5,10 +5,11 @@
******************************************************************************/
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@API(apiVersion = "4.7.1", owner = "ForestryAPI|core", provides = "ForestryAPI|genetics")
@API(apiVersion = "5.7.0", owner = "ForestryAPI|core", provides = "ForestryAPI|genetics")
package forestry.api.genetics;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
import net.minecraftforge.fml.common.API;
import mcp.MethodsReturnNonnullByDefault;
@@ -8,16 +8,19 @@ package forestry.api.lepidopterology;
import java.util.Map;
import java.util.Set;
import forestry.api.genetics.IAlleleSpecies;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.BiomeDictionary;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.genetics.IAlleleSpecies;
public interface IAlleleButterflySpecies extends IAlleleSpecies {
/**
* @return the IBeeRoot
* @return the IButterflyRoot
*/
@Override
IButterflyRoot getRoot();
@@ -59,15 +62,16 @@ public interface IAlleleButterflySpecies extends IAlleleSpecies {
*/
boolean isNocturnal();
/**
* @return The loot that drops if you kill a butterfly.
*/
Map<ItemStack, Float> getButterflyLoot();
/**
* @return The loot that drops if you destroy a leaf that contains a caterpillar.
*/
Map<ItemStack, Float> getCaterpillarLoot();
@SideOnly(Side.CLIENT)
void registerSprites();
/**
* @return The modid from the mod of the species.
*/
String getModID();
}
@@ -0,0 +1,70 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.modules;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* Annotation to provide additional information on IForestryModules. This information will be available via the "/forestry module info {@link #moduleID()}" command ingame.
* Any class annotated by this and implementing {@link IForestryModule} will be loaded by the model manager of Forestry.
*
* @author Nedelosk
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface ForestryModule {
/**
* @return Unique identifier for the module, no spaces!
*/
String moduleID();
/**
* @return The unique identifier of the module container.
*/
String containerID();
/**
* @return Nice and readable module name.
*/
String name();
/**
* @return ForestryModule author's name.
*/
String author() default "";
/**
* @return URL of plugin homepage.
*/
String url() default "";
/**
* @return Not used (yet?).
*/
String help() default "";
/**
* @return The name of the loot table file, if any.
*/
String lootTable() default "";
/**
* @return True if this is a core module.
*/
boolean coreModule() default false;
/**
* @return Version of the module, if any.
*/
String version() default "";
/**
* @return Localization key for a short description what the module does.
*/
String unlocalizedDescription() default "";
}
@@ -0,0 +1,97 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.modules;
import javax.annotation.Nullable;
import java.util.Collections;
import java.util.Set;
import net.minecraft.command.ICommand;
import net.minecraft.util.ResourceLocation;
/**
* Defines a Forestry module.
* Any class implementing this interface and annotated by {@link ForestryModule} to be loaded by
* the model manager of Forestry.
*
*/
public interface IForestryModule {
default boolean isAvailable() {
return true;
}
default boolean canBeDisabled() {
return true;
}
default String getFailMessage() {
return "";
}
/**
* The ForestryModule.moduleID()s of any other modules this module depends on.
*/
default Set<ResourceLocation> getDependencyUids(){
return Collections.emptySet();
}
/**
* Can be used to setup the api.
* Will only be called if the module is active if not {@link #disabledSetupAPI()} will be called.
*
* Must be called by the mod that registers the container.
*/
default void setupAPI() {
}
/**
* Called to setup the api if this module is disabled in the config or has missing dependencies.
*
* Must be called by the mod that registers the container.
*/
default void disabledSetupAPI() {
}
/**
* Can be used to register items and blocks. Called before {@link #preInit()}.
*
* Must be called by the mod that registers the container.
*/
default void registerItemsAndBlocks() {
}
/**
* Must be called by the mod that registers the container.
*/
default void preInit() {
}
/**
* Can be used to register Buildcraft triggers.
*/
default void registerTriggers() {
}
default void doInit() {
}
/**
* Can be used to register recipes. Called after {@link #doInit()}.
*/
default void registerRecipes(){
}
default void addLootPoolNames(Set<String> lootPoolNames){
}
default void postInit(){
}
@Nullable
default ICommand[] getConsoleCommands(){
return null;
}
}
@@ -0,0 +1,34 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.modules;
import java.util.Collection;
import net.minecraftforge.common.config.Configuration;
public interface IModuleContainer {
/**
* @return Unique identifier for the module container, no spaces!
*/
String getID();
boolean isAvailable();
Configuration getModulesConfig();
/**
* @return true if the module is enabled in the config file of this container.
*/
boolean isModuleEnabled(IForestryModule module);
/**
* Called after configured the modules.
*/
default void onConfiguredModules(Collection<IForestryModule> activeModules, Collection<IForestryModule> unloadedModules){
}
}
@@ -0,0 +1,26 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.modules;
import java.util.Collection;
import net.minecraft.util.ResourceLocation;
/**
* The module manager of Forestry.
*/
public interface IModuleManager {
default boolean isModuleEnabled(String containerID, String moduleID){
return isModuleEnabled(new ResourceLocation(containerID, moduleID));
}
boolean isModuleEnabled(ResourceLocation id);
void registerContainers(IModuleContainer... container);
Collection<IModuleContainer> getContainers();
}
@@ -0,0 +1,15 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@API(apiVersion = "5.7.0", owner = "ForestryAPI|core", provides = "ForestryAPI|modules")
package forestry.api.modules;
import javax.annotation.ParametersAreNonnullByDefault;
import net.minecraftforge.fml.common.API;
import mcp.MethodsReturnNonnullByDefault;
@@ -0,0 +1,86 @@
package forestry.apiculture;
import net.minecraft.item.ItemStack;
import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.EnumBeeChromosome;
import forestry.api.apiculture.IBee;
import forestry.api.genetics.IFilterData;
import forestry.api.genetics.IFilterRule;
import forestry.api.genetics.IFilterRuleType;
import forestry.api.genetics.IIndividual;
import forestry.sorting.DefaultFilterRuleType;
public enum ApicultureFilterRule implements IFilterRule {
PURE_BREED(DefaultFilterRuleType.PURE_BREED){
@Override
protected boolean isValid(IBee bee) {
return bee.isPureBred(EnumBeeChromosome.SPECIES);
}
},
NOCTURNAL(DefaultFilterRuleType.NOCTURNAL){
@Override
protected boolean isValid(IBee bee) {
return bee.getGenome().getNeverSleeps();
}
},
PURE_NOCTURNAL(DefaultFilterRuleType.PURE_NOCTURNAL){
@Override
protected boolean isValid(IBee bee) {
return bee.getGenome().getNeverSleeps() && bee.isPureBred(EnumBeeChromosome.NEVER_SLEEPS);
}
},
FLYER(DefaultFilterRuleType.FLYER){
@Override
protected boolean isValid(IBee bee) {
return bee.getGenome().getToleratesRain();
}
},
PURE_FLYER((DefaultFilterRuleType.PURE_FLYER)){
@Override
protected boolean isValid(IBee bee) {
return bee.getGenome().getToleratesRain() && bee.isPureBred(EnumBeeChromosome.TOLERATES_RAIN);
}
},
CAVE(DefaultFilterRuleType.CAVE){
@Override
protected boolean isValid(IBee bee) {
return bee.getGenome().getCaveDwelling();
}
},
PURE_CAVE(DefaultFilterRuleType.PURE_CAVE){
@Override
protected boolean isValid(IBee bee) {
return bee.getGenome().getCaveDwelling() && bee.isPureBred(EnumBeeChromosome.CAVE_DWELLING);
}
};
ApicultureFilterRule(IFilterRuleType rule) {
rule.addLogic(this);
}
public static void init() {
}
@Override
public boolean isValid(ItemStack itemStack, IFilterData data) {
if(!data.isPresent()){
return false;
}
IIndividual individual = data.getIndividual();
if(!(individual instanceof IBee)){
return false;
}
return isValid((IBee)individual);
}
protected boolean isValid(IBee bee){
return false;
}
@Override
public String getRootUID() {
return BeeManager.beeRoot.getUID();
}
}
@@ -0,0 +1,88 @@
package forestry.apiculture;
import java.util.Locale;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.EnumBeeType;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IFilterData;
import forestry.api.genetics.IFilterRule;
import forestry.api.genetics.IFilterRuleType;
import forestry.core.render.TextureManagerForestry;
public enum ApicultureFilterRuleType implements IFilterRuleType {
BEE{
@Override
public boolean isValid(ItemStack itemStack, IFilterData data) {
return data.isPresent();
}
},
DRONE{
@Override
public boolean isValid(ItemStack itemStack, IFilterData data) {
return data.isPresent() && data.getType() == EnumBeeType.DRONE;
}
},
PRINCESS{
@Override
public boolean isValid(ItemStack itemStack, IFilterData data) {
return data.isPresent() && data.getType() == EnumBeeType.PRINCESS;
}
},
QUEEN{
@Override
public boolean isValid(ItemStack itemStack, IFilterData data) {
return data.isPresent() && data.getType() == EnumBeeType.QUEEN;
}
};
private final String uid;
ApicultureFilterRuleType() {
this.uid = "forestry.apiculture." + name().toLowerCase(Locale.ENGLISH);
}
public static void init() {
for (ApicultureFilterRuleType rule : values()) {
AlleleManager.filterRegistry.registerFilter(rule);
}
}
@Override
public void addLogic(IFilterRule logic) {
}
@Override
public boolean isContainer() {
return false;
}
@SideOnly(Side.CLIENT)
@Override
public TextureAtlasSprite getSprite() {
return TextureManagerForestry.getInstance().getDefault("analyzer/" + name().toLowerCase(Locale.ENGLISH));
}
@SideOnly(Side.CLIENT)
@Override
public ResourceLocation getTextureMap() {
return TextureManagerForestry.LOCATION_FORESTRY_TEXTURE;
}
@Override
public String getRootUID() {
return BeeManager.beeRoot.getUID();
}
@Override
public String getUID() {
return uid;
}
}
@@ -276,13 +276,13 @@ public class BeekeepingLogic implements IBeekeepingLogic {
// Work cycles are throttled, rather than occurring every game tick.
queenWorkCycleThrottle++;
if (queenWorkCycleThrottle >= PluginApiculture.ticksPerBeeWorkCycle) {
if (queenWorkCycleThrottle >= ModuleApiculture.ticksPerBeeWorkCycle) {
queenWorkCycleThrottle = 0;
doProduction(queen, housing, beeListener);
World world = housing.getWorldObj();
List<IBlockState> flowers = hasFlowersCache.getFlowers(world);
if (flowers.size() < PluginApiculture.maxFlowersSpawnedPerHive) {
if (flowers.size() < ModuleApiculture.maxFlowersSpawnedPerHive) {
BlockPos blockPos = queen.plantFlowerRandom(housing, flowers);
if (blockPos != null) {
hasFlowersCache.addFlowerPos(blockPos);
@@ -380,7 +380,7 @@ public class BeekeepingLogic implements IBeekeepingLogic {
NBTTagCompound nbttagcompound = new NBTTagCompound();
princess.writeToNBT(nbttagcompound);
queenStack = new ItemStack(PluginApiculture.getItems().beeQueenGE);
queenStack = new ItemStack(ModuleApiculture.getItems().beeQueenGE);
queenStack.setTagCompound(nbttagcompound);
beeInventory.setQueen(queenStack);
@@ -410,7 +410,7 @@ public class BeekeepingLogic implements IBeekeepingLogic {
} else {
Log.warning("Tried to spawn offspring off an unmated queen. Devolving her to a princess.");
ItemStack convert = new ItemStack(PluginApiculture.getItems().beePrincessGE);
ItemStack convert = new ItemStack(ModuleApiculture.getItems().beePrincessGE);
NBTTagCompound nbttagcompound = new NBTTagCompound();
queen.writeToNBT(nbttagcompound);
convert.setTagCompound(nbttagcompound);
@@ -433,7 +433,7 @@ public class BeekeepingLogic implements IBeekeepingLogic {
IApiaristTracker breedingTracker = BeeManager.beeRoot.getBreedingTracker(world, beeHousing.getOwner());
// Princess
boolean secondPrincess = world.rand.nextInt(10000) < PluginApiculture.getSecondPrincessChance() * 100;
boolean secondPrincess = world.rand.nextInt(10000) < ModuleApiculture.getSecondPrincessChance() * 100;
int count = secondPrincess ? 2 : 1;
while (count > 0) {
count--;
@@ -0,0 +1,72 @@
package forestry.apiculture;
import java.util.EnumMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.biome.Biome;
import net.minecraftforge.common.BiomeDictionary;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import forestry.api.apiculture.hives.IHiveRegistry;
import forestry.core.config.LocalizedConfiguration;
public class HiveConfig {
private static final Map<IHiveRegistry.HiveType, HiveConfig> configs = new EnumMap<IHiveRegistry.HiveType, HiveConfig>(IHiveRegistry.HiveType.class);
private static final String CATEGORY = "world.generate.beehives.blacklist";
private final Set<BiomeDictionary.Type> blacklistedTypes = new HashSet<>();
private final Set<Biome> blacklistedBiomes = new HashSet<>();
private static final Set<Integer> blacklistedDims = new HashSet<>();
public static void parse(LocalizedConfiguration config){
config.addCategoryCommentLocalized(CATEGORY);
for(int dimId : config.get("world.generate.beehives", "dimBlacklist", new int[0]).getIntList()){
blacklistedDims.add(dimId);
}
for(IHiveRegistry.HiveType type : IHiveRegistry.HiveType.values()){
String[] entries = config.get(CATEGORY, type.getName(), new String[0]).getStringList();
configs.put(type, new HiveConfig(entries));
}
}
public HiveConfig(String[] entries){
for(String entry : entries){
BiomeDictionary.Type type = BiomeDictionary.Type.getType(entry);
Biome biome = ForgeRegistries.BIOMES.getValue(new ResourceLocation(entry));
if(type != null){
blacklistedTypes.add(type);
}else if(biome != null){
blacklistedBiomes.add(biome);
}
}
}
public static boolean isBlacklisted(IHiveRegistry.HiveType type, Biome biome){
HiveConfig config = configs.get(type);
if(config == null){
return false;
}
return config.isBlacklisted(biome);
}
private boolean isBlacklisted(Biome biome){
if(blacklistedBiomes.contains(biome)){
return true;
}
return BiomeDictionary.getTypes(biome).stream().anyMatch(blacklistedTypes::contains);
}
public static boolean isDimBlacklisted(int dimId) {
return blacklistedDims.contains(dimId);
}
public static void addBlacklistedDim(int dimId) {
blacklistedDims.add(dimId);
}
}
@@ -70,6 +70,7 @@ import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IClassification;
import forestry.api.genetics.IClassification.EnumClassLevel;
import forestry.api.genetics.IFlowerAcceptableRule;
import forestry.api.modules.ForestryModule;
import forestry.api.recipes.RecipeManagers;
import forestry.api.storage.ICrateRegistry;
import forestry.api.storage.StorageManager;
@@ -110,8 +111,8 @@ import forestry.apiculture.worldgen.HiveDescription;
import forestry.apiculture.worldgen.HiveGenHelper;
import forestry.apiculture.worldgen.HiveRegistry;
import forestry.core.ISaveEventHandler;
import forestry.core.PluginCore;
import forestry.core.PluginFluids;
import forestry.core.ModuleCore;
import forestry.core.ModuleFluids;
import forestry.core.capabilities.NullStorage;
import forestry.core.config.Config;
import forestry.core.config.Constants;
@@ -128,14 +129,14 @@ import forestry.core.utils.IMCUtil;
import forestry.core.utils.Log;
import forestry.core.utils.OreDictUtil;
import forestry.core.utils.VillagerTradeLists;
import forestry.food.PluginFood;
import forestry.food.ModuleFood;
import forestry.food.items.ItemRegistryFood;
import forestry.plugins.BlankForestryPlugin;
import forestry.plugins.ForestryPlugin;
import forestry.plugins.ForestryPluginUids;
import forestry.modules.BlankForestryModule;
import forestry.modules.ForestryModuleUids;
import forestry.modules.ModuleManager;
@ForestryPlugin(pluginID = ForestryPluginUids.APICULTURE, name = "Apiculture", author = "SirSengir", url = Constants.URL, unlocalizedDescription = "for.plugin.apiculture.description", lootTable = "apiculture")
public class PluginApiculture extends BlankForestryPlugin {
@ForestryModule(containerID = Constants.MOD_ID, moduleID = ForestryModuleUids.APICULTURE, name = "Apiculture", author = "SirSengir", url = Constants.URL, unlocalizedDescription = "for.module.apiculture.description", lootTable = "apiculture")
public class ModuleApiculture extends BlankForestryModule {
private static final String CONFIG_CATEGORY = "apiculture";
private static float secondPrincessChance = 0;
@@ -150,7 +151,11 @@ public class PluginApiculture extends BlankForestryPlugin {
private static HiveRegistry hiveRegistry;
public static String beekeepingMode = "NORMAL";
public static final int ticksPerBeeWorkCycle = 550;
public static int ticksPerBeeWorkCycle = 550;
public static boolean hivesDamageOnPeaceful = false;
public static int maxFlowersSpawnedPerHive = 20;
@Nullable
public static VillagerRegistry.VillagerProfession villagerApiarist;
@@ -178,7 +183,6 @@ public class PluginApiculture extends BlankForestryPlugin {
@Override
public void setupAPI() {
super.setupAPI();
HiveManager.hiveRegistry = hiveRegistry = new HiveRegistry();
HiveManager.genHelper = new HiveGenHelper();
@@ -216,7 +220,6 @@ public class PluginApiculture extends BlankForestryPlugin {
@Override
public void preInit() {
super.preInit();
BeeDefinition.preInit();
@@ -228,7 +231,12 @@ public class PluginApiculture extends BlankForestryPlugin {
}
// Commands
PluginCore.rootCommand.addChildCommand(new CommandBee());
ModuleCore.rootCommand.addChildCommand(new CommandBee());
if(ModuleManager.getInstance().isModuleEnabled(Constants.MOD_ID, ForestryModuleUids.SORTING)){
ApicultureFilterRuleType.init();
ApicultureFilterRule.init();
}
}
// TODO: Buildcraft for 1.9
@@ -266,6 +274,10 @@ public class PluginApiculture extends BlankForestryPlugin {
String[] blacklist = config.getStringListLocalized("species", "blacklist", Constants.EMPTY_STRINGS);
parseBeeBlacklist(blacklist);
ticksPerBeeWorkCycle = config.getIntLocalized("beekeeping", "ticks.work", 550, 250, 850);
hivesDamageOnPeaceful = config.getBooleanLocalized("beekeeping", "hivedamage.peaceful", false);
config.save();
@@ -355,7 +367,6 @@ public class PluginApiculture extends BlankForestryPlugin {
@Override
public void postInit() {
super.postInit();
registerDungeonLoot();
}
@@ -404,7 +415,7 @@ public class PluginApiculture extends BlankForestryPlugin {
@Override
public void registerCrates() {
ItemRegistryCore coreItems = PluginCore.getItems();
ItemRegistryCore coreItems = ModuleCore.getItems();
ItemRegistryApiculture items = getItems();
ICrateRegistry crateRegistry = StorageManager.crateRegistry;
@@ -434,8 +445,8 @@ public class PluginApiculture extends BlankForestryPlugin {
@Override
public void registerRecipes() {
ItemRegistryCore coreItems = PluginCore.getItems();
ItemRegistryFluids fluidItems = PluginFluids.getItems();
ItemRegistryCore coreItems = ModuleCore.getItems();
ItemRegistryFluids fluidItems = ModuleFluids.getItems();
ItemRegistryApiculture items = getItems();
BlockRegistryApiculture blocks = getBlocks();
@@ -504,15 +515,15 @@ public class PluginApiculture extends BlankForestryPlugin {
for(int blockMeta = 0;blockMeta < EnumHoneyComb.VALUES.length - blockCount * 16;blockMeta++){
int itemMeta = blockMeta + blockCount * 16;
RecipeUtil.addRecipe("comb." + itemMeta, new ItemStack(block, 1, blockMeta),
"###",
"###",
"###",
"###",
"###", '#', items.beeComb.get(EnumHoneyComb.get(itemMeta), 1));
}
}
// FOOD STUFF
if (ForestryAPI.enabledPlugins.contains(ForestryPluginUids.FOOD)) {
ItemRegistryFood foodItems = PluginFood.getItems();
if (ForestryAPI.enabledModules.contains(new ResourceLocation(Constants.MOD_ID, ForestryModuleUids.FOOD))) {
ItemRegistryFood foodItems = ModuleFood.getItems();
RecipeUtil.addRecipe("honeyed_slice", new ItemStack(foodItems.honeyedSlice, 4),
"###", "#X#", "###",
'#', items.honeyDrop,
@@ -623,7 +634,7 @@ public class PluginApiculture extends BlankForestryPlugin {
'I', OreDictUtil.INGOT_IRON,
'W', coreItems.craftingMaterial.getWovenSilk());
if (ForestryAPI.enabledPlugins.contains(ForestryPluginUids.FACTORY)) {
if (ForestryAPI.enabledModules.contains(new ResourceLocation(Constants.MOD_ID, ForestryModuleUids.FACTORY))) {
// / SQUEEZER
FluidStack honeyDropFluid = Fluids.FOR_HONEY.getFluid(Constants.FLUID_PER_HONEY_DROP);
RecipeManagers.squeezerManager.addRecipe(10, items.honeyDrop.getItemStack(), honeyDropFluid, items.propolis.getItemStack(), 5);
@@ -852,7 +863,6 @@ public class PluginApiculture extends BlankForestryPlugin {
@Override
public void addLootPoolNames(Set<String> lootPoolNames) {
super.addLootPoolNames(lootPoolNames);
lootPoolNames.add("forestry_apiculture_items");
lootPoolNames.add("forestry_apiculture_bees");
}
@@ -941,9 +951,15 @@ public class PluginApiculture extends BlankForestryPlugin {
String messageString = String.format("Received a '%s' request from mod '%s'. This IMC message has been replaced with the oreDictionary for 'slabWood'. Please contact the author and report this issue.", message.key, message.getSender());
Log.warning(messageString);
return true;
} else if (message.key.equals("blacklist-hives-dimension")) {
int[] dims = message.getNBTValue().getIntArray("dimensions");
for(int dim : dims) {
HiveConfig.addBlacklistedDim(dim);
}
return true;
}
return super.processIMCMessage(message);
return false;
}
@SubscribeEvent
@@ -25,6 +25,7 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumBlockRenderType;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
@@ -39,11 +40,12 @@ import forestry.api.apiculture.IBee;
import forestry.api.apiculture.IHiveDrop;
import forestry.api.apiculture.IHiveTile;
import forestry.api.apiculture.hives.IHiveRegistry.HiveType;
import forestry.api.core.BiomeHelper;
import forestry.api.core.IItemModelRegister;
import forestry.api.core.IModelManager;
import forestry.api.core.Tabs;
import forestry.apiculture.MaterialBeehive;
import forestry.apiculture.PluginApiculture;
import forestry.apiculture.ModuleApiculture;
import forestry.apiculture.tiles.TileHive;
import forestry.core.blocks.IBlockWithMeta;
import forestry.core.tiles.TileUtil;
@@ -154,7 +156,7 @@ public class BlockBeeHives extends BlockContainer implements IItemModelRegister,
if (hiveName == null || hiveName.equals(HiveType.SWARM.getHiveUid())) {
return Collections.emptyList();
}
return PluginApiculture.getHiveRegistry().getDrops(hiveName);
return ModuleApiculture.getHiveRegistry().getDrops(hiveName);
}
@Nullable
@@ -197,5 +199,22 @@ public class BlockBeeHives extends BlockContainer implements IItemModelRegister,
public String getNameFromMeta(int meta) {
return HiveType.VALUES[meta].getName();
}
@Override
public int getFlammability(IBlockAccess world, BlockPos pos, EnumFacing face)
{
return 5;
}
@Override
public boolean isFlammable(IBlockAccess world, BlockPos pos, EnumFacing face)
{
return true;
}
@Override
public int getFireSpreadSpeed(IBlockAccess world, BlockPos pos, EnumFacing face)
{
return 5;
}
}
@@ -32,7 +32,7 @@ import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IItemModelRegister;
import forestry.api.core.IModelManager;
import forestry.api.core.Tabs;
import forestry.apiculture.PluginApiculture;
import forestry.apiculture.ModuleApiculture;
import forestry.apiculture.tiles.TileCandle;
import forestry.core.config.Constants;
@@ -61,7 +61,7 @@ public class BlockStump extends BlockTorch implements IItemModelRegister {
if (BlockCandle.lightingItems.contains(heldItem.getItem())) {
IBlockState blockState = worldIn.getBlockState(pos);
Block block = blockState.getBlock();
IBlockState activatedState = PluginApiculture.getBlocks().candle.getStateFromMeta(block.getMetaFromState(blockState));
IBlockState activatedState = ModuleApiculture.getBlocks().candle.getStateFromMeta(block.getMetaFromState(blockState));
worldIn.setBlockState(pos, activatedState, Constants.FLAG_BLOCK_SYNC);
TileCandle tc = new TileCandle();
tc.setColour(16777215); // default to white
@@ -3,7 +3,7 @@ package forestry.apiculture.compat;
import com.google.common.base.Preconditions;
import forestry.api.apiculture.BeeManager;
import forestry.api.genetics.IAlleleSpecies;
import forestry.apiculture.PluginApiculture;
import forestry.apiculture.ModuleApiculture;
import forestry.apiculture.items.ItemRegistryApiculture;
import forestry.core.genetics.Genome;
import forestry.core.utils.JeiUtil;
@@ -16,7 +16,7 @@ import mezz.jei.api.JEIPlugin;
public class ApicultureJeiPlugin implements IModPlugin {
@Override
public void registerItemSubtypes(ISubtypeRegistry subtypeRegistry) {
ItemRegistryApiculture items = PluginApiculture.getItems();
ItemRegistryApiculture items = ModuleApiculture.getItems();
Preconditions.checkNotNull(items);
ISubtypeRegistry.ISubtypeInterpreter beeSubtypeInterpreter = itemStack -> {
@@ -31,7 +31,7 @@ public class ApicultureJeiPlugin implements IModPlugin {
@Override
public void register(IModRegistry registry) {
ItemRegistryApiculture items = PluginApiculture.getItems();
ItemRegistryApiculture items = ModuleApiculture.getItems();
Preconditions.checkNotNull(items);
JeiUtil.addDescription(registry, "frames",
@@ -15,19 +15,6 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
import forestry.api.apiculture.IBeeHousingInventory;
import forestry.api.apiculture.IBeeListener;
import forestry.api.apiculture.IBeeModifier;
import forestry.api.apiculture.IHiveFrame;
import forestry.apiculture.ApiaryBeeListener;
import forestry.apiculture.ApiaryBeeModifier;
import forestry.apiculture.IApiary;
import forestry.apiculture.PluginApiculture;
import forestry.apiculture.gui.ContainerMinecartBeehouse;
import forestry.apiculture.gui.GuiBeeHousing;
import forestry.apiculture.inventory.IApiaryInventory;
import forestry.apiculture.inventory.InventoryApiary;
import forestry.core.inventory.IInventoryAdapter;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.entity.player.EntityPlayer;
@@ -35,9 +22,24 @@ import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Tuple;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.apiculture.IBeeHousingInventory;
import forestry.api.apiculture.IBeeListener;
import forestry.api.apiculture.IBeeModifier;
import forestry.api.apiculture.IHiveFrame;
import forestry.apiculture.ApiaryBeeListener;
import forestry.apiculture.ApiaryBeeModifier;
import forestry.apiculture.IApiary;
import forestry.apiculture.ModuleApiculture;
import forestry.apiculture.gui.ContainerMinecartBeehouse;
import forestry.apiculture.gui.GuiBeeHousing;
import forestry.apiculture.inventory.IApiaryInventory;
import forestry.apiculture.inventory.InventoryApiary;
import forestry.core.inventory.IInventoryAdapter;
public class EntityMinecartApiary extends EntityMinecartBeeHousingBase implements IApiary {
private static final IBeeModifier beeModifier = new ApiaryBeeModifier();
@@ -76,12 +78,12 @@ public class EntityMinecartApiary extends EntityMinecartBeeHousingBase implement
@Override
public IBlockState getDisplayTile() {
return PluginApiculture.getBlocks().apiary.getDefaultState();
return ModuleApiculture.getBlocks().apiary.getDefaultState();
}
@Override
public ItemStack getCartItem() {
return PluginApiculture.getItems().minecartBeehouse.getApiaryMinecart();
return ModuleApiculture.getItems().minecartBeehouse.getApiaryMinecart();
}
@Override
@@ -18,7 +18,7 @@ import forestry.api.apiculture.IBeeListener;
import forestry.api.apiculture.IBeeModifier;
import forestry.apiculture.BeehouseBeeModifier;
import forestry.apiculture.InventoryBeeHousing;
import forestry.apiculture.PluginApiculture;
import forestry.apiculture.ModuleApiculture;
import forestry.apiculture.gui.ContainerMinecartBeehouse;
import forestry.apiculture.gui.GuiBeeHousing;
import forestry.core.inventory.IInventoryAdapter;
@@ -54,12 +54,12 @@ public class EntityMinecartBeehouse extends EntityMinecartBeeHousingBase {
@Override
public IBlockState getDisplayTile() {
return PluginApiculture.getBlocks().beeHouse.getDefaultState();
return ModuleApiculture.getBlocks().beeHouse.getDefaultState();
}
@Override
public ItemStack getCartItem() {
return PluginApiculture.getItems().minecartBeehouse.getBeeHouseMinecart();
return ModuleApiculture.getItems().minecartBeehouse.getBeeHouseMinecart();
}
/* IBeeHousing */
@@ -17,14 +17,14 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
import forestry.apiculture.PluginApiculture;
import forestry.apiculture.ModuleApiculture;
public class ParticleBeeExplore extends Particle {
private final Vec3d origin;
public ParticleBeeExplore(World world, Vec3d origin, BlockPos destination, int color) {
super(world, origin.x, origin.y, origin.z, 0.0D, 0.0D, 0.0D);
setParticleTexture(PluginApiculture.getBeeSprite());
setParticleTexture(ModuleApiculture.getBeeSprite());
this.origin = origin;
this.motionX = (destination.getX() + 0.5 - this.posX) * 0.015;
@@ -17,7 +17,7 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
import forestry.apiculture.PluginApiculture;
import forestry.apiculture.ModuleApiculture;
public class ParticleBeeRoundTrip extends Particle {
private final Vec3d origin;
@@ -25,7 +25,7 @@ public class ParticleBeeRoundTrip extends Particle {
public ParticleBeeRoundTrip(World world, Vec3d origin, BlockPos destination, int color) {
super(world, origin.x, origin.y, origin.z, 0.0D, 0.0D, 0.0D);
setParticleTexture(PluginApiculture.getBeeSprite());
setParticleTexture(ModuleApiculture.getBeeSprite());
this.origin = origin;
this.destination = destination;
@@ -16,7 +16,7 @@ import net.minecraft.entity.Entity;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
import forestry.apiculture.PluginApiculture;
import forestry.apiculture.ModuleApiculture;
public class ParticleBeeTargetEntity extends Particle {
private final Vec3d origin;
@@ -24,7 +24,7 @@ public class ParticleBeeTargetEntity extends Particle {
public ParticleBeeTargetEntity(World world, Vec3d origin, Entity entity, int color) {
super(world, origin.x, origin.y, origin.z, 0.0D, 0.0D, 0.0D);
setParticleTexture(PluginApiculture.getBeeSprite());
setParticleTexture(ModuleApiculture.getBeeSprite());
this.origin = origin;
this.entity = entity;
@@ -19,7 +19,7 @@ import forestry.api.apiculture.IApiaristTracker;
import forestry.api.genetics.IBreedingTracker;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.ISpeciesRoot;
import forestry.apiculture.PluginApiculture;
import forestry.apiculture.ModuleApiculture;
import forestry.core.genetics.BreedingTracker;
public class ApiaristTracker extends BreedingTracker implements IApiaristTracker {
@@ -28,7 +28,7 @@ public class ApiaristTracker extends BreedingTracker implements IApiaristTracker
* Required for creation from map storage
*/
public ApiaristTracker(String s) {
super(s, PluginApiculture.beekeepingMode);
super(s, ModuleApiculture.beekeepingMode);
}
private int queensTotal = 0;
@@ -476,11 +476,6 @@ public class Bee extends IndividualLiving implements IBee {
IAlleleBeeSpecies primary = genome.getPrimary();
IAlleleBeeSpecies secondary = genome.getSecondary();
// All work and no play makes queen a dull girl.
if (mode.isOverworked(this, housing)) {
setIsNatural(false);
}
IBeeModifier beeHousingModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
IBeeModifier beeModeModifier = mode.getBeeModifier();
@@ -4,6 +4,13 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.EnumBeeChromosome;
import forestry.api.apiculture.EnumBeeType;
@@ -13,7 +20,7 @@ import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IAlleleInteger;
import forestry.api.genetics.IAlleleTolerance;
import forestry.api.genetics.IAlyzerPlugin;
import forestry.apiculture.PluginApiculture;
import forestry.apiculture.ModuleApiculture;
import forestry.core.config.Config;
import forestry.core.genetics.alleles.AlleleBoolean;
import forestry.core.gui.GuiAlyzer;
@@ -22,11 +29,6 @@ import forestry.core.gui.widgets.ItemStackWidget;
import forestry.core.gui.widgets.WidgetManager;
import forestry.core.utils.StringUtil;
import forestry.core.utils.Translator;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class BeeAlyzerPlugin implements IAlyzerPlugin {
public static final BeeAlyzerPlugin INSTANCE = new BeeAlyzerPlugin();
@@ -35,7 +37,7 @@ public class BeeAlyzerPlugin implements IAlyzerPlugin {
private BeeAlyzerPlugin() {
NonNullList<ItemStack> beeList = NonNullList.create();
PluginApiculture.getItems().beeDroneGE.addCreativeItems(beeList, false);
ModuleApiculture.getItems().beeDroneGE.addCreativeItems(beeList, false);
for (ItemStack beeStack : beeList) {
IAlleleBeeSpecies species = BeeGenome.getSpecies(beeStack);
iconStacks.put(species.getUID(), beeStack);
@@ -0,0 +1,120 @@
package forestry.apiculture.genetics;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.EnumBeeChromosome;
import forestry.api.apiculture.EnumBeeType;
import forestry.api.apiculture.IBee;
import forestry.api.core.GuiElementAlignment;
import forestry.api.core.IGuiElementHelper;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.EnumDatabaseTab;
import forestry.api.genetics.IAlleleInteger;
import forestry.api.genetics.IAlleleSpecies;
import forestry.api.genetics.IAlleleTolerance;
import forestry.api.genetics.IDatabaseTab;
import forestry.api.lepidopterology.EnumButterflyChromosome;
import forestry.core.genetics.alleles.AlleleBoolean;
import forestry.core.render.ColourProperties;
import forestry.core.utils.StringUtil;
import forestry.core.utils.Translator;
@SideOnly(Side.CLIENT)
public class BeeDatabaseTab implements IDatabaseTab<IBee> {
private final EnumDatabaseTab tab;
BeeDatabaseTab(EnumDatabaseTab tab) {
this.tab = tab;
}
@Override
public void createElements(IGuiElementHelper elementHelper, IBee bee, ItemStack itemStack) {
EnumBeeType type = BeeManager.beeRoot.getType(itemStack);
if (type == null) {
return;
}
IAlleleSpecies primarySpecies = bee.getGenome().getPrimary();
boolean active = tab == EnumDatabaseTab.ACTIVE_SPECIES;
elementHelper.addText(Translator.translateToLocal("for.gui.database.tab." + tab.name().toLowerCase() + ".name"), GuiElementAlignment.CENTER, 0xcfb53b);
elementHelper.addAllele(Translator.translateToLocal("for.gui.species"), bee, EnumBeeChromosome.SPECIES, active);
IAlleleTolerance tempTolerance = (IAlleleTolerance) (active ? bee.getGenome().getActiveAllele(EnumBeeChromosome.TEMPERATURE_TOLERANCE) : bee.getGenome().getInactiveAllele(EnumBeeChromosome.TEMPERATURE_TOLERANCE));
elementHelper.addText(TextFormatting.UNDERLINE + Translator.translateToLocal("for.gui.climate"), GuiElementAlignment.CENTER);
elementHelper.addToleranceInfo(tempTolerance, primarySpecies, AlleleManager.climateHelper.toDisplay(primarySpecies.getTemperature()));
IAlleleTolerance humidTolerance = (IAlleleTolerance) (active ? bee.getGenome().getActiveAllele(EnumBeeChromosome.HUMIDITY_TOLERANCE) : bee.getGenome().getInactiveAllele(EnumBeeChromosome.HUMIDITY_TOLERANCE));
elementHelper.addText(TextFormatting.UNDERLINE + Translator.translateToLocal("for.gui.humidity"), GuiElementAlignment.CENTER);
elementHelper.addToleranceInfo(humidTolerance, primarySpecies, AlleleManager.climateHelper.toDisplay(primarySpecies.getHumidity()));
elementHelper.addAllele(Translator.translateToLocal("for.gui.lifespan"), bee, EnumBeeChromosome.LIFESPAN, active);
elementHelper.addAllele(Translator.translateToLocal("for.gui.speed"), bee, EnumBeeChromosome.SPEED, active);
elementHelper.addAllele(Translator.translateToLocal("for.gui.pollination"), bee, EnumBeeChromosome.FLOWERING, active);
elementHelper.addAllele(Translator.translateToLocal("for.gui.flowers"), bee, EnumBeeChromosome.FLOWER_PROVIDER, active);
IAlleleInteger primaryFertility = (IAlleleInteger) (active ? bee.getGenome().getActiveAllele(EnumBeeChromosome.FERTILITY) : bee.getGenome().getInactiveAllele(EnumBeeChromosome.FERTILITY));
elementHelper.addText(TextFormatting.UNDERLINE + Translator.translateToLocal("for.gui.fertility"), GuiElementAlignment.CENTER);
elementHelper.addFertilityInfo(primaryFertility, 0, 0);
elementHelper.addAllele(Translator.translateToLocal("for.gui.area"), bee, EnumBeeChromosome.TERRITORY, active);
elementHelper.addAllele(Translator.translateToLocal("for.gui.effect"), bee, EnumBeeChromosome.EFFECT, active);
String yes = Translator.translateToLocal("for.yes");
String no = Translator.translateToLocal("for.no");
String diurnal, nocturnal;
if(active) {
if (bee.getGenome().getNeverSleeps()) {
nocturnal = diurnal = yes;
} else {
nocturnal = bee.getGenome().getPrimary().isNocturnal() ? yes : no;
diurnal = !bee.getGenome().getPrimary().isNocturnal() ? yes : no;
}
}else {
if (((AlleleBoolean) bee.getGenome().getInactiveAllele(EnumButterflyChromosome.NOCTURNAL)).getValue()) {
nocturnal = diurnal = yes;
} else {
nocturnal = bee.getGenome().getSecondary().isNocturnal() ? yes : no;
diurnal = !bee.getGenome().getSecondary().isNocturnal() ? yes : no;
}
}
elementHelper.addText(TextFormatting.UNDERLINE + Translator.translateToLocal("for.gui.diurnal"), GuiElementAlignment.CENTER);
elementHelper.addText(diurnal, GuiElementAlignment.CENTER, elementHelper.factory().getColorCoding(false));
elementHelper.addText(TextFormatting.UNDERLINE + Translator.translateToLocal("for.gui.nocturnal"), GuiElementAlignment.CENTER);
elementHelper.addText(nocturnal, GuiElementAlignment.CENTER, elementHelper.factory().getColorCoding(false));
String flyer = StringUtil.readableBoolean(active ? bee.getGenome().getToleratesRain() : ((AlleleBoolean) bee.getGenome().getInactiveAllele(EnumBeeChromosome.TOLERATES_RAIN)).getValue(), yes, no);
elementHelper.addAllele(Translator.translateToLocal("for.gui.flyer"), (a) -> flyer, bee, EnumButterflyChromosome.TOLERANT_FLYER, active);
String cave = StringUtil.readableBoolean(active ? bee.getGenome().getCaveDwelling() : ((AlleleBoolean) bee.getGenome().getInactiveAllele(EnumBeeChromosome.CAVE_DWELLING)).getValue(), yes, no);
elementHelper.addAllele(Translator.translateToLocal("for.gui.fireresist"), (a) -> cave, bee, EnumButterflyChromosome.FIRE_RESIST, active);
String displayText;
if (type == EnumBeeType.PRINCESS || type == EnumBeeType.QUEEN) {
String displayTextKey = "for.bees.stock.pristine";
if (!bee.isNatural()) {
displayTextKey = "for.bees.stock.ignoble";
}
displayText = Translator.translateToLocal(displayTextKey);
elementHelper.addText(displayText, GuiElementAlignment.CENTER, ColourProperties.INSTANCE.get("gui.beealyzer.binomial"));
}
}
@Override
public EnumDatabaseTab getTab() {
return tab;
}
}
@@ -36,11 +36,11 @@ import forestry.api.core.EnumHumidity;
import forestry.api.core.EnumTemperature;
import forestry.api.genetics.AlleleSpeciesRegisterEvent;
import forestry.api.genetics.IAllele;
import forestry.apiculture.PluginApiculture;
import forestry.apiculture.ModuleApiculture;
import forestry.apiculture.genetics.alleles.AlleleEffects;
import forestry.apiculture.items.EnumHoneyComb;
import forestry.apiculture.items.EnumPollenCluster;
import forestry.core.PluginCore;
import forestry.core.ModuleCore;
import forestry.core.config.Constants;
import forestry.core.genetics.alleles.AlleleHelper;
import forestry.core.genetics.alleles.EnumAllele;
@@ -50,7 +50,7 @@ public enum BeeDefinition implements IBeeDefinition {
FOREST(BeeBranchDefinition.HONEY, "nigrocincta", true, new Color(0x19d0ec), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.HONEY, 1), 0.30f);
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.HONEY, 1), 0.30f);
}
@Override
@@ -67,7 +67,7 @@ public enum BeeDefinition implements IBeeDefinition {
MEADOWS(BeeBranchDefinition.HONEY, "florea", true, new Color(0xef131e), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.HONEY, 1), 0.30f);
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.HONEY, 1), 0.30f);
}
@Override
@@ -83,7 +83,7 @@ public enum BeeDefinition implements IBeeDefinition {
COMMON(BeeBranchDefinition.HONEY, "cerana", true, new Color(0xb2b2b2), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.HONEY, 1), 0.35f);
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.HONEY, 1), 0.35f);
}
@Override
@@ -105,7 +105,7 @@ public enum BeeDefinition implements IBeeDefinition {
CULTIVATED(BeeBranchDefinition.HONEY, "mellifera", true, new Color(0x5734ec), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.HONEY, 1), 0.40f);
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.HONEY, 1), 0.40f);
}
@Override
@@ -126,7 +126,7 @@ public enum BeeDefinition implements IBeeDefinition {
NOBLE(BeeBranchDefinition.NOBLE, "nobilis", false, new Color(0xec9a19), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.DRIPPING, 1), 0.20f);
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.DRIPPING, 1), 0.20f);
}
@Override
@@ -144,7 +144,7 @@ public enum BeeDefinition implements IBeeDefinition {
MAJESTIC(BeeBranchDefinition.NOBLE, "regalis", true, new Color(0x7f0000), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.DRIPPING, 1), 0.30f);
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.DRIPPING, 1), 0.30f);
}
@Override
@@ -162,8 +162,8 @@ public enum BeeDefinition implements IBeeDefinition {
IMPERIAL(BeeBranchDefinition.NOBLE, "imperatorius", false, new Color(0xa3e02f), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.DRIPPING, 1), 0.20f)
.addProduct(PluginApiculture.getItems().royalJelly.getItemStack(), 0.15f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.DRIPPING, 1), 0.20f)
.addProduct(ModuleApiculture.getItems().royalJelly.getItemStack(), 0.15f)
.setHasEffect();
}
@@ -184,7 +184,7 @@ public enum BeeDefinition implements IBeeDefinition {
DILIGENT(BeeBranchDefinition.INDUSTRIOUS, "sedulus", false, new Color(0xc219ec), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.STRINGY, 1), 0.20f);
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.STRINGY, 1), 0.20f);
}
@Override
@@ -202,7 +202,7 @@ public enum BeeDefinition implements IBeeDefinition {
UNWEARY(BeeBranchDefinition.INDUSTRIOUS, "assiduus", true, new Color(0x19ec5a), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.STRINGY, 1), 0.30f);
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.STRINGY, 1), 0.30f);
}
@Override
@@ -219,8 +219,8 @@ public enum BeeDefinition implements IBeeDefinition {
INDUSTRIOUS(BeeBranchDefinition.INDUSTRIOUS, "industria", false, new Color(0xffffff), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.STRINGY, 1), 0.20f)
.addProduct(PluginApiculture.getItems().pollenCluster.get(EnumPollenCluster.NORMAL, 1), 0.15f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.STRINGY, 1), 0.20f)
.addProduct(ModuleApiculture.getItems().pollenCluster.get(EnumPollenCluster.NORMAL, 1), 0.15f)
.setHasEffect();
}
@@ -241,7 +241,7 @@ public enum BeeDefinition implements IBeeDefinition {
STEADFAST(BeeBranchDefinition.HEROIC, "legio", false, new Color(0x4d2b15), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.COCOA, 1), 0.20f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.COCOA, 1), 0.20f)
.setHasEffect();
}
@@ -261,7 +261,7 @@ public enum BeeDefinition implements IBeeDefinition {
VALIANT(BeeBranchDefinition.HEROIC, "centurio", true, new Color(0x626bdd), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.COCOA, 1), 0.30f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.COCOA, 1), 0.30f)
.addSpecialty(new ItemStack(Items.SUGAR), 0.15f);
}
@@ -281,7 +281,7 @@ public enum BeeDefinition implements IBeeDefinition {
HEROIC(BeeBranchDefinition.HEROIC, "kraphti", false, new Color(0xb3d5e4), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.COCOA, 1), 0.40f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.COCOA, 1), 0.40f)
.setHasEffect();
}
@@ -305,7 +305,7 @@ public enum BeeDefinition implements IBeeDefinition {
SINISTER(BeeBranchDefinition.INFERNAL, "caecus", false, new Color(0xb3d5e4), new Color(0x9a2323)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.SIMMERING, 1), 0.45f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.SIMMERING, 1), 0.45f)
.setTemperature(EnumTemperature.HELLISH)
.setHumidity(EnumHumidity.ARID);
}
@@ -328,8 +328,8 @@ public enum BeeDefinition implements IBeeDefinition {
FIENDISH(BeeBranchDefinition.INFERNAL, "diabolus", true, new Color(0xd7bee5), new Color(0x9a2323)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.SIMMERING, 1), 0.55f)
.addProduct(PluginCore.getItems().ash.getItemStack(), 0.15f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.SIMMERING, 1), 0.55f)
.addProduct(ModuleCore.getItems().ash.getItemStack(), 0.15f)
.setTemperature(EnumTemperature.HELLISH)
.setHumidity(EnumHumidity.ARID);
}
@@ -352,7 +352,7 @@ public enum BeeDefinition implements IBeeDefinition {
DEMONIC(BeeBranchDefinition.INFERNAL, "draco", false, new Color(0xf4e400), new Color(0x9a2323)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.SIMMERING, 1), 0.45f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.SIMMERING, 1), 0.45f)
.addProduct(new ItemStack(Items.GLOWSTONE_DUST), 0.15f)
.setHasEffect()
.setTemperature(EnumTemperature.HELLISH)
@@ -377,7 +377,7 @@ public enum BeeDefinition implements IBeeDefinition {
MODEST(BeeBranchDefinition.AUSTERE, "modicus", false, new Color(0xc5be86), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.PARCHED, 1), 0.20f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.PARCHED, 1), 0.20f)
.setTemperature(EnumTemperature.HOT)
.setHumidity(EnumHumidity.ARID);
}
@@ -396,7 +396,7 @@ public enum BeeDefinition implements IBeeDefinition {
FRUGAL(BeeBranchDefinition.AUSTERE, "permodestus", true, new Color(0xe8dcb1), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.PARCHED, 1), 0.30f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.PARCHED, 1), 0.30f)
.setTemperature(EnumTemperature.HOT)
.setHumidity(EnumHumidity.ARID);
}
@@ -420,8 +420,8 @@ public enum BeeDefinition implements IBeeDefinition {
AUSTERE(BeeBranchDefinition.AUSTERE, "correpere", false, new Color(0xfffac2), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.PARCHED, 1), 0.20f)
.addSpecialty(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.POWDERY, 1), 0.50f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.PARCHED, 1), 0.20f)
.addSpecialty(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.POWDERY, 1), 0.50f)
.setHasEffect()
.setTemperature(EnumTemperature.HOT)
.setHumidity(EnumHumidity.ARID);
@@ -447,7 +447,7 @@ public enum BeeDefinition implements IBeeDefinition {
TROPICAL(BeeBranchDefinition.TROPICAL, "mendelia", false, new Color(0x378020), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.SILKY, 1), 0.20f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.SILKY, 1), 0.20f)
.setTemperature(EnumTemperature.WARM)
.setHumidity(EnumHumidity.DAMP);
}
@@ -466,7 +466,7 @@ public enum BeeDefinition implements IBeeDefinition {
EXOTIC(BeeBranchDefinition.TROPICAL, "darwini", true, new Color(0x304903), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.SILKY, 1), 0.30f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.SILKY, 1), 0.30f)
.setTemperature(EnumTemperature.WARM)
.setHumidity(EnumHumidity.DAMP);
}
@@ -485,7 +485,7 @@ public enum BeeDefinition implements IBeeDefinition {
EDENIC(BeeBranchDefinition.TROPICAL, "humboldti", false, new Color(0x393d0d), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.SILKY, 1), 0.20f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.SILKY, 1), 0.20f)
.setHasEffect()
.setTemperature(EnumTemperature.WARM)
.setHumidity(EnumHumidity.DAMP);
@@ -509,7 +509,7 @@ public enum BeeDefinition implements IBeeDefinition {
ENDED(BeeBranchDefinition.END, "notchi", false, new Color(0xe079fa), new Color(0xd9de9e)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.MYSTERIOUS, 1), 0.30f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.MYSTERIOUS, 1), 0.30f)
.setTemperature(EnumTemperature.COLD);
}
@@ -526,7 +526,7 @@ public enum BeeDefinition implements IBeeDefinition {
SPECTRAL(BeeBranchDefinition.END, "idolum", true, new Color(0xa98bed), new Color(0xd9de9e)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.MYSTERIOUS, 1), 0.50f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.MYSTERIOUS, 1), 0.50f)
.setTemperature(EnumTemperature.COLD);
}
@@ -543,7 +543,7 @@ public enum BeeDefinition implements IBeeDefinition {
PHANTASMAL(BeeBranchDefinition.END, "lemur", false, new Color(0xcc00fa), new Color(0xd9de9e)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.MYSTERIOUS, 1), 0.40f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.MYSTERIOUS, 1), 0.40f)
.setHasEffect()
.setTemperature(EnumTemperature.COLD);
}
@@ -565,7 +565,7 @@ public enum BeeDefinition implements IBeeDefinition {
WINTRY(BeeBranchDefinition.FROZEN, "brumalis", false, new Color(0xa0ffc8), new Color(0xdaf5f3)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.FROZEN, 1), 0.30f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.FROZEN, 1), 0.30f)
.setTemperature(EnumTemperature.ICY);
}
@@ -584,8 +584,8 @@ public enum BeeDefinition implements IBeeDefinition {
ICY(BeeBranchDefinition.FROZEN, "coagulis", true, new Color(0xa0ffff), new Color(0xdaf5f3)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.FROZEN, 1), 0.20f)
.addProduct(PluginCore.getItems().craftingMaterial.getIceShard(1), 0.20f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.FROZEN, 1), 0.20f)
.addProduct(ModuleCore.getItems().craftingMaterial.getIceShard(1), 0.20f)
.setTemperature(EnumTemperature.ICY);
}
@@ -604,8 +604,8 @@ public enum BeeDefinition implements IBeeDefinition {
GLACIAL(BeeBranchDefinition.FROZEN, "glacialis", false, new Color(0xefffff), new Color(0xdaf5f3)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.FROZEN, 1), 0.20f)
.addProduct(PluginCore.getItems().craftingMaterial.getIceShard(1), 0.40f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.FROZEN, 1), 0.20f)
.addProduct(ModuleCore.getItems().craftingMaterial.getIceShard(1), 0.40f)
.setTemperature(EnumTemperature.ICY)
.setHasEffect();
}
@@ -627,7 +627,7 @@ public enum BeeDefinition implements IBeeDefinition {
VINDICTIVE(BeeBranchDefinition.VENGEFUL, "ultio", false, new Color(0xeafff3), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.IRRADIATED, 1), 0.25f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.IRRADIATED, 1), 0.25f)
.setIsNotCounted();
}
@@ -645,7 +645,7 @@ public enum BeeDefinition implements IBeeDefinition {
VENGEFUL(BeeBranchDefinition.VENGEFUL, "punire", false, new Color(0xc2de00), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.IRRADIATED, 1), 0.40f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.IRRADIATED, 1), 0.40f)
.setIsNotCounted();
}
@@ -664,7 +664,7 @@ public enum BeeDefinition implements IBeeDefinition {
AVENGING(BeeBranchDefinition.VENGEFUL, "hostimentum", false, new Color(0xddff00), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.IRRADIATED, 1), 0.40f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.IRRADIATED, 1), 0.40f)
.setHasEffect()
.setIsNotCounted();
}
@@ -686,7 +686,7 @@ public enum BeeDefinition implements IBeeDefinition {
LEPORINE(BeeBranchDefinition.FESTIVE, "lepus", false, new Color(0xfeff8f), new Color(0x3cd757)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.SILKY, 1), 0.30f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.SILKY, 1), 0.30f)
.addProduct(new ItemStack(Items.EGG), 0.10f)
.setHasEffect()
.setIsNotCounted();
@@ -713,8 +713,8 @@ public enum BeeDefinition implements IBeeDefinition {
MERRY(BeeBranchDefinition.FESTIVE, "feliciter", false, new Color(0xffffff), new Color(0xd40000)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.FROZEN, 1), 0.30f)
.addProduct(PluginCore.getItems().craftingMaterial.getIceShard(1), 0.20f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.FROZEN, 1), 0.30f)
.addProduct(ModuleCore.getItems().craftingMaterial.getIceShard(1), 0.20f)
.setTemperature(EnumTemperature.ICY)
.setHasEffect()
.setIsNotCounted();
@@ -742,8 +742,8 @@ public enum BeeDefinition implements IBeeDefinition {
TIPSY(BeeBranchDefinition.FESTIVE, "ebrius", false, new Color(0xffffff), new Color(0xc219ec)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.FROZEN, 1), 0.30f)
.addProduct(PluginCore.getItems().craftingMaterial.getIceShard(1), 0.20f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.FROZEN, 1), 0.30f)
.addProduct(ModuleCore.getItems().craftingMaterial.getIceShard(1), 0.20f)
.setTemperature(EnumTemperature.ICY)
.setHasEffect()
.setIsNotCounted();
@@ -772,7 +772,7 @@ public enum BeeDefinition implements IBeeDefinition {
TRICKY(BeeBranchDefinition.FESTIVE, "libita", false, new Color(0x49413B), new Color(0xFF6A00)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.HONEY, 1), 0.40f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.HONEY, 1), 0.40f)
.addProduct(new ItemStack(Items.COOKIE), 0.15f)
.addSpecialty(new ItemStack(Items.SKULL, 1, 0), 0.02f)
.addSpecialty(new ItemStack(Items.SKULL, 1, 2), 0.02f)
@@ -807,7 +807,7 @@ public enum BeeDefinition implements IBeeDefinition {
RURAL(BeeBranchDefinition.AGRARIAN, "rustico", false, new Color(0xfeff8f), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.WHEATEN, 1), 0.20f);
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.WHEATEN, 1), 0.20f);
}
@Override
@@ -824,7 +824,7 @@ public enum BeeDefinition implements IBeeDefinition {
FARMERLY(BeeBranchDefinition.AGRARIAN, "arator", true, new Color(0xD39728), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.WHEATEN, 1), 0.27f);
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.WHEATEN, 1), 0.27f);
}
@Override
@@ -842,7 +842,7 @@ public enum BeeDefinition implements IBeeDefinition {
AGRARIAN(BeeBranchDefinition.AGRARIAN, "arator", true, new Color(0xFFCA75), new Color(0xFFE047)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.WHEATEN, 1), 0.35f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.WHEATEN, 1), 0.35f)
.setHasEffect();
}
@@ -865,7 +865,7 @@ public enum BeeDefinition implements IBeeDefinition {
MARSHY(BeeBranchDefinition.BOGGY, "adorasti", true, new Color(0x546626), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.MOSSY, 1), 0.30f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.MOSSY, 1), 0.30f)
.setHumidity(EnumHumidity.DAMP);
}
@@ -882,7 +882,7 @@ public enum BeeDefinition implements IBeeDefinition {
MIRY(BeeBranchDefinition.BOGGY, "humidium", true, new Color(0x92AF42), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.MOSSY, 1), 0.36f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.MOSSY, 1), 0.36f)
.setHumidity(EnumHumidity.DAMP);
}
@@ -903,8 +903,8 @@ public enum BeeDefinition implements IBeeDefinition {
BOGGY(BeeBranchDefinition.BOGGY, "paluster", true, new Color(0x698948), new Color(0xffdc16)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.MOSSY, 1), 0.39f)
.addSpecialty(PluginCore.getItems().peat.getItemStack(), 0.08f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.MOSSY, 1), 0.39f)
.addSpecialty(ModuleCore.getItems().peat.getItemStack(), 0.08f)
.setHumidity(EnumHumidity.DAMP);
}
@@ -928,8 +928,8 @@ public enum BeeDefinition implements IBeeDefinition {
MONASTIC(BeeBranchDefinition.MONASTIC, "monachus", false, new Color(0x42371c), new Color(0xfff7b6)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addProduct(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.WHEATEN, 1), 0.30f)
.addSpecialty(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.MELLOW, 1), 0.10f)
beeSpecies.addProduct(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.WHEATEN, 1), 0.30f)
.addSpecialty(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.MELLOW, 1), 0.10f)
.setJubilanceProvider(new JubilanceProviderHermit());
}
@@ -946,7 +946,7 @@ public enum BeeDefinition implements IBeeDefinition {
SECLUDED(BeeBranchDefinition.MONASTIC, "contractus", true, new Color(0x7b6634), new Color(0xfff7b6)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addSpecialty(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.MELLOW, 1), 0.20f)
beeSpecies.addSpecialty(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.MELLOW, 1), 0.20f)
.setJubilanceProvider(new JubilanceProviderHermit());
}
@@ -963,7 +963,7 @@ public enum BeeDefinition implements IBeeDefinition {
HERMITIC(BeeBranchDefinition.MONASTIC, "anachoreta", false, new Color(0xffd46c), new Color(0xfff7b6)) {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesBuilder beeSpecies) {
beeSpecies.addSpecialty(PluginApiculture.getItems().beeComb.get(EnumHoneyComb.MELLOW, 1), 0.20f)
beeSpecies.addSpecialty(ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.MELLOW, 1), 0.20f)
.setJubilanceProvider(new JubilanceProviderHermit())
.setHasEffect();
}
@@ -994,12 +994,13 @@ public enum BeeDefinition implements IBeeDefinition {
String lowercaseName = this.toString().toLowerCase(Locale.ENGLISH);
String species = "species" + WordUtils.capitalize(lowercaseName);
String uid = Constants.MOD_ID + '.' + species;
String modId = Constants.MOD_ID;
String uid = modId + '.' + species;
String description = "for.description." + species;
String name = "for.bees.species." + lowercaseName;
this.branch = branch;
IAlleleBeeSpeciesBuilder speciesBuilder = BeeManager.beeFactory.createSpecies(uid, dominant, "Sengir", name, description, branch.getBranch(), binomial, primary.getRGB(), secondary.getRGB());
IAlleleBeeSpeciesBuilder speciesBuilder = BeeManager.beeFactory.createSpecies(modId, uid, dominant, "Sengir", name, description, branch.getBranch(), binomial, primary.getRGB(), secondary.getRGB());
if (isSecret()) {
speciesBuilder.setIsSecret();
}
@@ -17,8 +17,10 @@ import forestry.api.genetics.IClassification;
import forestry.apiculture.genetics.alleles.AlleleBeeSpecies;
public class BeeFactory implements IBeeFactory {
@Override
public IAlleleBeeSpeciesBuilder createSpecies(
String modId,
String uid,
boolean dominant,
String authority,
@@ -35,11 +37,17 @@ public class BeeFactory implements IBeeFactory {
Preconditions.checkNotNull(branch);
Preconditions.checkNotNull(binomial);
return new AlleleBeeSpecies(uid, unlocalizedName, authority, unlocalizedDescription, dominant, branch, binomial, primaryColor, secondaryColor);
return new AlleleBeeSpecies(modId, uid, unlocalizedName, authority, unlocalizedDescription, dominant, branch, binomial, primaryColor, secondaryColor);
}
@Override
public IClassification createBranch(String uid, String scientific) {
return new BranchBees(uid, scientific);
}
@Override
@Deprecated
public IAlleleBeeSpeciesBuilder createSpecies(String uid, boolean dominant, String authority, String unlocalizedName, String unlocalizedDescription, IClassification branch, String binomial, int primaryColor, int secondaryColor) {
return createSpecies("forestry", uid, dominant, authority, unlocalizedName, unlocalizedDescription, branch, binomial, primaryColor, secondaryColor);
}
}
@@ -0,0 +1,71 @@
package forestry.apiculture.genetics;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.apiculture.EnumBeeType;
import forestry.api.apiculture.IAlleleBeeSpecies;
import forestry.api.apiculture.IBee;
import forestry.api.genetics.EnumDatabaseTab;
import forestry.api.genetics.IDatabaseTab;
import forestry.api.genetics.ISpeciesPlugin;
import forestry.apiculture.ModuleApiculture;
import forestry.apiculture.items.EnumHoneyComb;
import forestry.core.config.Config;
//TODO: Add support for the alyzer
@SideOnly(Side.CLIENT)
public class BeePlugin implements ISpeciesPlugin<IBee> {
public static final BeePlugin INSTANCE = new BeePlugin();
private static final BeeDatabaseTab ACTIVE = new BeeDatabaseTab(EnumDatabaseTab.ACTIVE_SPECIES);
private static final BeeDatabaseTab INACTIVE = new BeeDatabaseTab(EnumDatabaseTab.INACTIVE_SPECIES);
protected final Map<String, ItemStack> iconStacks = new HashMap<>();
private BeePlugin() {
NonNullList<ItemStack> beeList = NonNullList.create();
ModuleApiculture.getItems().beeDroneGE.addCreativeItems(beeList, false);
for (ItemStack beeStack : beeList) {
IAlleleBeeSpecies species = BeeGenome.getSpecies(beeStack);
iconStacks.put(species.getUID(), beeStack);
}
}
@Override
public Map<String, ItemStack> getIndividualStacks() {
return iconStacks;
}
@Override
public List<String> getHints() {
return Config.hints.get("beealyzer");
}
@Override
public IDatabaseTab getSpeciesTab(boolean active) {
if(active){
return ACTIVE;
}
return INACTIVE;
}
@Override
public ItemStack getTabDatabaseIconItem(EnumDatabaseTab tab) {
switch (tab){
case ACTIVE_SPECIES:
return BeeDefinition.MEADOWS.getMemberStack(EnumBeeType.QUEEN);
case PRODUCTS:
return ModuleApiculture.getItems().beeComb.get(EnumHoneyComb.HONEY, 1);
case MUTATIONS:
return ModuleApiculture.getItems().frameImpregnated.getItemStack();
}
return BeeDefinition.MEADOWS.getMemberStack(EnumBeeType.DRONE);
}
}
@@ -10,6 +10,8 @@
******************************************************************************/
package forestry.apiculture.genetics;
import com.google.common.base.Preconditions;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collections;
@@ -17,8 +19,17 @@ import java.util.List;
import java.util.Locale;
import java.util.Map.Entry;
import com.google.common.base.Preconditions;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import com.mojang.authlib.GameProfile;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.EnumBeeChromosome;
import forestry.api.apiculture.EnumBeeType;
@@ -40,18 +51,14 @@ import forestry.api.genetics.IChromosome;
import forestry.api.genetics.IChromosomeType;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IMutation;
import forestry.api.genetics.ISpeciesPlugin;
import forestry.api.genetics.ISpeciesType;
import forestry.apiculture.BeeHousingListener;
import forestry.apiculture.BeeHousingModifier;
import forestry.apiculture.BeekeepingLogic;
import forestry.apiculture.PluginApiculture;
import forestry.apiculture.ModuleApiculture;
import forestry.apiculture.items.ItemRegistryApiculture;
import forestry.core.genetics.SpeciesRoot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.FMLCommonHandler;
public class BeeRoot extends SpeciesRoot implements IBeeRoot {
@@ -113,7 +120,7 @@ public class BeeRoot extends SpeciesRoot implements IBeeRoot {
public ItemStack getMemberStack(IIndividual individual, ISpeciesType type) {
Preconditions.checkArgument(individual instanceof IBee, "individual is not a bee");
Preconditions.checkArgument(type instanceof EnumBeeType, "type is not an EnumBeeType");
ItemRegistryApiculture apicultureItems = PluginApiculture.getItems();
ItemRegistryApiculture apicultureItems = ModuleApiculture.getItems();
IBee bee = (IBee) individual;
Item beeItem;
@@ -149,7 +156,7 @@ public class BeeRoot extends SpeciesRoot implements IBeeRoot {
@Override
public EnumBeeType getType(ItemStack stack) {
Item item = stack.getItem();
ItemRegistryApiculture apicultureItems = PluginApiculture.getItems();
ItemRegistryApiculture apicultureItems = ModuleApiculture.getItems();
if (apicultureItems.beeDroneGE == item) {
return EnumBeeType.DRONE;
@@ -343,6 +350,7 @@ public class BeeRoot extends SpeciesRoot implements IBeeRoot {
tracker.setWorld(world);
return tracker;
}
@Override
@@ -374,4 +382,10 @@ public class BeeRoot extends SpeciesRoot implements IBeeRoot {
public IAlyzerPlugin getAlyzerPlugin() {
return BeeAlyzerPlugin.INSTANCE;
}
@Override
@SideOnly(Side.CLIENT)
public ISpeciesPlugin getSpeciesPlugin() {
return BeePlugin.INSTANCE;
}
}
@@ -93,20 +93,6 @@ public class BeekeepingMode implements IBeekeepingMode {
rand.nextFloat() < 0.02f * beeModifier.getGeneticDecay(queen.getGenome(), 1f);
}
@Override
public boolean isOverworked(IBee queen, IBeeHousing housing) {
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
float productionModifier = beeModifier.getProductionModifier(queen.getGenome(), 1f);
if (productionModifier > 16) {
if (housing.getWorldObj().rand.nextFloat() * 100 < 0.01 * (productionModifier * productionModifier - 100)) {
return true;
}
}
return false;
}
@Override
public boolean isDegenerating(IBee queen, IBee offspring, IBeeHousing housing) {
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
@@ -159,6 +145,10 @@ public class BeekeepingMode implements IBeekeepingMode {
@Override
public float getProductionModifier(IBeeGenome genome, float currentModifier) {
if(this.speedModifier>16.0f)
{
return 16.0f;
}
return this.speedModifier;
}
}
@@ -51,8 +51,8 @@ public class AlleleBeeSpecies extends AlleleSpecies implements IAlleleBeeSpecies
private IJubilanceProvider jubilanceProvider;
private boolean nocturnal = false;
public AlleleBeeSpecies(String uid, String unlocalizedName, String authority, String unlocalizedDescription, boolean dominant, IClassification branch, String binomial, int primaryColor, int secondaryColor) {
super(uid, unlocalizedName, authority, unlocalizedDescription, dominant, branch, binomial);
public AlleleBeeSpecies(String modId, String uid, String unlocalizedName, String authority, String unlocalizedDescription, boolean dominant, IClassification branch, String binomial, int primaryColor, int secondaryColor) {
super(modId, uid, unlocalizedName, authority, unlocalizedDescription, dominant, branch, binomial);
beeModelProvider = DefaultBeeModelProvider.instance;
beeSpriteColourProvider = new DefaultBeeSpriteColourProvider(primaryColor, secondaryColor);
@@ -13,9 +13,12 @@ package forestry.apiculture.genetics.alleles;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.boss.EntityDragon;
import net.minecraft.entity.boss.dragon.phase.PhaseList;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.monster.EntityBlaze;
import net.minecraft.entity.monster.EntityCaveSpider;
@@ -40,10 +43,18 @@ public class AlleleEffectResurrection extends AlleleEffectThrottled {
public static class Resurrectable {
public final ItemStack res;
public final Class<? extends EntityLiving> risen;
public final Optional<Consumer<EntityLiving>> risenTransformer;
public Resurrectable(ItemStack res, Class<? extends EntityLiving> risen) {
this.res = res;
this.risen = risen;
this.risenTransformer = Optional.empty();
}
public <E extends EntityLiving> Resurrectable(ItemStack res, Class<E> risen, Consumer<E> risenTransformer) {
this.res = res;
this.risen = risen;
this.risenTransformer = Optional.of((Consumer<EntityLiving>) risenTransformer);
}
}
@@ -65,7 +76,7 @@ public class AlleleEffectResurrection extends AlleleEffectThrottled {
list.add(new Resurrectable(new ItemStack(Items.STRING), EntityCaveSpider.class));
list.add(new Resurrectable(new ItemStack(Items.SPIDER_EYE), EntityCaveSpider.class));
list.add(new Resurrectable(new ItemStack(Items.GHAST_TEAR), EntityGhast.class));
list.add(new Resurrectable(new ItemStack(Blocks.DRAGON_EGG), EntityDragon.class));
list.add(new Resurrectable(new ItemStack(Blocks.DRAGON_EGG), EntityDragon.class, dragon -> dragon.getPhaseManager().setPhase(PhaseList.HOLDING_PATTERN)));
return list;
}
@@ -98,17 +109,25 @@ public class AlleleEffectResurrection extends AlleleEffectThrottled {
if (entity.isDead) {
return false;
}
ItemStack contained = entity.getItem();
for (Resurrectable entry : resurrectables) {
if (ItemStackUtil.isIdenticalItem(entry.res, contained)) {
EntityUtil.spawnEntity(entity.world, entry.risen, entity.posX, entity.posY, entity.posZ);
EntityLiving spawnedEntity = EntityUtil.spawnEntity(entity.world, entry.risen, entity.posX, entity.posY, entity.posZ);
if (spawnedEntity != null) {
entry.risenTransformer.ifPresent(transformer -> transformer.accept(spawnedEntity));
}
contained.shrink(1);
if (contained.getCount() <= 0) {
entity.setDead();
}
return true;
}
}
return false;
}
}
@@ -19,7 +19,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import forestry.api.apiculture.IAlleleBeeSpecies;
import forestry.apiculture.PluginApiculture;
import forestry.apiculture.ModuleApiculture;
import forestry.apiculture.genetics.BeeGenome;
import forestry.apiculture.inventory.ItemInventoryImprinter;
import forestry.core.config.Constants;
@@ -45,7 +45,7 @@ public class GuiImprinter extends GuiForestry<ContainerImprinter> {
this.ySize = 185;
NonNullList<ItemStack> beeList = NonNullList.create();
PluginApiculture.getItems().beeDroneGE.addCreativeItems(beeList, false);
ModuleApiculture.getItems().beeDroneGE.addCreativeItems(beeList, false);
for (ItemStack beeStack : beeList) {
IAlleleBeeSpecies species = BeeGenome.getSpecies(beeStack);
if (species != null) {
@@ -10,13 +10,14 @@
******************************************************************************/
package forestry.apiculture.inventory;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import forestry.apiculture.multiblock.TileAlvearySieve;
import forestry.core.PluginCore;
import forestry.core.ModuleCore;
import forestry.core.inventory.InventoryAdapterTile;
import forestry.core.inventory.watchers.ISlotPickupWatcher;
import forestry.core.utils.ItemStackUtil;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
public class InventoryAlvearySieve extends InventoryAdapterTile<TileAlvearySieve> implements ISlotPickupWatcher {
public static final int SLOT_POLLEN_1 = 0;
@@ -29,7 +30,7 @@ public class InventoryAlvearySieve extends InventoryAdapterTile<TileAlvearySieve
@Override
public boolean canSlotAccept(int slotIndex, ItemStack itemStack) {
return ItemStackUtil.isIdenticalItem(PluginCore.getItems().craftingMaterial.getWovenSilk(), itemStack);
return ItemStackUtil.isIdenticalItem(ModuleCore.getItems().craftingMaterial.getWovenSilk(), itemStack);
}
public boolean canStorePollen() {
@@ -10,23 +10,25 @@
******************************************************************************/
package forestry.apiculture.inventory;
import com.google.common.collect.ImmutableSet;
import java.util.Set;
import com.google.common.collect.ImmutableSet;
import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.IBee;
import forestry.api.core.IErrorSource;
import forestry.api.core.IErrorState;
import forestry.apiculture.PluginApiculture;
import forestry.apiculture.items.HabitatLocatorLogic;
import forestry.apiculture.items.ItemHabitatLocator;
import forestry.core.errors.EnumErrorCode;
import forestry.core.inventory.ItemInventory;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.biome.Biome;
import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.IBee;
import forestry.api.core.IErrorSource;
import forestry.api.core.IErrorState;
import forestry.apiculture.ModuleApiculture;
import forestry.apiculture.items.HabitatLocatorLogic;
import forestry.apiculture.items.ItemHabitatLocator;
import forestry.core.errors.EnumErrorCode;
import forestry.core.inventory.ItemInventory;
public class ItemInventoryHabitatLocator extends ItemInventory implements IErrorSource {
private static final short SLOT_ENERGY = 2;
@@ -47,7 +49,7 @@ public class ItemInventoryHabitatLocator extends ItemInventory implements IError
}
Item item = itemstack.getItem();
return PluginApiculture.getItems().honeyDrop == item || PluginApiculture.getItems().honeydew == item;
return ModuleApiculture.getItems().honeyDrop == item || ModuleApiculture.getItems().honeydew == item;
}
@Override
@@ -30,7 +30,7 @@ import forestry.api.arboriculture.ArboricultureCapabilities;
import forestry.api.core.IItemModelRegister;
import forestry.api.core.IModelManager;
import forestry.api.core.Tabs;
import forestry.apiculture.PluginApiculture;
import forestry.apiculture.ModuleApiculture;
import forestry.core.config.Constants;
public class ItemArmorApiarist extends ItemArmor implements IItemModelRegister {
@@ -43,7 +43,7 @@ public class ItemArmorApiarist extends ItemArmor implements IItemModelRegister {
@Override
public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) {
if (stack != null && stack.getItem() == PluginApiculture.getItems().apiaristLegs) {
if (stack != null && stack.getItem() == ModuleApiculture.getItems().apiaristLegs) {
return Constants.MOD_ID + ":" + Constants.TEXTURE_APIARIST_ARMOR_SECONDARY;
} else {
return Constants.MOD_ID + ":" + Constants.TEXTURE_APIARIST_ARMOR_PRIMARY;
@@ -10,6 +10,7 @@
******************************************************************************/
package forestry.apiculture.items;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
@@ -35,6 +36,7 @@ import forestry.api.core.Tabs;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IAlleleSpecies;
import forestry.apiculture.genetics.BeeDefinition;
import forestry.apiculture.genetics.BeeGenome;
import forestry.apiculture.genetics.DefaultBeeModelProvider;
import forestry.core.config.Config;
@@ -54,10 +56,14 @@ public class ItemBeeGE extends ItemGE implements IColoredItem {
}
}
@Nonnull
@Override
@Nullable
public IBee getIndividual(ItemStack itemstack) {
return BeeManager.beeRoot.getMember(itemstack);
IBee individual = BeeManager.beeRoot.getMember(itemstack);
if(individual == null){
individual = BeeDefinition.FOREST.getIndividual();
}
return individual;
}
@Override
@@ -71,7 +77,7 @@ public class ItemBeeGE extends ItemGE implements IColoredItem {
return super.getItemStackDisplayName(itemstack);
}
IBee individual = BeeManager.beeRoot.getMember(itemstack);
IBee individual = getIndividual(itemstack);
String customBeeKey = "for.bees.custom." + type.getName() + "." + individual.getGenome().getPrimary().getUnlocalizedName().replace("bees.species.", "");
if (Translator.canTranslateToLocal(customBeeKey)) {
return Translator.translateToLocal(customBeeKey);
@@ -90,7 +96,7 @@ public class ItemBeeGE extends ItemGE implements IColoredItem {
}
if (type != EnumBeeType.DRONE) {
IBee individual = BeeManager.beeRoot.getMember(itemstack);
IBee individual = getIndividual(itemstack);
if (individual.isNatural()) {
list.add(TextFormatting.YELLOW + TextFormatting.ITALIC.toString() + Translator.translateToLocal("for.bees.stock.pristine"));
} else {
@@ -12,17 +12,19 @@ package forestry.apiculture.multiblock;
import javax.annotation.Nullable;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import forestry.api.climate.IClimateControlled;
import forestry.api.multiblock.IAlvearyComponent;
import forestry.apiculture.network.packets.PacketActiveUpdate;
import forestry.core.network.packets.PacketActiveUpdate;
import forestry.core.tiles.IActivatable;
import forestry.core.utils.NetworkUtil;
import forestry.energy.EnergyHelper;
import forestry.energy.EnergyManager;
import forestry.energy.EnergyTransferMode;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
public abstract class TileAlvearyClimatiser extends TileAlveary implements IActivatable, IAlvearyComponent.Climatiser {
@@ -14,6 +14,17 @@ import javax.annotation.Nullable;
import java.util.Map.Entry;
import java.util.Stack;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.EnumBeeType;
import forestry.api.apiculture.IBee;
@@ -22,23 +33,14 @@ import forestry.apiculture.blocks.BlockAlvearyType;
import forestry.apiculture.gui.ContainerAlvearySwarmer;
import forestry.apiculture.gui.GuiAlvearySwarmer;
import forestry.apiculture.inventory.InventorySwarmer;
import forestry.apiculture.network.packets.PacketActiveUpdate;
import forestry.apiculture.worldgen.Hive;
import forestry.apiculture.worldgen.HiveDecorator;
import forestry.apiculture.worldgen.HiveDescriptionSwarmer;
import forestry.core.inventory.IInventoryAdapter;
import forestry.core.network.packets.PacketActiveUpdate;
import forestry.core.tiles.IActivatable;
import forestry.core.utils.ItemStackUtil;
import forestry.core.utils.NetworkUtil;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class TileAlvearySwarmer extends TileAlveary implements ISidedInventory, IActivatable, IAlvearyComponent.Active {
@@ -10,7 +10,9 @@
******************************************************************************/
package forestry.apiculture.network;
import forestry.apiculture.network.packets.PacketActiveUpdate;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.apiculture.network.packets.PacketAlvearyChange;
import forestry.apiculture.network.packets.PacketBeeLogicActive;
import forestry.apiculture.network.packets.PacketBeeLogicActiveEntity;
@@ -21,8 +23,6 @@ import forestry.apiculture.network.packets.PacketImprintSelectionResponse;
import forestry.core.network.IPacketRegistry;
import forestry.core.network.PacketIdClient;
import forestry.core.network.PacketIdServer;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class PacketRegistryApiculture implements IPacketRegistry {
@Override
@@ -34,7 +34,6 @@ public class PacketRegistryApiculture implements IPacketRegistry {
@SideOnly(Side.CLIENT)
public void registerPacketsClient() {
PacketIdClient.IMPRINT_SELECTION_RESPONSE.setPacketHandler(new PacketImprintSelectionResponse.Handler());
PacketIdClient.TILE_FORESTRY_ACTIVE.setPacketHandler(new PacketActiveUpdate.Handler());
PacketIdClient.BEE_LOGIC_ACTIVE.setPacketHandler(new PacketBeeLogicActive.Handler());
PacketIdClient.BEE_LOGIC_ACTIVE_ENTITY.setPacketHandler(new PacketBeeLogicActiveEntity.Handler());
PacketIdClient.HABITAT_BIOME_POINTER.setPacketHandler(new PacketHabitatBiomePointer.Handler());
@@ -16,8 +16,6 @@ import javax.annotation.Nullable;
import java.util.Collections;
import java.util.List;
import forestry.apiculture.WorldgenBeekeepingLogic;
import forestry.core.utils.TickHelper;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
@@ -61,18 +59,21 @@ import forestry.api.core.EnumTemperature;
import forestry.api.core.ForestryAPI;
import forestry.api.core.IErrorLogic;
import forestry.api.genetics.IAllele;
import forestry.apiculture.ModuleApiculture;
import forestry.apiculture.WorldgenBeekeepingLogic;
import forestry.apiculture.blocks.BlockBeeHives;
import forestry.apiculture.genetics.BeeDefinition;
import forestry.apiculture.genetics.alleles.AlleleEffect;
import forestry.apiculture.network.packets.PacketActiveUpdate;
import forestry.core.config.Config;
import forestry.core.inventory.InventoryAdapter;
import forestry.core.network.packets.PacketActiveUpdate;
import forestry.core.tiles.IActivatable;
import forestry.core.utils.ClimateUtil;
import forestry.core.utils.DamageSourceForestry;
import forestry.core.utils.InventoryUtil;
import forestry.core.utils.ItemStackUtil;
import forestry.core.utils.NetworkUtil;
import forestry.core.utils.TickHelper;
public class TileHive extends TileEntity implements ITickable, IHiveTile, IActivatable, IBeeHousing {
private static final DamageSource damageSourceBeeHive = new DamageSourceForestry("bee.hive");
@@ -125,7 +126,7 @@ public class TileHive extends TileEntity implements ITickable, IHiveTile, IActiv
if (tickHelper.updateOnInterval(angry ? 10 : 200)) {
if (calmTime == 0) {
if (canWork) {
if(world.getWorldInfo().getDifficulty() != EnumDifficulty.PEACEFUL) {
if(world.getWorldInfo().getDifficulty() != EnumDifficulty.PEACEFUL || ModuleApiculture.hivesDamageOnPeaceful) {
AxisAlignedBB boundingBox = AlleleEffect.getBounding(getContainedBee().getGenome(), this);
List<EntityLivingBase> entities = world.getEntitiesWithinAABB(EntityLivingBase.class, boundingBox, beeTargetPredicate);
if (!entities.isEmpty()) {
@@ -19,6 +19,7 @@ import forestry.api.apiculture.IHiveDrop;
import forestry.api.apiculture.hives.IHiveDescription;
import forestry.api.core.EnumHumidity;
import forestry.api.core.EnumTemperature;
import forestry.apiculture.HiveConfig;
import net.minecraft.block.state.IBlockState;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
@@ -66,6 +67,9 @@ public final class Hive {
}
public boolean isValidLocation(World world, BlockPos pos) {
if(HiveConfig.isDimBlacklisted(world.provider.getDimension())) {
return false;
}
return hiveDescription.getHiveGen().isValidLocation(world, pos);
}
@@ -27,7 +27,7 @@ import net.minecraftforge.event.terraingen.TerrainGen;
import forestry.api.core.EnumHumidity;
import forestry.api.core.EnumTemperature;
import forestry.apiculture.PluginApiculture;
import forestry.apiculture.ModuleApiculture;
import forestry.core.config.Config;
import forestry.core.config.Constants;
import forestry.core.utils.Log;
@@ -45,7 +45,7 @@ public abstract class HiveDecorator {
}
public static void decorateHives(World world, Random rand, int chunkX, int chunkZ) {
List<Hive> hives = PluginApiculture.getHiveRegistry().getHives();
List<Hive> hives = ModuleApiculture.getHiveRegistry().getHives();
if (Config.generateBeehivesDebug) {
decorateHivesDebug(world, rand, chunkX, chunkZ, hives);
Loaded 100 of 603 files, more files were not shown because too many files have changed in this diff. Show more