Merge upstream

This commit is contained in:
Vincent Lee committed 2015-11-20 01:00:31 -06:00
commit e3b22975cb
73 files changed
+363 -47

No files matched your search

+2 -2
View File
@@ -1,9 +1,9 @@
#
#Thu Nov 12 23:30:17 GMT 2015
#Wed Nov 18 21:40:00 GMT 2015
version=r1.7
dir_output=../Build Output/Botania/
mc_version=1.8
forge_version=11.14.3.1468
dir_repo=./
build_number=234
build_number=236
mod_name=Botania
@@ -0,0 +1,27 @@
/**
* This class was created by <Vazkii>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
*
* Botania is Open Source and distributed under the
* Botania License: http://botaniamod.net/license.php
*
* File Created @ [17/11/2015, 20:10:53 (GMT)]
*/
package vazkii.botania.api.item;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import vazkii.botania.api.subtile.SubTileEntity;
/**
* An Item that implements this can be placed by a Rannuncarpus.
*/
public interface IFlowerPlaceable {
/**
* Gets the block to be placed, return null to not place anything.
*/
public Block getBlockToPlaceByFlower(ItemStack stack, SubTileEntity flower, int x, int y, int z);
public void onBlockPlacedByFlower(ItemStack stack, SubTileEntity flower, int x, int y, int z);
}
@@ -0,0 +1,138 @@
/**
* This class was created by <Vazkii>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
*
* Botania is Open Source and distributed under the
* Botania License: http://botaniamod.net/license.php
*
* File Created @ [17/11/2015, 18:33:30 (GMT)]
*/
package vazkii.botania.common.block;
import java.util.List;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.EnumPlantType;
import net.minecraftforge.common.IPlantable;
import net.minecraftforge.common.util.ForgeDirection;
import vazkii.botania.client.core.helper.IconHelper;
import vazkii.botania.common.Botania;
import vazkii.botania.common.item.block.ItemBlockWithMetadataAndName;
import vazkii.botania.common.lib.LibBlockNames;
import cpw.mods.fml.common.registry.GameRegistry;
public class BlockAltGrass extends BlockMod {
private static final int SUBTYPES = 6;
IIcon[] icons;
public BlockAltGrass() {
super(Material.grass);
setHardness(0.6F);
setStepSound(soundTypeGrass);
setBlockName(LibBlockNames.ALT_GRASS);
}
@Override
public Block setBlockName(String par1Str) {
GameRegistry.registerBlock(this, ItemBlockWithMetadataAndName.class, par1Str);
return super.setBlockName(par1Str);
}
@Override
protected boolean shouldRegisterInNameSet() {
return false;
}
@Override
public void getSubBlocks(Item item, CreativeTabs tab, List list) {
for(int i = 0; i < 6; i++)
list.add(new ItemStack(item, 1, i));
}
@Override
public void registerBlockIcons(IIconRegister par1IconRegister) {
icons = new IIcon[SUBTYPES * 2];
for(int i = 0; i < icons.length; i++)
icons[i] = IconHelper.forBlock(par1IconRegister, this, i);
}
@Override
public IIcon getIcon(int side, int meta) {
return side == 0 || meta >= SUBTYPES ? Blocks.dirt.getIcon(side, meta) : side == 1 ? icons[meta * 2] : icons[meta * 2 + 1];
}
@Override
public void updateTick(World world, int x, int y, int z, Random rand) {
if(!world.isRemote && world.getBlockLightValue(x, y + 1, z) >= 9) {
int meta = world.getBlockMetadata(x, y, z);
for(int l = 0; l < 4; ++l) {
int i1 = x + rand.nextInt(3) - 1;
int j1 = y + rand.nextInt(5) - 3;
int k1 = z + rand.nextInt(3) - 1;
Block block = world.getBlock(i1, j1 + 1, k1);
if(world.getBlock(i1, j1, k1) == Blocks.dirt && world.getBlockMetadata(i1, j1, k1) == 0 && world.getBlockLightValue(i1, j1 + 1, k1) >= 4 && world.getBlockLightOpacity(i1, j1 + 1, k1) <= 2)
world.setBlock(i1, j1, k1, this, meta, 1 | 2);
}
}
}
@Override
public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) {
return Blocks.dirt.getItemDropped(0, p_149650_2_, p_149650_3_);
}
@Override
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) {
return new ItemStack(this, 1, world.getBlockMetadata(x, y, z));
}
@Override
public boolean canSustainPlant(IBlockAccess world, int x, int y, int z, ForgeDirection direction, IPlantable plantable) {
return plantable.getPlantType(world, x, y - 1, z) == EnumPlantType.Plains;
}
@Override
public void randomDisplayTick(World world, int x, int y, int z, Random r) {
int meta = world.getBlockMetadata(x, y, z);
switch(meta) {
case 0: // Dry
break;
case 1: // Golden
break;
case 2: // Vivid
break;
case 3: // Scorched
if(r.nextInt(80) == 0)
world.spawnParticle("flame", x + r.nextFloat(), y + 1.1, z + r.nextFloat(), 0, 0, 0);
break;
case 4: // Infused
if(r.nextInt(100) == 0)
Botania.proxy.sparkleFX(world, x + r.nextFloat(), y + 1.05, z + r.nextFloat(), 0F, 1F, 1F, r.nextFloat() * 0.2F + 1F, 5);
break;
case 5: // Mutated
if(r.nextInt(100) == 0) {
if(r.nextInt(100) > 25)
Botania.proxy.sparkleFX(world, x + r.nextFloat(), y + 1.05, z + r.nextFloat(), 1F, 0F, 1F, r.nextFloat() * 0.2F + 1F, 5);
else Botania.proxy.sparkleFX(world, x + r.nextFloat(), y + 1.05, z + r.nextFloat(), 1F, 1F, 0F, r.nextFloat() * 0.2F + 1F, 5);
}
break;
}
}
}
@@ -12,6 +12,7 @@ package vazkii.botania.common.block;
import net.minecraft.block.Block;
import net.minecraft.block.BlockDispenser;
import net.minecraft.block.material.Material;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@@ -267,6 +268,7 @@ public final class ModBlocks {
public static Block shimmerrock;
public static Block shimmerwoodPlanks;
public static Block avatar;
public static Block altGrass;
public static void init() {
flower = new BlockModFlower();
@@ -358,7 +360,8 @@ public final class ModBlocks {
shimmerrock = new BlockShimmerrock();
shimmerwoodPlanks = new BlockShimmerwoodPlanks();
avatar = new BlockAvatar();
altGrass = new BlockAltGrass();
ModFluffBlocks.init();
for(int i = 0; i < 16; i++)
@@ -134,8 +134,11 @@ public class BlockFloatingFlower extends BlockModContainer implements ILexiconab
IslandType type = null;
if(stack.getItem() == Items.snowball)
type = IslandType.SNOW;
else if(stack.getItem() == ModItems.grassSeeds)
type = ItemGrassSeeds.getIslandType(stack);
else if(stack.getItem() == ModItems.grassSeeds) {
IslandType newType = ItemGrassSeeds.getIslandType(stack);
if(newType != null)
type = newType;
}
if(type != null && type != flower.getIslandType()) {
if(!world.isRemote) {
@@ -68,9 +68,11 @@ public class SubTileExoflame extends SubTileFunctional {
IExoflameHeatable heatable = (IExoflameHeatable) tile;
if(heatable.canSmelt() && mana > 2) {
if(heatable.getBurnTime() == 0)
if(heatable.getBurnTime() == 0) {
heatable.boostBurnTime();
mana = Math.max(0, mana - cost);
mana = Math.max(0, mana - cost);
}
if(ticksExisted % 2 == 0)
heatable.boostCookTime();
@@ -103,6 +103,7 @@ public class SubTileHopperhock extends SubTileFunctional {
if(invToPutItemIn != null) {
InventoryHelper.insertItemIntoInventory(invToPutItemIn, stack.copy(), sideToPutItemIn, -1);
invToPutItemIn.markDirty();
item.setDead();
pulledAny = true;
}
@@ -32,6 +32,7 @@ import net.minecraft.world.World;
import org.lwjgl.opengl.GL11;
import vazkii.botania.api.item.IFlowerPlaceable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.subtile.ISubTileContainer;
import vazkii.botania.api.subtile.RadiusDescriptor;
@@ -83,7 +84,7 @@ public class SubTileRannuncarpus extends SubTileFunctional {
ItemStack stack = item.getEntityItem();
Item stackItem = stack.getItem();
if(stackItem instanceof ItemBlock || stackItem instanceof ItemReed || stackItem instanceof ItemRedstone) {
if(stackItem instanceof ItemBlock || stackItem instanceof ItemReed || stackItem instanceof ItemRedstone || stackItem instanceof IFlowerPlaceable) {
if(!scanned) {
for(int i = -rangePlace; i < rangePlace + 1; i++)
for(int j = -rangePlaceY; j < rangePlaceY + 1; j++)
@@ -101,8 +102,12 @@ public class SubTileRannuncarpus extends SubTileFunctional {
}
if(!validPositions.isEmpty() && !supertile.getWorld().isRemote) {
if(!validPositions.isEmpty() && !supertile.getWorldObj().isRemote) {
ChunkCoordinates coords = validPositions.get(supertile.getWorldObj().rand.nextInt(validPositions.size()));
Block blockToPlace = null;
if(stackItem instanceof IFlowerPlaceable)
blockToPlace = ((IFlowerPlaceable) stackItem).getBlockToPlaceByFlower(stack, this, coords.posX, coords.posY, coords.posZ);
if(stackItem instanceof ItemBlock)
blockToPlace = ((ItemBlock) stackItem).field_150939_a;
else if(stackItem instanceof ItemReed)
@@ -111,9 +116,14 @@ public class SubTileRannuncarpus extends SubTileFunctional {
blockToPlace = Blocks.redstone_wire;
if(blockToPlace != null) {
<<<<<<< HEAD
BlockPos coords = validPositions.get(supertile.getWorld().rand.nextInt(validPositions.size()));
if(blockToPlace.canPlaceBlockAt(supertile.getWorld(), coords.posX, coords.posY, coords.posZ)) {
supertile.getWorld().setBlock(coords.posX, coords.posY, coords.posZ, blockToPlace, stack.getItemDamage(), 1 | 2);
=======
if(blockToPlace.canPlaceBlockAt(supertile.getWorldObj(), coords.posX, coords.posY, coords.posZ)) {
supertile.getWorldObj().setBlock(coords.posX, coords.posY, coords.posZ, blockToPlace, stack.getItemDamage(), 1 | 2);
>>>>>>> 82051d95d9817a177f0ec62817f4f2430358b46e
if(ConfigHandler.blockBreakParticles)
supertile.getWorld().playAuxSFX(2001, coords.posX, coords.posY, coords.posZ, Block.getIdFromBlock(blockToPlace) + (stack.getItemDamage() << 12));
validPositions.remove(coords);
@@ -126,6 +136,9 @@ public class SubTileRannuncarpus extends SubTileFunctional {
SubTileEntity subtile = container.getSubTile();
subtile.onBlockPlacedBy(supertile.getWorld(), coords.posX, coords.posY, coords.posZ, null, stack);
}
if(stackItem instanceof IFlowerPlaceable)
((IFlowerPlaceable) stackItem).onBlockPlacedByFlower(stack, this, coords.posX, coords.posY, coords.posZ);
if(!supertile.getWorld().isRemote) {
stack.stackSize--;
@@ -21,6 +21,7 @@ import net.minecraft.item.crafting.IRecipe;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import vazkii.botania.api.internal.VanillaPacketDispatcher;
import vazkii.botania.common.item.ModItems;
public class TileCraftCrate extends TileOpenCrate {
@@ -157,6 +158,7 @@ public class TileCraftCrate extends TileOpenCrate {
if(stack != null)
eject(stack, false);
setInventorySlotContents(i, null);
markDirty();
}
}
@@ -178,11 +180,18 @@ public class TileCraftCrate extends TileOpenCrate {
ejectAll();
return true;
}
@Override
public void markDirty() {
super.markDirty();
VanillaPacketDispatcher.dispatchTEToNearbyPlayers(this);
}
@Override
public int getSignal() {
return signal;
}
@Override
public void onDataPacket(NetworkManager manager, S35PacketUpdateTileEntity packet) {
int lastPattern = pattern;
@@ -65,7 +65,6 @@ public final class BotaniaCreativeTab extends CreativeTabs {
addItem(ModItems.dye);
addItem(ModItems.fertilizer);
addItem(ModItems.flowerBag);
addItem(ModItems.grassSeeds);
addItem(ModItems.blackLotus);
addItem(ModItems.twigWand);
addItem(ModItems.obedienceStick);
@@ -103,6 +102,8 @@ public final class BotaniaCreativeTab extends CreativeTabs {
addItem(ModItems.worldSeed);
addItem(ModItems.overgrowthSeed);
addBlock(ModBlocks.enchantedSoil);
addItem(ModItems.grassSeeds);
addBlock(ModBlocks.altGrass);
if(Botania.thaumcraftLoaded)
addItem(ModItems.manaInkwell);
addBlock(ModBlocks.forestDrum);
@@ -305,6 +305,7 @@ public final class ModCraftingRecipes {
public static IRecipe recipeTeruTeruBozu;
public static IRecipe recipeAvatar;
public static IRecipe recipeSextant;
public static List<IRecipe> recipesAltGrassSeeds;
// Garden of Glass
public static IRecipe recipeRootToSapling;
@@ -2053,6 +2054,15 @@ public final class ModCraftingRecipes {
'I', LibOreDict.MANA_STEEL);
recipeSextant = BotaniaAPI.getLatestAddedRecipe();
// Alternate Pasture Seed Recipes
GameRegistry.addShapelessRecipe(new ItemStack(ModItems.grassSeeds, 1, 3), new ItemStack(ModItems.grassSeeds), new ItemStack(Blocks.deadbush));
GameRegistry.addShapelessRecipe(new ItemStack(ModItems.grassSeeds, 1, 4), new ItemStack(ModItems.grassSeeds), new ItemStack(Items.wheat));
GameRegistry.addShapelessRecipe(new ItemStack(ModItems.grassSeeds, 1, 5), new ItemStack(ModItems.grassSeeds), new ItemStack(Items.dye, 1, 2));
GameRegistry.addShapelessRecipe(new ItemStack(ModItems.grassSeeds, 1, 6), new ItemStack(ModItems.grassSeeds), new ItemStack(Items.blaze_powder));
GameRegistry.addShapelessRecipe(new ItemStack(ModItems.grassSeeds, 1, 7), new ItemStack(ModItems.grassSeeds), new ItemStack(ModItems.manaResource, 1, 10));
GameRegistry.addShapelessRecipe(new ItemStack(ModItems.grassSeeds, 1, 8), new ItemStack(ModItems.grassSeeds), new ItemStack(Items.spider_eye));
recipesAltGrassSeeds = BotaniaAPI.getLatestAddedRecipes(6);
///////////////////////////////////////////////////////////////////////////////////////////////////////////
// Storage Block/Nugget Recipes
@@ -134,9 +134,10 @@ public class EntityDoppleganger extends EntityCreature implements IBotaniaBossWi
public static boolean spawn(EntityPlayer player, ItemStack par1ItemStack, World par3World, BlockPos pos, boolean hard) {
Block block = par3World.getBlock(par4, par5, par6);
if(block == Blocks.beacon && isTruePlayer(player) && !par3World.isRemote) {
if(block == Blocks.beacon && isTruePlayer(player)) {
if(par3World.getDifficulty() == EnumDifficulty.PEACEFUL) {
player.addChatMessage(new ChatComponentTranslation("botaniamisc.peacefulNoob").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
if(!par3World.isRemote)
player.addChatMessage(new ChatComponentTranslation("botaniamisc.peacefulNoob").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
return false;
}
@@ -148,13 +149,30 @@ public class EntityDoppleganger extends EntityCreature implements IBotaniaBossWi
Block blockat = par3World.getBlock(x, y, z);
int meta = par3World.getBlockMetadata(x, y, z);
if(blockat != ModBlocks.pylon || meta != 2) {
player.addChatMessage(new ChatComponentTranslation("botaniamisc.needsCatalysts").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
if(!par3World.isRemote)
player.addChatMessage(new ChatComponentTranslation("botaniamisc.needsCatalysts").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
return false;
}
}
if(!hasProperArena(par3World, par4, par5, par6)) {
player.addChatMessage(new ChatComponentTranslation("botaniamisc.badArena").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
for(int i = 0; i < 360; i += 8) {
float r = 1F;
float g = 0F;
float b = 1F;
float m = 0.15F;
float mv = 0.35F;
float rad = i * (float) Math.PI / 180F;
double x = par4 + 0.5 - Math.cos(rad) * RANGE;
double y = par5 + 0.5;
double z = par6 + 0.5 - Math.sin(rad) * RANGE;
Botania.proxy.sparkleFX(par3World, x, y, z, r, g, b, 5F, 120);
}
if(!par3World.isRemote)
player.addChatMessage(new ChatComponentTranslation("botaniamisc.badArena").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
return false;
}
@@ -31,6 +31,7 @@ import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import vazkii.botania.client.core.helper.IconHelper;
import vazkii.botania.common.Botania;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.block.decor.IFloatingFlower.IslandType;
import vazkii.botania.common.lib.LibItemNames;
import net.minecraftforge.fml.common.FMLCommonHandler;
@@ -45,10 +46,11 @@ public class ItemGrassSeeds extends ItemMod {
private static Map<Integer, List<BlockSwapper>> blockSwappers = new HashMap();
private static final IslandType[] ISLAND_TYPES = {
IslandType.GRASS, IslandType.PODZOL, IslandType.MYCEL
IslandType.GRASS, IslandType.PODZOL, IslandType.MYCEL,
null, null, null, null, null, null
};
private static final int types = 3;
private static final int SUBTYPES = 9;
IIcon[] icons;
public ItemGrassSeeds() {
@@ -60,15 +62,15 @@ public class ItemGrassSeeds extends ItemMod {
@Override
public void getSubItems(Item par1, CreativeTabs par2, List par3) {
for(int i = 0; i < types; i++)
for(int i = 0; i < SUBTYPES; i++)
par3.add(new ItemStack(par1, 1, i));
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister par1IconRegister) {
icons = new IIcon[types];
for(int i = 0; i < types; i++)
icons = new IIcon[SUBTYPES];
for(int i = 0; i < SUBTYPES; i++)
icons[i] = IconHelper.forItem(par1IconRegister, this, i);
}
@@ -87,7 +89,7 @@ public class ItemGrassSeeds extends ItemMod {
public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, BlockPos pos, EnumFacing side, float par8, float par9, float par10) {
IBlockState state = par3World.getBlockState(pos);
if(state == Blocks.dirt.getDefaultState()) {
if((state.getBlock() == Blocks.dirt || (state.getBlock() == Blocks.grass && par1ItemStack.getItemDamage() != 0)) && bmeta == 0) {
int meta = par1ItemStack.getItemDamage();
BlockSwapper swapper = addBlockSwapper(par3World, pos, meta);
@@ -100,14 +102,55 @@ public class ItemGrassSeeds extends ItemMod {
float r = 0F;
float g = 0.4F;
float b = 0F;
if(meta == 1) {
switch(meta) {
case 1: {
r = 0.5F;
g = 0.37F;
b = 0F;
} else if(meta == 2) {
break;
}
case 2: {
r = 0.27F;
g = 0F;
b = 0.33F;
break;
}
case 3: {
r = 0.4F;
g = 0.5F;
b = 0.05F;
break;
}
case 4: {
r = 0.75F;
g = 0.7F;
b = 0F;
break;
}
case 5: {
r = 0F;
g = 0.5F;
b = 0.1F;
break;
}
case 6: {
r = 0.75F;
g = 0F;
b = 0F;
break;
}
case 7: {
r = 0F;
g = 0.55F;
b = 0.55F;
break;
}
case 8: {
r = 0.4F;
g = 0.1F;
b = 0.4F;
break;
}
}
float velMul = 0.025F;
@@ -150,6 +193,12 @@ public class ItemGrassSeeds extends ItemMod {
switch(meta) {
case 1 : return new BlockSwapper(world, pos, Blocks.dirt.getDefaultState().withProperty(BlockDirt.VARIANT, BlockDirt.DirtType.PODZOL));
case 2 : return new BlockSwapper(world, pos, Blocks.mycelium.getDefaultState());
case 3 : return new BlockSwapper(world, pos, ModBlocks.altGrass, 0);
case 4 : return new BlockSwapper(world, pos, ModBlocks.altGrass, 1);
case 5 : return new BlockSwapper(world, pos, ModBlocks.altGrass, 2);
case 6 : return new BlockSwapper(world, pos, ModBlocks.altGrass, 3);
case 7 : return new BlockSwapper(world, pos, ModBlocks.altGrass, 4);
case 8 : return new BlockSwapper(world, pos, ModBlocks.altGrass, 5);
default : return new BlockSwapper(world, pos, Blocks.grass.getDefaultState());
}
}
@@ -186,8 +235,9 @@ public class ItemGrassSeeds extends ItemMod {
for(int l = -1; l < 2; l++) {
BlockPos pos1 = pos.add(k, 0, l);
IBlockState state1 = world.getBlockState(pos1);
if(state1.getBlock() == Blocks.dirt
if((state1.getBlock() == Blocks.dirt
&& state1.getValue(BlockDirt.VARIANT) == BlockDirt.DirtType.DIRT)
|| state1.getBlock() == Blocks.grass)
validCoords.add(pos1);
}
@@ -454,7 +454,7 @@ public final class LexiconData {
dreadthorne.setLexiconPages(new PageText("0"), new PagePetalRecipe("1", ModPetalRecipes.dreadthorneRecipe));
heiseiDream = new ALexiconEntry(LibLexicon.FFLOWER_HEISEI_DREAM, categoryFunctionalFlowers);
heiseiDream.setLexiconPages(new PageText("0"), new PagePetalRecipe("1", ModPetalRecipes.heiseiDreamRecipe), new PageText("2"));
heiseiDream.setLexiconPages(new PageText("0"), new PagePetalRecipe("1", ModPetalRecipes.heiseiDreamRecipe));
tigerseye = new BLexiconEntry(LibLexicon.FFLOWER_TIGERSEYE, categoryFunctionalFlowers);
tigerseye.setLexiconPages(new PageText("0"), new PagePetalRecipe("1", ModPetalRecipes.tigerseyeRecipe));
@@ -469,7 +469,7 @@ public final class LexiconData {
if(ConfigHandler.fallenKanadeEnabled) {
fallenKanade = new BLexiconEntry(LibLexicon.FFLOWER_FALLEN_KANADE, categoryFunctionalFlowers);
fallenKanade.setLexiconPages(new PageText(Botania.bloodMagicLoaded ? "0a" : "0"), new PagePetalRecipe("1", ModPetalRecipes.fallenKanadeRecipe), new PageText("2"));
fallenKanade.setLexiconPages(new PageText(Botania.bloodMagicLoaded ? "0a" : "0"), new PagePetalRecipe("1", ModPetalRecipes.fallenKanadeRecipe));
}
exoflame = new BLexiconEntry(LibLexicon.FFLOWER_EXOFLAME, categoryFunctionalFlowers);
@@ -535,7 +535,7 @@ public final class LexiconData {
primusLoci.setIcon(ItemBlockSpecialFlower.ofType(LibBlockNames.SUBTILE_DAYBLOOM_PRIME));
daybloom = new BLexiconEntry(LibLexicon.GFLOWER_DAYBLOOM, categoryGenerationFlowers);
daybloom.setPriority().setLexiconPages(new PageText("0"), new PageText(ConfigHandler.hardcorePassiveGeneration > 0 ? "1a" : "1"), new PageImage("3", LibResources.ENTRY_DIMINISHING_RETURNS), new PagePetalRecipe("2", ModPetalRecipes.daybloomRecipe), new PageText("4"), new PageText("5"));
daybloom.setPriority().setLexiconPages(new PageText("0"), new PageText(ConfigHandler.hardcorePassiveGeneration > 0 ? "1a" : "1"), new PageImage("3", LibResources.ENTRY_DIMINISHING_RETURNS), new PagePetalRecipe("2", ModPetalRecipes.daybloomRecipe));
nightshade = new BLexiconEntry(LibLexicon.GFLOWER_NIGHTSHADE, categoryGenerationFlowers);
nightshade.setLexiconPages(new PageText(ConfigHandler.hardcorePassiveGeneration > 0 ? "0a" :"0"), new PagePetalRecipe("1", ModPetalRecipes.nightshadeRecipe));
@@ -562,7 +562,7 @@ public final class LexiconData {
kekimurus.setLexiconPages(new PageText("0"), new PagePetalRecipe("1", ModPetalRecipes.kekimurusRecipe));
gourmaryllis = new BLexiconEntry(LibLexicon.GFLOWER_GOURMARYLLIS, categoryGenerationFlowers);
gourmaryllis.setLexiconPages(new PageText("0"), new PageText("1"), new PageText("2"), new PagePetalRecipe("3", ModPetalRecipes.gourmaryllisRecipe), new PageText("4"), new PageText("5"), new PageText("6"));
gourmaryllis.setLexiconPages(new PageText("0"), new PageText("1"), new PageText("2"), new PagePetalRecipe("3", ModPetalRecipes.gourmaryllisRecipe));
narslimmus = new BLexiconEntry(LibLexicon.GFLOWER_NARSLIMMUS, categoryGenerationFlowers);
narslimmus.setLexiconPages(new PageText("0"), new PagePetalRecipe("1", ModPetalRecipes.narslimmusRecipe));
@@ -672,7 +672,7 @@ public final class LexiconData {
manaBlaster.setLexiconPages(new PageText("0"), new PageText("1"), new PageText("2"), new PageCraftingRecipe("3", ModCraftingRecipes.recipeManaBlaster));
grassSeeds = new BLexiconEntry(LibLexicon.TOOL_GRASS_SEEDS, categoryTools);
grassSeeds.setLexiconPages(new PageText("0"), new PageManaInfusionRecipe("1", ModManaInfusionRecipes.grassSeedsRecipe), new PageManaInfusionRecipe("2", ModManaInfusionRecipes.podzolSeedsRecipe), new PageManaInfusionRecipe("3", ModManaInfusionRecipes.mycelSeedsRecipes));
grassSeeds.setLexiconPages(new PageText("0"), new PageManaInfusionRecipe("1", ModManaInfusionRecipes.grassSeedsRecipe), new PageManaInfusionRecipe("2", ModManaInfusionRecipes.podzolSeedsRecipe), new PageManaInfusionRecipe("3", ModManaInfusionRecipes.mycelSeedsRecipes), new PageText("4"), new PageCraftingRecipe("5", ModCraftingRecipes.recipesAltGrassSeeds));
dirtRod = new BLexiconEntry(LibLexicon.TOOL_DIRT_ROD, categoryTools);
dirtRod.setLexiconPages(new PageText("0"), new PageCraftingRecipe("1", ModCraftingRecipes.recipeDirtRod));
@@ -108,6 +108,9 @@ public class PageCraftingRecipe extends PageRecipe {
@Override
@SideOnly(Side.CLIENT)
public void updateScreen() {
if(GuiScreen.isShiftKeyDown())
return;
if(ticksElapsed % 20 == 0) {
recipeAt++;
@@ -100,6 +100,9 @@ public class PageElvenRecipe extends PageRecipe {
@Override
@SideOnly(Side.CLIENT)
public void updateScreen() {
if(GuiScreen.isShiftKeyDown())
return;
if(ticksElapsed % 20 == 0) {
recipeAt++;
@@ -139,6 +139,9 @@ public class PageManaInfusionRecipe extends PageRecipe {
@Override
@SideOnly(Side.CLIENT)
public void updateScreen() {
if(GuiScreen.isShiftKeyDown())
return;
if(ticksElapsed % 20 == 0) {
recipeAt++;
@@ -68,7 +68,7 @@ public class PagePetalRecipe<T extends RecipePetals> extends PageRecipe {
List<Object> inputs = recipe.getInputs();
int degreePerInput = (int) (360F / inputs.size());
float currentDegree = ConfigHandler.lexiconRotatingItems ? (float) (ClientTickHandler.ticksInGame + ClientTickHandler.partialTicks) : 0;
float currentDegree = ConfigHandler.lexiconRotatingItems ? (GuiScreen.isShiftKeyDown() ? ticksElapsed : (float) (ticksElapsed + ClientTickHandler.partialTicks)) : 0;
for(Object obj : inputs) {
Object input = obj;
@@ -95,8 +95,6 @@ public class PagePetalRecipe<T extends RecipePetals> extends PageRecipe {
return new ItemStack(ModBlocks.altar);
}
@SideOnly(Side.CLIENT)
public void renderManaBar(IGuiLexiconEntry gui, T recipe, int mx, int my) {
// NO-OP
@@ -105,6 +103,9 @@ public class PagePetalRecipe<T extends RecipePetals> extends PageRecipe {
@Override
@SideOnly(Side.CLIENT)
public void updateScreen() {
if(GuiScreen.isShiftKeyDown())
return;
if(ticksElapsed % 20 == 0) {
recipeAt++;
@@ -105,6 +105,7 @@ public final class LibBlockNames {
public static final String SHIMMERROCK = "shimmerrock";
public static final String SHIMMERWOOD_PLANKS = "shimmerwoodPlanks";
public static final String AVATAR = "avatar";
public static final String ALT_GRASS = "altGrass";
public static final String SUBTILE_PUREDAISY = "puredaisy";
public static final String SUBTILE_MANASTAR = "manastar";
@@ -1166,6 +1166,12 @@ tile.botania:shimmerwoodPlanks0Slab.name=Shimmerwood Plank Slab
tile.botania:shimmerwoodPlanks0SlabFull.name=Shimmerwood Plank Slab
tile.botania:shimmerwoodPlanks0Stairs.name=Shimmerwood Plank Stairs
tile.botania:avatar.name=Livingwood Avatar
tile.botania:altGrass0.name=Dry Grass
tile.botania:altGrass1.name=Golden Grass
tile.botania:altGrass2.name=Vivid Grass
tile.botania:altGrass3.name=Scorched Grass
tile.botania:altGrass4.name=Infused Grass
tile.botania:altGrass5.name=Mutated Grass
# FLOWER NAMES
tile.botania:flower..name=Botania Flower
@@ -1409,6 +1415,12 @@ item.botania:fertilizer.name=Floral Fertilizer
item.botania:grassSeeds0.name=Pasture Seeds
item.botania:grassSeeds1.name=Boreal Seeds
item.botania:grassSeeds2.name=Infestation Spores
item.botania:grassSeeds3.name=Dry Pasture Seeds
item.botania:grassSeeds4.name=Golden Pasture Seeds
item.botania:grassSeeds5.name=Vivid Pasture Seeds
item.botania:grassSeeds6.name=Scorched Pasture Seeds
item.botania:grassSeeds7.name=Infused Pasture Seeds
item.botania:grassSeeds8.name=Mutated Pasture Seeds
item.botania:livingwoodTwig.name=Livingwood Twig
item.botania:dirtRod.name=Rod of the Lands
item.botania:terraformRod.name=Rod of the Terra Firma
@@ -2241,12 +2253,6 @@ botania.page.elvenLenses8=Celebratory Lens
botania.page.elvenLenses9=The &1Flare Lens&0 takes over a &1Mana Spreader&0's functionality, preventing it from firing any bursts. Instead, the spreader becomes a continuous particle burst of the color the lens is dyed, in the direction the spreader is firing.<br>There's surely plenty of decorative uses for this.
botania.page.elvenLenses10=Flare Lens
# -- WARP LENS
botania.entry.warpLens=Warp Lens
botania.tagline.warpLens=A Mana Lens to combine with the Force Relay for burst teleporting
botania.page.warpLens0=
botania.page.warpLens1=Hakase Quarries
# -- MANA PRISM
botania.entry.prism=Mana Prism
botania.tagline.prism=Switch a Mana Burst's effective Lens on the fly
@@ -2318,7 +2324,6 @@ botania.entry.heiseiDream=Heisei Dream
botania.tagline.heiseiDream=Turns mobs against each other
botania.page.heiseiDream0=The &1Heisei Dream&0 will, by utilizing &4Mana&0, awaken feelings of anger and revenge in any nearby &4mobs&0, turning them against eachother.
botania.page.heiseiDream1=&oA pleasant era will murder people&r.
botania.page.heiseiDream2=&oHeisei, was broken, broken. Who was the one who lied about peace? See, it's forgotten, forgotten, even the punishement blamed on the altar. Hey, it's breaking, breaking, at the end, even the meaning of shaking is killed.<br>Well, where shall we go? Let's go somewhere, whose ally are you? Whose replacement am I?
# -- TIGERSEYE
botania.entry.tigerseye=Tigerseye
@@ -2344,7 +2349,6 @@ botania.tagline.fallenKanade=Powerful, short range regeneration
botania.page.fallenKanade0=The &1Fallen Kanade&0 is a flower with angelic properties, it'll use &4Mana&0 from nearby &4Mana Pools&0 in order to apply a regeneration effect to any &4players&0 nearby.
botania.page.fallenKanade0a=The &1Fallen Kanade&0 is a flower with angelic properties, it'll use &4Mana&0 from nearby &4Mana Pools&0 in order to apply a regeneration effect to any &4players&0 nearby.<br>Interestingly enough, &4Blood Mages&0 have been known to place odd hexes on their altars which cause this flower to malfunction, that might be something to keep in mind.
botania.page.fallenKanade1=&oHand Sonic, version four&r.
botania.page.fallenKanade2=&oI'll marry you. No matter what kind of sickness you have, even if you can't walk or stand, or even if you can't have kids, I'll still marry you. No matter where or how I met you, I'll fall in love with you.<br>If I can meet you again, against the six billion to one odds, and even if your body can't move, I'll marry you.
# -- EXOFLAME
botania.entry.exoflame=Exoflame
@@ -2482,8 +2486,6 @@ botania.page.daybloom1=These flowers tend to compete among themselves for what s
botania.page.daybloom1a=Having any other &1Dayblooms&0 adjacent to it on any of the four cardinal directions will result in diminishing returns of &4Mana&0 production. This only applies to &1Dayblooms&0 and &1Nightshades&0.<br>&1Dayblooms&0 are classified as &4passive flowers&0. They also don't produce much to begin with, so perhaps hastily upgrading to &1Endoflames&0 or others might be a good idea.
botania.page.daybloom3=Diminishing Returns
botania.page.daybloom2=&oStarting up a brand new day&r.
botania.page.daybloom4=&oHow many of you people out there been hurt in some kind of love affair? And how many times do you swear that you'll never love again? How many lonely, sleepless nights? How many lies? How many fights? And why would you want to put yourself through all that again? "Love is pain," I hear you say. Love has a cruel and bitter way of paying you back for all the faith you ever had in your brain. (...)
botania.page.daybloom5=&oHow could it be that what you need the most can leave you feeling just like a ghost? You never want to feel so sad and lost again. One day you could be looking through an old book in rainy weather. You see a picture of her smiling at you when you were still together. You could be walking down the street and who should you chance to meet. But that same old smile that you've been thinking of all day...
# -- NIGHTSHADE
botania.entry.nightshade=Nightshade
@@ -2546,9 +2548,6 @@ botania.page.gourmaryllis0=The &1Gourmaryllis&0 is one hungry flower. It'll eat
botania.page.gourmaryllis1=The amount of time it takes to digest a delicacy depends on its nutritional value, in layman's terms, the amount of food points it restores.<br>So, a &1Steak&0 will take four seconds to digest, a &1Carrot&0 will take two, a loaf of &1Bread&0 will take two and a half, so on.
botania.page.gourmaryllis2=The amount of &4Mana&0 created also makes use of this value, but in a way where the more nutritious the food is, the more efficient it is. For example, a single &1Steak&0 will produce more &1Mana&0 than two &1Carrots&0, both absolutely and per second.
botania.page.gourmaryllis3=&oA hot pot for our new residents&r.
botania.page.gourmaryllis4=&oWell, if Men ate themselves after death, one would think of less horror and negative feeling matter. But so you know what your cruelty leads to, think, fishes, that even Men eat themselves alive like you.<br>Alive was Job when he said: "Why do you follow me so inhumanely, thou who are eating me alive and getting sick of my flesh?". Do you want to see a Job like this? (...)
botania.page.gourmaryllis5=&oSee a man of those who are followed by claims or accused of crimes, and behold all who are eating them. The bailiff eats him, the jailer eats him, the scribe eats him, the requestor eats him, the lawyer eats him, the inquirer eats him, the witness eats him, the judge eats him and he's not even sentenced he's already eaten. Worse are the Men than the crows. (...)
botania.page.gourmaryllis6=&oThe sad one who was hanged, only eat him the crows past his execution and death, while the one who's being judged, not even executed or sentenced and he's already eaten.<br>The true evil are the Man who eat eachother, and those who commit to it are the largest, those who eat the smallest. For that you, Man, vos estis sal terrae.
# -- NARSLIMMUS
botania.entry.narslimmus=Narslimmus
@@ -2580,7 +2579,7 @@ botania.page.dandelifeon0=The &1Dandelifeon&0 is a flower not recommended for th
botania.page.dandelifeon1=This flower makes use of a cellular automata known as &4Conway's Game of Life&0. The area for this procedure is a 25x25 square centered around the &1Dandelifeon&0 itself.<br>While the flower has a redstone signal, twice every second it'll step the game once.
botania.page.dandelifeon2=The game is executed with the concept of &4Cells&0. The 25x25 area can be seen as a grid of 25 by 25 cells<br>Cells may be live or dead, live if the block in that position is a &1Cellular Block&0 (read on) or dead if it's anything else. &4Neighbours&0 are the eight blocks in the same plane around any one cell.
botania.page.dandelifeon3=Every step of the game, the following transitions might happen: &41)&0 Any live cell with fewer than two or more than three live neighbours dies. &42)&0 Any live cell with exactly two or three live neigbours lives on. &43)&0 Any dead cell with exactly three live neigbours becomes a live cell.
botania.page.dandelifeon4=All of the transitions happen at the same time.<br>Aside from those, a few aditional rules not present in a typical simulation of &4Conway's Game of Life&0 are also present in the &1Dadelifeon&0 procedures, listed in the following pages.
botania.page.dandelifeon4=All of the transitions happen at the same time.<br>Aside from those, a few additional rules not present in a typical simulation of &4Conway's Game of Life&0 are also present in the &1Dandelifeon&0 procedures, listed in the following pages.
botania.page.dandelifeon5=All cells have an age, starting at zero. Whenever a cell lives on, by having two or three neighbours, its age inreases by one. Whenever a dead cell becomes a live cell, the age of the new live cell is equal to the age of the oldest neighbour, plus one. Any cells older than sixty generations will die during the next step.
botania.page.dandelifeon6=Second off, the 3x3 zone centered around the &1Dandelifeon&0 itself is not habitable by cells. Any live cells that would exist in that area are turned into &4Mana&0 instead. The older the cell that would be created, the more &4Mana&0 it makes. Age zero cells produce no &4Mana&0.
botania.page.dandelifeon10=Whenever any live cells are absorbed by the 3x3 zone in the center, all other cells in the board die.<br>A few other restrictions apply to cells, such as having two different &1Dandelifeon&0 flowers affect the same cell will kill it. Lastly, any cell will die if moved by any other means than the &1Dandelifeon&0 itself.
@@ -2848,6 +2847,8 @@ botania.page.grassSeeds0=Watching grass spread is seldom a fun activity. By infu
botania.page.grassSeeds1=&1Pasture Seeds&0 for grass
botania.page.grassSeeds2=&1Boreal Seeds&0 for podzol
botania.page.grassSeeds3=&1Infestation Spores&0 for mycelium
botania.page.grassSeeds4=An additional six types of &1Pasture Seeds&0 can be created, for alternative grass types with various textures.<br>These spread to dirt like normal and can sustain any plant a block of grass can. Similarly, they may only be picked up with &4Silk Touch&0. However, they do not decay back into dirt if there's a block above them.
botania.page.grassSeeds5=The alternate &1Pasture Seeds&0
# -- ROD OF THE LANDS
botania.entry.dirtRod=Rod of the Lands
Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

+1 -1
View File
@@ -1 +1 @@
r1.7-233
r1.7-235
+27
View File
@@ -1,3 +1,30 @@
r1.7 235
*Fixed the Crafty Crate not syncing properly, and by extension, the Wand HUD for it not being accurate.
*Fixed the Hopperhock not updating inventories properly.
*Fixed the Mutated Grass having a missing texture.
*If an arena for the gaia guardian fight is obstructed or has holes, there'll be a quick particle display showing you how large it needs to be.
r1.7 234
*Added 3 new lenses:<ul><li>Mana Lens: Redirectory - Bursts that have this lens fired from a spreader will, when colliding with another spreader, rotate the collided spreader to point towards the one that shot. It also gives bursts the Phantom effect.</li><li>Mana Lens: Celebratory - When it collides with a block it'll make a firework of the color of the burst.</li><li>Mana Lens: Flare - Spreader only. Prevents the spreader from firing any mana bursts. Instead, the spreader fires a continuous beam of particles of the color of the lens. (<a href="https://twitter.com/Vazkii/status/666012115900190720">demo 1</a> | <a href="https://twitter.com/Vazkii/status/666013977089060864">demo 2</a>)</li></ul>
*Added 6 new types of decorative grass (and six new types of pasture seeds to make them) that don't turn into dirt if there's anything above.
*Bellethornes now kill Witches properly.
*Changed armor item icons to match the new armor models.
*Condensed the Paintslinger Lens and Warp Lens entries as well as the 3 new lenses in this version into an "Elven Lenses" page.
*Fixed botania Panes having weird lighting in corners.
*Fixed bursts with the Entropic lens exploding in contact with a full spreader.
*Fixed the Exoflame not using mana properly on interfaced blocks.
*Fixed white tinted mana lens not being able to be crafted.
*Holding shift on a recipe page with multiple recipes will pause the recipe changing. It'll also stop petals/rune pieces from rotating if it's a petal/rune recipe.
*Luminizers and Agricarnations are now quieter.
*Pasture Seeds for blocks other than Grass can now be used on Grass.
*Removed the "lore" pages after some flowers' recipes, as interesting as they are, they served no practical purpose and only confused people.
*Renamed the Talent Shredder achievement to a much more fitting name.
*The bottom side of Mana Pools is now solid (so you can put stuff like levers now, if you want to do that for some reason :V)
*Tweaked armor textures and models a bit.
*[API] Added IDirectioned and IRedirectable to work with the new lens.
*[API] Added IFlowerPlaceable for items that can be placed by the Rannuncarpus.
*[API] Added ILensControl for lenses that control a spreader's behaviour.
*[API] Increased version number to 68.
*[API] Stripped getRotationX() and getRotationY from IManaSpreader and moved it to IDirectioned (which IManaSpreader extends now).
r1.7 233
*Fixed items that take damage when used in a crafting recipe taking damage purely by being put in the grid.
*Fixed the Lexica Botania's main page making the screen dark on lower end (and integrated) graphics cards.
+3 -1
View File
@@ -230,4 +230,6 @@ r1.7-229=1.7.10
r1.7-230=1.7.10
r1.7-231=1.7.10
r1.7-232=1.7.10
r1.7-233=1.7.10
r1.7-233=1.7.10
r1.7-234=1.7.10
r1.7-235=1.7.10