Compare commits

...
108 Commits
Author SHA1 Message Date
Martin Robertz 5522c33924 Merge pull request #2 from GTNewHorizons/feature/shiftlag
Feature/shiftlag
2019-12-14 21:00:39 +01:00
Richard Hendricks 93aa429cf2 Add config options, remove debug prints 2019-12-14 13:44:27 -06:00
Richard Hendricks fa5c4c0218 Remove isDirty related stuff, it causes stack overflows because it is not properly cleared when the craft is partial. Performance now should be good enough we don't even care about a few extra calls. 2019-12-14 02:04:02 -06:00
Richard Hendricks 32691c6af4 Add in local recipe cache 2019-12-13 17:41:58 -06:00
Richard Hendricks 5615ffc518 Recipelist acceleration is working. Worktable local cache needs creating. 2019-12-13 00:12:06 -06:00
Richard Hendricks 2af41cf68d not working 2019-12-12 20:16:58 -06:00
Richard Hendricks 0cdaf8cff8 Add new limiting crafting time function. 2019-12-09 22:07:26 -06:00
Dream-Master 7b5eafc42a update version 2019-05-12 20:32:50 +02:00
Martin Robertz 59ca1d2082 Merge pull request #1 from GTNewHorizons/giantSequoia
added recipe.
2019-05-09 09:46:14 +02:00
bartimaeusnek 0df88973c0 added recipe.
Signed-off-by: bartimaeusnek <[email protected]>
2019-05-09 06:35:23 +02:00
Dream-Master e54bb5d4ea change api path 2019-03-26 09:06:46 +01:00
Dream-Master 824f155804 change api adress 2019-03-26 09:01:05 +01:00
Dream-Master 24e2cf668e Revert "remove redstone flux not working api"
This reverts commit f260099bfa.
2019-03-26 08:55:47 +01:00
Dream-Master f260099bfa remove redstone flux not working api 2019-03-26 08:46:07 +01:00
bartimaeusnek 855d359b02 changed crop logic a bit
if crop havest is not possible at the optimal state, just harvest, ffs.

