mirror of
https://github.com/GTNewHorizons/ForestryMC.git
synced 2026-11-15 17:44:55 +00:00
Compare commits
28
Commits
4.11.8
...
4.11.22-pre
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
acd079b9ac | ||
|
|
3a8c2bd8cf | ||
|
|
00a55f6888 | ||
|
|
f2895a469d | ||
|
|
181c71d245 | ||
|
|
58c6b7bdf3 | ||
|
|
7bba5bea50 | ||
|
|
c8bfb67045 | ||
|
|
798cdef6af | ||
|
|
f5ed7a61b2 | ||
|
|
f0aece4dc8 | ||
|
|
c6f4044193 | ||
|
|
d8f43c0544 | ||
|
|
b1377d5642 | ||
|
|
b50910496e | ||
|
|
cc4b16e2a5 | ||
|
|
3b63133790 | ||
|
|
6d8d7110e1 | ||
|
|
98fa57844e | ||
|
|
adbb300523 | ||
|
|
839882b783 | ||
|
|
2635d036aa | ||
|
|
cf8f2f54c5 | ||
|
|
4844bc937b | ||
|
|
88f50d91e1 | ||
|
|
3bc6720dec | ||
|
|
eb0cda2d71 | ||
|
|
604209fd91 |
No files matched your search
+5
-3
@@ -1,11 +1,13 @@
|
||||
// Add your dependencies here
|
||||
|
||||
dependencies {
|
||||
api("com.github.GTNewHorizons:GTNHLib:0.9.54:dev")
|
||||
api('curse.maven:cofh-lib-220333:2388748')
|
||||
compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta68a:api')
|
||||
devOnlyNonPublishable('com.github.GTNewHorizons:NotEnoughItems:2.8.70-GTNH:dev')
|
||||
compileOnlyApi('com.github.GTNewHorizons:Angelica:2.1.19:api')
|
||||
devOnlyNonPublishable('com.github.GTNewHorizons:NotEnoughItems:2.8.93-GTNH:dev')
|
||||
compileOnly('com.github.GTNewHorizons:inventory-tweaks:1.7.1:api')
|
||||
compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.55:api')
|
||||
compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.59:api')
|
||||
compileOnly('net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev')
|
||||
compileOnly('curse.maven:craftguide-75557:2459320')
|
||||
devOnlyNonPublishable('net.xonich.mc:NoHotbarNeeded:0.0.3:dev')
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
#This file is generated by updateDaemonJvm
|
||||
toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/df211d3c3eefdc408b462041881bc575/redirect
|
||||
toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/93aeea858331bd6bb00ba94759830234/redirect
|
||||
toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/df211d3c3eefdc408b462041881bc575/redirect
|
||||
toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/93aeea858331bd6bb00ba94759830234/redirect
|
||||
toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/3426ffcaa54c3f62406beb1f1ab8b179/redirect
|
||||
toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/f636c800fdb3f9ae33f019dfa048ba72/redirect
|
||||
toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/df211d3c3eefdc408b462041881bc575/redirect
|
||||
toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/93aeea858331bd6bb00ba94759830234/redirect
|
||||
toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/3cd7045fca9a72cd9bc7d14a385e594c/redirect
|
||||
toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/0ef34dd9312b12d61ba1b8e66126d140/redirect
|
||||
toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect
|
||||
toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect
|
||||
toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect
|
||||
toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect
|
||||
toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/c2dd35c9d0aaf0ba6ad0791320f99dfc/redirect
|
||||
toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/e5810bd7fd1f8a586644409d395a7e55/redirect
|
||||
toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect
|
||||
toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect
|
||||
toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/7b3c4877c0749019e6805bb61e421497/redirect
|
||||
toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/d76df094a9cbbabd3b08251f9e61444a/redirect
|
||||
toolchainVersion=25
|
||||
Vendored
BIN
Binary file not shown.
+1
-1
@@ -1,6 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
# Darwin, MinGW, and NonStop.
|
||||
#
|
||||
# (3) This script is generated from the Groovy template
|
||||
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||
# https://github.com/gradle/gradle/blob/b631911858264c0b6e4d6603d677ff5218766cee/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||
# within the Gradle project.
|
||||
#
|
||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ pluginManagement {
|
||||
}
|
||||
|
||||
plugins {
|
||||
id 'com.gtnewhorizons.gtnhsettingsconvention' version '2.0.20'
|
||||
id 'com.gtnewhorizons.gtnhsettingsconvention' version '2.0.24'
|
||||
}
|
||||
|
||||
|
||||
@@ -57,7 +57,8 @@ import forestry.plugins.PluginManager;
|
||||
name = Constants.MOD,
|
||||
version = Constants.VERSION,
|
||||
guiFactory = "forestry.core.config.ForestryGuiConfigFactory",
|
||||
dependencies = "required-after:Forge@[10.13.4.1566,);" + "after:Buildcraft|Core@[6.1.7,);"
|
||||
dependencies = "required-after:Forge@[10.13.4.1566,);" + "required-after:gtnhlib@[0.9.41,);"
|
||||
+ "after:Buildcraft|Core@[6.1.7,);"
|
||||
+ "after:ExtrabiomesXL;"
|
||||
+ "after:BiomesOPlenty;"
|
||||
+ "after:IC2@[2.0.140,);"
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
package forestry.api.multiblock;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public interface IFarmFertilizerRegistry {
|
||||
|
||||
/**
|
||||
* Gets a list of all fertilizer stacks in the registry.
|
||||
*
|
||||
* @return The current fertilizer registry.
|
||||
*/
|
||||
Collection<ItemStack> getFertilizers();
|
||||
|
||||
/**
|
||||
* Adds a new fertilizer to the registry.
|
||||
*
|
||||
* @apiNote The stack size doesn't matter it always consumes 1.
|
||||
* @apiNote You can use OreDictionary.WILDCARD_VALUE to specific that any meta of the item will be ok.
|
||||
*
|
||||
* @param itemstack The item to add to the registry.
|
||||
*/
|
||||
void addFertilizer(ItemStack itemstack);
|
||||
|
||||
/**
|
||||
* Removes a fertilizer from the fretilizer registry.
|
||||
*
|
||||
* @param itemstack The item to remove from the registry.
|
||||
*/
|
||||
void removeFertilizer(ItemStack itemstack);
|
||||
|
||||
/**
|
||||
* Checks if an item is a usable multi-farm fertilizer.
|
||||
*
|
||||
* @param itemstack - The stack to check with.
|
||||
* @return True if the item is a fertilizer item.
|
||||
*/
|
||||
boolean isFertilizer(ItemStack itemstack);
|
||||
}
|
||||
@@ -8,4 +8,6 @@ package forestry.api.multiblock;
|
||||
public class MultiblockManager {
|
||||
|
||||
public static IMultiblockLogicFactory logicFactory;
|
||||
|
||||
public static IFarmFertilizerRegistry farmFertilizerRegistry;
|
||||
}
|
||||
@@ -573,7 +573,7 @@ public class Bee extends IndividualLiving implements IBee {
|
||||
}
|
||||
// / Secondary Products
|
||||
for (Map.Entry<ItemStack, Float> entry : secondary.getProductChances().entrySet()) {
|
||||
if (housing.getWorld().rand.nextFloat() < getFinalChance(entry.getValue() / 2, speed, prodModifier, 1f)) {
|
||||
if (housing.getWorld().rand.nextFloat() < getFinalChance(entry.getValue() / 2f, speed, prodModifier, 1f)) {
|
||||
products.add(entry.getKey().copy());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import forestry.api.core.Tabs;
|
||||
import forestry.apiculture.gui.GuiBeealyzer;
|
||||
import forestry.apiculture.inventory.ItemInventoryBeealyzer;
|
||||
import forestry.core.gui.ContainerAlyzer;
|
||||
import forestry.core.inventory.ItemLocation;
|
||||
import forestry.core.items.ItemWithGui;
|
||||
|
||||
public class ItemBeealyzer extends ItemWithGui {
|
||||
@@ -24,13 +25,13 @@ public class ItemBeealyzer extends ItemWithGui {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
ItemInventoryBeealyzer inventory = new ItemInventoryBeealyzer(player, heldItem);
|
||||
return new GuiBeealyzer(player, inventory);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
ItemInventoryBeealyzer inventory = new ItemInventoryBeealyzer(player, heldItem);
|
||||
return new ContainerAlyzer(inventory, player);
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ import forestry.apiculture.gui.ContainerHabitatLocator;
|
||||
import forestry.apiculture.gui.GuiHabitatLocator;
|
||||
import forestry.apiculture.inventory.ItemInventoryHabitatLocator;
|
||||
import forestry.apiculture.render.TextureHabitatLocator;
|
||||
import forestry.core.inventory.ItemLocation;
|
||||
import forestry.core.items.ItemWithGui;
|
||||
import forestry.core.utils.StringUtil;
|
||||
|
||||
@@ -81,12 +82,12 @@ public class ItemHabitatLocator extends ItemWithGui {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
return new GuiHabitatLocator(player, new ItemInventoryHabitatLocator(player, heldItem));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
return new ContainerHabitatLocator(player, new ItemInventoryHabitatLocator(player, heldItem));
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ import forestry.api.core.Tabs;
|
||||
import forestry.apiculture.gui.ContainerImprinter;
|
||||
import forestry.apiculture.gui.GuiImprinter;
|
||||
import forestry.apiculture.inventory.ItemInventoryImprinter;
|
||||
import forestry.core.inventory.ItemLocation;
|
||||
import forestry.core.items.ItemWithGui;
|
||||
|
||||
public class ItemImprinter extends ItemWithGui {
|
||||
@@ -24,12 +25,12 @@ public class ItemImprinter extends ItemWithGui {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
return new GuiImprinter(player.inventory, new ItemInventoryImprinter(player, heldItem));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
return new ContainerImprinter(player.inventory, new ItemInventoryImprinter(player, heldItem));
|
||||
}
|
||||
}
|
||||
@@ -250,8 +250,9 @@ public class AlvearyController extends RectangularMultiblockControllerBase
|
||||
|
||||
private float applyChange(float base, float currentChange, float extraChange, float boundaryDown,
|
||||
float boundaryUp) {
|
||||
float boundedNewChange = Math.max(boundaryDown, Math.min(base + currentChange + (extraChange * 20), boundaryUp))
|
||||
- base;
|
||||
float boundedNewChange = Math.round(
|
||||
(Math.max(boundaryDown, Math.min(base + currentChange + (extraChange * 20), boundaryUp)) - base) * 100)
|
||||
/ 100.0f;
|
||||
if (extraChange > 0) {
|
||||
return Math.max(currentChange, boundedNewChange);
|
||||
} else {
|
||||
@@ -355,12 +356,13 @@ public class AlvearyController extends RectangularMultiblockControllerBase
|
||||
@Override
|
||||
public float getExactTemperature() {
|
||||
ChunkCoordinates coords = getReferenceCoord();
|
||||
return getBiome().getFloatTemperature(coords.posX, coords.posY, coords.posZ) + tempChange;
|
||||
return Math.round((getBiome().getFloatTemperature(coords.posX, coords.posY, coords.posZ) + tempChange) * 100)
|
||||
/ 100.0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getExactHumidity() {
|
||||
return getBiome().rainfall + humidChange;
|
||||
return Math.round((getBiome().rainfall + humidChange) * 100) / 100.0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,145 +0,0 @@
|
||||
package forestry.arboriculture;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockLeaves;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
/** Based on vanilla leaf decay, but accepts leaves that are connected further from a trunk */
|
||||
public abstract class LeafDecayHelper {
|
||||
|
||||
private static final short SUSTAINS_LEAVES = 0;
|
||||
private static final short NOT_SUSTAINS_LEAVES = -1;
|
||||
private static final short IS_LEAVES = -2;
|
||||
private static int[] leafDecayValues;
|
||||
|
||||
public static void leafDecay(BlockLeaves leaves, World world, int x, int y, int z) {
|
||||
if (world.isRemote) {
|
||||
return;
|
||||
}
|
||||
|
||||
int leafMeta = world.getBlockMetadata(x, y, z);
|
||||
|
||||
if ((leafMeta & 8) != 0 && (leafMeta & 4) == 0) {
|
||||
byte radius = 4;
|
||||
byte yArrayMult = 32;
|
||||
int xArrayMult = yArrayMult * yArrayMult;
|
||||
int arrayOffset = yArrayMult / 2;
|
||||
|
||||
if (leafDecayValues == null) {
|
||||
leafDecayValues = new int[yArrayMult * yArrayMult * yArrayMult];
|
||||
}
|
||||
|
||||
int radius1 = radius + 1;
|
||||
if (world.checkChunksExist(x - radius1, y - radius1, z - radius1, x + radius1, y + radius1, z + radius1)) {
|
||||
for (int xOffset = -radius; xOffset <= radius; ++xOffset) {
|
||||
for (int yOffset = -radius; yOffset <= radius; ++yOffset) {
|
||||
for (int zOffset = -radius; zOffset <= radius; ++zOffset) {
|
||||
Block block = world.getBlock(x + xOffset, y + yOffset, z + zOffset);
|
||||
|
||||
if (!block.canSustainLeaves(world, x + xOffset, y + yOffset, z + zOffset)) {
|
||||
if (block.isLeaves(world, x + xOffset, y + yOffset, z + zOffset)) {
|
||||
leafDecayValues[(xOffset + arrayOffset) * xArrayMult
|
||||
+ (yOffset + arrayOffset) * yArrayMult
|
||||
+ zOffset
|
||||
+ arrayOffset] = IS_LEAVES;
|
||||
} else {
|
||||
leafDecayValues[(xOffset + arrayOffset) * xArrayMult
|
||||
+ (yOffset + arrayOffset) * yArrayMult
|
||||
+ zOffset
|
||||
+ arrayOffset] = NOT_SUSTAINS_LEAVES;
|
||||
}
|
||||
} else {
|
||||
leafDecayValues[(xOffset + arrayOffset) * xArrayMult
|
||||
+ (yOffset + arrayOffset) * yArrayMult
|
||||
+ zOffset
|
||||
+ arrayOffset] = SUSTAINS_LEAVES;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int sustainedValue = 1; sustainedValue <= 8; ++sustainedValue) {
|
||||
for (int xOffset = -radius; xOffset <= radius; ++xOffset) {
|
||||
for (int yOffset = -radius; yOffset <= radius; ++yOffset) {
|
||||
for (int zOffset = -radius; zOffset <= radius; ++zOffset) {
|
||||
if (leafDecayValues[(xOffset + arrayOffset) * xArrayMult
|
||||
+ (yOffset + arrayOffset) * yArrayMult
|
||||
+ zOffset
|
||||
+ arrayOffset] == sustainedValue - 1) {
|
||||
if (leafDecayValues[(xOffset + arrayOffset - 1) * xArrayMult
|
||||
+ (yOffset + arrayOffset) * yArrayMult
|
||||
+ zOffset
|
||||
+ arrayOffset] == IS_LEAVES) {
|
||||
leafDecayValues[(xOffset + arrayOffset - 1) * xArrayMult
|
||||
+ (yOffset + arrayOffset) * yArrayMult
|
||||
+ zOffset
|
||||
+ arrayOffset] = sustainedValue;
|
||||
}
|
||||
|
||||
if (leafDecayValues[(xOffset + arrayOffset + 1) * xArrayMult
|
||||
+ (yOffset + arrayOffset) * yArrayMult
|
||||
+ zOffset
|
||||
+ arrayOffset] == IS_LEAVES) {
|
||||
leafDecayValues[(xOffset + arrayOffset + 1) * xArrayMult
|
||||
+ (yOffset + arrayOffset) * yArrayMult
|
||||
+ zOffset
|
||||
+ arrayOffset] = sustainedValue;
|
||||
}
|
||||
|
||||
if (leafDecayValues[(xOffset + arrayOffset) * xArrayMult
|
||||
+ (yOffset + arrayOffset - 1) * yArrayMult
|
||||
+ zOffset
|
||||
+ arrayOffset] == IS_LEAVES) {
|
||||
leafDecayValues[(xOffset + arrayOffset) * xArrayMult
|
||||
+ (yOffset + arrayOffset - 1) * yArrayMult
|
||||
+ zOffset
|
||||
+ arrayOffset] = sustainedValue;
|
||||
}
|
||||
|
||||
if (leafDecayValues[(xOffset + arrayOffset) * xArrayMult
|
||||
+ (yOffset + arrayOffset + 1) * yArrayMult
|
||||
+ zOffset
|
||||
+ arrayOffset] == IS_LEAVES) {
|
||||
leafDecayValues[(xOffset + arrayOffset) * xArrayMult
|
||||
+ (yOffset + arrayOffset + 1) * yArrayMult
|
||||
+ zOffset
|
||||
+ arrayOffset] = sustainedValue;
|
||||
}
|
||||
|
||||
if (leafDecayValues[(xOffset + arrayOffset) * xArrayMult
|
||||
+ (yOffset + arrayOffset) * yArrayMult
|
||||
+ (zOffset + arrayOffset - 1)] == IS_LEAVES) {
|
||||
leafDecayValues[(xOffset + arrayOffset) * xArrayMult
|
||||
+ (yOffset + arrayOffset) * yArrayMult
|
||||
+ (zOffset + arrayOffset - 1)] = sustainedValue;
|
||||
}
|
||||
|
||||
if (leafDecayValues[(xOffset + arrayOffset) * xArrayMult
|
||||
+ (yOffset + arrayOffset) * yArrayMult
|
||||
+ zOffset
|
||||
+ arrayOffset
|
||||
+ 1] == IS_LEAVES) {
|
||||
leafDecayValues[(xOffset + arrayOffset) * xArrayMult
|
||||
+ (yOffset + arrayOffset) * yArrayMult
|
||||
+ zOffset
|
||||
+ arrayOffset
|
||||
+ 1] = sustainedValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int sustainValue = leafDecayValues[(arrayOffset * xArrayMult) + (arrayOffset * yArrayMult) + arrayOffset];
|
||||
|
||||
if (sustainValue >= 0) {
|
||||
world.setBlockMetadataWithNotify(x, y, z, leafMeta & -9, 4); // stop trying to decay
|
||||
} else {
|
||||
leaves.dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0);
|
||||
world.setBlockToAir(x, y, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -34,6 +34,7 @@ import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import com.gtnewhorizon.gtnhlib.blocks.util.BFSLeafDecay;
|
||||
import com.mojang.authlib.GameProfile;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
@@ -48,7 +49,6 @@ import forestry.api.core.Tabs;
|
||||
import forestry.api.lepidopterology.ButterflyManager;
|
||||
import forestry.api.lepidopterology.EnumFlutterType;
|
||||
import forestry.api.lepidopterology.IButterfly;
|
||||
import forestry.arboriculture.LeafDecayHelper;
|
||||
import forestry.arboriculture.genetics.TreeDefinition;
|
||||
import forestry.arboriculture.items.ItemBlockLeaves;
|
||||
import forestry.arboriculture.render.TextureLeaves;
|
||||
@@ -230,7 +230,12 @@ public class BlockForestryLeaves extends BlockNewLeaf implements ITileEntityProv
|
||||
return;
|
||||
}
|
||||
|
||||
LeafDecayHelper.leafDecay(this, world, x, y, z);
|
||||
if (!world.isRemote) {
|
||||
final int meta = world.getBlockMetadata(x, y, z);
|
||||
if ((meta & 8) != 0 && (meta & 4) == 0) {
|
||||
BFSLeafDecay.handleDecayChecked(this, world, x, y, z, meta, 4);
|
||||
}
|
||||
}
|
||||
|
||||
// check leaves tile again because they can decay in super.updateTick
|
||||
if (tileLeaves.isInvalid()) {
|
||||
|
||||
@@ -36,29 +36,29 @@ public class BlockFruitPod extends BlockCocoa {
|
||||
}
|
||||
|
||||
public static TileFruitPod getPodTile(IBlockAccess world, int x, int y, int z) {
|
||||
TileEntity tile = world.getTileEntity(x, y, z);
|
||||
if (!(tile instanceof TileFruitPod)) {
|
||||
return null;
|
||||
final TileEntity tile = world.getTileEntity(x, y, z);
|
||||
if (tile instanceof TileFruitPod) {
|
||||
return (TileFruitPod) tile;
|
||||
}
|
||||
|
||||
return (TileFruitPod) tile;
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateTick(World world, int x, int y, int z, Random rand) {
|
||||
|
||||
if (!world.checkChunksExist(x - 1, y, z - 1, x + 1, y, z + 1)) {
|
||||
return;
|
||||
}
|
||||
if (!canBlockStay(world, x, y, z)) {
|
||||
dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0);
|
||||
final int meta = world.getBlockMetadata(x, y, z);
|
||||
this.dropBlockAsItem(world, x, y, z, meta, 0);
|
||||
world.setBlockToAir(x, y, z);
|
||||
return;
|
||||
}
|
||||
|
||||
TileFruitPod tile = getPodTile(world, x, y, z);
|
||||
if (tile == null) {
|
||||
return;
|
||||
final TileFruitPod tile = getPodTile(world, x, y, z);
|
||||
if (tile != null) {
|
||||
tile.onBlockTick();
|
||||
}
|
||||
|
||||
tile.onBlockTick();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
|
||||
@@ -26,6 +26,7 @@ public class ItemRegistryArboriculture extends ItemRegistry {
|
||||
OreDictionary.registerOre("treeSapling", sapling.getWildcard());
|
||||
|
||||
pollenFertile = registerItem(new ItemGermlingGE(EnumGermlingType.POLLEN), "pollenFertile");
|
||||
OreDictionary.registerOre("itemPollenFertile", pollenFertile.getWildcard());
|
||||
treealyzer = registerItem(new ItemTreealyzer(), "treealyzer");
|
||||
grafter = registerItem(new ItemGrafter(4), "grafter");
|
||||
grafterProven = registerItem(new ItemGrafter(149), "grafterProven");
|
||||
|
||||
@@ -15,6 +15,7 @@ import forestry.api.core.Tabs;
|
||||
import forestry.arboriculture.gui.GuiTreealyzer;
|
||||
import forestry.arboriculture.inventory.ItemInventoryTreealyzer;
|
||||
import forestry.core.gui.ContainerAlyzer;
|
||||
import forestry.core.inventory.ItemLocation;
|
||||
import forestry.core.items.ItemWithGui;
|
||||
|
||||
public class ItemTreealyzer extends ItemWithGui {
|
||||
@@ -24,12 +25,12 @@ public class ItemTreealyzer extends ItemWithGui {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
return new GuiTreealyzer(player, new ItemInventoryTreealyzer(player, heldItem));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
return new ContainerAlyzer(new ItemInventoryTreealyzer(player, heldItem), player);
|
||||
}
|
||||
}
|
||||
@@ -95,8 +95,7 @@ public class TileWood extends TileEntity implements IStreamable {
|
||||
EnumWoodType woodType = wood.getWoodType();
|
||||
|
||||
int amount = 1;
|
||||
if (block instanceof BlockSlab) {
|
||||
BlockSlab blockSlab = (BlockSlab) block;
|
||||
if (block instanceof BlockSlab blockSlab) {
|
||||
if (blockSlab.isDoubleSlab()) {
|
||||
amount = 2;
|
||||
block = PluginArboriculture.blocks.slabs;
|
||||
@@ -104,6 +103,7 @@ public class TileWood extends TileEntity implements IStreamable {
|
||||
}
|
||||
|
||||
ItemStack itemStack = new ItemStack(block, amount);
|
||||
if (itemStack.getItem() == null) return null;
|
||||
ItemBlockWood.saveToItemStack(woodType, itemStack);
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
@@ -84,31 +84,26 @@ public class BlockSoil extends Block implements IItemTyped {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateTick(World world, int i, int j, int k, Random random) {
|
||||
public void updateTick(World world, int x, int y, int z, Random random) {
|
||||
if (world.isRemote) {
|
||||
return;
|
||||
}
|
||||
|
||||
int meta = world.getBlockMetadata(i, j, k);
|
||||
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
SoilType type = getTypeFromMeta(meta);
|
||||
|
||||
if (type == SoilType.HUMUS) {
|
||||
updateTickHumus(world, i, j, k);
|
||||
if (world.checkChunksExist(x - 1, y + 1, z - 1, x + 1, y + 1, z + 1)) {
|
||||
if (isEnrooted(world, x, y, z)) {
|
||||
degradeSoil(world, x, y, z);
|
||||
}
|
||||
}
|
||||
} else if (type == SoilType.BOG_EARTH) {
|
||||
updateTickBogEarth(world, i, j, k);
|
||||
}
|
||||
}
|
||||
|
||||
private static void updateTickHumus(World world, int i, int j, int k) {
|
||||
if (isEnrooted(world, i, j, k)) {
|
||||
degradeSoil(world, i, j, k);
|
||||
}
|
||||
}
|
||||
|
||||
private static void updateTickBogEarth(World world, int i, int j, int k) {
|
||||
if (isMoistened(world, i, j, k)) {
|
||||
matureBog(world, i, j, k);
|
||||
if (world.checkChunksExist(x - 2, y, z - 2, x + 2, y, z + 2)) {
|
||||
if (isMoistened(world, x, y, z)) {
|
||||
matureBog(world, x, y, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,7 +117,6 @@ public class BlockSoil extends Block implements IItemTyped {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -156,7 +150,6 @@ public class BlockSoil extends Block implements IItemTyped {
|
||||
}
|
||||
|
||||
private static boolean isMoistened(World world, int x, int y, int z) {
|
||||
|
||||
for (int i = -2; i < 3; i++) {
|
||||
for (int j = -2; j < 3; j++) {
|
||||
Block block = world.getBlock(x + i, y, z + j);
|
||||
@@ -165,7 +158,6 @@ public class BlockSoil extends Block implements IItemTyped {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -193,7 +193,7 @@ public class BlockForestryFluid extends BlockFluidClassic {
|
||||
super.updateTick(world, x, y, z, rand);
|
||||
|
||||
// Start fires if the fluid is lava-like
|
||||
if (getMaterial() == Material.lava) {
|
||||
if (getMaterial() == Material.lava && world.checkChunksExist(x - 4, y, z - 4, x + 4, y, z + 4)) {
|
||||
int rangeUp = rand.nextInt(3);
|
||||
|
||||
for (int i = 0; i < rangeUp; ++i) {
|
||||
|
||||
@@ -36,8 +36,7 @@ public abstract class ContainerForestry extends Container {
|
||||
// Player inventory
|
||||
for (int row = 0; row < 3; row++) {
|
||||
for (int column = 0; column < 9; column++) {
|
||||
addSlotToContainer(
|
||||
new Slot(playerInventory, column + row * 9 + 9, xInv + column * 18, yInv + row * 18));
|
||||
addNormalSlot(playerInventory, column + row * 9 + 9, xInv + column * 18, yInv + row * 18);
|
||||
}
|
||||
}
|
||||
// Player hotbar
|
||||
@@ -46,6 +45,10 @@ public abstract class ContainerForestry extends Container {
|
||||
}
|
||||
}
|
||||
|
||||
protected void addNormalSlot(InventoryPlayer playerInventory, int slot, int x, int y) {
|
||||
addSlotToContainer(new Slot(playerInventory, slot, x, y));
|
||||
}
|
||||
|
||||
protected void addHotbarSlot(InventoryPlayer playerInventory, int slot, int x, int y) {
|
||||
addSlotToContainer(new Slot(playerInventory, slot, x, y));
|
||||
}
|
||||
|
||||
@@ -26,6 +26,17 @@ public abstract class ContainerItemInventory<I extends ItemInventory> extends Co
|
||||
addPlayerInventory(playerInventory, xInv, yInv);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addNormalSlot(InventoryPlayer playerInventory, int slot, int x, int y) {
|
||||
ItemStack stackInSlot = playerInventory.getStackInSlot(slot);
|
||||
|
||||
if (inventory.isParentItemInventory(stackInSlot)) {
|
||||
addSlotToContainer(new SlotLocked(playerInventory, slot, x, y));
|
||||
} else {
|
||||
addSlotToContainer(new Slot(playerInventory, slot, x, y));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addHotbarSlot(InventoryPlayer playerInventory, int slot, int x, int y) {
|
||||
ItemStack stackInSlot = playerInventory.getStackInSlot(slot);
|
||||
|
||||
@@ -8,6 +8,10 @@
|
||||
******************************************************************************/
|
||||
package forestry.core.gui;
|
||||
|
||||
import static forestry.core.inventory.ItemLocation.TYPE.PLAYER_INVENTORY;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
@@ -18,6 +22,7 @@ import net.minecraft.world.World;
|
||||
|
||||
import cpw.mods.fml.common.network.IGuiHandler;
|
||||
import forestry.api.core.ForestryAPI;
|
||||
import forestry.core.inventory.ItemLocation;
|
||||
|
||||
public class GuiHandler implements IGuiHandler {
|
||||
|
||||
@@ -39,6 +44,19 @@ public class GuiHandler implements IGuiHandler {
|
||||
entityplayer.openGui(ForestryAPI.instance, guiData, entityplayer.worldObj, 0, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens gui for item placed in player's inventory.
|
||||
*
|
||||
* @param entityPlayer Player.
|
||||
* @param guiHandler GUI handler for item.
|
||||
* @param data Data for item.
|
||||
* @param invSlotIdx Index or slot in player inventory should be in range [0, 40).
|
||||
*/
|
||||
public static void openGui(EntityPlayer entityPlayer, IGuiHandlerItem guiHandler, short data, int invSlotIdx) {
|
||||
int guiData = encodeGuiData(guiHandler, data, invSlotIdx);
|
||||
entityPlayer.openGui(ForestryAPI.instance, guiData, entityPlayer.worldObj, 0, 0, 0);
|
||||
}
|
||||
|
||||
public static void openGui(EntityPlayer entityplayer, IGuiHandlerTile guiHandler) {
|
||||
openGui(entityplayer, guiHandler, (short) 0);
|
||||
}
|
||||
@@ -56,8 +74,32 @@ public class GuiHandler implements IGuiHandler {
|
||||
}
|
||||
|
||||
private static int encodeGuiData(IGuiHandlerForestry guiHandler, short data) {
|
||||
return encodeGuiData(guiHandler, data, -1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encodes data required for GUI handler to function properly. Because of minecraft implementation we are limited to
|
||||
* 32 bits.
|
||||
*
|
||||
* @param guiHandler GUI handler.
|
||||
* @param data High bits which were encoded by GUI handler.
|
||||
* @param invSlotIdx Slot index in the player's inventory should be in range [0,40).
|
||||
* @return Encoded data.
|
||||
*/
|
||||
private static int encodeGuiData(IGuiHandlerForestry guiHandler, short data, int invSlotIdx) {
|
||||
// inventory slot idx will be encoded in third byte
|
||||
// player have 40 different inventory which means that we need 6 bits to encode all values.
|
||||
// first 2 bits are reserved for type currently values 0(heldItem) and 1(item inventory) have meaning,
|
||||
// 2 and 3 are reserved for possible extension.
|
||||
if (invSlotIdx < -1 || invSlotIdx >= 40) {
|
||||
throw new IllegalArgumentException("Inventory slot index should be in range [-1, 40)");
|
||||
}
|
||||
|
||||
int invData = invSlotIdx == -1 ? 0 : (0x40 | invSlotIdx);
|
||||
|
||||
GuiId guiId = GuiIdRegistry.getGuiIdForGuiHandler(guiHandler);
|
||||
return data << 16 | guiId.getId();
|
||||
|
||||
return data << 16 | invData << 8 | guiId.getId();
|
||||
}
|
||||
|
||||
private static GuiId decodeGuiID(int guiData) {
|
||||
@@ -69,8 +111,24 @@ public class GuiHandler implements IGuiHandler {
|
||||
return (short) (guiId >> 16);
|
||||
}
|
||||
|
||||
private static int decodeInvSlotIdx(int guiData) {
|
||||
boolean invEncoded = (0x00_00_40_00 & guiData) != 0;
|
||||
|
||||
return invEncoded ? (guiData & 0x00_00_3F_00) >> 8 : -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getClientGuiElement(int guiData, EntityPlayer player, World world, int x, int y, int z) {
|
||||
return getGuiElement(false, guiData, player, world, x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getServerGuiElement(int guiData, EntityPlayer player, World world, int x, int y, int z) {
|
||||
return getGuiElement(true, guiData, player, world, x, y, z);
|
||||
}
|
||||
|
||||
private @Nullable Object getGuiElement(boolean isServerSide, int guiData, EntityPlayer player, World world, int x,
|
||||
int y, int z) {
|
||||
GuiId guiId = decodeGuiID(guiData);
|
||||
if (guiId == null) {
|
||||
return null;
|
||||
@@ -79,11 +137,25 @@ public class GuiHandler implements IGuiHandler {
|
||||
|
||||
switch (guiId.getGuiType()) {
|
||||
case Item: {
|
||||
ItemStack heldItem = player.getCurrentEquippedItem();
|
||||
int slotIdx = decodeInvSlotIdx(guiData);
|
||||
ItemStack heldItem;
|
||||
ItemLocation loc;
|
||||
if (slotIdx == -1) {
|
||||
heldItem = player.getCurrentEquippedItem();
|
||||
loc = ItemLocation.HELD_BY_PLAYER;
|
||||
} else {
|
||||
heldItem = player.inventory.getStackInSlot(slotIdx);
|
||||
loc = new ItemLocation(PLAYER_INVENTORY, slotIdx);
|
||||
}
|
||||
|
||||
if (heldItem != null) {
|
||||
Item item = heldItem.getItem();
|
||||
if (guiId.getGuiHandlerClass().isInstance(item)) {
|
||||
return ((IGuiHandlerItem) item).getGui(player, heldItem, data);
|
||||
if (isServerSide) {
|
||||
return ((IGuiHandlerItem) item).getContainer(player, heldItem, data, loc);
|
||||
}
|
||||
|
||||
return ((IGuiHandlerItem) item).getGui(player, heldItem, data, loc);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -91,6 +163,9 @@ public class GuiHandler implements IGuiHandler {
|
||||
case Tile: {
|
||||
TileEntity tileEntity = world.getTileEntity(x, y, z);
|
||||
if (guiId.getGuiHandlerClass().isInstance(tileEntity)) {
|
||||
if (isServerSide) {
|
||||
return ((IGuiHandlerTile) tileEntity).getContainer(player, data);
|
||||
}
|
||||
return ((IGuiHandlerTile) tileEntity).getGui(player, data);
|
||||
}
|
||||
break;
|
||||
@@ -98,6 +173,9 @@ public class GuiHandler implements IGuiHandler {
|
||||
case Entity: {
|
||||
Entity entity = world.getEntityByID(x);
|
||||
if (guiId.getGuiHandlerClass().isInstance(entity)) {
|
||||
if (isServerSide) {
|
||||
return ((IGuiHandlerEntity) entity).getContainer(player, data);
|
||||
}
|
||||
return ((IGuiHandlerEntity) entity).getGui(player, data);
|
||||
}
|
||||
break;
|
||||
@@ -105,41 +183,4 @@ public class GuiHandler implements IGuiHandler {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getServerGuiElement(int guiData, EntityPlayer player, World world, int x, int y, int z) {
|
||||
GuiId guiId = decodeGuiID(guiData);
|
||||
if (guiId == null) {
|
||||
return null;
|
||||
}
|
||||
short data = decodeGuiData(guiData);
|
||||
|
||||
switch (guiId.getGuiType()) {
|
||||
case Item: {
|
||||
ItemStack heldItem = player.getCurrentEquippedItem();
|
||||
if (heldItem != null) {
|
||||
Item item = heldItem.getItem();
|
||||
if (guiId.getGuiHandlerClass().isInstance(item)) {
|
||||
return ((IGuiHandlerItem) item).getContainer(player, heldItem, data);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case Tile: {
|
||||
TileEntity tileEntity = world.getTileEntity(x, y, z);
|
||||
if (guiId.getGuiHandlerClass().isInstance(tileEntity)) {
|
||||
return ((IGuiHandlerTile) tileEntity).getContainer(player, data);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case Entity: {
|
||||
Entity entity = world.getEntityByID(x);
|
||||
if (guiId.getGuiHandlerClass().isInstance(entity)) {
|
||||
return ((IGuiHandlerEntity) entity).getContainer(player, data);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -119,6 +119,13 @@ public class GuiIdRegistry {
|
||||
classMap.put(tileGuiHandlerClass, guiId);
|
||||
idMap.put(guiId.getId(), guiId);
|
||||
}
|
||||
|
||||
if (idMap.size() > 256) {
|
||||
// see {@link GuiHandler.encodeGuiData(forestry.core.gui.IGuiHandlerForestry, short, int)}
|
||||
throw new IllegalStateException(
|
||||
"Current implementation can't have more than different 256 GUI handlers "
|
||||
+ "because its id is coded by 8 bits");
|
||||
}
|
||||
}
|
||||
|
||||
public static GuiId getGuiIdForGuiHandler(IGuiHandlerForestry guiHandler) {
|
||||
|
||||
@@ -11,9 +11,11 @@ package forestry.core.gui;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import forestry.core.inventory.ItemLocation;
|
||||
|
||||
public interface IGuiHandlerItem extends IGuiHandlerForestry {
|
||||
|
||||
Object getGui(EntityPlayer player, ItemStack heldItem, int data);
|
||||
Object getGui(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc);
|
||||
|
||||
Object getContainer(EntityPlayer player, ItemStack heldItem, int data);
|
||||
Object getContainer(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc);
|
||||
}
|
||||
@@ -28,11 +28,17 @@ public abstract class ItemInventory implements IInventory, IFilterSlotDelegate {
|
||||
private final EntityPlayer player;
|
||||
private final ItemStack parent;
|
||||
private final ItemStack[] inventoryStacks;
|
||||
private final ItemLocation location;
|
||||
|
||||
public ItemInventory(EntityPlayer player, int size, ItemStack parent) {
|
||||
this(player, size, parent, ItemLocation.UNKNOWN);
|
||||
}
|
||||
|
||||
public ItemInventory(EntityPlayer player, int size, ItemStack parent, ItemLocation loc) {
|
||||
this.player = player;
|
||||
this.parent = parent;
|
||||
this.inventoryStacks = new ItemStack[size];
|
||||
this.location = loc;
|
||||
|
||||
setUID(); // Set a uid to identify the itemstack on SMP
|
||||
|
||||
@@ -79,7 +85,10 @@ public abstract class ItemInventory implements IInventory, IFilterSlotDelegate {
|
||||
}
|
||||
|
||||
public boolean isParentItemEquipped() {
|
||||
return isSameItemInventory(player.getCurrentEquippedItem(), parent);
|
||||
return switch (location.type()) {
|
||||
case HELD_BY_PLAYER, UNKNOWN -> isSameItemInventory(player.getCurrentEquippedItem(), parent);
|
||||
case PLAYER_INVENTORY -> true;
|
||||
};
|
||||
}
|
||||
|
||||
public EntityPlayer getPlayer() {
|
||||
@@ -92,7 +101,11 @@ public abstract class ItemInventory implements IInventory, IFilterSlotDelegate {
|
||||
}
|
||||
|
||||
protected ItemStack getParent() {
|
||||
ItemStack equipped = player.getCurrentEquippedItem();
|
||||
ItemStack equipped = switch (location.type()) {
|
||||
case HELD_BY_PLAYER, UNKNOWN -> player.getCurrentEquippedItem();
|
||||
case PLAYER_INVENTORY -> player.inventory.getStackInSlot(location.slotIdx());
|
||||
};
|
||||
|
||||
if (isSameItemInventory(equipped, parent)) {
|
||||
return equipped;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package forestry.core.inventory;
|
||||
|
||||
/**
|
||||
* Location of items in inventory.
|
||||
*/
|
||||
public class ItemLocation {
|
||||
|
||||
public enum TYPE {
|
||||
UNKNOWN,
|
||||
HELD_BY_PLAYER,
|
||||
PLAYER_INVENTORY
|
||||
}
|
||||
|
||||
public static final ItemLocation UNKNOWN = new ItemLocation(TYPE.UNKNOWN, -1);
|
||||
public static final ItemLocation HELD_BY_PLAYER = new ItemLocation(TYPE.HELD_BY_PLAYER, -1);
|
||||
|
||||
private final TYPE type;
|
||||
private final int slotIdx;
|
||||
|
||||
public ItemLocation(TYPE type, int slotIdx) {
|
||||
this.type = type;
|
||||
this.slotIdx = slotIdx;
|
||||
}
|
||||
|
||||
public TYPE type() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public int slotIdx() {
|
||||
return slotIdx;
|
||||
}
|
||||
}
|
||||
@@ -15,16 +15,17 @@ import forestry.core.circuits.ContainerSolderingIron;
|
||||
import forestry.core.circuits.GuiSolderingIron;
|
||||
import forestry.core.circuits.ISolderingIron;
|
||||
import forestry.core.inventory.ItemInventorySolderingIron;
|
||||
import forestry.core.inventory.ItemLocation;
|
||||
|
||||
public class ItemSolderingIron extends ItemWithGui implements ISolderingIron {
|
||||
|
||||
@Override
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
return new GuiSolderingIron(player, new ItemInventorySolderingIron(player, heldItem));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
return new ContainerSolderingIron(player, new ItemInventorySolderingIron(player, heldItem));
|
||||
}
|
||||
}
|
||||
@@ -60,8 +60,6 @@ public class RenderAnalyzer extends TileEntitySpecialRenderer implements IBlockR
|
||||
|
||||
private void render(ItemStack itemstack, World world, ForgeDirection orientation, double x, double y, double z) {
|
||||
|
||||
dummyEntityItem.worldObj = world;
|
||||
|
||||
model.render(orientation, (float) x, (float) y, (float) z);
|
||||
if (itemstack == null) {
|
||||
return;
|
||||
@@ -72,13 +70,18 @@ public class RenderAnalyzer extends TileEntitySpecialRenderer implements IBlockR
|
||||
GL11.glTranslatef((float) x, (float) y, (float) z);
|
||||
GL11.glTranslatef(0.5f, 0.2f, 0.5f);
|
||||
GL11.glScalef(renderScale, renderScale, renderScale);
|
||||
dummyEntityItem.setEntityItemStack(itemstack);
|
||||
|
||||
if (world.getTotalWorldTime() != lastTick) {
|
||||
lastTick = world.getTotalWorldTime();
|
||||
dummyEntityItem.onUpdate();
|
||||
try {
|
||||
dummyEntityItem.worldObj = world;
|
||||
dummyEntityItem.setEntityItemStack(itemstack);
|
||||
if (world.getTotalWorldTime() != lastTick) {
|
||||
lastTick = world.getTotalWorldTime();
|
||||
dummyEntityItem.onUpdate();
|
||||
}
|
||||
customRenderItem.doRender(dummyEntityItem, 0, 0, 0, 0, 0);
|
||||
} finally {
|
||||
dummyEntityItem.worldObj = null;
|
||||
}
|
||||
customRenderItem.doRender(dummyEntityItem, 0, 0, 0, 0, 0);
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
}
|
||||
@@ -22,8 +22,6 @@ import forestry.core.tiles.TileMill;
|
||||
|
||||
public class RenderMill extends TileEntitySpecialRenderer implements IBlockRenderer {
|
||||
|
||||
private final ModelBase model = new ModelBase() {};
|
||||
|
||||
private enum Textures {
|
||||
PEDESTAL,
|
||||
EXTENSION,
|
||||
@@ -41,6 +39,7 @@ public class RenderMill extends TileEntitySpecialRenderer implements IBlockRende
|
||||
private final ModelRenderer blade2;
|
||||
|
||||
public RenderMill() {
|
||||
ModelBase model = new ModelBase() {};
|
||||
pedestal = new ModelRenderer(model, 0, 0);
|
||||
pedestal.addBox(-8F, -8F, -8F, 16, 1, 16);
|
||||
pedestal.rotationPointX = 8;
|
||||
|
||||
@@ -118,7 +118,7 @@ public class GuiWorktable extends GuiForestryTitled<ContainerWorktable, TileWork
|
||||
|
||||
GL11.glDisable(GL11.GL_LIGHTING);
|
||||
GL11.glTranslatef(0, 0, 150);
|
||||
drawRect(left, top, left + 16, top + 16, 0x88ff0000);
|
||||
drawRect(left, top, left + 16, top + 16, 0x88000000 | getFontColor().get("gui.worktable.missing"));
|
||||
GL11.glTranslatef(0, 0, -150);
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
}
|
||||
|
||||
@@ -72,51 +72,54 @@ public class BlockMushroom extends BlockSapling implements IItemTyped {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateTick(World world, int i, int j, int k, Random random) {
|
||||
|
||||
public void updateTick(World world, int x, int y, int z, Random random) {
|
||||
if (world.isRemote) {
|
||||
return;
|
||||
}
|
||||
|
||||
int meta = world.getBlockMetadata(i, j, k);
|
||||
MushroomType type = getTypeFromMeta(meta);
|
||||
int maturity = meta >> 2;
|
||||
final int meta = world.getBlockMetadata(x, y, z);
|
||||
final MushroomType type = getTypeFromMeta(meta);
|
||||
final int maturity = meta >> 2;
|
||||
|
||||
tickGermling(world, i, j, k, random, type, maturity);
|
||||
tickGermling(world, x, y, z, random, type, maturity);
|
||||
}
|
||||
|
||||
private void tickGermling(World world, int i, int j, int k, Random random, MushroomType type, int maturity) {
|
||||
|
||||
int lightvalue = world.getBlockLightValue(i, j + 1, k);
|
||||
|
||||
private void tickGermling(World world, int x, int y, int z, Random random, MushroomType type, int maturity) {
|
||||
if (random.nextInt(2) != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (maturity != 3) {
|
||||
maturity = 3;
|
||||
int matX = maturity << 2;
|
||||
int meta = (matX | type.ordinal());
|
||||
world.setBlockMetadataWithNotify(i, j, k, meta, Constants.FLAG_BLOCK_SYNCH);
|
||||
} else if (lightvalue <= 7) {
|
||||
func_149878_d(world, i, j, k, random);
|
||||
final int matX = maturity << 2;
|
||||
final int meta = (matX | type.ordinal());
|
||||
world.setBlockMetadataWithNotify(x, y, z, meta, Constants.FLAG_BLOCK_SYNCH);
|
||||
} else {
|
||||
if (world.checkChunksExist(x - 1, y, z - 1, x + 1, y, z + 1)) {
|
||||
final int lightvalue = world.getBlockLightValue(x, y + 1, z);
|
||||
if (lightvalue <= 7) {
|
||||
func_149878_d(world, x, y, z, random);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void func_149878_d(World world, int i, int j, int k, Random random) {
|
||||
MushroomType type = getTypeFromMeta(world.getBlockMetadata(i, j, k));
|
||||
public void func_149878_d(World world, int x, int y, int z, Random random) {
|
||||
MushroomType type = getTypeFromMeta(world.getBlockMetadata(x, y, z));
|
||||
|
||||
world.setBlockToAir(i, j, k);
|
||||
if (!generators[type.ordinal()].generate(world, random, i, j, k)) {
|
||||
world.setBlock(i, j, k, this, type.ordinal(), 0);
|
||||
world.setBlockToAir(x, y, z);
|
||||
if (!generators[type.ordinal()].generate(world, random, x, y, z)) {
|
||||
world.setBlock(x, y, z, this, type.ordinal(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public MushroomType getTypeFromMeta(int meta) {
|
||||
meta %= MushroomType.values().length;
|
||||
return MushroomType.values()[meta];
|
||||
return switch (meta % 2) {
|
||||
case 0 -> MushroomType.BROWN;
|
||||
case 1 -> MushroomType.RED;
|
||||
default -> throw new IllegalStateException("Unexpected value: " + meta);
|
||||
};
|
||||
}
|
||||
|
||||
/* ICONS */
|
||||
@@ -135,15 +138,10 @@ public class BlockMushroom extends BlockSapling implements IItemTyped {
|
||||
@SideOnly(Side.CLIENT)
|
||||
@Override
|
||||
public IIcon getIcon(int side, int meta) {
|
||||
MushroomType type = getTypeFromMeta(meta);
|
||||
|
||||
switch (type) {
|
||||
case BROWN:
|
||||
return Blocks.brown_mushroom.getIcon(side, meta);
|
||||
case RED:
|
||||
return Blocks.red_mushroom.getIcon(side, meta);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
final MushroomType type = getTypeFromMeta(meta);
|
||||
return switch (type) {
|
||||
case BROWN -> Blocks.brown_mushroom.getIcon(side, meta);
|
||||
case RED -> Blocks.red_mushroom.getIcon(side, meta);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package forestry.farming.multiblock;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import forestry.api.multiblock.IFarmFertilizerRegistry;
|
||||
import forestry.core.utils.ItemStackUtil;
|
||||
|
||||
public class FarmFertilizerRegistry implements IFarmFertilizerRegistry {
|
||||
|
||||
// the current list isn't big enough to require a hash map, and is faster as a list.
|
||||
private final List<ItemStack> fertilizers = new ArrayList<>(5);
|
||||
|
||||
@Override
|
||||
public Collection<ItemStack> getFertilizers() {
|
||||
return fertilizers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addFertilizer(ItemStack itemstack) {
|
||||
// maybe throw warn? but could also be nice to leave as no warn for easier/cleaner optional mod dependencies
|
||||
if (itemstack == null || itemstack.getItem() == null || itemstack.stackSize <= 0) return;
|
||||
fertilizers.add(itemstack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeFertilizer(ItemStack itemstack) {
|
||||
// maybe throw warn? but could also be nice to leave as no warn for easier/cleaner optional mod dependencies
|
||||
if (itemstack == null || itemstack.getItem() == null) return;
|
||||
fertilizers.removeIf(fert -> {
|
||||
// in stack first so it wild card can be used for a wild-card clear.
|
||||
return ItemStackUtil.isIdenticalItem(itemstack, fert);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFertilizer(ItemStack itemstack) {
|
||||
if (itemstack == null) return false;
|
||||
for (ItemStack fert : this.fertilizers) {
|
||||
// fert first to allow for wild card checks
|
||||
if (ItemStackUtil.isIdenticalItem(fert, itemstack)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,6 @@ import java.util.Deque;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
@@ -21,6 +20,7 @@ import forestry.api.farming.FarmDirection;
|
||||
import forestry.api.farming.IFarmInventory;
|
||||
import forestry.api.farming.IFarmLogic;
|
||||
import forestry.api.farming.IFarmable;
|
||||
import forestry.api.multiblock.MultiblockManager;
|
||||
import forestry.core.fluids.FluidHelper;
|
||||
import forestry.core.fluids.TankManager;
|
||||
import forestry.core.inventory.InventoryAdapterRestricted;
|
||||
@@ -28,9 +28,6 @@ import forestry.core.inventory.wrappers.InventoryMapper;
|
||||
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 {
|
||||
|
||||
@@ -134,18 +131,8 @@ public class InventoryFarm extends InventoryAdapterRestricted implements IFarmIn
|
||||
|
||||
@Override
|
||||
public boolean acceptsAsFertilizer(ItemStack itemstack) {
|
||||
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;
|
||||
// check if it's a fertilizer
|
||||
return MultiblockManager.farmFertilizerRegistry.isFertilizer(itemstack);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -11,6 +11,7 @@ package forestry.food.items;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import forestry.core.inventory.ItemLocation;
|
||||
import forestry.core.items.ItemWithGui;
|
||||
import forestry.food.gui.ContainerInfuser;
|
||||
import forestry.food.gui.GuiInfuser;
|
||||
@@ -19,12 +20,12 @@ import forestry.food.inventory.ItemInventoryInfuser;
|
||||
public class ItemInfuser extends ItemWithGui {
|
||||
|
||||
@Override
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
return new GuiInfuser(player.inventory, new ItemInventoryInfuser(player, heldItem));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
return new ContainerInfuser(player.inventory, new ItemInventoryInfuser(player, heldItem));
|
||||
}
|
||||
}
|
||||
@@ -307,8 +307,7 @@ public class EntityButterfly extends EntityCreature implements IEntityButterfly
|
||||
size = genome.getSize();
|
||||
setSize(size, 0.4f);
|
||||
species = genome.getPrimary();
|
||||
|
||||
if (!worldObj.isRemote) {
|
||||
if (worldObj != null && !worldObj.isRemote) {
|
||||
dataWatcher.updateObject(DATAWATCHER_ID_SIZE, (int) (size * 100));
|
||||
dataWatcher.updateObject(DATAWATCHER_ID_SPECIES, species.getUID());
|
||||
} else {
|
||||
|
||||
@@ -13,6 +13,7 @@ import net.minecraft.item.ItemStack;
|
||||
|
||||
import forestry.api.core.Tabs;
|
||||
import forestry.core.gui.ContainerAlyzer;
|
||||
import forestry.core.inventory.ItemLocation;
|
||||
import forestry.core.items.ItemWithGui;
|
||||
import forestry.lepidopterology.gui.GuiFlutterlyzer;
|
||||
import forestry.lepidopterology.inventory.ItemInventoryFlutterlyzer;
|
||||
@@ -24,12 +25,12 @@ public class ItemFlutterlyzer extends ItemWithGui {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
return new GuiFlutterlyzer(player, new ItemInventoryFlutterlyzer(player, heldItem));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
return new ContainerAlyzer(new ItemInventoryFlutterlyzer(player, heldItem), player);
|
||||
}
|
||||
}
|
||||
@@ -25,13 +25,8 @@ import forestry.lepidopterology.entities.EntityButterfly;
|
||||
|
||||
public class RenderButterflyItem implements IItemRenderer {
|
||||
|
||||
private final ModelButterfly model;
|
||||
private EntityButterfly entity;
|
||||
|
||||
public RenderButterflyItem() {
|
||||
model = new ModelButterfly();
|
||||
}
|
||||
|
||||
private static float getWingYaw(IButterfly butterfly) {
|
||||
float wingYaw = 1f;
|
||||
|
||||
@@ -72,18 +67,12 @@ public class RenderButterflyItem implements IItemRenderer {
|
||||
|
||||
private IButterfly initButterfly(ItemStack item) {
|
||||
IButterfly butterfly = ButterflyManager.butterflyRoot.getMember(item);
|
||||
if (butterfly == null) {
|
||||
butterfly = ButterflyManager.butterflyRoot
|
||||
.templateAsIndividual(ButterflyManager.butterflyRoot.getDefaultTemplate());
|
||||
}
|
||||
|
||||
if (entity == null) {
|
||||
entity = new EntityButterfly(Proxies.common.getRenderWorld(), butterfly, 0, 0, 0);
|
||||
entity = new EntityButterfly(null, butterfly, 0, 0, 0);
|
||||
} else {
|
||||
entity.setIndividual(butterfly);
|
||||
}
|
||||
|
||||
return butterfly;
|
||||
return entity.getButterfly();
|
||||
}
|
||||
|
||||
private void renderButterflyItem(IButterfly butterfly, float translateX, float translateY, float translateZ) {
|
||||
@@ -111,7 +100,12 @@ public class RenderButterflyItem implements IItemRenderer {
|
||||
entity.rotationPitch = 0;
|
||||
entity.rotationYawHead = entity.rotationYaw;
|
||||
|
||||
RenderManager.instance.renderEntityWithPosYaw(entity, 0.0D, 0.0D, 0.0D, 0.0F, 1.0f);
|
||||
try {
|
||||
entity.setWorld(Proxies.common.getRenderWorld());
|
||||
RenderManager.instance.renderEntityWithPosYaw(entity, 0.0D, 0.0D, 0.0D, 0.0F, 1.0f);
|
||||
} finally {
|
||||
entity.setWorld(null);
|
||||
}
|
||||
|
||||
} else {
|
||||
GL11.glTranslatef(translateX, translateY, translateZ);
|
||||
@@ -119,14 +113,19 @@ public class RenderButterflyItem implements IItemRenderer {
|
||||
GL11.glScalef(-2.0f, 2.0f, 2.0f);
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
GL11.glRotatef(-135.0F, 0.0F, 1.0F, 0.0F);
|
||||
GL11.glRotatef(-((float) Math.atan((double) (pitch / 40.0F))) * 20.0F, 1.0F, 0.0F, 0.0F);
|
||||
GL11.glRotatef(-((float) Math.atan(pitch / 40.0F)) * 20.0F, 1.0F, 0.0F, 0.0F);
|
||||
|
||||
entity.renderYawOffset = (float) Math.atan((double) (yaw / 40.0F)) * 20.0F;
|
||||
entity.rotationYaw = (float) Math.atan((double) (yaw / 40.0F)) * 40.0F;
|
||||
entity.rotationPitch = -((float) Math.atan((double) (pitch / 40.0F))) * 20.0F;
|
||||
entity.renderYawOffset = (float) Math.atan(yaw / 40.0F) * 20.0F;
|
||||
entity.rotationYaw = (float) Math.atan(yaw / 40.0F) * 40.0F;
|
||||
entity.rotationPitch = -((float) Math.atan(pitch / 40.0F)) * 20.0F;
|
||||
entity.rotationYawHead = entity.rotationYaw;
|
||||
|
||||
RenderManager.instance.renderEntityWithPosYaw(entity, 0.0D, 0.0D, 0.0D, 0.0F, getWingYaw(butterfly));
|
||||
try {
|
||||
entity.setWorld(Proxies.common.getRenderWorld());
|
||||
RenderManager.instance.renderEntityWithPosYaw(entity, 0.0D, 0.0D, 0.0D, 0.0F, getWingYaw(butterfly));
|
||||
} finally {
|
||||
entity.setWorld(null);
|
||||
}
|
||||
}
|
||||
|
||||
GL11.glPopMatrix();
|
||||
@@ -160,8 +159,12 @@ public class RenderButterflyItem implements IItemRenderer {
|
||||
entity.rotationPitch = 0;
|
||||
entity.rotationYawHead = entity.rotationYaw;
|
||||
|
||||
RenderManager.instance.renderEntityWithPosYaw(entity, 0.0D, 0.0D, 0.0D, 0.0F, getWingYaw(butterfly));
|
||||
|
||||
try {
|
||||
entity.setWorld(Proxies.common.getRenderWorld());
|
||||
RenderManager.instance.renderEntityWithPosYaw(entity, 0.0D, 0.0D, 0.0D, 0.0F, getWingYaw(butterfly));
|
||||
} finally {
|
||||
entity.setWorld(null);
|
||||
}
|
||||
GL11.glPopMatrix();
|
||||
RenderHelper.disableStandardItemLighting();
|
||||
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
|
||||
@@ -173,39 +176,27 @@ public class RenderButterflyItem implements IItemRenderer {
|
||||
|
||||
@Override
|
||||
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
|
||||
switch (type) {
|
||||
case ENTITY:
|
||||
case EQUIPPED:
|
||||
case EQUIPPED_FIRST_PERSON:
|
||||
case INVENTORY:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
return switch (type) {
|
||||
case ENTITY, EQUIPPED, EQUIPPED_FIRST_PERSON, INVENTORY -> true;
|
||||
default -> false;
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
|
||||
switch (helper) {
|
||||
case ENTITY_BOBBING:
|
||||
case ENTITY_ROTATION:
|
||||
return false;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
return switch (helper) {
|
||||
case ENTITY_BOBBING, ENTITY_ROTATION -> false;
|
||||
default -> true;
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
|
||||
|
||||
switch (type) {
|
||||
case ENTITY:
|
||||
renderButterflyItem(initButterfly(item), 0f, -0.5f, 0f);
|
||||
break;
|
||||
case EQUIPPED:
|
||||
renderButterflyItem(initButterfly(item), 0.5f, -0.9f, 1.0f);
|
||||
break;
|
||||
case EQUIPPED_FIRST_PERSON:
|
||||
case EQUIPPED, EQUIPPED_FIRST_PERSON:
|
||||
renderButterflyItem(initButterfly(item), 0.5f, -0.9f, 1.0f);
|
||||
break;
|
||||
case INVENTORY:
|
||||
|
||||
@@ -11,6 +11,7 @@ package forestry.mail.items;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import forestry.core.inventory.ItemLocation;
|
||||
import forestry.core.items.ItemWithGui;
|
||||
import forestry.mail.gui.ContainerCatalogue;
|
||||
import forestry.mail.gui.GuiCatalogue;
|
||||
@@ -18,12 +19,12 @@ import forestry.mail.gui.GuiCatalogue;
|
||||
public class ItemCatalogue extends ItemWithGui {
|
||||
|
||||
@Override
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
return new GuiCatalogue(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
return new ContainerCatalogue(player);
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,7 @@ import net.minecraft.world.World;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import forestry.api.mail.ILetter;
|
||||
import forestry.core.inventory.ItemLocation;
|
||||
import forestry.core.items.ItemWithGui;
|
||||
import forestry.core.utils.StringUtil;
|
||||
import forestry.mail.Letter;
|
||||
@@ -87,12 +88,12 @@ public class ItemLetter extends ItemWithGui {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
return new GuiLetter(player, new ItemInventoryLetter(player, heldItem));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
return new ContainerLetter(player, new ItemInventoryLetter(player, heldItem));
|
||||
}
|
||||
}
|
||||
@@ -55,6 +55,7 @@ import forestry.core.recipes.RecipeUtil;
|
||||
import forestry.core.tiles.MachineDefinition;
|
||||
import forestry.core.utils.ClimateUtil;
|
||||
import forestry.core.utils.ForestryModEnvWarningCallable;
|
||||
import forestry.farming.multiblock.FarmFertilizerRegistry;
|
||||
|
||||
@Plugin(
|
||||
pluginID = "Core",
|
||||
@@ -85,6 +86,7 @@ public class PluginCore extends ForestryPlugin {
|
||||
AlleleHelper.instance = new AlleleHelper();
|
||||
|
||||
MultiblockManager.logicFactory = new MultiblockLogicFactory();
|
||||
MultiblockManager.farmFertilizerRegistry = new FarmFertilizerRegistry();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -20,6 +20,7 @@ import net.minecraft.init.Items;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
|
||||
import cpw.mods.fml.common.SidedProxy;
|
||||
import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage;
|
||||
@@ -30,6 +31,7 @@ import forestry.api.circuits.CircuitSocketType;
|
||||
import forestry.api.circuits.ICircuitLayout;
|
||||
import forestry.api.farming.Farmables;
|
||||
import forestry.api.farming.IFarmable;
|
||||
import forestry.api.multiblock.MultiblockManager;
|
||||
import forestry.core.circuits.Circuit;
|
||||
import forestry.core.circuits.CircuitLayout;
|
||||
import forestry.core.config.Constants;
|
||||
@@ -402,5 +404,8 @@ public class PluginFarming extends ForestryPlugin {
|
||||
layoutManual,
|
||||
PluginCore.items.tubes.get(EnumElectronTube.LAPIS, 1),
|
||||
Circuit.farmCocoaManual);
|
||||
|
||||
MultiblockManager.farmFertilizerRegistry
|
||||
.addFertilizer(new ItemStack(PluginCore.items.fertilizerCompound, 1, OreDictionary.WILDCARD_VALUE));
|
||||
}
|
||||
}
|
||||
@@ -32,6 +32,7 @@ import forestry.api.core.ForestryAPI;
|
||||
import forestry.api.farming.Farmables;
|
||||
import forestry.api.fuels.EngineBronzeFuel;
|
||||
import forestry.api.fuels.FuelManager;
|
||||
import forestry.api.multiblock.MultiblockManager;
|
||||
import forestry.api.recipes.RecipeManagers;
|
||||
import forestry.api.storage.BackpackManager;
|
||||
import forestry.api.storage.IBackpackDefinition;
|
||||
@@ -94,6 +95,7 @@ public class PluginIC2 extends ForestryPlugin {
|
||||
private static ItemStack silver;
|
||||
private static ItemStack brass;
|
||||
private static ItemStack uuMatter;
|
||||
private static ItemStack fertilizer;
|
||||
|
||||
public static ItemStack resin;
|
||||
public static ItemStack rubberwood;
|
||||
@@ -162,11 +164,13 @@ public class PluginIC2 extends ForestryPlugin {
|
||||
brass = IC2Items.getItem("bronzeIngot");
|
||||
|
||||
uran238 = IC2Items.getItem("Uran238");
|
||||
fertilizer = IC2Items.getItem("fertilizer");
|
||||
|
||||
Circuit.farmRubberManual = new CircuitFarmLogic("manualRubber", FarmLogicRubber.class);
|
||||
|
||||
ICircuitLayout layoutEngineTin = new CircuitLayout("engine.tin", CircuitSocketType.ELECTRIC_ENGINE);
|
||||
ChipsetManager.circuitRegistry.registerLayout(layoutEngineTin);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -378,6 +382,10 @@ public class PluginIC2 extends ForestryPlugin {
|
||||
'V',
|
||||
Blocks.piston);
|
||||
}
|
||||
|
||||
if (PluginManager.Module.FARMING.isEnabled() && fertilizer != null) {
|
||||
MultiblockManager.farmFertilizerRegistry.addFertilizer(fertilizer);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -13,6 +13,7 @@ import net.minecraft.item.ItemStack;
|
||||
|
||||
import forestry.core.gui.ContainerItemInventory;
|
||||
import forestry.core.gui.slots.SlotFilteredInventory;
|
||||
import forestry.core.inventory.ItemLocation;
|
||||
import forestry.storage.inventory.ItemInventoryBackpack;
|
||||
|
||||
public class ContainerBackpack extends ContainerItemInventory<ItemInventoryBackpack> {
|
||||
@@ -39,9 +40,9 @@ public class ContainerBackpack extends ContainerItemInventory<ItemInventoryBackp
|
||||
}
|
||||
}
|
||||
|
||||
public ContainerBackpack(EntityPlayer player, Size size, ItemStack parent) {
|
||||
public ContainerBackpack(EntityPlayer player, Size size, ItemStack parent, ItemLocation loc) {
|
||||
super(
|
||||
new ItemInventoryBackpack(player, size.getSize(), parent),
|
||||
new ItemInventoryBackpack(player, size.getSize(), parent, loc),
|
||||
player.inventory,
|
||||
8,
|
||||
11 + size.startY + size.rows * 18);
|
||||
|
||||
@@ -6,6 +6,7 @@ import net.minecraft.item.ItemStack;
|
||||
|
||||
import forestry.api.storage.IBackpackDefinition;
|
||||
import forestry.core.inventory.ItemInventory;
|
||||
import forestry.core.inventory.ItemLocation;
|
||||
import forestry.storage.items.ItemBackpack;
|
||||
|
||||
public class ItemInventoryBackpack extends ItemInventory {
|
||||
@@ -13,7 +14,11 @@ public class ItemInventoryBackpack extends ItemInventory {
|
||||
private final IBackpackDefinition backpackDefinition;
|
||||
|
||||
public ItemInventoryBackpack(EntityPlayer player, int size, ItemStack parent) {
|
||||
super(player, size, parent);
|
||||
this(player, size, parent, ItemLocation.UNKNOWN);
|
||||
}
|
||||
|
||||
public ItemInventoryBackpack(EntityPlayer player, int size, ItemStack parent, ItemLocation location) {
|
||||
super(player, size, parent, location);
|
||||
|
||||
if (parent == null) {
|
||||
throw new IllegalArgumentException("Parent cannot be null.");
|
||||
|
||||
@@ -13,6 +13,7 @@ import net.minecraft.item.ItemStack;
|
||||
|
||||
import forestry.core.gui.GuiHandler;
|
||||
import forestry.core.gui.IPagedInventory;
|
||||
import forestry.core.inventory.ItemLocation;
|
||||
import forestry.storage.items.ItemBackpackNaturalist;
|
||||
|
||||
public class ItemInventoryBackpackPaged extends ItemInventoryBackpack implements IPagedInventory {
|
||||
@@ -20,8 +21,8 @@ public class ItemInventoryBackpackPaged extends ItemInventoryBackpack implements
|
||||
private final ItemBackpackNaturalist backpackNaturalist;
|
||||
|
||||
public ItemInventoryBackpackPaged(EntityPlayer player, int size, ItemStack itemstack,
|
||||
ItemBackpackNaturalist backpackNaturalist) {
|
||||
super(player, size, itemstack);
|
||||
ItemBackpackNaturalist backpackNaturalist, ItemLocation loc) {
|
||||
super(player, size, itemstack, loc);
|
||||
this.backpackNaturalist = backpackNaturalist;
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ import java.util.Locale;
|
||||
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
@@ -20,6 +21,7 @@ import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
import net.xonich.mc.nohotbarneeded.api.ActivatableFromInventoryServerSide;
|
||||
|
||||
import cpw.mods.fml.common.eventhandler.Event;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
@@ -31,6 +33,7 @@ import forestry.core.config.Config;
|
||||
import forestry.core.config.Constants;
|
||||
import forestry.core.gui.GuiHandler;
|
||||
import forestry.core.inventory.ItemInventory;
|
||||
import forestry.core.inventory.ItemLocation;
|
||||
import forestry.core.inventory.wrappers.IInvSlot;
|
||||
import forestry.core.inventory.wrappers.InventoryIterator;
|
||||
import forestry.core.items.ItemWithGui;
|
||||
@@ -44,7 +47,7 @@ import forestry.storage.gui.GuiBackpack;
|
||||
import forestry.storage.gui.GuiBackpackT2;
|
||||
import forestry.storage.inventory.ItemInventoryBackpack;
|
||||
|
||||
public class ItemBackpack extends ItemWithGui {
|
||||
public class ItemBackpack extends ItemWithGui implements ActivatableFromInventoryServerSide {
|
||||
|
||||
private final IBackpackDefinition definition;
|
||||
private final EnumBackpackType type;
|
||||
@@ -318,32 +321,32 @@ public class ItemBackpack extends ItemWithGui {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
if (data > EnumBackpackType.values().length) {
|
||||
return null;
|
||||
}
|
||||
EnumBackpackType type = EnumBackpackType.values()[data];
|
||||
switch (type) {
|
||||
case T1:
|
||||
return new GuiBackpack(new ContainerBackpack(player, ContainerBackpack.Size.DEFAULT, heldItem));
|
||||
return new GuiBackpack(new ContainerBackpack(player, ContainerBackpack.Size.DEFAULT, heldItem, loc));
|
||||
case T2:
|
||||
return new GuiBackpackT2(new ContainerBackpack(player, ContainerBackpack.Size.T2, heldItem));
|
||||
return new GuiBackpackT2(new ContainerBackpack(player, ContainerBackpack.Size.T2, heldItem, loc));
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data) {
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int data, ItemLocation loc) {
|
||||
if (data > EnumBackpackType.values().length) {
|
||||
return null;
|
||||
}
|
||||
EnumBackpackType type = EnumBackpackType.values()[data];
|
||||
switch (type) {
|
||||
case T1:
|
||||
return new ContainerBackpack(player, ContainerBackpack.Size.DEFAULT, heldItem);
|
||||
return new ContainerBackpack(player, ContainerBackpack.Size.DEFAULT, heldItem, loc);
|
||||
case T2:
|
||||
return new ContainerBackpack(player, ContainerBackpack.Size.T2, heldItem);
|
||||
return new ContainerBackpack(player, ContainerBackpack.Size.T2, heldItem, loc);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
@@ -361,4 +364,9 @@ public class ItemBackpack extends ItemWithGui {
|
||||
public boolean showDurabilityBar(final ItemStack stack) {
|
||||
return Config.showBackpackDurability && ItemInventory.getOccupiedSlotCount(stack) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void activateFromInventory(EntityPlayerMP player, int slotIdx) {
|
||||
GuiHandler.openGui(player, this, (short) type.ordinal(), slotIdx);
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,7 @@ import forestry.api.storage.IBackpackDefinition;
|
||||
import forestry.core.config.Constants;
|
||||
import forestry.core.gui.GuiHandler;
|
||||
import forestry.core.gui.GuiNaturalistInventory;
|
||||
import forestry.core.inventory.ItemLocation;
|
||||
import forestry.storage.gui.ContainerNaturalistBackpack;
|
||||
import forestry.storage.inventory.ItemInventoryBackpackPaged;
|
||||
|
||||
@@ -35,23 +36,25 @@ public class ItemBackpackNaturalist extends ItemBackpack {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int page) {
|
||||
public Object getGui(EntityPlayer player, ItemStack heldItem, int page, ItemLocation loc) {
|
||||
ItemInventoryBackpackPaged inventory = new ItemInventoryBackpackPaged(
|
||||
player,
|
||||
Constants.SLOTS_BACKPACK_APIARIST,
|
||||
heldItem,
|
||||
this);
|
||||
this,
|
||||
loc);
|
||||
ContainerNaturalistBackpack container = new ContainerNaturalistBackpack(player, inventory, page);
|
||||
return new GuiNaturalistInventory(speciesRoot, player, container, inventory, page, 5);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int page) {
|
||||
public Object getContainer(EntityPlayer player, ItemStack heldItem, int page, ItemLocation loc) {
|
||||
ItemInventoryBackpackPaged inventory = new ItemInventoryBackpackPaged(
|
||||
player,
|
||||
Constants.SLOTS_BACKPACK_APIARIST,
|
||||
heldItem,
|
||||
this);
|
||||
this,
|
||||
loc);
|
||||
return new ContainerNaturalistBackpack(player, inventory, page);
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ gui.screen=ffffff
|
||||
gui.table.header=ababab
|
||||
gui.table.row=ababab
|
||||
gui.book=000000
|
||||
gui.worktable.missing=ff0000
|
||||
|
||||
gui.beealyzer.binomial=14d50b
|
||||
gui.beealyzer.recessive=3687ec
|
||||
|
||||
Reference in new issue
Block a user