From 4e376723250f7d3b98fbfcfc4ec3a029244ccef9 Mon Sep 17 00:00:00 2001 From: Lizbeth Rika Date: Wed, 22 Apr 2015 18:54:35 +0100 Subject: [PATCH] Added Petite flowers. --- .../java/vazkii/botania/api/BotaniaAPI.java | 25 +++++++++++++-- .../api/internal/DummyMethodHandler.java | 5 +++ .../api/internal/IInternalMethodHandler.java | 2 ++ .../java/vazkii/botania/api/package-info.java | 2 +- .../api/recipe/RecipeManaInfusion.java | 1 - .../botania/api/recipe/RecipeMiniFlower.java | 29 ++++++++++++++++++ .../botania/api/recipe/RecipePureDaisy.java | 2 +- .../block/BlockFloatingSpecialFlower.java | 5 ++- .../common/block/BlockSpecialFlower.java | 10 ++++-- .../botania/common/block/ModBlocks.java | 21 +++++++++---- .../functional/SubTileAgricarnation.java | 16 ++++++++-- .../subtile/functional/SubTileBellethorn.java | 14 +++++++-- .../subtile/functional/SubTileBubbell.java | 13 ++++++-- .../subtile/functional/SubTileHopperhock.java | 15 +++++++-- .../functional/SubTileMarimorphosis.java | 27 +++++++++++++--- .../functional/SubTileRannuncarpus.java | 26 +++++++++++++--- .../core/handler/InternalMethodHandler.java | 5 +++ .../resources/assets/botania/lang/en_US.lang | 12 ++++++++ .../blocks/alt/agricarnationChibi.png | Bin 0 -> 18698 bytes .../textures/blocks/alt/bellethornChibi.png | Bin 0 -> 16259 bytes .../textures/blocks/alt/bubbellChibi.png | Bin 0 -> 16617 bytes .../textures/blocks/alt/hopperhockChibi.png | Bin 0 -> 15979 bytes .../blocks/alt/marimorphosisChibi.png | Bin 0 -> 21366 bytes .../textures/blocks/alt/rannuncarpusChibi.png | Bin 0 -> 15979 bytes 24 files changed, 198 insertions(+), 32 deletions(-) create mode 100644 src/main/java/vazkii/botania/api/recipe/RecipeMiniFlower.java create mode 100644 src/main/resources/assets/botania/textures/blocks/alt/agricarnationChibi.png create mode 100644 src/main/resources/assets/botania/textures/blocks/alt/bellethornChibi.png create mode 100644 src/main/resources/assets/botania/textures/blocks/alt/bubbellChibi.png create mode 100644 src/main/resources/assets/botania/textures/blocks/alt/hopperhockChibi.png create mode 100644 src/main/resources/assets/botania/textures/blocks/alt/marimorphosisChibi.png create mode 100644 src/main/resources/assets/botania/textures/blocks/alt/rannuncarpusChibi.png diff --git a/src/main/java/vazkii/botania/api/BotaniaAPI.java b/src/main/java/vazkii/botania/api/BotaniaAPI.java index b2f2ad0b5..c9ed0e144 100644 --- a/src/main/java/vazkii/botania/api/BotaniaAPI.java +++ b/src/main/java/vazkii/botania/api/BotaniaAPI.java @@ -30,7 +30,6 @@ import net.minecraft.item.crafting.CraftingManager; import net.minecraft.item.crafting.IRecipe; import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.common.util.EnumHelper; -import net.minecraftforge.event.world.ChunkDataEvent.Load; import vazkii.botania.api.brew.Brew; import vazkii.botania.api.internal.DummyMethodHandler; import vazkii.botania.api.internal.DummySubTile; @@ -41,6 +40,7 @@ import vazkii.botania.api.lexicon.LexiconEntry; import vazkii.botania.api.recipe.RecipeBrew; import vazkii.botania.api.recipe.RecipeElvenTrade; import vazkii.botania.api.recipe.RecipeManaInfusion; +import vazkii.botania.api.recipe.RecipeMiniFlower; import vazkii.botania.api.recipe.RecipePetals; import vazkii.botania.api.recipe.RecipePureDaisy; import vazkii.botania.api.recipe.RecipeRuneAltar; @@ -71,11 +71,13 @@ public final class BotaniaAPI { public static List runeAltarRecipes = new ArrayList(); public static List elvenTradeRecipes = new ArrayList(); public static List brewRecipes = new ArrayList(); + public static List miniFlowerRecipes = new ArrayList(); private static BiMap> subTiles = HashBiMap.> create(); private static Map, SubTileSignature> subTileSignatures = new HashMap, SubTileSignature>(); public static Set subtilesForCreativeMenu = new LinkedHashSet(); public static Map subTileMods = new HashMap(); + public static BiMap miniFlowers = HashBiMap. create(); public static Map oreWeights = new HashMap(); public static Map seeds = new HashMap(); @@ -337,6 +339,20 @@ public final class BotaniaAPI { subTiles.put(key, subtileClass); subTileMods.put(key, Loader.instance().activeModContainer().getModId()); } + + /** + * Register a SubTileEntity and makes it a mini flower. Also adds the recipe and returns it. + * @see BotaniaAPI#registerSubTile + */ + public static RecipeManaInfusion registerMiniSubTile(String key, Class subtileClass, String original) { + registerSubTile(key, subtileClass); + miniFlowers.put(original, key); + + RecipeMiniFlower recipe = new RecipeMiniFlower(key, original, 2500); + manaInfusionRecipes.add(recipe); + miniFlowerRecipes.add(recipe); + return recipe; + } /** * Registers a SubTileEntity's signature. @@ -368,7 +384,8 @@ public final class BotaniaAPI { /** * Adds the key for a SubTileEntity into the creative menu. This goes into the - * subtilesForCreativeMenu Set. + * subtilesForCreativeMenu Set. This does not need to be called for mini flowers, + * those will just use the mini flower map to add themselves next to the source. */ public static void addSubTileToCreativeMenu(String key) { subtilesForCreativeMenu.add(key); @@ -471,4 +488,8 @@ public final class BotaniaAPI { public static String getSubTileStringMapping(Class clazz) { return subTiles.inverse().get(clazz); } + + public static Set getAllSubTiles() { + return subTiles.keySet(); + } } diff --git a/src/main/java/vazkii/botania/api/internal/DummyMethodHandler.java b/src/main/java/vazkii/botania/api/internal/DummyMethodHandler.java index 3a111cf23..669085dd5 100644 --- a/src/main/java/vazkii/botania/api/internal/DummyMethodHandler.java +++ b/src/main/java/vazkii/botania/api/internal/DummyMethodHandler.java @@ -118,6 +118,11 @@ public class DummyMethodHandler implements IInternalMethodHandler { return getSubTileAsStack(subTile); } + @Override + public String getStackSubTileKey(ItemStack stack) { + return null; + } + @Override public IIcon getSubTileIconForName(String name) { return Blocks.red_flower.getIcon(0, 0); diff --git a/src/main/java/vazkii/botania/api/internal/IInternalMethodHandler.java b/src/main/java/vazkii/botania/api/internal/IInternalMethodHandler.java index f9485232b..e5538da33 100644 --- a/src/main/java/vazkii/botania/api/internal/IInternalMethodHandler.java +++ b/src/main/java/vazkii/botania/api/internal/IInternalMethodHandler.java @@ -76,6 +76,8 @@ public interface IInternalMethodHandler { public ItemStack getSubTileAsFloatingFlowerStack(String subTile); + public String getStackSubTileKey(ItemStack stack); + public IIcon getSubTileIconForName(String name); public void registerBasicSignatureIcons(String name, IIconRegister register); diff --git a/src/main/java/vazkii/botania/api/package-info.java b/src/main/java/vazkii/botania/api/package-info.java index 455c68e4c..8f2b88db0 100644 --- a/src/main/java/vazkii/botania/api/package-info.java +++ b/src/main/java/vazkii/botania/api/package-info.java @@ -1,4 +1,4 @@ -@API(owner = "Botania", apiVersion = "43", provides = "BotaniaAPI") +@API(owner = "Botania", apiVersion = "44", provides = "BotaniaAPI") package vazkii.botania.api; import cpw.mods.fml.common.API; diff --git a/src/main/java/vazkii/botania/api/recipe/RecipeManaInfusion.java b/src/main/java/vazkii/botania/api/recipe/RecipeManaInfusion.java index 1f88c82eb..368c8d4c4 100644 --- a/src/main/java/vazkii/botania/api/recipe/RecipeManaInfusion.java +++ b/src/main/java/vazkii/botania/api/recipe/RecipeManaInfusion.java @@ -30,7 +30,6 @@ public class RecipeManaInfusion { } public boolean matches(ItemStack stack) { - if(input instanceof ItemStack) { ItemStack inputCopy = ((ItemStack) input).copy(); if(inputCopy.getItemDamage() == Short.MAX_VALUE) diff --git a/src/main/java/vazkii/botania/api/recipe/RecipeMiniFlower.java b/src/main/java/vazkii/botania/api/recipe/RecipeMiniFlower.java new file mode 100644 index 000000000..30b0b314a --- /dev/null +++ b/src/main/java/vazkii/botania/api/recipe/RecipeMiniFlower.java @@ -0,0 +1,29 @@ +/** + * This class was created by . 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 @ [Apr 22, 2015, 5:57:59 PM (GMT)] + */ +package vazkii.botania.api.recipe; + +import vazkii.botania.api.BotaniaAPI; +import net.minecraft.item.ItemStack; + +public class RecipeMiniFlower extends RecipeManaInfusion { + + public RecipeMiniFlower(String flower, String mini, int mana) { + super(BotaniaAPI.internalHandler.getSubTileAsStack(flower), BotaniaAPI.internalHandler.getSubTileAsStack(mini), mana); + setAlchemy(true); + } + + @Override + public boolean matches(ItemStack stack) { + String key = BotaniaAPI.internalHandler.getStackSubTileKey(stack); + return key != null && key.equals(input); + } + +} diff --git a/src/main/java/vazkii/botania/api/recipe/RecipePureDaisy.java b/src/main/java/vazkii/botania/api/recipe/RecipePureDaisy.java index 866a1de05..ea5b5c846 100644 --- a/src/main/java/vazkii/botania/api/recipe/RecipePureDaisy.java +++ b/src/main/java/vazkii/botania/api/recipe/RecipePureDaisy.java @@ -63,7 +63,7 @@ public class RecipePureDaisy { /** * Returns true if the block was placed (and if the Pure Daisy should do particles and stuffs). - * Should only place the block if world.isRemote, but should return true if it would've placed + * Should only place the block if !world.isRemote, but should return true if it would've placed * it otherwise. You may return false to cancel the normal particles and do your own. */ public boolean set(World world, int x, int y, int z, SubTileEntity pureDaisy) { diff --git a/src/main/java/vazkii/botania/common/block/BlockFloatingSpecialFlower.java b/src/main/java/vazkii/botania/common/block/BlockFloatingSpecialFlower.java index 898b0860a..8e35d3954 100644 --- a/src/main/java/vazkii/botania/common/block/BlockFloatingSpecialFlower.java +++ b/src/main/java/vazkii/botania/common/block/BlockFloatingSpecialFlower.java @@ -56,8 +56,11 @@ public class BlockFloatingSpecialFlower extends BlockFloatingFlower implements I @Override public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) { - for(String s : BotaniaAPI.subtilesForCreativeMenu) + for(String s : BotaniaAPI.subtilesForCreativeMenu) { par3List.add(ItemBlockSpecialFlower.ofType(new ItemStack(par1), s)); + if(BotaniaAPI.miniFlowers.containsKey(s)) + par3List.add(ItemBlockSpecialFlower.ofType(new ItemStack(par1), BotaniaAPI.miniFlowers.get(s))); + } } @Override diff --git a/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java b/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java index 2ddf6d5c6..5de222ab0 100644 --- a/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java +++ b/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java @@ -121,14 +121,18 @@ public class BlockSpecialFlower extends BlockFlower implements ITileEntityProvid @Override public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) { - for(String s : BotaniaAPI.subtilesForCreativeMenu) + for(String s : BotaniaAPI.subtilesForCreativeMenu) { par3List.add(ItemBlockSpecialFlower.ofType(s)); + if(BotaniaAPI.miniFlowers.containsKey(s)) + par3List.add(ItemBlockSpecialFlower.ofType(BotaniaAPI.miniFlowers.get(s))); + } } @Override public void registerBlockIcons(IIconRegister par1IconRegister) { - for(String s : BotaniaAPI.subtilesForCreativeMenu) - BotaniaAPI.getSignatureForName(s).registerIcons(par1IconRegister); + for(String s : BotaniaAPI.getAllSubTiles()) + if(!s.isEmpty()) + BotaniaAPI.getSignatureForName(s).registerIcons(par1IconRegister); } @Override diff --git a/src/main/java/vazkii/botania/common/block/ModBlocks.java b/src/main/java/vazkii/botania/common/block/ModBlocks.java index 141193f1f..290f17384 100644 --- a/src/main/java/vazkii/botania/common/block/ModBlocks.java +++ b/src/main/java/vazkii/botania/common/block/ModBlocks.java @@ -18,6 +18,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.oredict.OreDictionary; import vazkii.botania.api.BotaniaAPI; +import vazkii.botania.api.subtile.SubTileEntity; import vazkii.botania.client.lib.LibResources; import vazkii.botania.common.block.corporea.BlockCorporeaFunnel; import vazkii.botania.common.block.corporea.BlockCorporeaIndex; @@ -390,7 +391,7 @@ public final class ModBlocks { BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_NARSLIMMUS, SubTileNarslimmus.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_SPECTROLUS, SubTileSpectrolus.class); - BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_BELLETHORN, SubTileBellethorn.class); + registerSubTileWithMini(LibBlockNames.SUBTILE_BELLETHORN, SubTileBellethorn.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_DREADTHORN, SubTileDreadthorn.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_HEISEI_DREAM, SubTileHeiseiDream.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_TIGERSEYE, SubTileTigerseye.class); @@ -398,11 +399,11 @@ public final class ModBlocks { BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_ORECHID, SubtileOrechid.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_FALLEN_KANADE, SubTileFallenKanade.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_EXOFLAME, SubTileExoflame.class); - BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_AGRICARNATION, SubTileAgricarnation.class); - BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_HOPPERHOCK, SubTileHopperhock.class); + registerSubTileWithMini(LibBlockNames.SUBTILE_AGRICARNATION, SubTileAgricarnation.class); + registerSubTileWithMini(LibBlockNames.SUBTILE_HOPPERHOCK, SubTileHopperhock.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_TANGLEBERRIE, SubTileTangleberrie.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_JIYUULIA, SubTileJiyuulia.class); - BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_RANNUNCARPUS, SubTileRannuncarpus.class); + registerSubTileWithMini(LibBlockNames.SUBTILE_RANNUNCARPUS, SubTileRannuncarpus.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_HYACIDUS, SubTileHyacidus.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_POLLIDISIAC, SubTilePollidisiac.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_CLAYCONIA, SubTileClayconia.class); @@ -411,11 +412,19 @@ public final class ModBlocks { BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_VINCULOTUS, SubTileVinculotus.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_SPECTRANTHEMUM, SubTileSpectranthemum.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_MEDUMONE, SubTileMedumone.class); - BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_MARIMORPHOSIS, SubTileMarimorphosis.class); - BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_BUBBELL, SubTileBubbell.class); + registerSubTileWithMini(LibBlockNames.SUBTILE_MARIMORPHOSIS, SubTileMarimorphosis.class); + registerSubTileWithMini(LibBlockNames.SUBTILE_BUBBELL, SubTileBubbell.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_SOLEGNOLIA, SubTileSolegnolia.class); } + private static void registerSubTileWithMini(String key, Class clazz) { + BotaniaAPI.registerSubTile(key, clazz); + + for(Class innerClazz : clazz.getDeclaredClasses()) + if(innerClazz.getSimpleName().equals("Mini")) + BotaniaAPI.registerMiniSubTile(key + "Chibi", innerClazz, key); + } + private static void registerTile(Class clazz, String key) { GameRegistry.registerTileEntity(clazz, LibResources.PREFIX_MOD + key); } diff --git a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileAgricarnation.java b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileAgricarnation.java index e5637a857..f722db823 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileAgricarnation.java +++ b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileAgricarnation.java @@ -26,14 +26,16 @@ import vazkii.botania.common.lexicon.LexiconData; public class SubTileAgricarnation extends SubTileFunctional { private static final int RANGE = 5; + private static final int RANGE_MINI = 2; @Override public void onUpdate() { super.onUpdate(); if(ticksExisted % 6 == 0 && redstoneSignal == 0) { - int x = supertile.xCoord + supertile.getWorldObj().rand.nextInt(RANGE * 2 + 1) - RANGE; - int z = supertile.zCoord + supertile.getWorldObj().rand.nextInt(RANGE * 2 + 1) - RANGE; + int range = getRange(); + int x = supertile.xCoord + supertile.getWorldObj().rand.nextInt(RANGE * 2 + 1) - range; + int z = supertile.zCoord + supertile.getWorldObj().rand.nextInt(RANGE * 2 + 1) - range; for(int i = 4; i > -2; i--) { int y = supertile.yCoord + i; @@ -78,10 +80,14 @@ public class SubTileAgricarnation extends SubTileFunctional { public int getMaxMana() { return 200; } + + public int getRange() { + return RANGE; + } @Override public RadiusDescriptor getRadius() { - return new RadiusDescriptor.Square(toChunkCoordinates(), RANGE); + return new RadiusDescriptor.Square(toChunkCoordinates(), getRange()); } @Override @@ -89,4 +95,8 @@ public class SubTileAgricarnation extends SubTileFunctional { return LexiconData.agricarnation; } + public static class Mini extends SubTileAgricarnation { + @Override public int getRange() { return RANGE_MINI; } + } + } diff --git a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileBellethorn.java b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileBellethorn.java index c94811ef6..851033004 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileBellethorn.java +++ b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileBellethorn.java @@ -26,6 +26,7 @@ import vazkii.botania.common.lexicon.LexiconData; public class SubTileBellethorn extends SubTileFunctional { public static final int RANGE = 6; + public static final int RANGE_MINI = 1; @Override public int getColor() { @@ -47,7 +48,8 @@ public class SubTileBellethorn extends SubTileFunctional { final int manaToUse = getManaCost(); if(ticksExisted % 5 == 0) { - List entities = supertile.getWorldObj().getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(supertile.xCoord - RANGE, supertile.yCoord, supertile.zCoord - RANGE, supertile.xCoord + RANGE, supertile.yCoord + 1, supertile.zCoord + RANGE)); + int range = getRange(); + List entities = supertile.getWorldObj().getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(supertile.xCoord - range, supertile.yCoord, supertile.zCoord - range, supertile.xCoord + range, supertile.yCoord + 1, supertile.zCoord + range)); IEntitySelector selector = getSelector(); for(EntityLivingBase entity : entities) { @@ -71,6 +73,10 @@ public class SubTileBellethorn extends SubTileFunctional { public int getManaCost() { return 24; } + + public int getRange() { + return RANGE; + } public IEntitySelector getSelector() { return new IEntitySelector() { @@ -85,12 +91,16 @@ public class SubTileBellethorn extends SubTileFunctional { @Override public RadiusDescriptor getRadius() { - return new RadiusDescriptor.Square(toChunkCoordinates(), RANGE); + return new RadiusDescriptor.Square(toChunkCoordinates(), getRange()); } @Override public LexiconEntry getEntry() { return LexiconData.bellethorne; } + + public static class Mini extends SubTileBellethorn { + @Override public int getRange() { return RANGE_MINI; } + } } diff --git a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileBubbell.java b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileBubbell.java index 7ca9b6efb..1656a9d88 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileBubbell.java +++ b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileBubbell.java @@ -27,6 +27,7 @@ import vazkii.botania.common.lexicon.LexiconData; public class SubTileBubbell extends SubTileFunctional { private static final int RANGE = 12; + private static final int RANGE_MINI = 6; private static final int COST_PER_TICK = 4; private static final String TAG_RANGE = "range"; @@ -39,7 +40,7 @@ public class SubTileBubbell extends SubTileFunctional { if(mana > COST_PER_TICK) { mana -= COST_PER_TICK; - if(ticksExisted % 10 == 0 && range < RANGE) + if(ticksExisted % 10 == 0 && range < getRange()) range++; for(int i = -range; i < range + 1; i++) @@ -90,15 +91,23 @@ public class SubTileBubbell extends SubTileFunctional { public int getColor() { return 0x0DCF89; } + + public int getRange() { + return RANGE; + } @Override public RadiusDescriptor getRadius() { - return new RadiusDescriptor.Circle(toChunkCoordinates(), RANGE); + return new RadiusDescriptor.Circle(toChunkCoordinates(), range); } @Override public LexiconEntry getEntry() { return LexiconData.bubbell; } + + public static class Mini extends SubTileBubbell { + @Override public int getRange() { return RANGE_MINI; } + } } diff --git a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileHopperhock.java b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileHopperhock.java index 72735e700..774ae6b5b 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileHopperhock.java +++ b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileHopperhock.java @@ -42,6 +42,9 @@ public class SubTileHopperhock extends SubTileFunctional { private static final String TAG_FILTER_TYPE = "filterType"; private static final int RANGE_MANA = 10; private static final int RANGE = 6; + + private static final int RANGE_MANA_MINI = 2; + private static final int RANGE_MINI = 1; int filterType = 0; @@ -53,7 +56,7 @@ public class SubTileHopperhock extends SubTileFunctional { return; boolean pulledAny = false; - int range = mana > 0 ? 10 : 6; + int range = getRange(); int x = supertile.xCoord; int y = supertile.yCoord; @@ -186,7 +189,11 @@ public class SubTileHopperhock extends SubTileFunctional { @Override public RadiusDescriptor getRadius() { - return new RadiusDescriptor.Square(toChunkCoordinates(), mana > 0 ? RANGE_MANA : RANGE); + return new RadiusDescriptor.Square(toChunkCoordinates(), getRange()); + } + + public int getRange() { + return mana > 0 ? RANGE_MANA : RANGE; } @Override @@ -232,4 +239,8 @@ public class SubTileHopperhock extends SubTileFunctional { public int getColor() { return 0x3F3F3F; } + + public static class Mini extends SubTileHopperhock { + @Override public int getRange() { return mana > 0 ? RANGE_MANA_MINI : RANGE_MINI; } + } } diff --git a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileMarimorphosis.java b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileMarimorphosis.java index 6c3f2c8ad..1dd9a52f6 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileMarimorphosis.java +++ b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileMarimorphosis.java @@ -32,6 +32,9 @@ public class SubTileMarimorphosis extends SubTileFunctional { private static final int COST = 12; private static final int RANGE = 8; private static final int RANGE_Y = 5; + + private static final int RANGE_MINI = 2; + private static final int RANGE_Y_MINI = 1; private static final Type[] TYPES = new Type[] { Type.FOREST, @@ -87,9 +90,12 @@ public class SubTileMarimorphosis extends SubTileFunctional { public ChunkCoordinates getCoordsToPut() { List possibleCoords = new ArrayList(); - for(int i = -RANGE; i < RANGE + 1; i++) - for(int j = -RANGE_Y; j < RANGE_Y; j++) - for(int k = -RANGE; k < RANGE + 1; k++) { + int range = getRange(); + int rangeY = getRangeY(); + + for(int i = -range; i < range + 1; i++) + for(int j = -range; j < rangeY; j++) + for(int k = -range; k < range + 1; k++) { int x = supertile.xCoord + i; int y = supertile.yCoord + j; int z = supertile.zCoord + k; @@ -105,7 +111,15 @@ public class SubTileMarimorphosis extends SubTileFunctional { @Override public RadiusDescriptor getRadius() { - return new RadiusDescriptor.Square(toChunkCoordinates(), RANGE); + return new RadiusDescriptor.Square(toChunkCoordinates(), getRange()); + } + + public int getRange() { + return RANGE; + } + + public int getRangeY() { + return RANGE_Y; } @Override @@ -128,4 +142,9 @@ public class SubTileMarimorphosis extends SubTileFunctional { return LexiconData.marimorphosis; } + public static class Mini extends SubTileMarimorphosis { + @Override public int getRange() { return RANGE_MINI; } + @Override public int getRangeY() { return RANGE_Y_MINI; } + } + } diff --git a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileRannuncarpus.java b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileRannuncarpus.java index 9e04eedac..77dad9e9e 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileRannuncarpus.java +++ b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileRannuncarpus.java @@ -46,6 +46,10 @@ public class SubTileRannuncarpus extends SubTileFunctional { private static final int RANGE_PLACE_MANA = 8; private static final int RANGE_PLACE = 6; private static final int RANGE_PLACE_Y = 6; + + private static final int RANGE_PLACE_MANA_MINI = 3; + private static final int RANGE_PLACE_MINI = 2; + private static final int RANGE_PLACE_Y_MINI = 2; @Override public void onUpdate() { @@ -60,7 +64,8 @@ public class SubTileRannuncarpus extends SubTileFunctional { boolean scanned = false; List validPositions = new ArrayList(); - int rangePlace = mana > 0 ? RANGE_PLACE_MANA : RANGE_PLACE; + int rangePlace = getRange(); + int rangePlaceY = getRangeY(); int x = supertile.xCoord; int y = supertile.yCoord; @@ -76,7 +81,7 @@ public class SubTileRannuncarpus extends SubTileFunctional { if(stackItem instanceof ItemBlock || stackItem instanceof ItemReed) { if(!scanned) { for(int i = -rangePlace; i < rangePlace + 1; i++) - for(int j = -RANGE_PLACE_Y; j < RANGE_PLACE_Y + 1; j++) + for(int j = -rangePlaceY; j < rangePlaceY + 1; j++) for(int l = -rangePlace; l < rangePlace + 1; l++) { int xp = x + i; int yp = y + j; @@ -162,9 +167,17 @@ public class SubTileRannuncarpus extends SubTileFunctional { @Override public RadiusDescriptor getRadius() { - return new RadiusDescriptor.Square(toChunkCoordinates(), mana > 0 ? RANGE_PLACE_MANA : RANGE_PLACE); + return new RadiusDescriptor.Square(toChunkCoordinates(), getRange()); } + public int getRange() { + return mana > 0 ? RANGE_PLACE_MANA : RANGE_PLACE; + } + + public int getRangeY() { + return RANGE_PLACE_Y; + } + @Override public int getMaxMana() { return 20; @@ -180,6 +193,11 @@ public class SubTileRannuncarpus extends SubTileFunctional { return LexiconData.rannuncarpus; } + public static class Mini extends SubTileRannuncarpus { + @Override public int getRange() { return RANGE_PLACE_MINI; } + @Override public int getRangeY() { return RANGE_PLACE_Y_MINI; } + } + static class BlockData { Block block; @@ -199,5 +217,5 @@ public class SubTileRannuncarpus extends SubTileFunctional { } } - + } diff --git a/src/main/java/vazkii/botania/common/core/handler/InternalMethodHandler.java b/src/main/java/vazkii/botania/common/core/handler/InternalMethodHandler.java index 2dbac0117..d92bde674 100644 --- a/src/main/java/vazkii/botania/common/core/handler/InternalMethodHandler.java +++ b/src/main/java/vazkii/botania/common/core/handler/InternalMethodHandler.java @@ -151,6 +151,11 @@ public class InternalMethodHandler extends DummyMethodHandler { return ItemBlockSpecialFlower.ofType(new ItemStack(ModBlocks.floatingSpecialFlower), subTile); } + @Override + public String getStackSubTileKey(ItemStack stack) { + return ItemBlockSpecialFlower.getType(stack); + } + @Override public IManaNetwork getManaNetworkInstance() { return ManaNetworkHandler.instance; diff --git a/src/main/resources/assets/botania/lang/en_US.lang b/src/main/resources/assets/botania/lang/en_US.lang index 9168548c2..273128fd8 100644 --- a/src/main/resources/assets/botania/lang/en_US.lang +++ b/src/main/resources/assets/botania/lang/en_US.lang @@ -945,6 +945,8 @@ tile.botania:flower.spectrolus.reference=Profiting off Hate # - FUNCTIONAL tile.botania:flower.bellethorn.name=Bellethorne tile.botania:flower.bellethorn.reference=world's end, girl's rondo +tile.botania:flower.bellethornChibi.name=Bellethorne Petite +tile.botania:flower.bellethornChibi.reference=world's end, girl's rondo tile.botania:flower.dreadthorn.name=Dreadthorne tile.botania:flower.dreadthorn.reference=Plan C tile.botania:flower.heiseiDream.name=Heisei Dream @@ -961,14 +963,20 @@ tile.botania:flower.exoflame.name=Exoflame tile.botania:flower.exoflame.reference=Wearing her black ribbons tile.botania:flower.agricarnation.name=Agricarnation tile.botania:flower.agricarnation.reference=Wear on the 25th of april +tile.botania:flower.agricarnationChibi.name=Agricarnation Petite +tile.botania:flower.agricarnationChibi.reference=Wear on the 25th of april tile.botania:flower.hopperhock.name=Hopperhock tile.botania:flower.hopperhock.reference=It all funnels into it +tile.botania:flower.hopperhockChibi.name=Hopperhock Petite +tile.botania:flower.hopperhockChibi.reference=It all funnels into it tile.botania:flower.tangleberrie.name=Tangleberrie tile.botania:flower.tangleberrie.reference=No frying pans allowed tile.botania:flower.jiyuulia.name=Jiyuulia tile.botania:flower.jiyuulia.reference=Flügel der Freiheit tile.botania:flower.rannuncarpus.name=Rannuncarpus tile.botania:flower.rannuncarpus.reference=That's handy +tile.botania:flower.rannuncarpusChibi.name=Rannuncarpus Petite +tile.botania:flower.rannuncarpusChibi.reference=That's handy tile.botania:flower.hyacidus.name=Hyacidus tile.botania:flower.hyacidus.reference=If you don't walk, it doesn't hurt tile.botania:flower.pollidisiac.name=Pollidisiac @@ -987,8 +995,12 @@ tile.botania:flower.medumone.name=Medumone tile.botania:flower.medumone.reference='Twas Hades all along tile.botania:flower.marimorphosis.name=Marimorphosis tile.botania:flower.marimorphosis.reference=Solid as a rock +tile.botania:flower.marimorphosisChibi.name=Marimorphosis Petite +tile.botania:flower.marimorphosisChibi.reference=Solid as a rock tile.botania:flower.bubbell.name=Bubbell tile.botania:flower.bubbell.reference=And whistle +tile.botania:flower.bubbellChibi.name=Bubbell Petite +tile.botania:flower.bubbellChibi.reference=And whistle tile.botania:flower.solegnolia.name=Solegnolia tile.botania:flower.solegnolia.reference=All your magnets are belong to us diff --git a/src/main/resources/assets/botania/textures/blocks/alt/agricarnationChibi.png b/src/main/resources/assets/botania/textures/blocks/alt/agricarnationChibi.png new file mode 100644 index 0000000000000000000000000000000000000000..fdec754463e82c03f619274f3da513dd651e455a GIT binary patch literal 18698 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/botania/textures/blocks/alt/rannuncarpusChibi.png b/src/main/resources/assets/botania/textures/blocks/alt/rannuncarpusChibi.png new file mode 100644 index 0000000000000000000000000000000000000000..36d9794fba3a26207ddd81e4b70e451d4ff368e7 GIT binary patch literal 15979 zcmeI3Pi)&%9LHZ#K@hZQ9AMfeF)I@iV>tekIIT^RX*3%xBBSbp)*&SJV!yOj6Fb;$ zllHO#C$19}e-3bfGZJt@95}EY;e@y$7#t82qC%5EV~6mb9VgC9@+fQwAw5f}-|x@& z_ntrRPkr%gi)WwOmpYsR0PI_sFE8Qy0rI=|9{l&{jV{Eu`&#oCd;s=eA-}1e6Z?+< zpkKAC%fWKx8N+m&8ECmRl<72EI2(Y%$xaKJYbX$EXvKDl>D^C1OAEGDOrO^(a-}tg zR_*yM51rdOTQ#@VOx;SKETsw^0~ctb01BOE!|{zyF&)-5aGSWLv=F8QYsK^_(xI?i zSrq164+&aE6HQrFgc&`fXgOU`9v4(u$x4bWsk*2rMsCJX@$)VXlB$Y0L-aSD0Cq&jKNb~<>y(jidUh+YT}L2w zVa;6+is>}zsDJgItJ&&zyn4;8yElJ79(m0W2_BE|_uMrN-G9}bNP2>bV)+u9k ztyMR0{Z)5Dm;La>j`5sSD*e94jShZ`OUQTEJrkYYz>jil z+|vhkeK0vgl}Kdb*ipxxAS01T7A}Qoh6?yujX4j&!1b!G+bBh=Y%xYC%*_dpp0^## zZTrUy5}iGm>Omn?h5;(!rKpLrA}aZ+tQcC>$STh#^idKeueg?7-%QAJqN-F?6>E*$ z>xB zDrF1OICnx7t}kQ3@dN0XXrWxfj*M+vMm-N_Em_NoS*>P?H94n?Fl$=kOkIa6RFP7X z^C5srB`F^%U3SfNvPXKQEnM2HLuBbWO+@*bx>%pd)kGaaD9+~cP^&>JH>*T!ap{D7 zr1Z0%jn6mONaT>w|J^Relo{!2-uCgT+)S)iyk^4_>>PS&*c%5Lc6buCpywm9&x+}I zqxFxj{>el%;eIusNzSm6Nwxv93eu2wFs#0^C$mQX zWR;|N#m0`kOHEf&AAo@V3S42!`85DM%x}LC;bCGTDBO^)O%0%lN{t zC-~|~lVMtVfh|pjY3V@uoMQ(iwbvWvPN>Mg#^?k;hu`8*DX(c+tsv2ETCr$%P-D4l zsscd{{fqB~iY zs>M5@fUr%Di_M3Ma$FP;w#jj^`A|`givq$nIW9IID#~$DK-eb7#pXjrIW7ta+vK>| ze5feLMFC-(92c7p73H`nAZ(N4V)LP*92W(IZE{>}K2((BqJXeXj*HEQigH{O5Vpy2 zvH4I@j*9}qHaRXfA1camQ9#%x$HnGDML8}C2;1bi*nFrc$3+2Qn;aLL4;AIOC?IT; z<6`rnq8t|mgl%$MY(7+!y?bk_+r_E3aou$r+EDs`De&?3L{Q@&;mW%M!K8K%-uME$ z*8qrx-+ci@~?B%%VG3UkP?A25l$+gzI?d* zr;<84|U1C?@TmCA@+iVMe5Mq;Fqs{ w4~rx;!_9ao$$LE9c=+)>nG?71u)5tpc7AyJ+WwvIN$G{tXUiWvdGVD$0Y?@EBLDyZ literal 0 HcmV?d00001