Signed-off-by: bartimaeusnek <[email protected]>
2019-03-23 23:29:26 +01:00
bartimaeusnek abcb180689 added a null check
might help for  https://github.com/GTNewHorizons/NewHorizons/issues/4283
2019-03-18 18:58:33 +01:00
Jason Mitchell 507adb1b3f version bump 2018-10-06 09:09:25 -07:00
Jason Mitchell 23c4e4ed91 Fix pollination crash 2018-10-06 09:08:06 -07:00
bartimaeusnek e5057788a8 version bump 2018-06-09 17:08:51 +02:00
bartimaeusnek a5045bfc0f try to limit nbttag compound on apiaries to 128 entries 2018-06-08 00:52:00 +02:00
bartimaeusnek bfd678c63e removed shades Java7Checker due to issures with Java 9
+ updated Forge Version to v1614
+ updated used Java version to v8
+ updated used grandle wrapper to 2.14.1
2018-06-07 20:15:02 +02:00
LunaticExperimentalist 320ea99090 Have trade station compare tags when accepting payment (#1850) 2017-09-18 21:44:11 -07:00
mezz 08f16ba26d Bump version 2016-10-02 15:41:30 -07:00
mezz 9419dc82de Fix #1442 Let BeeHousings detect biome changes 2016-10-02 15:41:09 -07:00
mezz 2d1f64c5f6 Bump version 2016-07-31 17:11:05 -07:00
mezz cd9f82001c Fix #1366 Alveary in the Nether does not have Hellish temperature 2016-07-31 17:10:59 -07:00
mezz f7b8435d28 Update lang, bump version 2016-06-23 15:38:24 -07:00
mezz 013806f158 Merge remote-tracking branch 'origin/dev' into 4.2 2016-06-23 15:33:48 -07:00
Nirek-K 062b5ee75f Fix #1328 Crash when trying to pick up wheat from Moistener process slot 2016-06-23 17:30:34 -05:00
Nirek-K 56adc25fdf Fix #1330 Change resource checks to check tile for IBeeHousing 2016-06-23 15:40:41 -05:00
mezz df375b1b30 Merge remote-tracking branch 'origin/dev' into 4.2 2016-06-09 16:43:14 -07:00
Nirek-K 789da29af0 Fix #1293 Prevent nulls from passing Agricraft harvest
Update HC compat
2016-06-05 19:18:53 -05:00
Nirek-K e0df2f84a0 Fix Fabricator glass recipes 4000mb->4 blocks 2016-05-29 18:40:57 -05:00
Nirek-K 01656f13a6 Basic MFR plugin, allow farm to plant/cut rubber trees
(trying to plant sacreds is a ..bad idea)
Centrifuge raw rubber from propolis in the absense of IC2
minor bugfix for witchery sapling ferment
2016-04-28 02:47:58 -05:00
mezz b466e9ce4a Merge remote-tracking branch 'origin/dev' into 4.2 2016-04-27 19:30:56 -07:00
Nirek-K 60c9dad874 Merge pull request #1137 from ultrasn0w/dev
Update PlantMegaPack Plugin
2016-04-25 14:55:21 -05:00
ultrasn0w d734ca55e6 Update PlantMegaPack Plugin 2016-04-25 21:15:47 +02:00
Nirek-K f16f349f10 Version bump to be ahead of stable, and pull in lang fixes 2016-04-24 14:32:05 -05:00
Nirek-K 66561ac66d Fix #1129 Bugfixes for Multifarm BC Gate Triggers. 2016-04-18 17:28:37 -05:00
Nirek-K ad96e21b37 Fix eating bottles slightly better, Steve now enjoys mead in 8packs (hic). 2016-04-17 18:46:52 -05:00
Nirek-K 3967d21b06 Short mead now has a purpose, further distillation produces mead (only drinkable in bottles).
Also fix somehow eating it glass bottle and all.
2016-04-17 01:40:45 -05:00
Nirek-K 2a025254a0 Add ic2 industrial fert as farming fertilizer. (seperate config option to probably come later) 2016-04-05 16:08:00 -05:00
Nirek-K 97bfbe2213 Fix #1117 Radioactive bee effect can bypass apiarist suit 2016-04-03 11:17:30 -05:00
Nirek-K 98c56973db Fix #1123 Add lang string for Leporine Bee, Add some basic bee trades to Aparist. 2016-03-31 09:41:47 -05:00
mezz b83da5c628 Merge branch 'mc-1.7.10' into 4.2 2016-03-22 12:29:14 -07:00
mezz 4a2af4743f Fix #1117 Radioactive bee effect can bypass apiarist suit 2016-03-22 12:28:31 -07:00
mezz e90771e38a Merge branch 'dev' into 4.2 2016-03-06 10:01:54 -08:00
mezz 9c98a6a00b Bump Version 2016-03-06 10:01:23 -08:00
mezz 75a3a7b935 Fix #1093 Electrical Engine circuit board does not sync 2016-03-06 10:00:22 -08:00
mezz 99020cde7f Fix #1086 Squeezer NEI integration can't lookup multi stack recipes. 2016-02-28 23:40:57 -08:00
mezz 98e13299d6 Fix #1061 Squeezer is very "liberal" regarding oredict in Recipes 2016-02-28 23:39:55 -08:00
mezz 010fe4662a Fix #1081 FillBucketHook does not check bucket type 2016-02-28 23:18:55 -08:00
mezz 92ee6dbc0d Merge branch 'dev' into 4.2 2016-02-22 15:34:50 -08:00
mezz 98c7b3b5ed Bump version 2016-02-22 15:34:21 -08:00
Nirek-K 507b03043e Add module checks to RotaryCraft plugin 2016-02-21 19:34:34 -06:00
mezz c1e00ff395 Do not save player profile properties to nbt 2016-02-19 19:08:17 -08:00
Nirek-K 897123c883 Add missing Snow diplacable tags for plugin flowers. 2016-02-19 13:14:00 -06:00
Nirek-K 0ed33cf9a3 Increase wax cast durability to 16, Fabricator tank to 8, Add 4 to 4 Plain glass Fabrication recipe, change stamp defs to be oreDictionary. 2016-02-19 12:41:35 -06:00
Nirek-K 8ba8c0fb17 Forgot Sandstone had variants. Add variants->Fabricator. 2016-02-18 06:25:16 -06:00
Nirek-K 9c40b03751 Tank should probably be a multiple of 2, derp. 2016-02-18 06:05:42 -06:00
Nirek-K 194c0a0e77 Add Red Sand, Sandstone to Fabricator->glass, slightly increase fabricator glasstank. 2016-02-18 05:51:30 -06:00
Nirek-K 77157aa9cb Add new pinecones from BoP to squeezable for seedoil. 2016-02-12 15:16:24 -06:00
Nirek-K f4681d251c Increase seed oil yield of Harvestcraft peanuts, and tree nuts to be slightly more viable oil sources. 2016-02-12 11:00:09 -06:00
mezz 96cc1b869c Merge branch 'dev' into 4.2 2016-02-11 17:36:46 -08:00
mezz 20ca044be0 Bump version 2016-02-11 17:36:30 -08:00
mezz 6cd9f33c3f Close #1060 Close #1065 Disable Growthcraft plugin for version 2.5.0+ 2016-02-11 17:35:21 -08:00
Nirek-K 7585c6a265 Fix #1067 add module checks to BoP Plugin 2016-02-11 00:48:38 -06:00
Nirek-K 91a5084bde Further cleanup GC plugin nulls. 2016-02-10 15:29:26 -06:00
Nirek-K 0876a50be2 Add missing null check to Growthcraft plugin. 2016-02-10 08:19:40 -06:00
mezz 1941690330 Merge branch 'dev' into 4.2 2016-02-01 18:06:09 -08:00
mezz bbd39ea5c7 Fix #1053 NPE when loading with old configs 2016-02-01 18:05:51 -08:00
mezz 53f4107ee3 Merge branch 'dev' into 4.2 2016-01-28 20:38:06 -08:00
mezz 6265c01f60 Bump version 2016-01-28 20:37:46 -08:00
Nirek-K b9478e16b7 Add Orchard farmland, dirt traversal for ic2 plants. 2016-01-24 15:49:31 -06:00
Nirek-K 2cdee67624 Add Carrots equal to Apples in the squeezer(juice/mulch), potatoes at double fermenter rate of wheat (choice between pure fermenting, and seeds for seedoil) 2016-01-24 03:35:55 -06:00
Nirek-K 58fe331fe3 And missed one in HC too. 2016-01-24 03:17:37 -06:00
Nirek-K a4d5117a97 Missed a check in BoP, also fix PlantMegaPack 2016-01-24 03:05:27 -06:00
Nirek-K 32a9a6ff5c Fix #1051 Check for Farming module before adding BoP and Harvestcraft crops. 2016-01-24 02:19:15 -06:00
mezz 9f2f2ed85b Fix #1043 Crash from mods spawning wood items with wildcard metadata 2016-01-15 20:07:54 -08:00
mezz 22258c2dac Merge branch 'dev' into 4.2 2016-01-11 07:40:17 -08:00
mezz e0c1c538aa Fix ClientTickEvent crash on disconnect from server 2016-01-10 21:04:35 -08:00
mezz 825768e522 Fix naturalist's eye lag on multiplayer servers 2016-01-01 11:55:39 -08:00
mezz dd21d83ea3 Merge branch 'dev' into 4.2 2015-12-30 04:39:13 -08:00
mezz d0ead16eaa Bump version to 4.2.4 2015-12-30 04:38:44 -08:00
mezz 1d924d5ed5 Merge pull request #1004 from estebes/dev
Add IC2 crops support to multifarms (uses orchard farm logic)
2015-12-30 04:37:20 -08:00
mezz ff7adac9e1 Fix #1001 Slabs can't combine on placement in same block 2015-12-30 04:34:23 -08:00
mezz 45993f8213 Fix #999 Forestry Wood Logs Placement Issue 2015-12-30 02:31:19 -08:00
mezz 33573fea20 Fix #1022 Indistinguishable pollination color for some tree species 2015-12-29 12:34:26 -08:00
mezz 178142bf7a Fix #922 New tree branching generates non-connected logs 2015-12-29 11:17:42 -08:00
mezz 5d2aaea757 Fix #1008 Backpack superposition bug 2015-12-29 09:40:37 -08:00
mezz fbb02e43f5 Limit packets from engines supplying power to nearly full receivers 2015-12-29 08:20:05 -08:00
mezz 896767ae1b auto format 2015-12-23 23:06:45 -08:00
mezz d11034e4aa Merge branch 'dev' into 4.2 2015-12-22 17:47:29 -08:00
mezz cc64b09ad4 Fix #1017 crash when accessing bee cart gui 2015-12-22 17:44:38 -08:00
mezz d5ebc02999 Fix BreedingTracker crash 2015-12-19 16:02:08 -08:00
mezz 8415b657f2 Use Forge 10.13.4.1566 fuel burn time workaround.
Fix #960 Fireproof wood have fuel value,
Fix #469 Burn time of wooden slabs should be 150 ticks
2015-12-13 13:47:55 -08:00
mezz f0099b728f Merge branch 'dev' into 4.2 2015-12-12 22:52:38 -08:00
mezz 1ceccddbd0 Fix sync issues with researched mutations, use smaller packets 2015-12-12 22:51:59 -08:00
mezz c875e8ed5d Merge branch 'dev' into 4.2 2015-12-12 18:10:38 -08:00
mezz f3ee4f8694 Bump version to 4.2.2 2015-12-12 18:09:51 -08:00
mezz c2437a8a13 Fix #1009 Minor fluid dupe on right-clicking nearly-full machine 2015-12-12 18:08:40 -08:00
mezz e2f32ab767 Sync mail to client on login, do not display mail indicator on logout 2015-12-12 17:45:12 -08:00
mezz d0c8c92863 Fix #1010 Automatically sync breeding trackers to client 2015-12-12 17:27:18 -08:00
Nirek-K a8c84cfcf9 Possibly fix IE plugin loading too early, add small RotaryCraft plugin. 2015-12-11 12:06:28 -06:00
mezz 8f8f6a05f7 Fix #1006 Farm Block Recipes broken 2015-12-09 14:43:58 -08:00
mezz 721c8fd0ad Make AlleleEffectFertile only tick IGrowable and IPlantable 2015-12-08 18:22:16 -08:00
estebes 962a17494c Added IC2 crops support to multifarms (uses orchard farm logic) 2015-12-05 11:10:34 +00:00
mezz 01e43d8a18 #987 Use fluid names instead of IDs 2015-12-03 12:19:04 -08:00
127 changed files with 1441 additions and 457 deletions

No files matched your search

+1 -1
View File
@@ -3,7 +3,7 @@
url = https://github.com/ForestryMC/Forestry-Localization.git
[submodule "api/redstoneflux"]
path = api/redstoneflux
url = https://github.com/CoFH/RedstoneFlux-API.git
url = https://github.com/Texasjake95/RedstoneFlux-API.git
[submodule "api/forestry"]
path = api/forestry
url = https://github.com/ForestryMC/ForestryAPI.git
+13 -11
View File
@@ -35,8 +35,10 @@ ext.apiForestry = "./api/forestry"
ext.apiRedstoneFlux = "./api/redstoneflux"
// java version
sourceCompatibility = 1.7
targetCompatibility = 1.7
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
sourceCompatibility = 1.8
targetCompatibility = 1.8
minecraft {
version = mcversion + "-" + forgeversion
@@ -82,8 +84,8 @@ repositories {
configurations {
api
compile.extendsFrom api
shade
compile.extendsFrom shade
//shade
//compile.extendsFrom shade
}
dependencies {
@@ -99,7 +101,7 @@ dependencies {
compile "codechicken:NotEnoughItems:1.7.10-1.0.5.111:src"
// http://maven.tterrag.com/
shade "chylex.javacheck:JavaChecker:v1.2-b1"
//shade "chylex.javacheck:JavaChecker:v1.2-b1"
testCompile 'junit:junit:4.12'
}
@@ -158,11 +160,11 @@ jar {
from "./src/main/java/invtweaks/LICENSE.txt"
}
configurations.shade.each{ dep ->
from(project.zipTree(dep)){
exclude 'META-INF', 'META-INF/**', 'mcmod.info'
}
}
//configurations.shade.each{ dep ->
// from(project.zipTree(dep)){
// exclude 'META-INF', 'META-INF/**', 'mcmod.info'
// }
//}
}
task mainJar(type: Jar, dependsOn: 'reobf') {
@@ -177,7 +179,7 @@ task mainJar(type: Jar, dependsOn: 'reobf') {
includeEmptyDirs = false
manifest{
attributes 'TweakClass': 'forestry.shade.javacheck.Java7Checker'
//attributes 'TweakClass': 'forestry.shade.javacheck.Java7Checker'
}
}
+2 -2
View File
@@ -1,5 +1,5 @@
mcversion=1.7.10
forgeversion=10.13.4.1541-1.7.10
forgeversion=10.13.4.1614-1.7.10
version_major=4
version_minor=2
version_patch=1
version_patch=21
+1 -1
View File
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.0-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-bin.zip
+1 -1
Submodule lang updated: 265a8e573a...4cfdcf1595.
+5 -2
View File
@@ -17,6 +17,7 @@ import net.minecraft.item.Item;
import net.minecraftforge.common.MinecraftForge;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
@@ -58,7 +59,7 @@ import forestry.plugins.PluginManager;
name = "Forestry",
version = Version.VERSION,
guiFactory = "forestry.core.config.ForestryGuiConfigFactory",
dependencies = "required-after:Forge@[10.13.4.1448,);"
dependencies = "required-after:Forge@[10.13.4.1566,);"
+ "after:Buildcraft|Core@[6.1.7,);"
+ "after:ExtrabiomesXL;"
+ "after:BiomesOPlenty;"
@@ -85,7 +86,9 @@ public class Forestry {
packetHandler = new PacketHandler();
// Register event handler
MinecraftForge.EVENT_BUS.register(new EventHandlerCore());
EventHandlerCore eventHandlerCore = new EventHandlerCore();
MinecraftForge.EVENT_BUS.register(eventHandlerCore);
FMLCommonHandler.instance().bus().register(eventHandlerCore);
MinecraftForge.EVENT_BUS.register(new MultiblockEventHandler());
configFolder = new File(event.getModConfigurationDirectory(), "forestry");
@@ -116,9 +116,13 @@ public class BeekeepingLogic implements IBeekeepingLogic, IStreamable {
hasFlowersCache.writeToNBT(nbttagcompound);
Stack<ItemStack> spawnCopy = new Stack<>();
spawnCopy.addAll(spawn);
if (spawn.size()<128)
spawnCopy.addAll(spawn);
else
for (byte b=0;b<128;++b)
spawnCopy.add(spawn.get(b));
NBTTagList nbttaglist = new NBTTagList();
while (!spawnCopy.isEmpty()) {
while (!spawnCopy.isEmpty() && spawnCopy.size()<=128) {
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
spawnCopy.pop().writeToNBT(nbttagcompound1);
nbttaglist.appendTag(nbttagcompound1);
@@ -49,6 +49,7 @@ public class VillageHandlerApiculture implements IVillageCreationHandler, IVilla
@Override
public void manipulateTradesForVillager(EntityVillager villager, MerchantRecipeList recipeList, Random random) {
ItemStack wildcardPrincess = new ItemStack(PluginApiculture.items.beePrincessGE, 1, OreDictionary.WILDCARD_VALUE);
ItemStack wildcardDrone = new ItemStack(PluginApiculture.items.beeDroneGE, 4, OreDictionary.WILDCARD_VALUE);
recipeList.add(new MerchantRecipe(wildcardPrincess, new ItemStack(Items.emerald, 1)));
ItemStack randomComb = PluginApiculture.items.beeComb.getRandomComb(1, random, false);
@@ -62,6 +63,23 @@ public class VillageHandlerApiculture implements IVillageCreationHandler, IVilla
ItemStack monasticDrone = BeeDefinition.MONASTIC.getMemberStack(EnumBeeType.DRONE);
recipeList.add(new MerchantRecipe(new ItemStack(Items.emerald, 12), wildcardPrincess, monasticDrone));
ItemStack endDrone = BeeDefinition.ENDED.getMemberStack(EnumBeeType.DRONE);
recipeList.add(new MerchantRecipe(new ItemStack(Items.ender_eye, 16), wildcardPrincess, endDrone));
ItemStack propolis = new ItemStack(PluginApiculture.items.propolis,1);
ItemStack forestDrone = BeeDefinition.FOREST.getMemberStack(EnumBeeType.DRONE);
ItemStack meadowsDrone = BeeDefinition.MEADOWS.getMemberStack(EnumBeeType.DRONE);
ItemStack modestDrone = BeeDefinition.MODEST.getMemberStack(EnumBeeType.DRONE);
ItemStack tropicalDrone = BeeDefinition.TROPICAL.getMemberStack(EnumBeeType.DRONE);
ItemStack wintryDrone = BeeDefinition.WINTRY.getMemberStack(EnumBeeType.DRONE);
ItemStack marshyDrone = BeeDefinition.MARSHY.getMemberStack(EnumBeeType.DRONE);
recipeList.add(new MerchantRecipe(propolis, wildcardDrone, forestDrone));
recipeList.add(new MerchantRecipe(propolis, wildcardDrone, meadowsDrone));
recipeList.add(new MerchantRecipe(propolis, wildcardDrone, modestDrone));
recipeList.add(new MerchantRecipe(propolis, wildcardDrone, tropicalDrone));
recipeList.add(new MerchantRecipe(propolis, wildcardDrone, wintryDrone));
recipeList.add(new MerchantRecipe(propolis, wildcardDrone, marshyDrone));
}
@Override
@@ -20,7 +20,6 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.IBeeHousingInventory;
import forestry.api.apiculture.IBeeListener;
import forestry.api.apiculture.IBeeModifier;
@@ -112,7 +111,11 @@ public class EntityMinecartApiary extends EntityMinecartBeeHousingBase implement
@Override
public Object getContainer(EntityPlayer player, int data) {
BeeManager.beeRoot.syncBreedingTrackerToPlayer(player);
return new ContainerMinecartBeehouse(player.inventory, this, true);
}
@Override
public int getIdOfEntity() {
return getEntityId();
}
}
@@ -18,7 +18,6 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.DefaultBeeListener;
import forestry.api.apiculture.IBeeHousingInventory;
import forestry.api.apiculture.IBeeListener;
@@ -97,7 +96,11 @@ public class EntityMinecartBeehouse extends EntityMinecartBeeHousingBase {
@Override
public Object getContainer(EntityPlayer player, int data) {
BeeManager.beeRoot.syncBreedingTrackerToPlayer(player);
return new ContainerMinecartBeehouse(player.inventory, this, false);
}
@Override
public int getIdOfEntity() {
return getEntityId();
}
}
@@ -225,7 +225,7 @@ public final class FlowerRegistry implements IFlowerRegistry, IFlowerGrowthHelpe
if (PluginManager.Module.AGRICRAFT.isEnabled()) {
Block cropBlock = GameRegistry.findBlock("AgriCraft", "crops");
if (block == cropBlock) {
if(block instanceof IPlantable) {
if (block instanceof IPlantable) {
//For agricraft versions which implement IPlantable in the BlockCrop class
block = ((IPlantable) block).getPlant(world, x, y, z);
} else {
@@ -13,8 +13,6 @@ package forestry.apiculture.genetics;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import com.mojang.authlib.GameProfile;
import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.EnumBeeChromosome;
import forestry.api.apiculture.IApiaristTracker;
@@ -27,11 +25,7 @@ public class ApiaristTracker extends BreedingTracker implements IApiaristTracker
/** Required for creation from map storage */
public ApiaristTracker(String s) {
this(s, null);
}
public ApiaristTracker(String s, GameProfile player) {
super(s, player);
super(s);
}
private int queensTotal = 0;
@@ -283,7 +283,7 @@ public class Bee extends IndividualLiving implements IBee {
}
// / Check for the sky, except if in hell
if (biome != null && !BiomeHelper.isBiomeHellish(biome)) {
if (!world.provider.hasNoSky) {
if (!housing.canBlockSeeTheSky() && !canWorkUnderground(beeModifier)) {
errorStates.add(EnumErrorCode.NO_SKY);
}
@@ -328,10 +328,13 @@ public class BeeHelper extends SpeciesRoot implements IBeeRoot {
// Create a tracker if there is none yet.
if (tracker == null) {
tracker = new ApiaristTracker(filename, player);
tracker = new ApiaristTracker(filename);
world.setItemData(filename, tracker);
}
tracker.setUsername(player);
tracker.setWorld(world);
return tracker;
}
@@ -12,6 +12,7 @@ package forestry.apiculture.genetics;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
@@ -33,9 +34,17 @@ public class JubilanceRequiresResource implements IJubilanceProvider {
public boolean isJubilant(IAlleleBeeSpecies species, IBeeGenome genome, IBeeHousing housing) {
World world = housing.getWorld();
ChunkCoordinates housingCoords = housing.getCoordinates();
Block block;
TileEntity tile;
int meta;
int i = 1;
do {
block = world.getBlock(housingCoords.posX, housingCoords.posY - i, housingCoords.posZ);
meta = world.getBlockMetadata(housingCoords.posX, housingCoords.posY - i, housingCoords.posZ);
tile = world.getTileEntity(housingCoords.posX, housingCoords.posY - i, housingCoords.posZ);
i++;
} while (tile instanceof IBeeHousing);
Block block = world.getBlock(housingCoords.posX, housingCoords.posY - 1, housingCoords.posZ);
int meta = world.getBlockMetadata(housingCoords.posX, housingCoords.posY - 1, housingCoords.posZ);
return ItemStackUtil.equals(block, meta, blockRequired);
}
@@ -13,9 +13,12 @@ package forestry.apiculture.genetics.alleles;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.IGrowable;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
import net.minecraftforge.common.IPlantable;
import forestry.api.apiculture.IBeeGenome;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.genetics.IEffectData;
@@ -58,8 +61,8 @@ public class AlleleEffectFertile extends AlleleEffectThrottled {
private static boolean tryTickColumn(World world, int x, int z, int maxY, int minY) {
for (int y = maxY; y >= minY; --y) {
if (!world.isAirBlock(x, y, z)) {
Block block = world.getBlock(x, y, z);
Block block = world.getBlock(x, y, z);
if (block.getTickRandomly() && (block instanceof IGrowable || block instanceof IPlantable)) {
world.scheduleBlockUpdate(x, y, z, block, 5);
return true;
}
@@ -49,7 +49,7 @@ public class AlleleEffectRadioactive extends AlleleEffectThrottled {
// Entities are not attacked if they wear a full set of apiarist's armor.
int count = BeeManager.armorApiaristHelper.wearsItems(entity, getUID(), true);
damage -= count;
damage -= (count * 2);
if (damage <= 0) {
continue;
}
@@ -13,7 +13,6 @@ package forestry.apiculture.items;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import forestry.api.apiculture.BeeManager;
import forestry.api.core.Tabs;
import forestry.apiculture.gui.GuiBeealyzer;
import forestry.apiculture.inventory.ItemInventoryBeealyzer;
@@ -22,7 +21,7 @@ import forestry.core.items.ItemWithGui;
public class ItemBeealyzer extends ItemWithGui {
public ItemBeealyzer() {
super(Tabs.tabApiculture);
setCreativeTab(Tabs.tabApiculture);
}
@Override
@@ -33,7 +32,6 @@ public class ItemBeealyzer extends ItemWithGui {
@Override
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data) {
BeeManager.beeRoot.syncBreedingTrackerToPlayer(player);
ItemInventoryBeealyzer inventory = new ItemInventoryBeealyzer(player, heldItem);
return new ContainerAlyzer(inventory, player);
}
@@ -41,7 +41,7 @@ public class ItemHabitatLocator extends ItemWithGui {
private final HabitatLocatorLogic locatorLogic;
public ItemHabitatLocator() {
super(Tabs.tabApiculture);
setCreativeTab(Tabs.tabApiculture);
setMaxStackSize(1);
locatorLogic = new HabitatLocatorLogic();
}
@@ -13,7 +13,6 @@ package forestry.apiculture.items;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import forestry.api.apiculture.BeeManager;
import forestry.api.core.Tabs;
import forestry.apiculture.gui.ContainerImprinter;
import forestry.apiculture.gui.GuiImprinter;
@@ -22,7 +21,7 @@ import forestry.core.items.ItemWithGui;
public class ItemImprinter extends ItemWithGui {
public ItemImprinter() {
super(Tabs.tabApiculture);
setCreativeTab(Tabs.tabApiculture);
}
@Override
@@ -32,7 +31,6 @@ public class ItemImprinter extends ItemWithGui {
@Override
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data) {
BeeManager.beeRoot.syncBreedingTrackerToPlayer(player);
return new ContainerImprinter(player.inventory, new ItemInventoryImprinter(player, heldItem));
}
}
@@ -21,7 +21,7 @@ public class ItemWaxCast extends ItemForestry implements ICraftingPlan {
public ItemWaxCast() {
super(Tabs.tabApiculture);
setMaxStackSize(1);
setMaxDamage(10);
setMaxDamage(16);
setNoRepair();
}
@@ -14,6 +14,7 @@ import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import forestry.api.core.BiomeHelper;
import net.minecraft.block.Block;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
@@ -53,7 +54,6 @@ public class AlvearyController extends RectangularMultiblockControllerBase imple
private final InventoryBeeHousing inventory;
private final IBeekeepingLogic beekeepingLogic;
private BiomeGenBase cachedBiome;
private float tempChange = 0.0f;
private float humidChange = 0.0f;
@@ -290,7 +290,6 @@ public class AlvearyController extends RectangularMultiblockControllerBase imple
data.setFloat("TempChange", tempChange);
data.setFloat("HumidChange", humidChange);
beekeepingLogic.writeToNBT(data);
inventory.writeToNBT(data);
}
@@ -359,8 +358,11 @@ public class AlvearyController extends RectangularMultiblockControllerBase imple
@Override
public EnumTemperature getTemperature() {
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(this);
if (beeModifier.isHellish() && tempChange >= 0) {
return EnumTemperature.HELLISH;
BiomeGenBase biome = getBiome();
if (beeModifier.isHellish() || BiomeHelper.isBiomeHellish(biome)) {
if (tempChange >= 0) {
return EnumTemperature.HELLISH;
}
}
return EnumTemperature.getFromValue(getExactTemperature());
@@ -383,11 +385,8 @@ public class AlvearyController extends RectangularMultiblockControllerBase imple
@Override
public BiomeGenBase getBiome() {
if (cachedBiome == null) {
ChunkCoordinates coords = getReferenceCoord();
cachedBiome = worldObj.getBiomeGenForCoords(coords.posX, coords.posZ);
}
return cachedBiome;
ChunkCoordinates coords = getReferenceCoord();
return worldObj.getBiomeGenForCoords(coords.posX, coords.posZ);
}
@Override
@@ -18,7 +18,6 @@ import net.minecraft.util.ChunkCoordinates;
import net.minecraft.util.Vec3;
import net.minecraft.world.biome.BiomeGenBase;
import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.apiculture.IBeeHousingInventory;
import forestry.api.apiculture.IBeeListener;
@@ -195,7 +194,6 @@ public abstract class TileAlveary extends MultiblockTileEntityForestry<Multibloc
@Override
public Object getContainer(EntityPlayer player, int data) {
BeeManager.beeRoot.syncBreedingTrackerToPlayer(player);
return new ContainerAlveary(player.inventory, this);
}
}
@@ -23,7 +23,6 @@ import net.minecraftforge.common.util.ForgeDirection;
import cpw.mods.fml.common.Optional;
import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.IBeeHousingInventory;
import forestry.api.apiculture.IBeeListener;
import forestry.api.apiculture.IBeeModifier;
@@ -96,7 +95,6 @@ public class TileApiary extends TileBeeHousingBase implements IApiary {
@Override
public Object getContainer(EntityPlayer player, int data) {
BeeManager.beeRoot.syncBreedingTrackerToPlayer(player);
return new ContainerBeeHousing(player.inventory, this, true);
}
}
@@ -35,7 +35,6 @@ import forestry.core.tiles.TileBase;
public abstract class TileBeeHousingBase extends TileBase implements IBeeHousing, IClimatised, IGuiBeeHousingInventory, IStreamableGui {
private final IBeekeepingLogic beeLogic;
private BiomeGenBase cachedBiome;
// CLIENT
private int breedingProgressPercent = 0;
@@ -142,10 +141,7 @@ public abstract class TileBeeHousingBase extends TileBase implements IBeeHousing
// / IBEEHOUSING
@Override
public BiomeGenBase getBiome() {
if (cachedBiome == null) {
cachedBiome = worldObj.getBiomeGenForCoordsBody(xCoord, zCoord);
}
return cachedBiome;
return worldObj.getBiomeGenForCoordsBody(xCoord, zCoord);
}
@Override
@@ -14,7 +14,6 @@ import java.util.Collections;
import net.minecraft.entity.player.EntityPlayer;
import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.DefaultBeeListener;
import forestry.api.apiculture.IBeeHousingInventory;
import forestry.api.apiculture.IBeeListener;
@@ -62,7 +61,6 @@ public class TileBeehouse extends TileBeeHousingBase {
@Override
public Object getContainer(EntityPlayer player, int data) {
BeeManager.beeRoot.syncBreedingTrackerToPlayer(player);
return new ContainerBeeHousing(player.inventory, this, false);
}
}
@@ -36,6 +36,7 @@ public class FruitProviderPod extends FruitProviderNone {
PAPAYA((short) 2013, (short) 2014, (short) 2015);//, COCONUT((short)2016, (short)2017, (short)2018);
public final short[] uids;
EnumPodType(short stage1, short stage2, short stage3) {
uids = new short[]{stage1, stage2, stage3};
}
@@ -10,8 +10,6 @@
******************************************************************************/
package forestry.arboriculture.blocks;
import javax.annotation.Nullable;
import forestry.arboriculture.tiles.TileArboristChest;
import forestry.core.blocks.IMachinePropertiesTESR;
import forestry.core.proxy.Proxies;
@@ -46,8 +46,9 @@ public class BlockPlanks extends BlockWood {
@Override
public IIcon getIcon(int side, int meta) {
EnumWoodType woodType = EnumWoodType.LARCH;
if (meta > 0 && meta < EnumWoodType.VALUES.length)
if (meta > 0 && meta < EnumWoodType.VALUES.length) {
woodType = EnumWoodType.VALUES[meta];
}
return IconProviderWood.getPlankIcon(woodType);
}
@@ -12,6 +12,7 @@ package forestry.arboriculture.blocks;
import forestry.arboriculture.items.ItemBlockLeaves;
import forestry.arboriculture.items.ItemBlockWood;
import forestry.arboriculture.items.ItemBlockWoodSlab;
import forestry.core.blocks.BlockRegistry;
import forestry.core.items.ItemBlockForestry;
@@ -19,11 +20,13 @@ public class BlockRegistryArboriculture extends BlockRegistry {
public final BlockLog logs;
public final BlockPlanks planks;
public final BlockSlab slabs;
public final BlockSlab slabsDouble;
public final BlockArbFence fences;
public final BlockArbStairs stairs;
public final BlockLog logsFireproof;
public final BlockPlanks planksFireproof;
public final BlockSlab slabsFireproof;
public final BlockSlab slabsDoubleFireproof;
public final BlockArbFence fencesFireproof;
public final BlockArbStairs stairsFireproof;
@@ -40,9 +43,13 @@ public class BlockRegistryArboriculture extends BlockRegistry {
planks = registerBlock(new BlockPlanks(false), ItemBlockWood.class, "planks");
registerOreDictWildcard("plankWood", planks);
slabs = registerBlock(new BlockSlab(false), ItemBlockWood.class, "slabs");
BlockSlab blockSlab = new BlockSlab(false, false);
BlockSlab blockSlabDouble = new BlockSlab(true, false);
slabs = registerBlock(blockSlab, ItemBlockWoodSlab.class, "slabs", blockSlabDouble, blockSlab);
registerOreDictWildcard("slabWood", slabs);
slabsDouble = registerBlock(blockSlabDouble, ItemBlockWoodSlab.class, "slabsDouble", blockSlabDouble, blockSlab);
fences = registerBlock(new BlockArbFence(false), ItemBlockWood.class, "fences");
registerOreDictWildcard("fenceWood", fences);
@@ -55,9 +62,13 @@ public class BlockRegistryArboriculture extends BlockRegistry {
planksFireproof = registerBlock(new BlockPlanks(true), ItemBlockWood.class, "planksFireproof");
registerOreDictWildcard("plankWood", planksFireproof);
slabsFireproof = registerBlock(new BlockSlab(true), ItemBlockWood.class, "slabsFireproof");
BlockSlab blockSlabFireproof = new BlockSlab(false, true);
BlockSlab blockSlabDoubleFireproof = new BlockSlab(true, true);
slabsFireproof = registerBlock(blockSlabFireproof, ItemBlockWoodSlab.class, "slabsFireproof", blockSlabDoubleFireproof, blockSlabFireproof);
registerOreDictWildcard("slabWood", slabsFireproof);
slabsDoubleFireproof = registerBlock(blockSlabDoubleFireproof, ItemBlockWoodSlab.class, "slabsDoubleFireproof", blockSlabDoubleFireproof, blockSlabFireproof);
fencesFireproof = registerBlock(new BlockArbFence(true), ItemBlockWood.class, "fencesFireproof");
registerOreDictWildcard("fenceWood", fencesFireproof);
@@ -46,8 +46,8 @@ public class BlockSlab extends net.minecraft.block.BlockSlab implements IWoodTyp
private final ParticleHelper.Callback particleCallback;
private final boolean fireproof;
public BlockSlab(boolean fireproof) {
super(false, Material.wood);
public BlockSlab(boolean doubleSlab, boolean fireproof) {
super(doubleSlab, Material.wood);
this.fireproof = fireproof;
@@ -61,9 +61,8 @@ public class BlockSlab extends net.minecraft.block.BlockSlab implements IWoodTyp
this.particleCallback = new ParticleHelper.DefaultCallback(this);
}
@Override
public boolean isOpaqueCube() {
return false;
public boolean isDoubleSlab() {
return field_150004_a;
}
/* ICONS */
@@ -100,8 +99,10 @@ public class BlockSlab extends net.minecraft.block.BlockSlab implements IWoodTyp
@SuppressWarnings({"rawtypes", "unchecked"})
@Override
public void getSubBlocks(Item item, CreativeTabs par2CreativeTabs, List list) {
for (EnumWoodType woodType : EnumWoodType.VALUES) {
list.add(TreeManager.woodItemAccess.getSlab(woodType, fireproof));
if (!isDoubleSlab()) {
for (EnumWoodType woodType : EnumWoodType.VALUES) {
list.add(TreeManager.woodItemAccess.getSlab(woodType, fireproof));
}
}
}
@@ -12,8 +12,6 @@ package forestry.arboriculture.genetics;
import net.minecraft.entity.player.EntityPlayer;
import com.mojang.authlib.GameProfile;
import forestry.api.arboriculture.IArboristTracker;
import forestry.api.arboriculture.TreeManager;
import forestry.api.genetics.IBreedingTracker;
@@ -24,11 +22,7 @@ public class ArboristTracker extends BreedingTracker implements IArboristTracker
/** Required for creation from map storage */
public ArboristTracker(String s) {
this(s, null);
}
public ArboristTracker(String s, GameProfile player) {
super(s, player);
super(s);
}
@Override
@@ -21,6 +21,7 @@ import net.minecraft.world.gen.feature.WorldGenerator;
import com.mojang.authlib.GameProfile;
import net.minecraftforge.common.BiomeDictionary;
import net.minecraftforge.common.util.ForgeDirection;
import forestry.api.arboriculture.EnumFruitFamily;
@@ -45,7 +46,6 @@ import forestry.arboriculture.genetics.alleles.AlleleFruit;
import forestry.arboriculture.genetics.alleles.AlleleGrowth;
import forestry.arboriculture.render.IconProviderGermling;
import forestry.arboriculture.render.IconProviderGermlingVanilla;
import forestry.arboriculture.render.IconProviderLeaves;
import forestry.arboriculture.tiles.TileLeaves;
import forestry.arboriculture.worldgen.BlockTypeLog;
import forestry.arboriculture.worldgen.WorldGenAcacia;
@@ -459,10 +459,10 @@ public enum TreeDefinition implements ITreeDefinition, ITreeGenerator {
@Override
protected void registerMutations() {
// only available by rare villager trade
registerMutation(Sequioa,Baobab,1).requireNight().restrictBiomeType(BiomeDictionary.Type.FOREST);
}
},
Jungle(TreeBranchDefinition.TROPICAL, "jungle", "tectona", false, EnumLeafType.JUNGLE, new Color(4764952), new Color(0x539d12), 3, new ItemStack(Blocks.log, 1, 3)) {
Jungle(TreeBranchDefinition.TROPICAL, "jungle", "tectona", false, EnumLeafType.JUNGLE, new Color(4764952), new Color(0x658917), 3, new ItemStack(Blocks.log, 1, 3)) {
@Override
public WorldGenerator getWorldGenerator(ITreeGenData tree) {
return new WorldGenJungle(tree);
@@ -868,7 +868,7 @@ public enum TreeDefinition implements ITreeDefinition, ITreeGenerator {
.restrictHumidity(EnumHumidity.DAMP);
}
},
Papaya(TreeBranchDefinition.CARICA, "papaya", "papaya", true, EnumLeafType.PALM, new Color(0x6d9f58), new Color(0x9ee67f), EnumWoodType.PAPAYA) {
Papaya(TreeBranchDefinition.CARICA, "papaya", "papaya", true, EnumLeafType.PALM, new Color(0x6d9f58), new Color(0x75E675), EnumWoodType.PAPAYA) {
@Override
public WorldGenerator getWorldGenerator(ITreeGenData tree) {
return new WorldGenPapaya(tree);
@@ -893,7 +893,7 @@ public enum TreeDefinition implements ITreeDefinition, ITreeGenerator {
registerMutation(Jungle, Cherry, 5);
}
},
Date(TreeBranchDefinition.PHOENIX, "datePalm", "dactylifera", true, EnumLeafType.PALM, new Color(0xcbcd79), new Color(0xf0f38f), EnumWoodType.PALM) {
Date(TreeBranchDefinition.PHOENIX, "datePalm", "dactylifera", true, EnumLeafType.PALM, new Color(0xcbcd79), new Color(0xB3F370), EnumWoodType.PALM) {
@Override
public WorldGenerator getWorldGenerator(ITreeGenData tree) {
return new WorldGenDate(tree);
@@ -963,7 +963,7 @@ public enum TreeDefinition implements ITreeDefinition, ITreeGenerator {
this.branch = branch;
ILeafIconProvider leafIconProvider = new IconProviderLeaves(leafType, primary, secondary);
ILeafIconProvider leafIconProvider = TreeManager.treeFactory.getLeafIconProvider(leafType, primary, secondary);
IGermlingIconProvider germlingIconProvider = new IconProviderGermlingVanilla(vanillaMeta);
this.species = TreeManager.treeFactory.createSpecies(uid, unlocalizedName, "Sengir", unlocalizedDescription, dominant, branch.getBranch(), binomial, leafIconProvider, germlingIconProvider, this);
@@ -979,7 +979,7 @@ public enum TreeDefinition implements ITreeDefinition, ITreeGenerator {
this.branch = branch;
ILeafIconProvider leafIconProvider = new IconProviderLeaves(leafType, primary, secondary);
ILeafIconProvider leafIconProvider = TreeManager.treeFactory.getLeafIconProvider(leafType, primary, secondary);
IGermlingIconProvider germlingIconProvider = new IconProviderGermling(uid);
this.species = TreeManager.treeFactory.createSpecies(uid, unlocalizedName, "Sengir", unlocalizedDescription, dominant, branch.getBranch(), binomial, leafIconProvider, germlingIconProvider, this);
@@ -272,10 +272,13 @@ public class TreeHelper extends SpeciesRoot implements ITreeRoot {
// Create a tracker if there is none yet.
if (tracker == null) {
tracker = new ArboristTracker(filename, player);
tracker = new ArboristTracker(filename);
world.setItemData(filename, tracker);
}
tracker.setUsername(player);
tracker.setWorld(world);
return tracker;
}
@@ -44,6 +44,10 @@ public class ItemBlockWood extends ItemBlockForestry {
EnumWoodType woodType = getWoodType(stack);
Block block = Block.getBlockFromItem(stack.getItem());
return placeWood(stack, woodType, block, player, world, x, y, z, metadata);
}
public static boolean placeWood(ItemStack stack, EnumWoodType woodType, Block block, @Nullable EntityPlayer player, World world, int x, int y, int z, int metadata) {
boolean placed = world.setBlock(x, y, z, block, metadata, Constants.FLAG_BLOCK_SYNCH_AND_UPDATE);
if (!placed) {
return false;
@@ -117,7 +121,12 @@ public class ItemBlockWood extends ItemBlockForestry {
if (ordinal >= 0 && ordinal < EnumWoodType.VALUES.length) {
return EnumWoodType.VALUES[ordinal];
}
return null;
return EnumWoodType.LARCH;
}
@Override
public int getMetadata(int i) {
return 0;
}
@Override
@@ -0,0 +1,173 @@
package forestry.arboriculture.items;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import forestry.api.arboriculture.EnumWoodType;
import forestry.arboriculture.blocks.BlockSlab;
import forestry.arboriculture.tiles.TileWood;
import forestry.core.tiles.TileUtil;
public class ItemBlockWoodSlab extends ItemBlockWood {
private final BlockSlab slab;
private final BlockSlab doubleSlab;
private final boolean isDoubleSlab;
public ItemBlockWoodSlab(Block block, BlockSlab doubleSlab, BlockSlab slab) {
super(block);
this.doubleSlab = doubleSlab;
this.slab = slab;
this.isDoubleSlab = (block == doubleSlab);
}
@Override
public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) {
if (isDoubleSlab) {
return super.onItemUse(itemStack, player, world, x, y, z, side, hitX, hitY, hitZ);
} else if (itemStack.stackSize == 0) {
return false;
} else if (!player.canPlayerEdit(x, y, z, side, itemStack)) {
return false;
} else {
Block block = world.getBlock(x, y, z);
int i1 = world.getBlockMetadata(x, y, z);
boolean flag = (i1 & 8) != 0;
EnumWoodType blockWoodType = null;
EnumWoodType stackWoodType = getWoodType(itemStack);
TileWood tile = TileUtil.getTile(world, x, y, z, TileWood.class);
if (tile != null) {
blockWoodType = tile.getWoodType();
}
if ((side == 1 && !flag || side == 0 && flag) && block == this.slab && blockWoodType == stackWoodType) {
if (world.checkNoEntityCollision(this.doubleSlab.getCollisionBoundingBoxFromPool(world, x, y, z))) {
if (placeWood(itemStack, stackWoodType, doubleSlab, player, world, x, y, z, 0)) {
world.playSoundEffect((double) ((float) x + 0.5F), (double) ((float) y + 0.5F), (double) ((float) z + 0.5F), this.doubleSlab.stepSound.func_150496_b(), (this.doubleSlab.stepSound.getVolume() + 1.0F) / 2.0F, this.doubleSlab.stepSound.getPitch() * 0.8F);
--itemStack.stackSize;
}
}
return true;
} else {
if (this.func_150946_a(itemStack, player, world, x, y, z, side)) {
return true;
} else {
return super.onItemUse(itemStack, player, world, x, y, z, side, hitX, hitY, hitZ);
}
}
}
}
@Override
@SideOnly(Side.CLIENT)
public boolean func_150936_a(World world, int x, int y, int z, int side, EntityPlayer player, ItemStack itemStack) {
int i1 = x;
int j1 = y;
int k1 = z;
Block block = world.getBlock(x, y, z);
int l1 = world.getBlockMetadata(x, y, z);
boolean flag = (l1 & 8) != 0;
EnumWoodType blockWoodType = null;
EnumWoodType stackWoodType = getWoodType(itemStack);
TileWood tile = TileUtil.getTile(world, x, y, z, TileWood.class);
if (tile != null) {
blockWoodType = tile.getWoodType();
}
if ((side == 1 && !flag || side == 0 && flag) && block == this.slab && stackWoodType == blockWoodType) {
return true;
} else {
if (side == 0) {
--y;
}
if (side == 1) {
++y;
}
if (side == 2) {
--z;
}
if (side == 3) {
++z;
}
if (side == 4) {
--x;
}
if (side == 5) {
++x;
}
Block block1 = world.getBlock(x, y, z);
tile = TileUtil.getTile(world, x, y, z, TileWood.class);
if (tile == null) {
blockWoodType = null;
} else {
blockWoodType = tile.getWoodType();
}
if (block1 == this.slab && stackWoodType == blockWoodType) {
return true;
} else {
return super.func_150936_a(world, i1, j1, k1, side, player, itemStack);
}
}
}
private boolean func_150946_a(ItemStack itemStack, EntityPlayer player, World world, int x, int y, int z, int side) {
if (side == 0) {
--y;
}
if (side == 1) {
++y;
}
if (side == 2) {
--z;
}
if (side == 3) {
++z;
}
if (side == 4) {
--x;
}
if (side == 5) {
++x;
}
Block block = world.getBlock(x, y, z);
EnumWoodType blockWoodType = null;
EnumWoodType stackWoodType = getWoodType(itemStack);
TileWood tile = TileUtil.getTile(world, x, y, z, TileWood.class);
if (tile != null) {
blockWoodType = tile.getWoodType();
}
if (block == this.slab && blockWoodType == stackWoodType) {
if (world.checkNoEntityCollision(this.doubleSlab.getCollisionBoundingBoxFromPool(world, x, y, z))) {
if (placeWood(itemStack, stackWoodType, doubleSlab, player, world, x, y, z, 0)) {
world.playSoundEffect((double) ((float) x + 0.5F), (double) ((float) y + 0.5F), (double) ((float) z + 0.5F), this.doubleSlab.stepSound.func_150496_b(), (this.doubleSlab.stepSound.getVolume() + 1.0F) / 2.0F, this.doubleSlab.stepSound.getPitch() * 0.8F);
--itemStack.stackSize;
}
}
return true;
} else {
return false;
}
}
}
@@ -184,17 +184,13 @@ public class ItemGermlingGE extends ItemGE implements IVariableFermentable {
ICheckPollinatable checkPollinatable = GeneticsUtil.getCheckPollinatable(world, x, y, z);
if (checkPollinatable == null) {
return false;
}
if (!checkPollinatable.canMateWith(tree)) {
if (checkPollinatable == null || !checkPollinatable.canMateWith(tree)) {
return false;
}
IPollinatable pollinatable = GeneticsUtil.getOrCreatePollinatable(player.getGameProfile(), world, x, y, z);
if (!pollinatable.canMateWith(tree)) {
if (pollinatable == null || !pollinatable.canMateWith(tree)) {
return false;
}
@@ -21,7 +21,7 @@ import forestry.core.items.ItemWithGui;
public class ItemTreealyzer extends ItemWithGui {
public ItemTreealyzer() {
super(Tabs.tabArboriculture);
setCreativeTab(Tabs.tabArboriculture);
}
@Override
@@ -40,16 +40,25 @@ public abstract class IconProviderWood {
@SideOnly(Side.CLIENT)
public static IIcon getPlankIcon(EnumWoodType woodType) {
if (woodType == null) {
woodType = EnumWoodType.LARCH;
}
return icons[0][woodType.ordinal()];
}
@SideOnly(Side.CLIENT)
public static IIcon getBarkIcon(EnumWoodType woodType) {
if (woodType == null) {
woodType = EnumWoodType.LARCH;
}
return icons[1][woodType.ordinal()];
}
@SideOnly(Side.CLIENT)
public static IIcon getHeartIcon(EnumWoodType woodType) {
if (woodType == null) {
woodType = EnumWoodType.LARCH;
}
return icons[2][woodType.ordinal()];
}
@@ -23,12 +23,14 @@ import net.minecraft.world.World;
import forestry.api.arboriculture.EnumWoodType;
import forestry.arboriculture.IWoodTyped;
import forestry.arboriculture.blocks.BlockSlab;
import forestry.arboriculture.items.ItemBlockWood;
import forestry.core.network.DataInputStreamForestry;
import forestry.core.network.DataOutputStreamForestry;
import forestry.core.network.IStreamable;
import forestry.core.network.packets.PacketTileStream;
import forestry.core.tiles.TileUtil;
import forestry.plugins.PluginArboriculture;
public class TileWood extends TileEntity implements IStreamable {
private EnumWoodType woodType;
@@ -93,7 +95,16 @@ public class TileWood extends TileEntity implements IStreamable {
}
EnumWoodType woodType = wood.getWoodType();
ItemStack itemStack = new ItemStack(block);
int amount = 1;
if (block instanceof BlockSlab) {
BlockSlab blockSlab = (BlockSlab) block;
if (blockSlab.isDoubleSlab()) {
amount = 2;
block = PluginArboriculture.blocks.slabs;
}
}
ItemStack itemStack = new ItemStack(block, amount);
ItemBlockWood.saveToItemStack(woodType, itemStack);
return itemStack;
}
@@ -285,8 +285,11 @@ public abstract class WorldGenArboriculture extends WorldGenBase {
wood.setDirection(branchDirection);
}
}
addWood(world, x, y, z, EnumReplaceMode.SOFT);
branchEnds.add(new ChunkCoordinates(x, y, z));
if (addWood(world, x, y, z, EnumReplaceMode.SOFT)) {
branchEnds.add(new ChunkCoordinates(x, y, z));
} else {
break;
}
}
}
}
@@ -295,28 +298,30 @@ public abstract class WorldGenArboriculture extends WorldGenBase {
}
@Override
protected void addBlock(World world, int x, int y, int z, ITreeBlockType type, EnumReplaceMode replace) {
protected boolean addBlock(World world, int x, int y, int z, ITreeBlockType type, EnumReplaceMode replace) {
if (replace == EnumReplaceMode.ALL
|| (replace == EnumReplaceMode.SOFT && BlockUtil.isReplaceableBlock(world, startX + x, startY + y, startZ + z))
|| world.isAirBlock(startX + x, startY + y, startZ + z)) {
type.setBlock(world, tree, startX + x, startY + y, startZ + z);
return true;
}
return false;
}
protected final void clearBlock(World world, int x, int y, int z) {
air.setBlock(world, startX + x, startY + y, startZ + z);
}
protected final void addWood(World world, int x, int y, int z, EnumReplaceMode replace) {
addBlock(world, x, y, z, wood, replace);
protected final boolean addWood(World world, int x, int y, int z, EnumReplaceMode replace) {
return addBlock(world, x, y, z, wood, replace);
}
protected final void addLeaf(World world, int x, int y, int z, EnumReplaceMode replace) {
addBlock(world, x, y, z, leaf, replace);
protected final boolean addLeaf(World world, int x, int y, int z, EnumReplaceMode replace) {
return addBlock(world, x, y, z, leaf, replace);
}
protected final void addVine(World world, int x, int y, int z, ITreeBlockType vine) {
addBlock(world, x, y, z, vine, EnumReplaceMode.NONE);
protected final boolean addVine(World world, int x, int y, int z, ITreeBlockType vine) {
return addBlock(world, x, y, z, vine, EnumReplaceMode.NONE);
}
protected final void addVines(World world, int x, int y, int z, float chance) {
@@ -10,15 +10,23 @@
******************************************************************************/
package forestry.core;
import java.util.Collection;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.event.entity.player.EntityItemPickupEvent;
import net.minecraftforge.event.world.WorldEvent;
import cpw.mods.fml.common.eventhandler.Event.Result;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IBreedingTracker;
import forestry.api.genetics.ISpeciesRoot;
import forestry.core.errors.ErrorStateRegistry;
import forestry.core.render.TextureManager;
import forestry.plugins.PluginManager;
@@ -43,6 +51,18 @@ public class EventHandlerCore {
}
}
@SubscribeEvent
public void handlePlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) {
EntityPlayer player = event.player;
if (player != null) {
Collection<ISpeciesRoot> speciesRoots = AlleleManager.alleleRegistry.getSpeciesRoot().values();
for (ISpeciesRoot speciesRoot : speciesRoots) {
IBreedingTracker breedingTracker = speciesRoot.getBreedingTracker(player.getEntityWorld(), player.getGameProfile());
breedingTracker.synchToPlayer(player);
}
}
}
@SubscribeEvent
public void handleWorldLoad(WorldEvent.Load event) {
for (ISaveEventHandler handler : PluginManager.saveEventHandlers) {
@@ -10,13 +10,14 @@
******************************************************************************/
package forestry.core;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderGlobal;
import net.minecraft.entity.player.EntityPlayer;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent;
import cpw.mods.fml.common.gameevent.TickEvent.Phase;
import cpw.mods.fml.common.gameevent.TickEvent.PlayerTickEvent;
import forestry.core.proxy.Proxies;
import forestry.core.utils.GeneticsUtil;
public class TickHandlerCoreClient {
@@ -24,18 +25,30 @@ public class TickHandlerCoreClient {
private boolean hasNaturalistEye;
@SubscribeEvent
public void onPlayerTick(PlayerTickEvent event) {
public void onClientTick(TickEvent.ClientTickEvent event) {
if (event.phase != Phase.END) {
return;
}
EntityPlayer player = event.player;
Minecraft minecraft = Minecraft.getMinecraft();
if (minecraft == null) {
return;
}
EntityPlayer player = minecraft.thePlayer;
if (player == null) {
return;
}
boolean hasNaturalistEye = GeneticsUtil.hasNaturalistEye(player);
if (this.hasNaturalistEye != hasNaturalistEye) {
this.hasNaturalistEye = hasNaturalistEye;
Proxies.common.getClientInstance().renderGlobal.markBlockRangeForRenderUpdate(
(int) player.posX - 32, (int) player.posY - 32, (int) player.posZ - 32,
(int) player.posX + 32, (int) player.posY + 32, (int) player.posZ + 32);
RenderGlobal renderGlobal = minecraft.renderGlobal;
if (renderGlobal != null) {
renderGlobal.markBlockRangeForRenderUpdate(
(int) player.posX - 32, (int) player.posY - 32, (int) player.posZ - 32,
(int) player.posX + 32, (int) player.posY + 32, (int) player.posZ + 32);
}
}
}
}
@@ -176,6 +176,7 @@ public final class AccessHandler implements IAccessHandler {
if (this.owner != null) {
NBTTagCompound nbt = new NBTTagCompound();
NBTUtil.func_152460_a(nbt, owner);
nbt.removeTag("Properties");
data.setTag("owner", nbt);
}
}
@@ -12,5 +12,6 @@ package forestry.core.access;
public interface IRestrictedAccess {
IAccessHandler getAccessHandler();
void onSwitchAccess(EnumAccess oldAccess, EnumAccess newAccess);
}
@@ -22,12 +22,12 @@ import forestry.core.utils.StringUtil;
import forestry.plugins.PluginManager;
public abstract class BlockRegistry {
protected static <T extends Block> T registerBlock(T block, Class<? extends ItemBlock> itemClass, String name) {
protected static <T extends Block> T registerBlock(T block, Class<? extends ItemBlock> itemClass, String name, Object... itemCtorArgs) {
if (PluginManager.getStage() != PluginManager.Stage.SETUP) {
throw new RuntimeException("Tried to register Block outside of Setup");
}
block.setBlockName("for." + name);
GameRegistry.registerBlock(block, itemClass, StringUtil.cleanBlockName(block));
GameRegistry.registerBlock(block, itemClass, StringUtil.cleanBlockName(block), itemCtorArgs);
return block;
}
@@ -77,6 +77,12 @@ public class Config {
// Performance
public static boolean enableBackpackResupply = true;
// Optimization
public static boolean enableCraftingTimeout = true;
public static int craftingTimeout = 200; // Time given in ms
public static boolean cacheWorktableRecipes = true;
public static boolean promoteWorktableRecipesToFrontOfGlobalRecipemap = true;
// Customization
private static boolean craftingBronzeEnabled = true;
@@ -215,6 +221,11 @@ public class Config {
enableBackpackResupply = configCommon.getBooleanLocalized("performance", "backpacks.resupply", enableBackpackResupply);
enableCraftingTimeout = configCommon.getBooleanLocalized("optimization","enable.crafting.timeout", enableCraftingTimeout);
craftingTimeout = configCommon.getIntLocalized("optimization","crafting.timeout",craftingTimeout, 50, 2000 ); // min 50ms, default 200ms, max 2000 ms. Integer.MAX_VALUE is ~ 2100 ms because of multiplication by 1,000,000
cacheWorktableRecipes = configCommon.getBooleanLocalized("optimization","cache.worktable.recipes", cacheWorktableRecipes);
promoteWorktableRecipesToFrontOfGlobalRecipemap = configCommon.getBooleanLocalized("optimization","promote.worktable.recipes",promoteWorktableRecipesToFrontOfGlobalRecipemap);
// move legacy mail property
configCommon.moveProperty("tweaks.gui", "mail.alert", "tweaks.gui.mail.alert");
configCommon.renameProperty("tweaks.gui.mail.alert", "mail.alert", "enabled");
@@ -49,11 +49,19 @@ public final class FluidHelper {
FluidStack liquid = getFluidStackInContainer(current);
if (fill && liquid != null) {
int used = tank.fill(side, liquid, true);
int canUseAmount = tank.fill(side, liquid, false);
if (canUseAmount == 0) {
return false;
}
if (used > 0) {
ItemStack drainedContainer = getDrainedContainer(current, canUseAmount);
if (ItemStackUtil.isIdenticalItem(current, drainedContainer)) {
return false;
}
int usedAmount = tank.fill(side, liquid, true);
if (usedAmount > 0) {
if (!player.capabilities.isCreativeMode) {
ItemStack drainedContainer = getDrainedContainer(current, used);
if (current.stackSize > 1) {
player.inventory.decrStackSize(player.inventory.currentItem, 1);
if (drainedContainer != null && !player.inventory.addItemStackToInventory(drainedContainer)) {
+26 -2
View File
@@ -211,7 +211,31 @@ public enum Fluids {
@Override
public EnumSet<EnumContainerType> getContainerTypes() {
return EnumSet.of(
EnumContainerType.BUCKET
EnumContainerType.BUCKET,
EnumContainerType.CAN,
EnumContainerType.CAPSULE,
EnumContainerType.REFRACTORY
);
}
},
MEAD("Mead", new Color(202, 102, 0), 1000, 1200) {
@Override
public String getTag() {
return "mead";
}
@Override
public Block makeBlock() {
return new BlockForestryFluid(this);
}
@Override
public EnumSet<EnumContainerType> getContainerTypes() {
return EnumSet.of(
EnumContainerType.BUCKET,
EnumContainerType.CAN,
EnumContainerType.CAPSULE,
EnumContainerType.REFRACTORY
);
}
},
@@ -260,7 +284,7 @@ public enum Fluids {
CREOSOTE(new Color(0x635c03)),
STEAM(new Color(0x91938F));
public static final Fluids[] forestryFluids = {ETHANOL, BIOMASS, GLASS, HONEY, LEGACY_HONEY, ICE, JUICE, MILK, SEEDOIL, SHORT_MEAD};
public static final Fluids[] forestryFluids = {ETHANOL, BIOMASS, GLASS, HONEY, LEGACY_HONEY, ICE, JUICE, MILK, SEEDOIL, SHORT_MEAD, MEAD};
private static final Map<String, Fluids> tagToFluid = new HashMap<>();
@@ -32,7 +32,7 @@ import forestry.core.utils.StringUtil;
*/
public class FilteredTank extends StandardTank {
private final Set<Integer> filters = new HashSet<>(); // FluidIDs
private final Set<String> filters = new HashSet<>(); // FluidNames
public FilteredTank(int capacity, Fluid... filters) {
this(capacity, Arrays.asList(filters), null);
@@ -50,7 +50,7 @@ public class FilteredTank extends StandardTank {
public void setFilters(Collection<Fluid> filters) {
this.filters.clear();
for (Fluid fluid : filters) {
this.filters.add(fluid.getID());
this.filters.add(fluid.getName());
}
}
@@ -64,14 +64,14 @@ public class FilteredTank extends StandardTank {
@Override
public boolean accepts(Fluid fluid) {
return filters.contains(fluid.getID());
return filters.contains(fluid.getName());
}
private boolean liquidMatchesFilter(FluidStack resource) {
if (resource == null || filters == null) {
return false;
}
return filters.contains(resource.getFluid().getID());
return filters.contains(resource.getFluid().getName());
}
@Override
@@ -83,8 +83,8 @@ public class FilteredTank extends StandardTank {
toolTip.clear();
if (Proxies.common.isShiftDown() || filters.size() < 5) {
for (Integer filterId : filters) {
Fluid fluidFilter = FluidRegistry.getFluid(filterId);
for (String filterName : filters) {
Fluid fluidFilter = FluidRegistry.getFluid(filterName);
EnumRarity rarity = fluidFilter.getRarity();
if (rarity == null) {
rarity = EnumRarity.common;
@@ -10,7 +10,9 @@
******************************************************************************/
package forestry.core.genetics;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
@@ -18,11 +20,13 @@ import java.util.Set;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import net.minecraft.world.WorldSavedData;
import com.mojang.authlib.GameProfile;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.FakePlayer;
import forestry.api.core.ForestryEvent;
import forestry.api.genetics.AlleleManager;
@@ -31,7 +35,7 @@ import forestry.api.genetics.IBreedingTracker;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IMutation;
import forestry.api.genetics.ISpeciesRoot;
import forestry.core.network.packets.PacketGenomeTrackerUpdate;
import forestry.core.network.packets.PacketGenomeTrackerSync;
import forestry.core.proxy.Proxies;
public abstract class BreedingTracker extends WorldSavedData implements IBreedingTracker {
@@ -44,6 +48,7 @@ public abstract class BreedingTracker extends WorldSavedData implements IBreedin
private static final String RESEARCHED_KEY = "RD";
private static final String MODE_NAME_KEY = "BMS";
private static final String MUTATION_FORMAT = "%s-%s=%s";
private static final Collection<String> emptyStringCollection = Collections.emptyList();
public static final String TYPE_KEY = "TYPE";
@@ -52,13 +57,23 @@ public abstract class BreedingTracker extends WorldSavedData implements IBreedin
private final Set<String> researchedMutations = new HashSet<>();
private String modeName;
private final GameProfile username;
@Nullable
private GameProfile username;
@Nullable
private World world;
protected BreedingTracker(String s, GameProfile username) {
protected BreedingTracker(String s) {
super(s);
}
public void setUsername(@Nullable GameProfile username) {
this.username = username;
}
public void setWorld(@Nullable World world) {
this.world = world;
}
@Override
public String getModeName() {
return modeName;
@@ -85,14 +100,31 @@ public abstract class BreedingTracker extends WorldSavedData implements IBreedin
@Override
public void synchToPlayer(EntityPlayer player) {
if (player instanceof EntityPlayerMP) {
if (player instanceof EntityPlayerMP && !(player instanceof FakePlayer)) {
IBreedingTracker breedingTracker = getBreedingTracker(player);
String modeName = breedingTracker.getModeName();
setModeName(modeName);
NBTTagCompound nbttagcompound = new NBTTagCompound();
encodeToNBT(nbttagcompound);
Proxies.net.sendToPlayer(new PacketGenomeTrackerUpdate(nbttagcompound), (EntityPlayerMP) player);
PacketGenomeTrackerSync packet = new PacketGenomeTrackerSync(nbttagcompound);
Proxies.net.sendToPlayer(packet, player);
}
}
private void syncToPlayer(Collection<String> discoveredSpecies, Collection<String> discoveredMutations, Collection<String> researchedMutations) {
if (world != null && username != null && username.getName() != null) {
EntityPlayer player = world.getPlayerEntityByName(username.getName());
if (player instanceof EntityPlayerMP && !(player instanceof FakePlayer)) {
IBreedingTracker breedingTracker = getBreedingTracker(player);
String modeName = breedingTracker.getModeName();
setModeName(modeName);
NBTTagCompound nbtTagCompound = new NBTTagCompound();
writeToNBT(nbtTagCompound, discoveredSpecies, discoveredMutations, researchedMutations);
PacketGenomeTrackerSync packet = new PacketGenomeTrackerSync(nbtTagCompound);
Proxies.net.sendToPlayer(packet, player);
}
}
}
@@ -121,20 +153,22 @@ public abstract class BreedingTracker extends WorldSavedData implements IBreedin
@Override
public void writeToNBT(NBTTagCompound nbttagcompound) {
if (modeName != null && !modeName.isEmpty()) {
nbttagcompound.setString(MODE_NAME_KEY, modeName);
}
nbttagcompound.setString(TYPE_KEY, speciesRootUID());
writeValuesToNBT(nbttagcompound, discoveredSpecies, SPECIES_COUNT_KEY, SPECIES_KEY);
writeValuesToNBT(nbttagcompound, discoveredMutations, MUTATIONS_COUNT_KEY, MUTATIONS_KEY);
writeValuesToNBT(nbttagcompound, researchedMutations, RESEARCHED_COUNT_KEY, RESEARCHED_KEY);
writeToNBT(nbttagcompound, discoveredSpecies, discoveredMutations, researchedMutations);
}
private static void readValuesFromNBT(NBTTagCompound nbttagcompound, Collection<String> values, String countKey, String key) {
values.clear();
private void writeToNBT(NBTTagCompound nbtTagCompound, Collection<String> discoveredSpecies, Collection<String> discoveredMutations, Collection<String> researchedMutations) {
if (modeName != null && !modeName.isEmpty()) {
nbtTagCompound.setString(MODE_NAME_KEY, modeName);
}
nbtTagCompound.setString(TYPE_KEY, speciesRootUID());
writeValuesToNBT(nbtTagCompound, discoveredSpecies, SPECIES_COUNT_KEY, SPECIES_KEY);
writeValuesToNBT(nbtTagCompound, discoveredMutations, MUTATIONS_COUNT_KEY, MUTATIONS_KEY);
writeValuesToNBT(nbtTagCompound, researchedMutations, RESEARCHED_COUNT_KEY, RESEARCHED_KEY);
}
private static void readValuesFromNBT(NBTTagCompound nbttagcompound, Set<String> values, String countKey, String key) {
if (nbttagcompound.hasKey(countKey)) {
final int count = nbttagcompound.getInteger(countKey);
for (int i = 0; i < count; i++) {
@@ -175,13 +209,15 @@ public abstract class BreedingTracker extends WorldSavedData implements IBreedin
ISpeciesRoot speciesRoot = AlleleManager.alleleRegistry.getSpeciesRoot(speciesRootUID());
ForestryEvent event = new ForestryEvent.MutationDiscovered(speciesRoot, username, mutation, this);
MinecraftForge.EVENT_BUS.post(event);
syncToPlayer(emptyStringCollection, Collections.singleton(mutationString), emptyStringCollection);
}
}
@Override
public boolean isDiscovered(IMutation mutation) {
String mutationString = getMutationString(mutation);
return discoveredMutations.contains(mutationString);
return discoveredMutations.contains(mutationString) || researchedMutations.contains(mutationString);
}
@Override
@@ -208,6 +244,8 @@ public abstract class BreedingTracker extends WorldSavedData implements IBreedin
ISpeciesRoot speciesRoot = AlleleManager.alleleRegistry.getSpeciesRoot(speciesRootUID());
ForestryEvent event = new ForestryEvent.SpeciesDiscovered(speciesRoot, username, species, this);
MinecraftForge.EVENT_BUS.post(event);
syncToPlayer(Collections.singleton(species.getUID()), emptyStringCollection, emptyStringCollection);
}
}
@@ -219,6 +257,8 @@ public abstract class BreedingTracker extends WorldSavedData implements IBreedin
markDirty();
registerMutation(mutation);
syncToPlayer(emptyStringCollection, emptyStringCollection, Collections.singleton(mutationString));
}
}
@@ -12,6 +12,7 @@ package forestry.core.genetics.mutations;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import forestry.api.apiculture.IBeeHousing;
@@ -32,13 +33,15 @@ public class MutationConditionRequiresResource implements IMutationCondition {
@Override
public float getChance(World world, int x, int y, int z, IAllele allele0, IAllele allele1, IGenome genome0, IGenome genome1) {
Block block;
TileEntity tile;
int meta;
int i = 1;
do {
block = world.getBlock(x, y - i, z);
meta = world.getBlockMetadata(x, y - i, z);
tile = world.getTileEntity(x, y - i, z);
i++;
} while (block instanceof IBeeHousing);
} while (tile instanceof IBeeHousing);
return ItemStackUtil.equals(block, meta, blockRequired) ? 1 : 0;
}
@@ -14,6 +14,7 @@ import java.util.ArrayList;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
@@ -44,12 +45,14 @@ public class MutationConditionRequiresResourceOreDict implements IMutationCondit
public float getChance(World world, int x, int y, int z, IAllele allele0, IAllele allele1, IGenome genome0, IGenome genome1) {
Block block;
int meta;
TileEntity tile;
int i = 1;
do {
block = world.getBlock(x, y - i, z);
meta = world.getBlockMetadata(x, y - i, z);
tile = world.getTileEntity(x, y-i, z);
i++;
} while (block instanceof IBeeHousing);
} while (tile instanceof IBeeHousing);
int[] oreIds = OreDictionary.getOreIDs(new ItemStack(block, 1, meta));
for (int oreId : oreIds) {
+11 -13
View File
@@ -16,7 +16,6 @@ import java.util.Map;
import java.util.Stack;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.text.WordUtils;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.entity.player.EntityPlayer;
@@ -163,14 +162,6 @@ public abstract class GuiAlyzer extends GuiForestry<ContainerAlyzer, IInventory>
textLayout.newLine();
textLayout.drawLine("IV : " + StringUtil.localize("gui.evolution"), COLUMN_0 + 4);
textLayout.newLine();
String mode = breedingTracker.getModeName();
if (mode != null && !mode.isEmpty()) {
String rules = StringUtil.localize(guiName + ".behaviour") + ": " + WordUtils.capitalize(mode);
textLayout.drawCenteredLine(rules, 8, 208, fontColor.get(guiName + ".binomial"));
}
textLayout.endPage();
}
@@ -278,7 +269,7 @@ public abstract class GuiAlyzer extends GuiForestry<ContainerAlyzer, IInventory>
x += columnWidth;
if (x >= columnWidth * 4) {
x = 0;
textLayout.newLine();
textLayout.newLine(16);
}
}
@@ -290,7 +281,7 @@ public abstract class GuiAlyzer extends GuiForestry<ContainerAlyzer, IInventory>
ItemStack partnerBee = iconStacks.get(combination.getPartner(species).getUID());
widgetManager.add(new ItemStackWidget(widgetManager, x, textLayout.getLineY(), partnerBee));
drawProbabilityArrow(combination.getBaseChance(), guiLeft + x + 18, guiTop + textLayout.getLineY() + 4);
drawProbabilityArrow(combination, guiLeft + x + 18, guiTop + textLayout.getLineY() + 4);
IAllele result = combination.getTemplate()[EnumBeeChromosome.SPECIES.ordinal()];
ItemStack resultBee = iconStacks.get(result.getUID());
@@ -301,7 +292,7 @@ public abstract class GuiAlyzer extends GuiForestry<ContainerAlyzer, IInventory>
drawQuestionMark(guiLeft + x, guiTop + textLayout.getLineY());
drawProbabilityArrow(combination.getBaseChance(), guiLeft + x + 18, guiTop + textLayout.getLineY() + 4);
drawProbabilityArrow(combination, guiLeft + x + 18, guiTop + textLayout.getLineY() + 4);
drawQuestionMark(guiLeft + x + 32, guiTop + textLayout.getLineY());
}
@@ -311,7 +302,8 @@ public abstract class GuiAlyzer extends GuiForestry<ContainerAlyzer, IInventory>
drawTexturedModalRect(x, y, 78, 240, 16, 16);
}
private void drawProbabilityArrow(float chance, int x, int y) {
private void drawProbabilityArrow(IMutation combination, int x, int y) {
float chance = combination.getBaseChance();
int line = 247;
int column = 100;
switch (EnumMutateChance.rateChance(chance)) {
@@ -339,6 +331,12 @@ public abstract class GuiAlyzer extends GuiForestry<ContainerAlyzer, IInventory>
// Probability arrow
Proxies.render.bindTexture(textureFile);
drawTexturedModalRect(x, y, column, line, 15, 9);
boolean researched = breedingTracker.isResearched(combination);
if (researched) {
fontRendererObj.drawString("+", x + 9, y + 1, 0);
GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
}
}
protected void drawToleranceInfo(IAlleleTolerance toleranceAllele, int x) {
@@ -29,7 +29,7 @@ public class GuiHandler implements IGuiHandler {
public static void openGui(EntityPlayer entityplayer, IGuiHandlerEntity guiHandler, short data) {
int guiData = encodeGuiData(guiHandler, data);
entityplayer.openGui(ForestryAPI.instance, guiData, entityplayer.worldObj, guiHandler.getEntityId(), 0, 0);
entityplayer.openGui(ForestryAPI.instance, guiData, entityplayer.worldObj, guiHandler.getIdOfEntity(), 0, 0);
}
public static void openGui(EntityPlayer entityplayer, IGuiHandlerItem guiHandler) {
@@ -28,9 +28,6 @@ import forestry.core.gui.tooltips.ToolTipLine;
public class GuiUtil {
public static void drawItemStack(GuiForestry gui, ItemStack stack, int xPos, int yPos) {
GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
RenderHelper.enableGUIStandardItemLighting();
RenderItem itemRender = GuiForestry.getItemRenderer();
@@ -17,5 +17,6 @@ public interface IGuiHandlerEntity extends IGuiHandlerForestry {
Object getContainer(EntityPlayer player, int data);
int getEntityId();
// can't be named getEntityId() for obfuscation reasons
int getIdOfEntity();
}
@@ -16,9 +16,11 @@ package forestry.core.gui.buttons;
public interface IButtonTextureSet {
int getX();
int getY();
int getHeight();
int getWidth();
}
@@ -31,7 +31,7 @@ public class SlotWorking extends SlotForestry {
}
@Override
public boolean getHasStack() {
public boolean canTakeStack(EntityPlayer stack) {
return false;
}
@@ -16,7 +16,6 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import forestry.core.config.Constants;
import forestry.core.network.DataInputStreamForestry;
@@ -14,7 +14,6 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import forestry.api.core.INBTTagable;
import forestry.core.utils.InventoryUtil;
@@ -28,8 +28,11 @@ import forestry.core.utils.StringUtil;
public class ItemOverlay extends ItemForestry {
public interface IOverlayInfo {
String getName();
int getPrimaryColor();
int getSecondaryColor();
boolean isSecret();
}
@@ -22,10 +22,10 @@ public class ItemRegistryFluids extends ItemRegistry {
public final ItemLiquidContainer waxCapsuleEmpty;
public final ItemLiquidContainer refractoryEmpty;
private final Table<EnumContainerType, Integer, ItemLiquidContainer> containers = HashBasedTable.create();
private final Table<EnumContainerType, String, ItemLiquidContainer> containers = HashBasedTable.create();
public ItemLiquidContainer getContainer(EnumContainerType type, Fluids fluid) {
return containers.get(type, fluid.getFluid().getID());
return containers.get(type, fluid.getFluid().getName());
}
public ItemRegistryFluids() {
@@ -45,7 +45,7 @@ public class ItemRegistryFluids extends ItemRegistry {
String name = type.getContainerNameKey() + fluidType.getContainerNameKey();
registerItem(liquidContainer, name);
containers.put(type, fluidType.getFluid().getID(), liquidContainer);
containers.put(type, fluidType.getFluid().getName(), liquidContainer);
}
}
}
@@ -10,7 +10,6 @@
******************************************************************************/
package forestry.core.items;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
@@ -22,11 +21,7 @@ import forestry.core.gui.IGuiHandlerItem;
public abstract class ItemWithGui extends ItemForestry implements IGuiHandlerItem {
public ItemWithGui() {
}
public ItemWithGui(CreativeTabs creativeTabs) {
super(creativeTabs);
setMaxStackSize(1);
}
@Override
@@ -61,6 +61,7 @@ public abstract class MultiblockTileEntityForestry<T extends IMultiblockLogic> e
if (this.owner != null) {
NBTTagCompound nbt = new NBTTagCompound();
NBTUtil.func_152460_a(nbt, owner);
nbt.removeTag("Properties");
data.setTag("owner", nbt);
}
@@ -14,5 +14,6 @@ import java.io.IOException;
public interface IStreamableGui {
void writeGuiData(DataOutputStreamForestry data) throws IOException;
void readGuiData(DataInputStreamForestry data) throws IOException;
}
@@ -18,7 +18,7 @@ import forestry.core.network.packets.PacketChipsetClick;
import forestry.core.network.packets.PacketErrorUpdate;
import forestry.core.network.packets.PacketErrorUpdateEntity;
import forestry.core.network.packets.PacketFXSignal;
import forestry.core.network.packets.PacketGenomeTrackerUpdate;
import forestry.core.network.packets.PacketGenomeTrackerSync;
import forestry.core.network.packets.PacketGuiEnergy;
import forestry.core.network.packets.PacketGuiLayoutSelect;
import forestry.core.network.packets.PacketGuiSelectRequest;
@@ -47,7 +47,7 @@ public class PacketRegistryCore extends PacketRegistry {
registerClientPacket(new PacketItemStackDisplay());
registerClientPacket(new PacketFXSignal());
registerClientPacket(new PacketTankLevelUpdate());
registerClientPacket(new PacketGenomeTrackerUpdate());
registerClientPacket(new PacketGenomeTrackerSync());
registerServerPacket(new PacketGuiSelectRequest());
registerServerPacket(new PacketPipetteClick());
@@ -27,12 +27,12 @@ import forestry.core.network.IForestryPacketClient;
import forestry.core.network.PacketIdClient;
import forestry.core.proxy.Proxies;
public class PacketGenomeTrackerUpdate extends PacketNBT implements IForestryPacketClient {
public class PacketGenomeTrackerSync extends PacketNBT implements IForestryPacketClient {
public PacketGenomeTrackerUpdate() {
public PacketGenomeTrackerSync() {
}
public PacketGenomeTrackerUpdate(NBTTagCompound nbtTagCompound) {
public PacketGenomeTrackerSync(NBTTagCompound nbtTagCompound) {
super(nbtTagCompound);
}
@@ -24,20 +24,20 @@ import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.oredict.OreDictionary;
import net.minecraftforge.oredict.ShapedOreRecipe;
import net.minecraftforge.oredict.ShapelessOreRecipe;
import cpw.mods.fml.common.registry.GameRegistry;
import forestry.api.recipes.IDescriptiveRecipe;
import forestry.api.recipes.RecipeManagers;
import forestry.core.config.Config;
import forestry.core.fluids.Fluids;
import forestry.core.utils.ItemStackUtil;
import forestry.core.utils.Log;
import forestry.factory.inventory.InventoryCraftingForestry;
public abstract class RecipeUtil {
static List<Object> cachedRecipes = new ArrayList<Object>();
public static void addFermenterRecipes(ItemStack resource, int fermentationValue, Fluids output) {
if (RecipeManagers.fermenterManager == null) {
return;
@@ -100,7 +100,6 @@ public abstract class RecipeUtil {
if (ItemStackUtil.containsSets(recipeItems, availableItems, true, true) == 0) {
return null;
}
// Check that it doesn't make a different recipe.
// For example:
// Wood Logs are all ore dictionary equivalent with each other,
@@ -141,7 +140,6 @@ public abstract class RecipeUtil {
}
}
}
List<ItemStack> outputs = findMatchingRecipes(crafting, world);
if (!ItemStackUtil.containsItemStack(outputs, recipeOutput)) {
return null;
@@ -156,7 +154,29 @@ public abstract class RecipeUtil {
}
List<ItemStack> matchingRecipes = new ArrayList<>();
List<Integer> matchingIndex=new ArrayList();
List<Object> matchingRecipeMap = new ArrayList();
int index = 0;
if(Config.cacheWorktableRecipes) {
// Check across the whole cached recipe map
// Add each recipe to the matchingRecipes list
for (Object recipe : cachedRecipes) {
IRecipe irecipe = (IRecipe) recipe;
if (irecipe.matches(inventory, world)) {
ItemStack result = irecipe.getCraftingResult(inventory);
if (!ItemStackUtil.containsItemStack(matchingRecipes, result)) {
matchingRecipes.add(result);
}
}
}
if( matchingRecipes.size() > 0 ) {
// If we found recipes here, we found all the potential recipes, so we can just return immediately.
return matchingRecipes;
}
}
// Only do this if there were no cached recipes hit
for (Object recipe : CraftingManager.getInstance().getRecipeList()) {
IRecipe irecipe = (IRecipe) recipe;
@@ -164,10 +184,39 @@ public abstract class RecipeUtil {
ItemStack result = irecipe.getCraftingResult(inventory);
if (!ItemStackUtil.containsItemStack(matchingRecipes, result)) {
matchingRecipes.add(result);
if(Config.promoteWorktableRecipesToFrontOfGlobalRecipemap || Config.cacheWorktableRecipes) {
// Add to the back of the list. That way when we cycle through the list
// moving items to the front, the index locations for the following items doesn't change
matchingRecipeMap.add(recipe);
matchingIndex.add(new Integer(index));
}
}
}
index++;
}
if (matchingRecipeMap.size() > 0 )
{
if (Config.promoteWorktableRecipesToFrontOfGlobalRecipemap) {
// Only move the recipes if the last one was beyond 500 in the recipeMap (in GTNH about 57k recipes)
if (matchingIndex.get(matchingIndex.size()-1) > 500) {
List recipeMap = CraftingManager.getInstance().getRecipeList();
System.out.println( "Highest recipe found at " + matchingIndex.get(matchingIndex.size()-1) + ", moving " + matchingIndex.size() + " to front" );
System.out.println( "Size of recipe map " + recipeMap.size() );
for (index = 0; index < matchingIndex.size(); index++) { // index is reused here, it goes through the matching groups.
// Remove recipe and add back at the front
int target = matchingIndex.get(index); // remove requires int
System.out.println("Removing recipe at " + target);
recipeMap.remove(target);
recipeMap.add(0,matchingRecipeMap.get(index));
}
}
}
if(Config.cacheWorktableRecipes) {
// However, we should always add found recipes the cached recipe map
// Location doesn't matter since we have to scan the whole cached recipe map anyways.
cachedRecipes.addAll(matchingRecipeMap);
}
}
return matchingRecipes;
}
@@ -215,12 +264,12 @@ public abstract class RecipeUtil {
@SuppressWarnings("unchecked")
public static void addRecipe(ItemStack itemstack, Object... obj) {
CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(itemstack, obj));
CraftingManager.getInstance().getRecipeList().add(new ShapedRecipeCustom(itemstack, obj));
}
@SuppressWarnings("unchecked")
public static void addPriorityRecipe(ItemStack itemStack, Object... obj) {
CraftingManager.getInstance().getRecipeList().add(0, new ShapedOreRecipe(itemStack, obj));
CraftingManager.getInstance().getRecipeList().add(0, new ShapedRecipeCustom(itemStack, obj));
}
public static void addShapelessRecipe(Item item, Object... obj) {
@@ -10,22 +10,106 @@
******************************************************************************/
package forestry.core.recipes;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import net.minecraft.block.Block;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
import net.minecraftforge.oredict.ShapedOreRecipe;
import forestry.api.recipes.IDescriptiveRecipe;
import forestry.core.utils.ItemStackUtil;
public class ShapedRecipeCustom extends ShapedOreRecipe implements IDescriptiveRecipe {
private final int width;
private final int height;
//Added in for future ease of change, but hard coded for now.
private static final int MAX_CRAFT_GRID_WIDTH = 3;
private static final int MAX_CRAFT_GRID_HEIGHT = 3;
public ShapedRecipeCustom(int width, int height, ItemStack product, Object... ingredients) {
super(product, ingredients);
this.width = width;
this.height = height;
private ItemStack output = null;
private Object[] input = null;
private int width;
private int height;
private boolean mirrored = true;
public ShapedRecipeCustom(ItemStack result, Object... recipe) {
super(result, recipe);
output = result.copy();
String shape = "";
int idx = 0;
if (recipe[idx] instanceof Boolean) {
mirrored = (Boolean) recipe[idx];
if (recipe[idx + 1] instanceof Object[]) {
recipe = (Object[]) recipe[idx + 1];
} else {
idx = 1;
}
}
if (recipe[idx] instanceof String[]) {
String[] parts = ((String[]) recipe[idx++]);
for (String s : parts) {
width = s.length();
shape += s;
}
height = parts.length;
} else {
while (recipe[idx] instanceof String) {
String s = (String) recipe[idx++];
shape += s;
width = s.length();
height++;
}
}
if (width * height != shape.length()) {
String ret = "Invalid shaped ore recipe: ";
for (Object tmp : recipe) {
ret += tmp + ", ";
}
ret += output;
throw new RuntimeException(ret);
}
HashMap<Character, Object> itemMap = new HashMap<Character, Object>();
for (; idx < recipe.length; idx += 2) {
Character chr = (Character) recipe[idx];
Object in = recipe[idx + 1];
if (in instanceof ItemStack) {
itemMap.put(chr, ((ItemStack) in).copy());
} else if (in instanceof Item) {
itemMap.put(chr, new ItemStack((Item) in));
} else if (in instanceof Block) {
itemMap.put(chr, new ItemStack((Block) in, 1, OreDictionary.WILDCARD_VALUE));
} else if (in instanceof String) {
itemMap.put(chr, OreDictionary.getOres((String) in));
} else {
String ret = "Invalid shaped ore recipe: ";
for (Object tmp : recipe) {
ret += tmp + ", ";
}
ret += output;
throw new RuntimeException(ret);
}
}
input = new Object[width * height];
int x = 0;
for (char chr : shape.toCharArray()) {
input[x++] = itemMap.get(chr);
}
}
@Override
@@ -54,24 +138,66 @@ public class ShapedRecipeCustom extends ShapedOreRecipe implements IDescriptiveR
return false;
}
public static ShapedRecipeCustom createShapedRecipe(ItemStack product, Object... materials) {
int index = 0;
int columns = 0;
int rows = 0;
if (materials[index] instanceof String[]) {
String as[] = (String[]) materials[index];
for (String pattern : as) {
rows++;
columns = pattern.length();
}
} else {
while (materials[index] instanceof String) {
String pattern = (String) materials[index++];
rows++;
columns = pattern.length();
@Override
public boolean matches(InventoryCrafting inv, World world) {
for (int x = 0; x <= MAX_CRAFT_GRID_WIDTH - width; x++) {
for (int y = 0; y <= MAX_CRAFT_GRID_HEIGHT - height; ++y) {
if (checkMatch(inv, x, y, false)) {
return true;
}
if (mirrored && checkMatch(inv, x, y, true)) {
return true;
}
}
}
return new ShapedRecipeCustom(columns, rows, product, materials);
return false;
}
@SuppressWarnings("unchecked")
private boolean checkMatch(InventoryCrafting inv, int startX, int startY, boolean mirror) {
for (int x = 0; x < MAX_CRAFT_GRID_WIDTH; x++) {
for (int y = 0; y < MAX_CRAFT_GRID_HEIGHT; y++) {
int subX = x - startX;
int subY = y - startY;
Object target = null;
if (subX >= 0 && subY >= 0 && subX < width && subY < height) {
if (mirror) {
target = input[width - subX - 1 + subY * width];
} else {
target = input[subX + subY * width];
}
}
ItemStack slot = inv.getStackInRowAndColumn(x, y);
if (target instanceof ItemStack) {
if (!ItemStackUtil.isCraftingEquivalent((ItemStack) target, slot)) {
return false;
}
} else if (target instanceof ArrayList) {
boolean matched = false;
Iterator<ItemStack> itr = ((ArrayList<ItemStack>) target).iterator();
while (itr.hasNext() && !matched) {
matched = ItemStackUtil.isCraftingEquivalent(itr.next(), slot);
}
if (!matched) {
return false;
}
} else if (target == null && slot != null) {
return false;
}
}
}
return true;
}
public static ShapedRecipeCustom createShapedRecipe(ItemStack product, Object... materials) {
return new ShapedRecipeCustom(product, materials);
}
}
@@ -34,8 +34,10 @@ import forestry.energy.EnergyManager;
import cofh.api.energy.IEnergyConnection;
public abstract class TileEngine extends TileBase implements IEnergyConnection, IActivatable {
private static final int CANT_SEND_ENERGY_TIME = 20;
private boolean active = false; // Used for smp.
private int cantSendEnergyCountdown = CANT_SEND_ENERGY_TIME;
/**
* Indicates whether the piston is receding from or approaching the
* combustion chamber
@@ -147,8 +149,14 @@ public abstract class TileEngine extends TileBase implements IEnergyConnection,
if (energyManager.canSendEnergy(getOrientation(), tile)) {
stagePiston = 1; // If we can transfer energy, start running
setActive(true);
cantSendEnergyCountdown = CANT_SEND_ENERGY_TIME;
} else {
setActive(false);
if (isActive()) {
cantSendEnergyCountdown--;
if (cantSendEnergyCountdown <= 0) {
setActive(false);
}
}
}
} else {
setActive(false);
@@ -114,7 +114,6 @@ public abstract class TileNaturalistChest extends TileBase implements IPagedInve
@Override
public Object getContainer(EntityPlayer player, int page) {
speciesRoot.syncBreedingTrackerToPlayer(player);
return new ContainerNaturalistInventory(player.inventory, this, page);
}
}
@@ -12,7 +12,6 @@ package forestry.core.utils;
import java.util.List;
import net.minecraft.command.IEntitySelector;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityList;
import net.minecraft.entity.EntityLiving;
@@ -407,6 +407,22 @@ public abstract class InventoryUtil {
return ((float) amount / (float) stackMax) >= percent;
}
public static boolean containsAmount(IInventory inventory, int amount) {
int total = 0;
int slot1 = 0;
int length = inventory.getSizeInventory();
for (ItemStack itemStack : getStacks(inventory, slot1, length)) {
if (itemStack == null) {
continue;
}
total += itemStack.stackSize;
if (total >= amount) {
return true;
}
}
return false;
}
public static boolean isEmpty(IInventory inventory, int slotStart, int slotCount) {
for (int i = slotStart; i < slotStart + slotCount; i++) {
if (inventory.getStackInSlot(i) != null) {
@@ -466,7 +482,7 @@ public abstract class InventoryUtil {
int added = addStack(inventory, stack, startSlot, slots, false);
boolean success = all ? (added == stack.stackSize) : (added > 0);
if (success && doAdd) {
if (success && doAdd) {
addStack(inventory, stack, startSlot, slots, true);
}
@@ -141,6 +141,13 @@ public abstract class ItemStackUtil {
* Counts how many full sets are contained in the passed stock
*/
public static int containsSets(ItemStack[] set, ItemStack[] stock, boolean oreDictionary, boolean craftingTools) {
return containsSets(set, stock, oreDictionary, craftingTools, false);
}
/**
* Counts how many full sets are contained in the passed stock
*/
public static int containsSets(ItemStack[] set, ItemStack[] stock, boolean oreDictionary, boolean craftingTools, boolean matchTags) {
int totalSets = 0;
ItemStack[] condensedRequired = ItemStackUtil.condenseStacks(set);
@@ -150,7 +157,7 @@ public abstract class ItemStackUtil {
int reqCount = 0;
for (ItemStack offer : condensedOffered) {
if (isCraftingEquivalent(req, offer, oreDictionary, craftingTools)) {
if (isCraftingEquivalent(req, offer, oreDictionary, craftingTools) && (matchTags ? ItemStack.areItemStackTagsEqual(req, offer) : true)) {
int stackCount = (int) Math.floor(offer.stackSize / req.stackSize);
reqCount = Math.max(reqCount, stackCount);
}
@@ -265,6 +265,7 @@ public abstract class SlotUtil {
// if mergeOnly = true, don't shift into empty slots.
private static boolean shiftToMachineInventory(List inventorySlots, ItemStack stackToShift, int numSlots, boolean mergeOnly) {
for (int machineIndex = playerInventorySize; machineIndex < numSlots; machineIndex++) {
// System.out.println("SlotUtil::shiftToMachineinventory");
Slot slot = (Slot) inventorySlots.get(machineIndex);
if (mergeOnly && slot.getStack() == null) {
continue;
@@ -66,7 +66,7 @@ public abstract class WorldGenBase extends WorldGenerator {
return false;
}
protected abstract void addBlock(World world, int x, int y, int z, ITreeBlockType type, EnumReplaceMode replace);
protected abstract boolean addBlock(World world, int x, int y, int z, ITreeBlockType type, EnumReplaceMode replace);
protected final void generateCuboid(World world, Vector start, Vector area, ITreeBlockType block, EnumReplaceMode replace) {
for (int x = (int) start.x; x < (int) start.x + area.x; x++) {
@@ -10,6 +10,7 @@
******************************************************************************/
package forestry.energy.gui;
import forestry.core.network.packets.PacketGuiUpdate;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.ICrafting;
@@ -36,13 +37,9 @@ public class ContainerEngineElectric extends ContainerSocketed<TileEngineElectri
@Override
public void detectAndSendChanges() {
super.detectAndSendChanges();
if (tile == null) {
return;
}
for (Object crafter : crafters) {
tile.sendGUINetworkData(this, (ICrafting) crafter);
if (tile != null) {
PacketGuiUpdate packet = new PacketGuiUpdate(tile);
sendPacketToCrafters(packet);
}
}
@@ -12,12 +12,9 @@ package forestry.energy.tiles;
import net.minecraft.world.IBlockAccess;
import forestry.core.blocks.IMachineProperties;
import forestry.core.blocks.IMachinePropertiesTESR;
import forestry.core.render.IBlockRenderer;
import forestry.core.tiles.MachineDefinition;
import forestry.core.tiles.TileEngine;
import forestry.core.tiles.TileForestry;
import forestry.core.tiles.TileUtil;
public class EngineDefinition extends MachineDefinition {
@@ -10,13 +10,6 @@
******************************************************************************/
package forestry.energy.tiles;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ICrafting;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import forestry.api.circuits.ChipsetManager;
import forestry.api.circuits.CircuitSocketType;
import forestry.api.circuits.ICircuitBoard;
@@ -26,15 +19,25 @@ import forestry.core.circuits.ISocketable;
import forestry.core.config.Constants;
import forestry.core.errors.EnumErrorCode;
import forestry.core.inventory.InventoryAdapter;
import forestry.core.network.DataInputStreamForestry;
import forestry.core.network.DataOutputStreamForestry;
import forestry.core.network.IStreamableGui;
import forestry.core.tiles.TemperatureState;
import forestry.core.tiles.TileEngine;
import forestry.energy.gui.ContainerEngineElectric;
import forestry.energy.gui.GuiEngineElectric;
import forestry.plugins.compat.PluginIC2;
import ic2.api.energy.prefab.BasicSink;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ICrafting;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
public class TileEngineElectric extends TileEngine implements ISocketable, IInventory {
import java.io.IOException;
public class TileEngineElectric extends TileEngine implements ISocketable, IInventory, IStreamableGui {
protected static class EuConfig {
public int euForCycle;
@@ -92,6 +95,32 @@ public class TileEngineElectric extends TileEngine implements ISocketable, IInve
sockets.writeToNBT(nbttagcompound);
}
@Override
public void writeGuiData(DataOutputStreamForestry data) throws IOException {
data.writeVarInt(currentOutput);
data.writeVarInt(heat);
sockets.writeData(data);
energyManager.writeData(data);
final boolean hasIc2EnergySink = (ic2EnergySink != null);
data.writeBoolean(hasIc2EnergySink);
if (hasIc2EnergySink) {
data.writeVarInt((int) ic2EnergySink.getEnergyStored());
}
}
@Override
public void readGuiData(DataInputStreamForestry data) throws IOException {
currentOutput = data.readVarInt();
heat = data.readVarInt();
sockets.readData(data);
energyManager.readData(data);
final boolean hasIc2EnergySink = data.readBoolean();
if (hasIc2EnergySink) {
final int energyStored = data.readVarInt();
ic2EnergySink.setEnergyStored(energyStored);
}
}
@Override
public void onChunkUnload() {
if (ic2EnergySink != null) {
@@ -219,35 +248,12 @@ public class TileEngineElectric extends TileEngine implements ISocketable, IInve
// / SMP GUI
@Override
public void getGUINetworkData(int i, int j) {
switch (i) {
case 0:
currentOutput = j;
break;
case 1:
energyManager.fromGuiInt(j);
break;
case 2:
heat = j;
break;
case 3:
if (ic2EnergySink != null) {
ic2EnergySink.setEnergyStored(j);
}
break;
}
// handled by IStreamableGui
}
@Override
public void sendGUINetworkData(Container containerEngine, ICrafting iCrafting) {
iCrafting.sendProgressBarUpdate(containerEngine, 0, currentOutput);
iCrafting.sendProgressBarUpdate(containerEngine, 1, energyManager.toGuiInt());
iCrafting.sendProgressBarUpdate(containerEngine, 2, heat);
if (ic2EnergySink != null) {
iCrafting.sendProgressBarUpdate(containerEngine, 3, (short) ic2EnergySink.getEnergyStored());
}
// handled by IStreamableGui
}
// / ENERGY CONFIG CHANGE
@@ -70,17 +70,21 @@ public class SqueezerRecipeManager implements ISqueezerManager {
}
}
// First try to match a specific recipe (without OreDictionary)
for (ISqueezerRecipe recipe : recipes) {
if (ItemStackUtil.containsSets(recipe.getResources(), items, false, false) > 0) {
return recipe;
}
}
// If that fails - try again with OreDictionary support enabled
return null;
}
public static ISqueezerRecipe findRecipeWithIngredient(ItemStack ingredient) {
for (ISqueezerRecipe recipe : recipes) {
if (ItemStackUtil.containsSets(recipe.getResources(), items, true, false) > 0) {
return recipe;
for (ItemStack recipeIngredient : recipe.getResources()) {
if (ItemStackUtil.isCraftingEquivalent(recipeIngredient, ingredient, false, false)) {
return recipe;
}
}
}
@@ -246,11 +246,9 @@ public class NEIHandlerSqueezer extends RecipeHandlerBase {
return;
}
ISqueezerRecipe recipe = SqueezerRecipeManager.findMatchingRecipe(new ItemStack[]{ingred});
ISqueezerRecipe recipe = SqueezerRecipeManager.findRecipeWithIngredient(ingred);
if (recipe != null) {
CachedSqueezerRecipe crecipe = new CachedSqueezerRecipe(recipe);
// Override recipe to show the right input in case it's OD
crecipe.setIngredients(new ItemStack[]{ingred});
this.arecipes.add(crecipe);
}
}
@@ -68,7 +68,7 @@ public class TileFabricator extends TilePowered implements ISlotPickupWatcher, I
setEnergyPerWorkCycle(200);
craftingInventory = new InventoryGhostCrafting<>(this, InventoryGhostCrafting.SLOT_CRAFTING_COUNT);
setInternalInventory(new InventoryFabricator(this));
moltenTank = new FilteredTank(2 * Constants.BUCKET_VOLUME, Fluids.GLASS.getFluid());
moltenTank = new FilteredTank(8 * Constants.BUCKET_VOLUME, Fluids.GLASS.getFluid());
moltenTank.tankMode = StandardTank.TankMode.INTERNAL;
tankManager = new TankManager(this, moltenTank);
}
@@ -21,6 +21,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent;
import forestry.core.config.Config;
import forestry.core.inventory.InventoryAdapterTile;
import forestry.core.inventory.wrappers.InventoryMapper;
import forestry.core.network.DataInputStreamForestry;
@@ -41,7 +42,9 @@ public class TileWorktable extends TileBase implements ICrafterWorktable {
private final RecipeMemory recipeMemory;
private final InventoryAdapterTile craftingDisplay;
private MemorizedRecipe currentRecipe;
private long savedTick = 0;
private long savedSystemTimeExpiration = 0;
public TileWorktable() {
super("worktable");
setInternalInventory(new InventoryWorktable(this));
@@ -121,10 +124,27 @@ public class TileWorktable extends TileBase implements ICrafterWorktable {
return false;
}
if( Config.enableCraftingTimeout ) {
long currentTick = worldObj.getTotalWorldTime();
if (currentTick == savedTick){
// Processing in the same tick, second call, check expiration timer
long currentTime = System.nanoTime();
if(currentTime > savedSystemTimeExpiration) {
// Time to craft has expired, stop crafting loop
return false;
}
} else {
// New tick has arrived, so reset timer data
savedTick=currentTick;
savedSystemTimeExpiration = System.nanoTime() + Config.craftingTimeout * 1000000;
}
}
ItemStack[] recipeItems = InventoryUtil.getStacks(currentRecipe.getCraftMatrix());
ItemStack[] inventory = InventoryUtil.getStacks(this);
InventoryCraftingForestry crafting = RecipeUtil.getCraftRecipe(recipeItems, inventory, worldObj, currentRecipe.getRecipeOutput());
return crafting != null;
return crafting != null;
}
@Override
@@ -147,7 +167,6 @@ public class TileWorktable extends TileBase implements ICrafterWorktable {
if (removed == null) {
return false;
}
// update crafting display to match the ingredients that were actually used
setCraftingDisplay(crafting);
return true;
@@ -12,6 +12,7 @@ package forestry.farming.logic;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
@@ -47,6 +48,7 @@ public class CropBasicAgriCraft extends Crop {
harvest.remove(0);
Proxies.common.addBlockDestroyEffects(world, pos.x, pos.y, pos.z, Blocks.melon_block, 0);
world.setBlockMetadataWithNotify(pos.x, pos.y, pos.z, 0, Constants.FLAG_BLOCK_SYNCH);
harvest.removeAll(Collections.singleton(null)); //sanatize nulls that get thru from Agricraft+Harvestcraft (sesameseed)
return harvest;
}
@@ -0,0 +1,28 @@
package forestry.farming.logic;
import forestry.core.utils.vect.Vect;
import forestry.plugins.compat.PluginIC2;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import java.util.Collection;
public class CropBasicIC2Crop extends Crop {
private final TileEntity tileEntity;
public CropBasicIC2Crop(World world, TileEntity tileEntity, Vect position) {
super(world, position);
this.tileEntity = tileEntity;
}
@Override
protected boolean isCrop(Vect pos) {
return PluginIC2.instance.canHarvestCrop(this.tileEntity);
}
@Override
protected Collection<ItemStack> harvestBlock(Vect pos) {
return PluginIC2.instance.getCropDrops(this.tileEntity);
}
}
@@ -40,6 +40,7 @@ import forestry.core.utils.vect.VectUtil;
import forestry.plugins.PluginCore;
public class FarmLogicArboreal extends FarmLogicHomogeneous {
private static final int BRANCH_RANGE = 20;
public FarmLogicArboreal(IFarmHousing housing, ItemStack resource, ItemStack ground, Iterable<IFarmable> germlings) {
super(housing, resource, ground, germlings);
@@ -172,10 +173,10 @@ public class FarmLogicArboreal extends FarmLogicHomogeneous {
if (candidate.equals(position)) {
continue;
}
if (Math.abs(candidate.x - start.x) > 10) {
if (Math.abs(candidate.x - start.x) > BRANCH_RANGE) {
continue;
}
if (Math.abs(candidate.z - start.z) > 10) {
if (Math.abs(candidate.z - start.z) > BRANCH_RANGE) {
continue;
}
@@ -51,19 +51,25 @@ public class FarmLogicOrchard extends FarmLogic {
public FarmLogicOrchard(IFarmHousing housing) {
super(housing);
this.farmables = Farmables.farmables.get("farmOrchard");
ImmutableList.Builder<Block> traversalBlocksBuilder = ImmutableList.builder();
if (PluginManager.Module.AGRICRAFT.isEnabled()) {
if (PluginManager.Module.AGRICRAFT.isEnabled() || PluginManager.Module.INDUSTRIALCRAFT.isEnabled()) {
traversalBlocksBuilder.add(Blocks.farmland);
}
if (PluginManager.Module.GROWTHCRAFT.isEnabled()) {
if (PluginManager.Module.INDUSTRIALCRAFT.isEnabled()) {
traversalBlocksBuilder.add(Blocks.dirt);
}
if (PluginManager.Module.PLANTMEGAPACK.isEnabled()) {
traversalBlocksBuilder.add(Blocks.water);
}
{
Block grapeVine = GameRegistry.findBlock("Growthcraft|Grapes", "grc.grapeVine1");
if (grapeVine != null) {
traversalBlocksBuilder.add(grapeVine);
}
}
if (PluginManager.Module.PLANTMEGAPACK.isEnabled()) {
traversalBlocksBuilder.add(Blocks.water);
}
traversalBlocksBuilder.build();
this.traversalBlocks = traversalBlocksBuilder.build();
}
@@ -0,0 +1,52 @@
package forestry.farming.logic;
import forestry.api.farming.ICrop;
import forestry.api.farming.IFarmable;
import forestry.core.utils.vect.Vect;
import forestry.plugins.compat.PluginIC2;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class FarmableBasicIC2Crop implements IFarmable {
@Override
public boolean isSaplingAt(World world, int x, int y, int z) {
TileEntity crop = world.getTileEntity(x, y, z);
if(PluginIC2.instance.isIC2Crop(crop)) {
PluginIC2.instance.babysitCrop(crop);
return true;
}
return false;
}
@Override
public ICrop getCropAt(World world, int x, int y, int z) {
TileEntity crop = world.getTileEntity(x, y, z);
if (crop == null) {
return null;
}
if (!PluginIC2.instance.isIC2Crop(crop)) {
return null;
}
if (!PluginIC2.instance.canHarvestCrop(crop)) {
return null;
}
return new CropBasicIC2Crop(world, crop, new Vect(x, y, z));
}
@Override
public boolean isGermling(ItemStack itemstack) {
return false;
}
@Override
public boolean isWindfall(ItemStack itemstack) {
return false;
}
@Override
public boolean plantSaplingAt(EntityPlayer player, ItemStack germling, World world, int x, int y, int z) {
return false;
}
}
@@ -31,6 +31,9 @@ import forestry.core.utils.InventoryUtil;
import forestry.core.utils.PlayerUtil;
import forestry.core.utils.SlotUtil;
import forestry.plugins.PluginCore;
import forestry.plugins.PluginManager;
import ic2.api.item.IC2Items;
public class InventoryFarm extends InventoryAdapterRestricted implements IFarmInventory {
public static final int SLOT_RESOURCES_1 = 0;
@@ -132,8 +135,14 @@ public class InventoryFarm extends InventoryAdapterRestricted implements IFarmIn
if (itemstack == null) {
return false;
}
Item item = itemstack.getItem();
if (PluginManager.Module.INDUSTRIALCRAFT.isEnabled()) {
Item ic2fert = IC2Items.getItem("fertilizer").getItem();
if (ic2fert == item) {
return true;
}
}
return PluginCore.items.fertilizerCompound == item;
}
@@ -199,7 +208,10 @@ public class InventoryFarm extends InventoryAdapterRestricted implements IFarmIn
public void stowHarvest(Iterable<ItemStack> harvested, Stack<ItemStack> pendingProduce) {
for (ItemStack harvest : harvested) {
if (harvest == null) {
continue;
}
if (acceptsAsGermling(harvest)) {
harvest.stackSize -= InventoryUtil.addStack(germlingsInventory, harvest, true);
}
@@ -244,4 +256,4 @@ public class InventoryFarm extends InventoryAdapterRestricted implements IFarmIn
decrStackSize(SLOT_FERTILIZER, 1);
return true;
}
}
}
@@ -44,6 +44,6 @@ public class TriggerLowFertilizer extends Trigger {
TileFarmHatch tileHatch = (TileFarmHatch) tile;
IInventory fertilizerInventory = tileHatch.getMultiblockLogic().getController().getFarmInventory().getFertilizerInventory();
return InventoryUtil.containsPercent(fertilizerInventory, threshold);
return !InventoryUtil.containsPercent(fertilizerInventory, threshold);
}
}
@@ -47,6 +47,6 @@ public class TriggerLowGermlings extends Trigger {
TileFarmHatch tileHatch = (TileFarmHatch) tile;
IInventory germlingsInventory = tileHatch.getMultiblockLogic().getController().getFarmInventory().getGermlingsInventory();
return InventoryUtil.containsPercent(germlingsInventory, threshold);
return !InventoryUtil.containsPercent(germlingsInventory, threshold);
}
}
@@ -24,6 +24,7 @@ import forestry.farming.tiles.TileFarmHatch;
import buildcraft.api.statements.IStatementContainer;
import buildcraft.api.statements.IStatementParameter;
import buildcraft.api.statements.StatementParameterItemStack;
public class TriggerLowSoil extends Trigger {
@@ -49,6 +50,11 @@ public class TriggerLowSoil extends Trigger {
return 0;
}
@Override
public IStatementParameter createParameter(int index) {
return new StatementParameterItemStack();
}
/**
* Return true if the tile given in parameter activates the trigger, given
* the parameters.
@@ -67,14 +73,14 @@ public class TriggerLowSoil extends Trigger {
TileFarmHatch tileHatch = (TileFarmHatch) tile;
IFarmController farmController = tileHatch.getMultiblockLogic().getController();
IFarmInventory farmInventory = farmController.getFarmInventory();
IInventory resourcesInventory = farmInventory.getResourcesInventory();
if (parameter == null || parameter.getItemStack() == null) {
IInventory resourcesInventory = farmInventory.getResourcesInventory();
return InventoryUtil.containsPercent(resourcesInventory, threshold);
return !InventoryUtil.containsAmount(resourcesInventory, threshold);
} else {
ItemStack filter = parameter.getItemStack().copy();
filter.stackSize = threshold;
return farmInventory.hasResources(new ItemStack[]{filter});
return !InventoryUtil.contains(resourcesInventory, new ItemStack[]{filter});
}
}
}
@@ -22,8 +22,8 @@ import forestry.core.render.TextureManager;
public enum EnumBeverage implements ItemBeverage.IBeverageInfo {
MEAD_SHORT("meadShort", "glass", new Color(0xec9a19), new Color(0xffffff), 1, 0.2f, true),
MEAD_CURATIVE("meadCurative", "glass", new Color(0xc5feff), new Color(0xffffff), 1, 0.2f, true);
MEAD_CURATIVE("meadCurative", "glass", new Color(0xc5feff), new Color(0xffffff), 1, 0.2f, true),
MEAD("mead", "glass", new Color(0xcc6600), new Color(0xffffff), 10, 0.1f, true);
public static final EnumBeverage[] VALUES = values();
private final String name;
@@ -15,6 +15,7 @@ import java.util.List;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.EnumAction;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@@ -49,7 +50,7 @@ public class ItemBeverage extends ItemForestryFood {
public ItemBeverage() {
super(1, 0.2f);
setMaxStackSize(1);
setMaxStackSize(8);
this.beverages = EnumBeverage.VALUES;
}
@@ -64,11 +65,18 @@ public class ItemBeverage extends ItemForestryFood {
@Override
public ItemStack onEaten(ItemStack itemstack, World world, EntityPlayer entityplayer) {
List<IBeverageEffect> effects = BeverageEffect.loadEffects(itemstack);
ItemStack container = new ItemStack(Items.glass_bottle, 1);
itemstack.stackSize--;
if (!entityplayer.inventory.addItemStackToInventory(container)) {
entityplayer.dropPlayerItemWithRandomChoice(container, false);
} else {
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, container);
}
entityplayer.inventory.markDirty();
entityplayer.getFoodStats().func_151686_a(this, itemstack);
world.playSoundAtEntity(entityplayer, "random.burp", 0.5F, world.rand.nextFloat() * 0.1F + 0.9F);
if (world.isRemote) {
return itemstack;
}
@@ -236,10 +236,13 @@ public class ButterflyHelper extends SpeciesRoot implements IButterflyRoot {
// Create a tracker if there is none yet.
if (tracker == null) {
tracker = new LepidopteristTracker(filename, player);
tracker = new LepidopteristTracker(filename);
world.setItemData(filename, tracker);
}
tracker.setUsername(player);
tracker.setWorld(world);
return tracker;
}
@@ -12,8 +12,6 @@ package forestry.lepidopterology.genetics;
import net.minecraft.entity.player.EntityPlayer;
import com.mojang.authlib.GameProfile;
import forestry.api.genetics.IBreedingTracker;
import forestry.api.genetics.IIndividual;
import forestry.api.lepidopterology.ButterflyManager;
@@ -25,11 +23,7 @@ public class LepidopteristTracker extends BreedingTracker implements ILepidopter
/** Required for creation from map storage */
public LepidopteristTracker(String s) {
this(s, null);
}
public LepidopteristTracker(String s, GameProfile player) {
super(s, player);
super(s);
}
@Override
@@ -21,7 +21,7 @@ import forestry.lepidopterology.inventory.ItemInventoryFlutterlyzer;
public class ItemFlutterlyzer extends ItemWithGui {
public ItemFlutterlyzer() {
super(Tabs.tabLepidopterology);
setCreativeTab(Tabs.tabLepidopterology);
}
@Override
Loaded 100 of 127 files, more files were not shown because too many files have changed in this diff. Show more