From fadb96c009feb2a2215b9b204e1bc41b461baa22 Mon Sep 17 00:00:00 2001 From: Lizbeth Rika Date: Fri, 30 Jan 2015 12:42:11 +0000 Subject: [PATCH] Added the Narslimmus. --- .../common/block/BlockSpecialFlower.java | 1 + .../botania/common/block/ModBlocks.java | 2 + .../subtile/generating/SubTileNarslimmus.java | 89 ++++++++++++++++++ .../common/core/proxy/CommonProxy.java | 2 + .../botania/common/lib/LibBlockNames.java | 2 + .../resources/assets/botania/lang/en_US.lang | 3 + .../flowerSlime.png => alt/narslimmus.png} | Bin .../botania/textures/blocks/narslimmus.png | Bin 0 -> 15964 bytes 8 files changed, 99 insertions(+) create mode 100644 src/main/java/vazkii/botania/common/block/subtile/generating/SubTileNarslimmus.java rename src/main/resources/assets/botania/textures/blocks/{unused/flowerSlime.png => alt/narslimmus.png} (100%) create mode 100644 src/main/resources/assets/botania/textures/blocks/narslimmus.png diff --git a/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java b/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java index 72fb19d5f..477592c6f 100644 --- a/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java +++ b/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java @@ -70,6 +70,7 @@ public class BlockSpecialFlower extends BlockFlower implements ITileEntityProvid LibBlockNames.SUBTILE_ENTROPINNYUM, LibBlockNames.SUBTILE_KEKIMURUS, LibBlockNames.SUBTILE_GOURMARYLLIS, + LibBlockNames.SUBTILE_NARSLIMMUS, // Functional LibBlockNames.SUBTILE_JADED_AMARANTHUS, diff --git a/src/main/java/vazkii/botania/common/block/ModBlocks.java b/src/main/java/vazkii/botania/common/block/ModBlocks.java index 778fa9a01..401bcac43 100644 --- a/src/main/java/vazkii/botania/common/block/ModBlocks.java +++ b/src/main/java/vazkii/botania/common/block/ModBlocks.java @@ -90,6 +90,7 @@ import vazkii.botania.common.block.subtile.generating.SubTileGourmaryllis; import vazkii.botania.common.block.subtile.generating.SubTileHydroangeas; import vazkii.botania.common.block.subtile.generating.SubTileKekimurus; import vazkii.botania.common.block.subtile.generating.SubTileMunchdew; +import vazkii.botania.common.block.subtile.generating.SubTileNarslimmus; import vazkii.botania.common.block.subtile.generating.SubTileNightshade; import vazkii.botania.common.block.subtile.generating.SubTileThermalily; import vazkii.botania.common.block.tile.TileAlfPortal; @@ -328,6 +329,7 @@ public final class ModBlocks { BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_ENTROPINNYUM, SubTileEntropinnyum.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_KEKIMURUS, SubTileKekimurus.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_GOURMARYLLIS, SubTileGourmaryllis.class); + BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_NARSLIMMUS, SubTileNarslimmus.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_BELLETHORN, SubTileBellethorn.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_DREADTHORN, SubTileDreadthorn.class); diff --git a/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileNarslimmus.java b/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileNarslimmus.java new file mode 100644 index 000000000..2fb90fdbd --- /dev/null +++ b/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileNarslimmus.java @@ -0,0 +1,89 @@ +/** + * 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 @ [Jan 29, 2015, 10:43:54 PM (GMT)] + */ +package vazkii.botania.common.block.subtile.generating; + +import java.util.List; + +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.monster.EntitySlime; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.event.entity.living.LivingSpawnEvent; +import vazkii.botania.api.subtile.SubTileGenerating; +import cpw.mods.fml.common.eventhandler.Event.Result; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; + +public class SubTileNarslimmus extends SubTileGenerating { + + public static final String TAG_WORLD_SPAWNED = "Botania:WorldSpawned"; + + @Override + public void onUpdate() { + super.onUpdate(); + + if(ticksExisted % 5 == 0) { + float range = 2F; + List slimes = supertile.getWorldObj().getEntitiesWithinAABB(EntitySlime.class, AxisAlignedBB.getBoundingBox(supertile.xCoord - range, supertile.yCoord - range, supertile.zCoord - range, supertile.xCoord + range, supertile.yCoord + range, supertile.zCoord + range)); + for(EntitySlime slime : slimes) { + if(slime.getEntityData().getBoolean(TAG_WORLD_SPAWNED)) { + int size = slime.getSlimeSize(); + int mul = (int) Math.pow(2, size); + int mana = 160 * mul; + int remain = getMaxMana() - this.mana; + if(!slime.worldObj.isRemote) { + slime.setDead(); + slime.worldObj.playSoundAtEntity(slime, "mob.slime." + (size > 1 ? "big" : "small"), 1F, 0.02F); + this.mana = Math.min(getMaxMana(), this.mana + mana); + sync(); + } + + for (int j = 0; j < mul * 8; ++j) { + float f = slime.worldObj.rand.nextFloat() * (float)Math.PI * 2.0F; + float f1 = slime.worldObj.rand.nextFloat() * 0.5F + 0.5F; + float f2 = MathHelper.sin(f) * (float) size * 0.5F * f1; + float f3 = MathHelper.cos(f) * (float) size * 0.5F * f1; + float f4 = slime.worldObj.rand.nextFloat() * (float) size * 0.5F * f1; + slime.worldObj.spawnParticle("slime", slime.posX + (double)f2, slime.boundingBox.minY + f4, slime.posZ + (double)f3, 0.0D, 0.0D, 0.0D); + } + break; + } + } + } + } + + @Override + public int getMaxMana() { + return 5000; + } + + @Override + public int getColor() { + return 0x71C373; + } + + public static class SpawnIntercepter { + + @SubscribeEvent + public void onSpawn(LivingSpawnEvent.CheckSpawn event) { + if(event.entityLiving instanceof EntitySlime && event.getResult() != Result.DENY && isSlimeChunk(event.entityLiving.worldObj, MathHelper.floor_double(event.x), MathHelper.floor_double(event.z))) + event.entityLiving.getEntityData().setBoolean(TAG_WORLD_SPAWNED, true); + } + + public boolean isSlimeChunk(World world, int x, int z) { + Chunk chunk = world.getChunkFromBlockCoords(x, z); + return chunk.getRandomWithSeed(987234911L).nextInt(10) == 0; + } + + } + +} diff --git a/src/main/java/vazkii/botania/common/core/proxy/CommonProxy.java b/src/main/java/vazkii/botania/common/core/proxy/CommonProxy.java index 27198a2cf..176791190 100644 --- a/src/main/java/vazkii/botania/common/core/proxy/CommonProxy.java +++ b/src/main/java/vazkii/botania/common/core/proxy/CommonProxy.java @@ -22,6 +22,7 @@ import vazkii.botania.api.lexicon.LexiconEntry; import vazkii.botania.common.Botania; import vazkii.botania.common.achievement.ModAchievements; import vazkii.botania.common.block.ModBlocks; +import vazkii.botania.common.block.subtile.generating.SubTileNarslimmus; import vazkii.botania.common.brew.ModBrews; import vazkii.botania.common.brew.ModPotions; import vazkii.botania.common.core.command.CommandDownloadLatest; @@ -93,6 +94,7 @@ public class CommonProxy { MinecraftForge.EVENT_BUS.register(new PixieHandler()); MinecraftForge.EVENT_BUS.register(new SheddingHandler()); MinecraftForge.EVENT_BUS.register(new SpawnerChangingHandler()); + MinecraftForge.EVENT_BUS.register(new SubTileNarslimmus.SpawnIntercepter()); FMLInterModComms.sendMessage("ProjectE", "interdictionblacklist", EntityManaBurst.class.getCanonicalName()); diff --git a/src/main/java/vazkii/botania/common/lib/LibBlockNames.java b/src/main/java/vazkii/botania/common/lib/LibBlockNames.java index 66a394dce..58875fae6 100644 --- a/src/main/java/vazkii/botania/common/lib/LibBlockNames.java +++ b/src/main/java/vazkii/botania/common/lib/LibBlockNames.java @@ -85,6 +85,8 @@ public final class LibBlockNames { public static final String SUBTILE_ENTROPINNYUM = "entropinnyum"; public static final String SUBTILE_KEKIMURUS = "kekimurus"; public static final String SUBTILE_GOURMARYLLIS = "gourmaryllis"; + public static final String SUBTILE_NARSLIMMUS = "narslimmus"; + public static final String SUBTILE_SPECTROLUS = "spectrolus"; public static final String SUBTILE_BELLETHORN = "bellethorn"; public static final String SUBTILE_DREADTHORN = "dreadthorn"; diff --git a/src/main/resources/assets/botania/lang/en_US.lang b/src/main/resources/assets/botania/lang/en_US.lang index 3722185d9..5413f2978 100644 --- a/src/main/resources/assets/botania/lang/en_US.lang +++ b/src/main/resources/assets/botania/lang/en_US.lang @@ -684,6 +684,8 @@ tile.botania:flower.kekimurus.name=Kekimurus tile.botania:flower.kekimurus.reference=This flower is a lie tile.botania:flower.gourmaryllis.name=Gourmaryllis tile.botania:flower.gourmaryllis.reference=Fuyukai Desu +tile.botania:flower.narslimmus.name=Narslimmus +tile.botania:flower.narslimmus.reference=What's this? It's all sticky # - FUNCTIONAL tile.botania:flower.bellethorn.name=Bellethorne @@ -2161,3 +2163,4 @@ botania.page.tcIntegration6b=The official frowny face # -- BUILDCRAFT INTEGRATION botania.entry.bcIntegration=Buildcraft Integration botania.page.bcIntegration0=Recent advances in piping technology have allowed &1Gates&0 to get a feel of the &4Mana&0 around them. A &1Gate&0 can now sense whether a &4Mana&0 container is empty, full or if it contains any mana.
&1Gates&0 can also use the &1Mana Detector&0 trigger to detect if a mana is passing by the pipe block. In addition, they can also sense when a &1Runic Altar&0 is ready to create runes. + diff --git a/src/main/resources/assets/botania/textures/blocks/unused/flowerSlime.png b/src/main/resources/assets/botania/textures/blocks/alt/narslimmus.png similarity index 100% rename from src/main/resources/assets/botania/textures/blocks/unused/flowerSlime.png rename to src/main/resources/assets/botania/textures/blocks/alt/narslimmus.png diff --git a/src/main/resources/assets/botania/textures/blocks/narslimmus.png b/src/main/resources/assets/botania/textures/blocks/narslimmus.png new file mode 100644 index 0000000000000000000000000000000000000000..37e62b89caa6196c3855506ddc9ee7d0a9999bed GIT binary patch literal 15964 zcmeI3&u`mg7{}j9fS}T*-9T`_%7g?0$9B>riWeQeE(EyZxe!P6cZ;i z6}i%y!F6+P*TKuX3oH8Wrk*zvQ>BSQM}f)$*|1!-Q%nTDDtU%tDIo+^yv<@_ z8X6Qbzl9jZi$WkgVDvCOpQirHB=;plgOM;RbGE z%X5iN8L4a4ZO?Y=_LwH4^w@^UoKz}N+avqiY>sT&^=7vTf*#V5N_SUca<%M2!)v$ z;n9<(W!P=^v4TX`?oV~!2$wYvm&j7gh_WIo*%et)Gify~uf_D;N|d}}8)kK9K%UC2 z$g-N5R8y&*JXVR8lMQ2No^~^Xc(s^?p{rHfX=+}{Y-%+uwX9k}>KDdpMk`32u^YBS zdW1{qf;6f)rV3V-I&Zn2X6bmoTp|TY(==2)S52oUWnDa&saC~YdQuS&W;Zs(oG#;> zf^jviR|9mFN?blu96Om9}@}#rTuP2%AU*|p1@n9-1U#i$G6e0V{6O~>be9K z#_L_X>a{foPuIwDxXG688V)LG=Yj<1d&B$>@Vnaf?ZLmb-ScnZ51v2&3;h0y)$5v7 z!$wI87i(B>YxC8e#lc+^ZvNq2SAc&rD%r7Q32DJjQ3}#fS-<6O{Z-g`jjf=5J}Z+S zc^@Iao;04OrKi}^c$${>mCstHS4#C-ql#lH_+QvPyqC#q8!lxtnRKQg(Z#f4(d^*H zYS|>GtP5v{lI>~e#7N<(al%-lC+tpD>;)^>dEHX-`bORyrRddhXj4Wf)}4IlkLXUi zQeM0f3J5#oxY&HCEXPFwVTT+Sn-7)cxF{g(kmF+Wp|Tto1%w@PTx>p6mgAy;utScE z&4TbCE;b)3%W+Xa*dfQo=0jyUE(!=cnSfUrZ3i_M41a$FP;cF1wD`A}Joivq$9 zIW9IID$8+EK-eM2#pXk0IW7taJLI_7e5fqPMFC-l92c7pmF2i7AncIiV)LQ092W(I z9WrrE^gqVL7Wo3RO+K}}`|Yo;lFu{+eQv3O(C#A$y>tPgzkG849ic55p+C+dq`rgD z{q`GYt{p+>E@8erz0%o(_TP2=2J(IXwyxU}L*tRbi@%*mtSfyc=ZE=tuLlf{UR?0w z6+=Plxr|@5r_ua{qrUZBE7A<~VD;U#APE&f5Q^a*##erM-LHTB0@3xk1#a*C`o4ep z=PQ2o%X(lE7lmRdJNLai+Th}kulQjSx*E0)VtFm?7aCIthW7N!m4ViyAwai61Jx`B zl|i&{c`;xDMqmuX3x^sGV*m((@FD-1r#2 P|DK;+D1UbN?D@X|!Gw6F literal 0 HcmV?d00001