Compare commits

...
24 Commits
Author SHA1 Message Date
DrParadox7 c9545edcf7 Merge branch 'master' into PR-InvalidBlooms 2025-05-17 16:07:55 +02:00
DrParadox7 c6fa47dc57 Remove commented out code 2025-05-17 16:00:03 +02:00
Martin Robertz 79a6af701b update 2025-05-17 12:17:12 +02:00
dibbydoda 4c0b503b8b Add thunder substrate for rainmaker (#95) 2025-05-17 11:39:34 +02:00
DrParadox7 4f77d6a56c Disable flowers that cannot be planted
Disables BoP's hardcoded Enderlotus and the Miner's Delight floral generation, which cannot be planted.
Any attempt to spawn these flowers in this manner causes them to instantly break, and drop themselves as itemstacks.
2025-05-15 19:32:57 +02:00
thedarkcolour 2a6f3771a3 Fix multiblock components to drop inventory contents when broken (#93) 2025-04-20 05:39:48 +00:00
Maya 04a7c96b4d update 2025-04-19 09:19:48 -05:00
dibbydoda 6d0a001b9e Habitat locator mouse hover shows Hellish temperature in the Nether (#92) 2025-04-19 09:19:35 -05:00
Maya e2c2ff8d30 update 2025-03-10 16:18:15 -05:00
Demiu 586f5bf093 Fix alveary climate logic (#90) 2025-03-10 16:16:16 -05:00
Maya 755301d313 update 2025-02-22 22:50:41 -06:00
Discreater 33f3389b84 Add missing localization (#89) 2025-02-22 22:50:30 -06:00
Maya c9167b8316 update 2025-02-14 00:22:07 -06:00
Yannick Marcotte-Gourde 1ed646b147 Don't crash if someone tries to color number values stored in lang files (#88) 2025-02-14 00:21:59 -06:00
Martin Robertz 7a7930d7eb update 2024-12-31 14:25:14 +01:00
glowredman 3dccc7e06d Add Localizations (#87) 2024-12-30 18:18:18 -06:00
Martin Robertz 18e26956ef update 2024-12-18 17:51:39 +01:00
combusterfandMarcel Sondaar 713b0f9d9e fix: Use GT ash instead of letting unification screw everything up. (#86)
Co-authored-by: Marcel Sondaar <[email protected]>
2024-12-18 07:23:38 +01:00
Martin Robertz c6f2e3c7b3 update 2024-11-22 21:37:18 +01:00
chochem c6d8518d82 fix apatite ore crash (#85) 2024-11-21 17:11:44 +00:00
Dream Master 98711e5d34 update 2024-11-18 12:00:06 +01:00
Glease 5caab59507 close item inventory if parent item is gone (#84) 2024-11-18 11:38:20 +01:00
Martin Robertz 41d47d99ca update 2024-11-16 15:40:01 +01:00
Alexander Anishin 3c6d5d04d0 Fix NPE in logic of radioactive effect (#83) 2024-11-16 12:04:33 +01:00
34 changed files with 374 additions and 100 deletions

No files matched your search

+1
View File
@@ -30,3 +30,4 @@ src/main/resources/mixins.*.json
*.bat
*.DS_Store
!gradlew.bat
layout.json
+4 -4
View File
@@ -2,10 +2,10 @@
dependencies {
api('curse.maven:cofh-lib-220333:2388748')
compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta6:api')
devOnlyNonPublishable('com.github.GTNewHorizons:NotEnoughItems:2.6.35-GTNH:dev')
compileOnly('com.github.GTNewHorizons:inventory-tweaks:1.7.0:api')
compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.39:api')
compileOnlyApi('com.github.GTNewHorizons:Angelica:1.0.0-beta42:api')
devOnlyNonPublishable('com.github.GTNewHorizons:NotEnoughItems:2.7.44-GTNH:dev')
compileOnly('com.github.GTNewHorizons:inventory-tweaks:1.7.1:api')
compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.42:api')
compileOnly('net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev')
compileOnly('curse.maven:craftguide-75557:2459320')
}
+1 -1
View File
@@ -14,7 +14,7 @@ modId = Forestry
modGroup = forestry
# Whether to use modGroup as the maven publishing group.
# Due to a history of using JitPack, the default is com.github.GTNewHorizons for all mods.
# When false, com.github.GTNewHorizons is used.
useModGroupForPublishing = false
# Updates your build.gradle and settings.gradle automatically whenever an update is available.
Binary file not shown.
+1 -1
View File
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Vendored
+2 -3
View File
@@ -86,8 +86,7 @@ done
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -206,7 +205,7 @@ fi
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
+1 -1
View File
@@ -17,7 +17,7 @@ pluginManagement {
}
plugins {
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.27'
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.38'
}
@@ -12,11 +12,15 @@ public interface IClimateControlled {
/**
* Change the temperature, but not lower than boundaryDown or higher than boundaryUp.
*
* When used in an alveary the change applies a 20x stronger effect
*/
void addTemperatureChange(float change, float boundaryDown, float boundaryUp);
/**
* Change the humidity, but not lower than boundaryDown or higher than boundaryUp.
*
* When used in an alveary the change applies a 20x stronger effect
*/
void addHumidityChange(float change, float boundaryDown, float boundaryUp);
}
@@ -9,33 +9,37 @@ import net.minecraft.item.ItemStack;
public class RainSubstrate {
public enum WeatherState {
CLEAR,
RAIN,
STORM
}
/**
* Rain substrate capable of activating the rainmaker.
*/
public ItemStack item;
/**
* Duration of the rain shower triggered by this substrate in Minecraft ticks.
* Duration of the weather event triggered by this substrate in Minecraft ticks.
*/
public int duration;
/**
* Speed of activation sequence triggered.
*/
public float speed;
/**
* The type of weather triggered.
*/
public WeatherState weather;
public boolean reverse;
public RainSubstrate(ItemStack item, int duration, float speed) {
this(item, duration, speed, false);
public RainSubstrate(ItemStack item, float speed, WeatherState weather) {
this(item, 0, speed, weather);
}
public RainSubstrate(ItemStack item, float speed) {
this(item, 0, speed, true);
}
public RainSubstrate(ItemStack item, int duration, float speed, boolean reverse) {
public RainSubstrate(ItemStack item, int duration, float speed, WeatherState weather) {
this.item = item;
this.duration = duration;
this.speed = speed;
this.reverse = reverse;
this.weather = weather;
}
}
@@ -49,6 +49,14 @@ public interface IAlvearyComponent<T extends IMultiblockLogicAlveary> extends IM
* @param alveary the climate controlled alveary
*/
void changeClimate(int tickCount, IClimateControlled alveary);
/**
* Get the priority of this climatiser. Called when alveary is constructed.
* {@link #changeClimate(int, IClimateControlled)} are run in descending priority.
*/
default int getPriority() {
return 0;
}
}
/**
@@ -9,6 +9,8 @@ import net.minecraft.util.ChunkCoordinates;
import com.mojang.authlib.GameProfile;
import forestry.core.inventory.IInventoryAdapter;
/**
* Basic interface for a multiblock machine component. Implemented by TileEntities.
*/
@@ -45,4 +47,15 @@ public interface IMultiblockComponent {
* Called when the machine is broken for game reasons, e.g. a player removed a block or an explosion occurred.
*/
void onMachineBroken();
/**
* A component with a separate inventory, like the Alveary Swarmer or Alveary Sieve.
*/
interface HasInventory {
/**
* Called when this part is destroyed to drop its contents.
*/
IInventoryAdapter getInternalInventory();
}
}
@@ -331,7 +331,7 @@ public enum BeeDefinition implements IBeeDefinition {
@Override
protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) {
beeSpecies.addProduct(PluginApiculture.items.beeComb.get(EnumHoneyComb.SIMMERING, 1), 0.55f)
.addProduct(PluginCore.items.ash.getItemStack(), 0.15f).setTemperature(EnumTemperature.HELLISH)
.addProduct(PluginCore.items.getAsh(), 0.15f).setTemperature(EnumTemperature.HELLISH)
.setHumidity(EnumHumidity.ARID);
}
@@ -13,6 +13,7 @@ import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
@@ -107,11 +108,8 @@ public class AlleleEffectRadioactive extends AlleleEffectThrottled {
}
// Some mods might use this logic? Idk, just a safety check. Might stop griefing.
if (!world.canMineBlock(
housing.getWorld().func_152378_a(housing.getOwner().getId()),
posHousing.x,
posHousing.y,
posHousing.z)) {
EntityPlayer player = world.func_152378_a(housing.getOwner().getId());
if (player == null || !world.canMineBlock(player, posHousing.x, posHousing.y, posHousing.z)) {
continue;
}
@@ -71,9 +71,8 @@ public class ItemHabitatLocator extends ItemWithGui {
public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean flag) {
BiomeGenBase currentBiome = player.worldObj.getBiomeGenForCoords((int) player.posX, (int) player.posZ);
float temperatureValue = currentBiome
.getFloatTemperature((int) player.posX, (int) player.posY, (int) player.posZ);
EnumTemperature temperature = EnumTemperature.getFromValue(temperatureValue);
EnumTemperature temperature = EnumTemperature
.getFromBiome(currentBiome, (int) player.posX, (int) player.posY, (int) player.posZ);
EnumHumidity humidity = EnumHumidity.getFromValue(currentBiome.rainfall);
list.add(StringUtil.localize("gui.currentBiome") + ": " + currentBiome.biomeName);
@@ -9,8 +9,10 @@
package forestry.apiculture.multiblock;
import java.io.IOException;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
import net.minecraft.block.Block;
import net.minecraft.nbt.NBTTagCompound;
@@ -59,7 +61,9 @@ public class AlvearyController extends RectangularMultiblockControllerBase
// PARTS
private final Set<IBeeModifier> beeModifiers = new HashSet<>();
private final Set<IBeeListener> beeListeners = new HashSet<>();
private final Set<IAlvearyComponent.Climatiser> climatisers = new HashSet<>();
private final Set<IAlvearyComponent.Climatiser> climatisers = new TreeSet<>(
Comparator.comparingInt(IAlvearyComponent.Climatiser::getPriority).thenComparingInt(Object::hashCode)
.reversed());
private final Set<IAlvearyComponent.Active> activeComponents = new HashSet<>();
// CLIENT
@@ -233,26 +237,24 @@ public class AlvearyController extends RectangularMultiblockControllerBase
beekeepingLogic.doWork();
}
tempChange = 0;
humidChange = 0;
for (IAlvearyComponent.Climatiser climatiser : climatisers) {
climatiser.changeClimate(tickCount, this);
}
tempChange = equalizeChange(tempChange);
humidChange = equalizeChange(humidChange);
return canWork;
}
private static float equalizeChange(float change) {
if (change == 0) {
return 0;
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;
if (extraChange > 0) {
return Math.max(currentChange, boundedNewChange);
} else {
return Math.min(currentChange, boundedNewChange);
}
change *= 0.95f;
if (change <= 0.001f && change >= -0.001f) {
change = 0;
}
return change;
}
@Override
@@ -410,19 +412,13 @@ public class AlvearyController extends RectangularMultiblockControllerBase
ChunkCoordinates coordinates = getCoordinates();
float temperature = getBiome().getFloatTemperature(coordinates.posX, coordinates.posY, coordinates.posZ);
tempChange += change;
tempChange = Math.max(boundaryDown - temperature, tempChange);
tempChange = Math.min(boundaryUp - temperature, tempChange);
tempChange = applyChange(temperature, tempChange, change, boundaryDown, boundaryUp);
}
@Override
public void addHumidityChange(float change, float boundaryDown, float boundaryUp) {
float humidity = getBiome().rainfall;
humidChange += change;
humidChange = Math.max(boundaryDown - humidity, humidChange);
humidChange = Math.min(boundaryUp - humidity, humidChange);
humidChange = applyChange(humidity, humidChange, change, boundaryDown, boundaryUp);
}
/* GUI */
@@ -19,6 +19,7 @@ import net.minecraftforge.fluids.IFluidHandler;
import forestry.api.core.IClimateControlled;
import forestry.api.multiblock.IAlvearyComponent;
import forestry.api.multiblock.IMultiblockComponent;
import forestry.apiculture.blocks.BlockAlveary;
import forestry.apiculture.gui.ContainerAlvearyHygroregulator;
import forestry.apiculture.gui.GuiAlvearyHygroregulator;
@@ -31,8 +32,8 @@ import forestry.core.fluids.tanks.FilteredTank;
import forestry.core.inventory.IInventoryAdapter;
import forestry.core.tiles.ILiquidTankTile;
public class TileAlvearyHygroregulator extends TileAlveary
implements IInventory, ILiquidTankTile, IFluidHandler, IAlvearyComponent.Climatiser {
public class TileAlvearyHygroregulator extends TileAlveary implements IInventory, ILiquidTankTile, IFluidHandler,
IAlvearyComponent.Climatiser, IMultiblockComponent.HasInventory {
private final HygroregulatorRecipe[] recipes;
@@ -56,9 +57,9 @@ public class TileAlvearyHygroregulator extends TileAlveary
this.tankManager = new TankManager(this, liquidTank);
this.recipes = new HygroregulatorRecipe[] {
new HygroregulatorRecipe(new FluidStack(water, 1), 1, +0.01f, -0.0005f),
new HygroregulatorRecipe(new FluidStack(lava, 1), 10, -0.01f, +0.0005f),
new HygroregulatorRecipe(new FluidStack(liquidIce, 1), 10, +0.02f, -0.001f) };
new HygroregulatorRecipe(new FluidStack(water, 1), 1, +0.01f, -0.005f),
new HygroregulatorRecipe(new FluidStack(lava, 1), 10, -0.01f, +0.005f),
new HygroregulatorRecipe(new FluidStack(liquidIce, 1), 10, +0.02f, -0.01f) };
}
@Override
@@ -111,6 +112,11 @@ public class TileAlvearyHygroregulator extends TileAlveary
}
}
@Override
public int getPriority() {
return 100;
}
/* SAVING & LOADING */
@Override
public void readFromNBT(NBTTagCompound nbttagcompound) {
@@ -18,6 +18,7 @@ import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.ISpeciesRoot;
import forestry.api.multiblock.IAlvearyComponent;
import forestry.api.multiblock.IMultiblockComponent;
import forestry.apiculture.blocks.BlockAlveary;
import forestry.apiculture.gui.ContainerAlvearySieve;
import forestry.apiculture.gui.GuiAlvearySieve;
@@ -25,7 +26,8 @@ import forestry.apiculture.inventory.InventoryAlvearySieve;
import forestry.core.inventory.IInventoryAdapter;
import forestry.core.inventory.watchers.ISlotPickupWatcher;
public class TileAlvearySieve extends TileAlveary implements IAlvearyComponent.BeeListener {
public class TileAlvearySieve extends TileAlveary
implements IAlvearyComponent.BeeListener, IMultiblockComponent.HasInventory {
private final IBeeListener beeListener;
private final InventoryAlvearySieve inventory;
@@ -22,6 +22,7 @@ import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.EnumBeeType;
import forestry.api.apiculture.IBee;
import forestry.api.multiblock.IAlvearyComponent;
import forestry.api.multiblock.IMultiblockComponent;
import forestry.apiculture.blocks.BlockAlveary;
import forestry.apiculture.gui.ContainerAlvearySwarmer;
import forestry.apiculture.gui.GuiAlvearySwarmer;
@@ -37,7 +38,8 @@ import forestry.core.proxy.Proxies;
import forestry.core.tiles.IActivatable;
import forestry.core.utils.ItemStackUtil;
public class TileAlvearySwarmer extends TileAlveary implements ISidedInventory, IActivatable, IAlvearyComponent.Active {
public class TileAlvearySwarmer extends TileAlveary
implements ISidedInventory, IActivatable, IAlvearyComponent.Active, IMultiblockComponent.HasInventory {
private final InventorySwarmer inventory;
private final Deque<ItemStack> pendingSpawns = new ArrayDeque<>();
@@ -8,6 +8,8 @@
******************************************************************************/
package forestry.core.blocks;
import static forestry.Forestry.isDreamcraftLoaded;
import java.util.ArrayList;
import java.util.List;
@@ -52,7 +54,7 @@ public class BlockResourceOre extends Block {
public void dropBlockAsItemWithChance(World world, int x, int y, int z, int metadata, float par6, int par7) {
super.dropBlockAsItemWithChance(world, x, y, z, metadata, par6, par7);
if (metadata == 0) {
if (metadata == 0 && !isDreamcraftLoaded) {
this.dropXpOnBlockBreak(world, x, y, z, MathHelper.getRandomIntegerInRange(world.rand, 1, 4));
}
}
@@ -61,7 +63,7 @@ public class BlockResourceOre extends Block {
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) {
ArrayList<ItemStack> drops = new ArrayList<>();
if (metadata == ResourceType.APATITE.ordinal()) {
if (metadata == ResourceType.APATITE.ordinal() && !isDreamcraftLoaded) {
int fortuneModifier = world.rand.nextInt(fortune + 2) - 1;
if (fortuneModifier < 0) {
fortuneModifier = 0;
@@ -116,6 +116,12 @@ public abstract class BlockStructure extends BlockForestry {
InventoryUtil.dropSockets((ISocketable) tile, world, x, y, z);
}
}
if (tile instanceof IMultiblockComponent.HasInventory) {
IMultiblockComponent.HasInventory hasInventory = (IMultiblockComponent.HasInventory) tile;
InventoryUtil.dropInventory(hasInventory.getInternalInventory(), world, x, y, z);
}
}
super.breakBlock(world, x, y, z, block, meta);
}
@@ -109,6 +109,7 @@ public class Constants implements IForestryConstants {
public static final int MACHINE_MAX_ENERGY = 5000;
public static final int RAINMAKER_RAIN_DURATION_IODINE = 10000;
public static final int RAINMAKER_RAIN_DURATION_PHOSPHORICIODINE = 10000;
public static final int STILL_DESTILLATION_DURATION = 100;
public static final int STILL_DESTILLATION_INPUT = 10;
@@ -53,4 +53,13 @@ public abstract class ContainerItemInventory<I extends ItemInventory> extends Co
inventory.onSlotClick(player);
return result;
}
@Override
public void detectAndSendChanges() {
if (!inventory.isParentItemEquipped()) {
inventory.getPlayer().closeScreen();
return;
}
super.detectAndSendChanges();
}
}
@@ -78,6 +78,14 @@ public abstract class ItemInventory implements IInventory, IFilterSlotDelegate {
}
}
public boolean isParentItemEquipped() {
return isSameItemInventory(player.getCurrentEquippedItem(), parent);
}
public EntityPlayer getPlayer() {
return player;
}
public boolean isParentItemInventory(ItemStack itemStack) {
ItemStack parent = getParent();
return isSameItemInventory(parent, itemStack);
@@ -10,6 +10,8 @@ package forestry.core.items;
import static forestry.Forestry.isDreamcraftLoaded;
import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
@@ -65,7 +67,7 @@ public class ItemRegistryCore extends ItemRegistry {
/* Peat */
public final ItemForestry peat;
public final ItemForestry ash;
private final ItemForestry ash;
public final ItemForestry bituminousPeat;
/* Moistener */
@@ -76,6 +78,7 @@ public class ItemRegistryCore extends ItemRegistry {
/* Rainmaker */
public final ItemForestry iodineCharge;
public final ItemForestry phosphor;
public final ItemForestry phosphorCharge;
/* Misc */
public final ItemCraftingMaterial craftingMaterial;
@@ -179,8 +182,8 @@ public class ItemRegistryCore extends ItemRegistry {
// / RAINMAKER SUBSTRATES
iodineCharge = registerItem(new ItemForestry(), "iodineCapsule");
phosphor = registerItem(new ItemForestry(), "phosphor");
phosphorCharge = registerItem(new ItemForestry(), "phosphoricIodineCapsule");
// / BEE RESOURCES
beeswax = registerItem(new ItemForestry(), "beeswax");
@@ -196,4 +199,12 @@ public class ItemRegistryCore extends ItemRegistry {
OreDictionary.registerOre(def.getOreDict(), fruit);
}
}
public ItemStack getAsh() {
List<ItemStack> options = OreDictionary.getOres("dustAsh");
for (ItemStack option : options) {
if (option.getItem() != ash) return option.copy();
}
return ash.getItemStack();
}
}
@@ -37,7 +37,8 @@ public class EscritoireTextSource {
EnumSet<Notes> multipleTranslationNoteLevels = EnumSet
.of(Notes.level1, Notes.level2, Notes.level3, Notes.level4, Notes.success, Notes.failure);
for (Notes notesLevel : multipleTranslationNoteLevels) {
int levelCount = Integer.valueOf(StringUtil.localize("gui.escritoire.notes." + notesLevel + ".count"));
int levelCount = Integer.valueOf(
StringUtil.localize("gui.escritoire.notes." + notesLevel + ".count").replaceAll("§\\d", ""));
for (int i = 1; i <= levelCount; i++) {
String note = StringUtil.localize("gui.escritoire.notes." + notesLevel + '.' + i);
researchNotes.put(notesLevel, note);
@@ -78,7 +78,7 @@ public class TileEnginePeat extends TileEngine implements ISidedInventory {
return i;
}
if (waste.getItem() != PluginCore.items.ash) {
if (waste.getItem() != PluginCore.items.getAsh().getItem()) {
continue;
}
@@ -182,7 +182,7 @@ public class TileEnginePeat extends TileEngine implements ISidedInventory {
if (wasteSlot >= 0) {
IInventoryAdapter inventory = getInternalInventory();
if (inventory.getStackInSlot(wasteSlot) == null) {
inventory.setInventorySlotContents(wasteSlot, PluginCore.items.ash.getItemStack());
inventory.setInventorySlotContents(wasteSlot, PluginCore.items.getAsh());
} else {
inventory.getStackInSlot(wasteSlot).stackSize++;
}
@@ -26,16 +26,14 @@ public class InventoryRainmaker extends InventoryAdapterTile<TileMillRainmaker>
@Override
public boolean canSlotAccept(int slotIndex, ItemStack itemStack) {
if (slotIndex == SLOT_SUBSTRATE) {
if (getStackInSlot(SLOT_SUBSTRATE) != null) {
return false;
}
if (FuelManager.rainSubstrate.containsKey(itemStack) && tile.charge == 0 && tile.progress == 0) {
RainSubstrate substrate = FuelManager.rainSubstrate.get(itemStack);
if (tile.getWorld().isRaining() && substrate.reverse) {
return true;
} else if (!tile.getWorld().isRaining() && !substrate.reverse) {
return true;
}
return tile.isValidSubstrate(substrate);
}
}
return false;
}
@@ -10,6 +10,7 @@ package forestry.factory.tiles;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.storage.WorldInfo;
import forestry.api.fuels.FuelManager;
import forestry.api.fuels.RainSubstrate;
@@ -20,7 +21,7 @@ import forestry.factory.inventory.InventoryRainmaker;
public class TileMillRainmaker extends TileMill {
private int duration;
private boolean reverse;
private RainSubstrate.WeatherState weather;
public TileMillRainmaker() {
super(null);
@@ -39,9 +40,9 @@ public class TileMillRainmaker extends TileMill {
}
// We don't have a gui, but we can be activated
if (FuelManager.rainSubstrate.containsKey(player.inventory.getCurrentItem()) && charge == 0) {
if (FuelManager.rainSubstrate.containsKey(player.inventory.getCurrentItem()) && charge == 0 && progress == 0) {
RainSubstrate substrate = FuelManager.rainSubstrate.get(player.inventory.getCurrentItem());
if (substrate.item.isItemEqual(player.inventory.getCurrentItem())) {
if (isValidSubstrate(substrate)) {
addCharge(substrate);
player.inventory.getCurrentItem().stackSize--;
}
@@ -49,6 +50,17 @@ public class TileMillRainmaker extends TileMill {
sendNetworkUpdate();
}
public boolean isValidSubstrate(RainSubstrate substrate) {
boolean thundering = getWorld().isThundering();
boolean raining = getWorld().isRaining();
return switch (substrate.weather) {
case CLEAR -> (thundering || raining);
case RAIN -> (thundering || !raining);
case STORM -> (!thundering);
};
}
@Override
public void readFromNBT(NBTTagCompound nbttagcompound) {
super.readFromNBT(nbttagcompound);
@@ -57,7 +69,7 @@ public class TileMillRainmaker extends TileMill {
progress = nbttagcompound.getFloat("Progress");
stage = nbttagcompound.getInteger("Stage");
duration = nbttagcompound.getInteger("Duration");
reverse = nbttagcompound.getBoolean("Reverse");
weather = RainSubstrate.WeatherState.valueOf(nbttagcompound.getString("Weather"));
}
@Override
@@ -68,14 +80,14 @@ public class TileMillRainmaker extends TileMill {
nbttagcompound.setFloat("Progress", progress);
nbttagcompound.setInteger("Stage", stage);
nbttagcompound.setInteger("Duration", duration);
nbttagcompound.setBoolean("Reverse", reverse);
nbttagcompound.setString("Weather", weather.name());
}
public void addCharge(RainSubstrate substrate) {
charge = 1;
speed = substrate.speed;
duration = substrate.duration;
reverse = substrate.reverse;
weather = substrate.weather;
sendNetworkUpdate();
}
@@ -103,15 +115,26 @@ public class TileMillRainmaker extends TileMill {
}
if (!worldObj.isRemote) {
if (reverse) {
worldObj.getWorldInfo().setRaining(false);
} else {
worldObj.getWorldInfo().setRaining(true);
worldObj.getWorldInfo().setRainTime(duration);
WorldInfo world = worldObj.getWorldInfo();
switch (weather) {
case CLEAR:
world.setRaining(false);
world.setThundering(false);
break;
case STORM:
world.setRaining(true);
world.setRainTime(duration);
world.setThundering(true);
world.setThunderTime(duration);
break;
case RAIN:
world.setRaining(true);
world.setRainTime(duration);
world.setThundering(false);
break;
}
charge = 0;
duration = 0;
reverse = false;
sendNetworkUpdate();
}
}
@@ -137,7 +137,7 @@ public class PluginCore extends ForestryPlugin {
crateRegistry.registerCrate(items.fertilizerCompound, "cratedFertilizer");
crateRegistry.registerCrate(items.mulch, "cratedMulch");
crateRegistry.registerCrate(items.phosphor, "cratedPhosphor");
crateRegistry.registerCrate(items.ash, "cratedAsh");
crateRegistry.registerCrateUsingOreDict(items.getAsh(), "cratedAsh");
if (!isDreamcraftLoaded) {
crateRegistry.registerCrate(items.apatite, "cratedApatite");
crateRegistry.registerCrateUsingOreDict(items.ingotTin, "cratedTin");
@@ -207,7 +207,7 @@ public class PluginCore extends ForestryPlugin {
0.5f);
RecipeUtil.addSmelting(blocks.resources.get(BlockResourceOre.ResourceType.TIN, 1), items.ingotTin, 0.5f);
}
RecipeUtil.addSmelting(new ItemStack(items.peat), items.ash, 0.0f);
RecipeUtil.addSmelting(new ItemStack(items.peat), items.getAsh(), 0.0f);
/* BRONZE INGOTS */
if (Config.isCraftingBronzeEnabled()) {
@@ -222,9 +222,23 @@ public class PluginFactory extends ForestryPlugin {
// Set rain substrates
ItemStack iodineCharge = coreItems.iodineCharge.getItemStack();
ItemStack dissipationCharge = coreItems.craftingMaterial.getDissipationCharge();
ItemStack phosphorCharge = coreItems.phosphorCharge.getItemStack();
FuelManager.rainSubstrate.put(
iodineCharge,
new RainSubstrate(
iodineCharge,
Constants.RAINMAKER_RAIN_DURATION_IODINE,
0.01f,
RainSubstrate.WeatherState.RAIN));
FuelManager.rainSubstrate
.put(iodineCharge, new RainSubstrate(iodineCharge, Constants.RAINMAKER_RAIN_DURATION_IODINE, 0.01f));
FuelManager.rainSubstrate.put(dissipationCharge, new RainSubstrate(dissipationCharge, 0.075f));
.put(dissipationCharge, new RainSubstrate(dissipationCharge, 0.075f, RainSubstrate.WeatherState.CLEAR));
FuelManager.rainSubstrate.put(
phosphorCharge,
new RainSubstrate(
phosphorCharge,
Constants.RAINMAKER_RAIN_DURATION_PHOSPHORICIODINE,
0.008f,
RainSubstrate.WeatherState.STORM));
for (BlockFactoryTesrType type : BlockFactoryTesrType.VALUES) {
MachineDefinition machineDefinition = new MachineDefinition(type);
@@ -594,6 +608,15 @@ public class PluginFactory extends ForestryPlugin {
PluginFluids.items.canEmpty,
'Z',
beeItems.honeydew);
RecipeManagers.carpenterManager.addRecipe(
5,
PluginCore.items.iodineCharge.getItemStack(),
PluginCore.items.phosphorCharge.getItemStack(),
"# #",
" # ",
"# #",
'#',
PluginCore.items.phosphor.getItemStack());
}
// Ender pearl
@@ -449,10 +449,15 @@ public class PluginStorage extends ForestryPlugin {
String oreName = OreDictionary.getOreName(oreId);
addCrating(crateStack, oreName);
}
if (oreIds.length > 0 && oreIds[0] == OreDictionary.getOreID("dustAsh")) {
addUncrating(crateStack, PluginCore.items.getAsh());
} else {
addUncrating(crateStack, uncrated);
}
} else {
addCrating(crateStack, uncrated);
addUncrating(crateStack, uncrated);
}
addUncrating(crateStack, uncrated);
}
}
@@ -197,8 +197,6 @@ public class PluginBiomesOPlenty extends ForestryPlugin {
FlowerManager.FlowerTypeVanilla,
FlowerManager.FlowerTypeSnow,
FlowerManager.FlowerTypeMushrooms); // Swampflower
// FlowerManager.flowerRegistry.registerPlantableFlower(flowers, 2, 1.0, FlowerManager.FlowerTypeNether);
// //Deathbloom
FlowerManager.flowerRegistry.registerPlantableFlower(
flowers,
3,
@@ -248,16 +246,8 @@ public class PluginBiomesOPlenty extends ForestryPlugin {
1.0,
FlowerManager.FlowerTypeVanilla,
FlowerManager.FlowerTypeSnow); // Waterlily
FlowerManager.flowerRegistry.registerPlantableFlower(
flowers,
11,
1.0,
FlowerManager.FlowerTypeVanilla,
FlowerManager.FlowerTypeSnow); // EnderLotus (does not actually spawn in the end)
FlowerManager.flowerRegistry.registerPlantableFlower(flowers, 12, 1.0, FlowerManager.FlowerTypeCacti); // Bromeliad
FlowerManager.flowerRegistry.registerPlantableFlower(flowers, 13, 1.0, FlowerManager.FlowerTypeNether); // EyeBulb
// FlowerManager.flowerRegistry.registerPlantableFlower(flowers, 14, 1.0, FlowerManager.FlowerTypeNether);
// // Unlisted top of the eyebulb
FlowerManager.flowerRegistry.registerPlantableFlower(
flowers,
15,
@@ -283,8 +273,6 @@ public class PluginBiomesOPlenty extends ForestryPlugin {
FlowerManager.flowerRegistry.registerPlantableFlower(flowers2, 3, 1.0, FlowerManager.FlowerTypeVanilla); // Lavender
FlowerManager.flowerRegistry.registerPlantableFlower(flowers2, 4, 1.0, FlowerManager.FlowerTypeVanilla); // Goldenrod
FlowerManager.flowerRegistry.registerPlantableFlower(flowers2, 5, 1.0, FlowerManager.FlowerTypeVanilla); // Bluebells
FlowerManager.flowerRegistry.registerPlantableFlower(flowers2, 6, 1.0, FlowerManager.FlowerTypeVanilla); // Miner's
// delight
FlowerManager.flowerRegistry.registerPlantableFlower(
flowers2,
7,
@@ -171,6 +171,7 @@ for.gui.imprinter.name=GENOME IMPRINTER
for.gui.inactive=Inactive
for.gui.life=Life
for.gui.lifespan=Lifespan
for.gui.none=None
for.gui.normal=Normal
for.gui.jubilance=Jubilance: %s
@@ -423,6 +424,122 @@ for.hints.usesofash.tag=Use your ash!
for.item.crated.grammar=Crated %s
for.item.crated.unknown=Crate with unknown content
item.cratedAcaciaSapling.name=Crated Acacia Sapling
item.cratedAcaciaWood.name=Crated Acacia Wood
item.cratedApples.name=Crated Apple
item.cratedAsh.name=Crated Ash
item.cratedBeeswax.name=Crated Beeswax
item.cratedBirchSapling.name=Crated Birch Sapling
item.cratedBirchWood.name=Crated Birch Wood
item.cratedBogearth.name=Crated Bog Earth
item.cratedBrass.name=Crated Bronze Ingot
item.cratedBrick.name=Crated Bricks
item.cratedCacti.name=Crated Cactus
item.cratedCarrots.name=Crated Carrot
item.cratedCharcoal.name=Crated Charcoal
item.cratedCherry.name=Crated Cherry
item.cratedChestnut.name=Crated Chestnut
item.cratedClay.name=Crated Clay
item.cratedCoal.name=Crated Coal
item.cratedCobblestone.name=Crated Cobblestone
item.cratedCocoaComb.name=Crated Cocoa Comb
item.cratedCookies.name=Crated Cookie
item.cratedCrystallinePollen.name=Crated Crystalline Pollen Cluster
item.cratedDarkOakSapling.name=Crated Dark Oak Sapling
item.cratedDarkOakWood.name=Crated Dark Oak Wood
item.cratedDates.name=Crated Date
item.cratedDirt.name=Crated Dirt
item.cratedDrippingCombs.name=Crated Dripping Comb
item.cratedFertilizer.name=Crated Fertilizer
item.cratedFrozenCombs.name=Crated Frozen Comb
item.cratedGlowstone.name=Crated Glowstone Dust
item.cratedGravel.name=Crated Gravel
item.cratedHoneycombs.name=Crated Honey Comb
item.cratedHoneydew.name=Crated Honeydew
item.cratedHumus.name=Crated Humus
item.cratedJungleSapling.name=Crated Jungle Sapling
item.cratedJungleWood.name=Crated Jungle Wood
item.cratedLapis.name=Crated Lapis Lazuli
item.cratedLemon.name=Crated Lemon
item.cratedMellowCombs.name=Crated Mellow Comb
item.cratedMossyCombs.name=Crated Mossy Comb
item.cratedMulch.name=Crated Mulch
item.cratedMycelium.name=Crated Mycelium
item.cratedMysteriousCombs.name=Crated Mysterious Comb
item.cratedNaturaBarley.name=Crated Barley
item.cratedNaturaBerryBlack.name=Crated Blackberry
item.cratedNaturaBerryBlight.name=Crated Blightberry
item.cratedNaturaBerryBlue.name=Crated Blueberry
item.cratedNaturaBerryDusk.name=Crated Duskberry
item.cratedNaturaBerryMalo.name=Crated Maloberry
item.cratedNaturaBerryRasp.name=Crated Raspberry
item.cratedNaturaBerrySky.name=Crated Skyberry
item.cratedNaturaBerrySting.name=Crated Stingberry
item.cratedNaturaBlockHeatsand.name=Crated Heat Sand
item.cratedNaturaBlockTainted.name=Crated Tainted Soil
item.cratedNaturaBlueGlowshroom.name=Crated Blue Glowshroom
item.cratedNaturaGreenGlowshroom.name=Crated Green Glowshroom
item.cratedNaturaLogBloodwood.name=Crated Bloodwood
item.cratedNaturaLogDarkwood.name=Crated Darkwood
item.cratedNaturaLogEucalyptus.name=Crated Eucalyptus Wood
item.cratedNaturaLogFusewood.name=Crated Fusewood
item.cratedNaturaLogGhostwood.name=Crated Ghostwood
item.cratedNaturaLogHopseed.name=Crated Hopseed Wood
item.cratedNaturaLogSakura.name=Crated Sakura Wood
item.cratedNaturaLogWillow.name=Crated Willow Wood
item.cratedNaturaPotashApple.name=Crated Potash Apple
item.cratedNaturaPurpleGlowshroom.name=Crated Purple Glowshroom
item.cratedNaturaSaplingBlood.name=Crated Blood Sapling
item.cratedNaturaSaplingDarkwood.name=Crated Darkwood Sapling
item.cratedNaturaSaplingEucalyptus.name=Crated Eucalyptus Sapling
item.cratedNaturaSaplingFusewood.name=Crated Fusewood Sapling
item.cratedNaturaSaplingGhostwood.name=Crated Ghostwood Sapling
item.cratedNaturaSaplingHopseed.name=Crated Hopseed Sapling
item.cratedNaturaSaplingMaple.name=Crated Maple Sapling
item.cratedNaturaSaplingPurpleheart.name=Crated Amaranth Sapling
item.cratedNaturaSaplingRedwood.name=Crated Redwood Sapling
item.cratedNaturaSaplingSakura.name=Crated Sakura Sapling
item.cratedNaturaSaplingSilverbell.name=Crated Silverbell Sapling
item.cratedNaturaSaplingTiger.name=Crated Tigerwood Sapling
item.cratedNaturaSaplingWillow.name=Crated Willow Sapling
item.cratedNetherbrick.name=Crated Nether Brick
item.cratedNetherrack.name=Crated Netherrack
item.cratedNetherwart.name=Crated Nether Wart
item.cratedObsidian.name=Crated Obsidian
item.cratedPapaya.name=Crated Papaya
item.cratedParchedCombs.name=Crated Parched Comb
item.cratedPeat.name=Crated Peat
item.cratedPhosphor.name=Crated Phosphor
item.cratedPlum.name=Crated Plum
item.cratedPodzol.name=Crated Podzol
item.cratedPollen.name=Crated Pollen Cluster
item.cratedPotatoes.name=Crated Potato
item.cratedPowderyCombs.name=Crated Powdery Comb
item.cratedPropolis.name=Crated Propolis
item.cratedRedSand.name=Crated Red Sand
item.cratedRedstone.name=Crated Redstone
item.cratedReeds.name=Crated Sugar Canes
item.cratedRefractoryWax.name=Crated Refractory Wax
item.cratedResin.name=Crated Sticky Resin
item.cratedRoyalJelly.name=Crated Royal Jelly
item.cratedRubber.name=Crated Rubber
item.cratedSand.name=Crated Sand
item.cratedSandstone.name=Crated Sandstone
item.cratedSaplings.name=Crated Oak Sapling
item.cratedScrap.name=Crated Scrap
item.cratedSeeds.name=Crated Seeds
item.cratedSilkyCombs.name=Crated Silky Comb
item.cratedSilver.name=Crated Silver Ingot
item.cratedSimmeringCombs.name=Crated Simmering Comb
item.cratedSoulsand.name=Crated Soul Sand
item.cratedSpruceSapling.name=Crated Spruce Sapling
item.cratedSpruceWood.name=Crated Spruce Wood
item.cratedStone.name=Crated Stone
item.cratedStringyCombs.name=Crated Stringy Comb
item.cratedWalnut.name=Crated Walnut
item.cratedWheat.name=Crated Wheat
item.cratedWheatenCombs.name=Crated Wheaten Comb
item.cratedWood.name=Crated Oak Wood
for.no=No
@@ -493,6 +610,7 @@ item.for.habitatLocator.name=Habitat Locator
item.for.cart.beehouse.name=Minecart with Bee House
item.for.cart.apiary.name=Minecart with Apiary
item.for.beeCombs.name=Comb
item.for.beeCombs.cocoa.name=Cocoa Comb
item.for.beeCombs.darkened.name=Darkened Comb
item.for.beeCombs.dripping.name=Dripping Comb
@@ -513,6 +631,7 @@ item.for.beeCombs.wheaten.name=Wheaten Comb
item.for.beeswax.name=Beeswax
item.for.beverage.name=Mead
item.for.beverage.meadCurative.name=Curative Mead
item.for.beverage.meadShort.name=Short Mead
item.for.beverage.mead.name=Mead
@@ -550,11 +669,13 @@ item.for.canSeedOil.name=Seed Oil Can
item.for.canShortMead.name=Short Mead Can
item.for.carton.name=Carton
item.for.chipsets.name=Circuit Board
item.for.circuitboard.basic.name=Basic Circuit Board
item.for.circuitboard.enhanced.name=Enhanced Circuit Board
item.for.circuitboard.intricate.name=Intricate Circuit Board
item.for.circuitboard.refined.name=Refined Circuit Board
item.for.craftingMaterial.name=Crafting Material
item.for.craftingMaterial.dissipationCharge.name=Dissipation Charge
item.for.craftingMaterial.iceShard.name=Ice Shard
item.for.craftingMaterial.pulsatingDust.name=Pulsating Dust
@@ -585,6 +706,7 @@ for.frame.tooltip.production=Production:
for.frame.tooltip.flowering=Flowering:
for.frame.tooltip.geneticDecay=Genetic Decay:
item.for.fruits.name=Fruit
item.for.fruits.cherry.name=Cherry
item.for.fruits.chestnut.name=Chestnut
item.for.fruits.dates.name=Date
@@ -601,6 +723,7 @@ item.for.hardenedMachine.name=Hardened Casing
item.for.honeydew.name=Honeydew
item.for.honeyDrop.name=Drop
item.for.honeyDrop.charged.name=Charged Drop
item.for.honeyDrop.honey.name=Honey Drop
item.for.honeyDrop.omega.name=Omega Drop
@@ -632,11 +755,15 @@ item.for.naturalistHelmet.name=Spectacles
item.for.oakStick.name=Impregnated Stick
item.for.peat.name=Peat
item.for.phosphor.name=Phosphor
item.for.phosphoricIodineCapsule.name=Phosphoric Iodine Capsule
item.for.pipette.name=Pipette
item.for.pollenFertile.name=Fertile Pollen
item.for.pollen.name=Pollen Cluster
item.for.pollen.crystalline.name=Crystalline Pollen Cluster
item.for.pollen.normal.name=Pollen Cluster
item.for.propolis.name=Propolis
item.for.propolis.normal.name=Propolis
item.for.propolis.pulsating.name=Pulsating Propolis
item.for.propolis.silky.name=Silky Propolis
@@ -674,6 +801,7 @@ item.for.stamps.name=Stamp
item.for.sturdyMachine.name=Sturdy Casing
item.for.tent.name=Survivalist's Tent
item.for.thermionicTubes.name=Electron Tube
item.for.thermionicTubes.ex-0.name=Copper Electron Tube
item.for.thermionicTubes.ex-1.name=Tin Electron Tube
item.for.thermionicTubes.ex-2.name=Bronze Electron Tube
@@ -715,15 +843,18 @@ itemGroup.arboriculture=Arboriculture
itemGroup.forestry=Forestry
itemGroup.lepidopterology=Lepidopterology
tile.for.core.name=Analyzer / Escritoire
tile.for.core.0.name=Analyzer
tile.for.core.1.name=Escritoire
tile.for.engine.name=Engine
tile.for.engine.0.name=Electrical Engine
tile.for.engine.1.name=Peat-fired Engine
tile.for.engine.2.name=Biogas Engine
tile.for.engine.3.name=Bio Generator
tile.for.engine.4.name=Clockwork Engine
tile.for.factory.name=Machine
tile.for.factory.0.name=Bottler
tile.for.factory.1.name=Carpenter
tile.for.factory.2.name=Centrifuge
@@ -732,23 +863,28 @@ tile.for.factory.4.name=Moistener
tile.for.factory.5.name=Squeezer
tile.for.factory.6.name=Still
tile.for.factory.7.name=Rainmaker
tile.for.factory2.name=Machine
tile.for.factory2.0.name=Thermionic Fabricator
tile.for.factory2.1.name=Raintank
tile.for.factory2.2.name=Worktable
tile.for.mail.name=Mailbox
tile.for.mail.0.name=Mailbox
tile.for.mail.1.name=Trade Station
tile.for.mail.2.name=Stamp Collector
tile.for.resources.name=Ore
tile.for.resources.0.name=Apatite Ore
tile.for.resources.1.name=Copper Ore
tile.for.resources.2.name=Tin Ore
tile.for.resourceStorage.name=Block
tile.for.resourceStorage.0.name=Block of Apatite
tile.for.resourceStorage.1.name=Block of Copper
tile.for.resourceStorage.2.name=Block of Tin
tile.for.resourceStorage.3.name=Block of Bronze
tile.for.soil.name=Soil
tile.for.soil.0.name=Humus
tile.for.soil.1.name=Bog Earth
tile.for.soil.2.name=Peat
@@ -915,6 +1051,8 @@ for.errors.wrongStacksize.help=Only single items can be used here.
# APICULTURE
####################
item.for.beeLarvaeGE.name=Larvae
entity.Villager.apiarist=Apiarist
death.bee.aggressive.player=%1$s encountered a swarm of bees. %2$s stole his apiarist's suit.
@@ -1129,6 +1267,7 @@ item.for.beePrincessGE.name=Princess
item.for.beeQueenGE.name=Queen
item.for.beeDroneGE.name=Drone
tile.for.alveary.name=Alveary Part
tile.for.alveary.0.name=Alveary
tile.for.alveary.1.name=Alveary Entrance
tile.for.alveary.2.name=Swarmer
@@ -1138,10 +1277,13 @@ tile.for.alveary.5.name=Alveary Hygroregulator
tile.for.alveary.6.name=Alveary Stabiliser
tile.for.alveary.7.name=Alveary Sieve
tile.for.apiculture.name=Apiary
tile.for.apiculture.0.name=Apiary
tile.for.apicultureChest.name=Apiarist's Chest
tile.for.apicultureChest.0.name=Apiarist's Chest
tile.for.apiculture.2.name=Bee House
tile.for.beehives.name=Hive
tile.for.beehives.1.name=Forest Hive
tile.for.beehives.2.name=Meadows Hive
tile.for.beehives.3.name=Modest Hive
@@ -1151,11 +1293,13 @@ tile.for.beehives.6.name=Wintry Hive
tile.for.beehives.7.name=Marshy Hive
tile.for.beehives.8.name=Swarm Hive
tile.for.candle.name=Candle
tile.for.candle.dyed.lit.name=Lit Dyed Candle
tile.for.candle.dyed.stump.name=Unlit Dyed Candle
tile.for.candle.lit.name=Lit Candle
tile.for.candle.stump.name=Unlit Candle
tile.for.stump.name=Candle Stump
tile.for.stump.0.name=Candle Stump
####################
@@ -1270,8 +1414,10 @@ for.trees.grammar.germling.type=Germling
for.trees.grammar.germling=%SPECIES %TYPE
for.trees.grammar.pollen.type=Pollen
for.trees.grammar.pollen=%SPECIES %TYPE
tile.for.saplingGE.name=Sapling
for.trees.grammar.sapling.type=Sapling
for.trees.grammar.sapling=%SPECIES %TYPE
tile.for.leaves.name=Leaves
for.trees.grammar.leaves.type=Leaves
for.trees.grammar.leaves=%SPECIES %TYPE
@@ -1313,10 +1459,21 @@ for.trees.species.padauk=Padauk
for.trees.species.cocobolo=Cocobolo
for.trees.species.zebrawood=Zebrawood
tile.for.fences.name=Fence
for.fences.grammar=%TYPE Fence
tile.for.logs.name=Wood
tile.for.logsFireproof.name=Wood (Fireproof)
for.log.grammar=%TYPE Wood
tile.for.planks.name=Wood Planks
tile.for.planksFireproof.name=Wood Planks (Fireproof)
for.planks.grammar=%TYPE Wood Planks
tile.for.slabs.name=Wood Slab
tile.for.slabsFireproof.name=Wood Slab (Fireproof)
tile.for.slabsDouble.name=Wood Slab
tile.for.slabsDoubleFireproof.name=Wood Slab (Fireproof)
for.slab.grammar=%TYPE Wood Slab
tile.for.stairs.name=Stairs
tile.for.stairsFireproof.name=Stairs (Fireproof)
for.stairs.grammar=%TYPE Stairs
for.trees.woodType.larch=Larch
@@ -1349,15 +1506,19 @@ for.trees.woodType.padauk=Padauk
for.trees.woodType.cocobolo=Cocobolo
for.trees.woodType.zebrawood=Zebrawood
tile.for.fencesFireproof.name=Fence (Fireproof)
tile.for.fireproof=%s (Fireproof)
item.for.grafter.name=Grafter
item.for.grafterProven.name=Proven Grafter
tile.for.arboriculture.name=Arborist's Chest
tile.for.arboriculture.0.name=Arborist's Chest
item.for.sapling.name=Sapling
tile.for.saplingGE.0.name=Sapling
tile.for.leaves.0.name=Leaves
tile.for.pods.name=Pod
tile.for.pods.0.name=Pod
####################
@@ -1411,12 +1572,14 @@ for.trigger.lowFertilizer=Fertilizer
for.trigger.lowLiquid=Water Tank
for.trigger.lowSoil=Soil
tile.for.ffarm.name=Farm Block
tile.for.ffarm.0.name=Farm Block
tile.for.ffarm.2.name=Farm Gearbox
tile.for.ffarm.3.name=Farm Hatch
tile.for.ffarm.4.name=Farm Valve
tile.for.ffarm.5.name=Farm Control
tile.for.mushroom.name=Mushroom
tile.for.mushroom.0.name=Mushroom
tile.for.mushroom.1.name=Mushroom
@@ -1424,6 +1587,9 @@ tile.for.mushroom.1.name=Mushroom
# LEPIDOPTEROLOGY
####################
item.for.serumGE.name=Serum
item.for.caterpillarGE.name=Caterpillar
item.for.butterflyGE.name=Butterfly
entity.Forestry.butterflyGE.name=Butterfly
for.chat.command.forestry.butterfly.desc=- %s : Butterfly Commands
@@ -1482,6 +1648,7 @@ item.for.butterfly.name=Butterfly
item.for.flutterlyzer.name=Flutterlyzer
item.for.lepidopteristBag.name=Lepidopterist's Backpack
item.for.moth.name=Moth
tile.for.lepidopterology.name=Lepidopterist's Chest
tile.for.lepidopterology.0.name=Lepidopterist's Chest
####################
Binary file not shown.

After

Width:  |  Height:  |  Size: 789 B