From 04bf3f49d738d0334e7c7e556b92458c4bfaf776 Mon Sep 17 00:00:00 2001 From: David Vierra Date: Thu, 12 Jul 2018 16:28:46 -1000 Subject: [PATCH] Add Iridium-Plated Bore Lens --- .../pharaun/gregtania/botania/GTItemLens.java | 126 ++++++++++++++++++ .../gregtania/botania/LensIridiumBore.java | 90 +++++++++++++ .../gregtania/lexicon/GTLexiconData.java | 7 + .../gregtania/misc/ModCraftingRecipes.java | 15 +++ .../gregtania/proxies/CommonProxy.java | 4 + .../assets/gregtania/lang/en_US.lang | 9 +- .../textures/items/lensIridiumBore.png | Bin 0 -> 3044 bytes .../textures/items/lensIridiumBoreGlass.png | Bin 0 -> 2877 bytes 8 files changed, 250 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/gmail/pharaun/gregtania/botania/GTItemLens.java create mode 100644 src/main/java/com/gmail/pharaun/gregtania/botania/LensIridiumBore.java create mode 100644 src/main/resources/assets/gregtania/textures/items/lensIridiumBore.png create mode 100644 src/main/resources/assets/gregtania/textures/items/lensIridiumBoreGlass.png diff --git a/src/main/java/com/gmail/pharaun/gregtania/botania/GTItemLens.java b/src/main/java/com/gmail/pharaun/gregtania/botania/GTItemLens.java new file mode 100644 index 0000000..168ee22 --- /dev/null +++ b/src/main/java/com/gmail/pharaun/gregtania/botania/GTItemLens.java @@ -0,0 +1,126 @@ +/** + * 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 31, 2014, 3:02:58 PM (GMT)] + * Modified by Codewarrior0 + */ +package com.gmail.pharaun.gregtania.botania; + +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.projectile.EntityThrowable; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.MovingObjectPosition; +import vazkii.botania.api.internal.IManaBurst; +import vazkii.botania.api.mana.BurstProperties; +import vazkii.botania.api.mana.ILensControl; +import vazkii.botania.api.mana.IManaSpreader; +import vazkii.botania.api.mana.ITinyPlanetExcempt; + +public class GTItemLens extends Item implements ILensControl, ITinyPlanetExcempt { + + private final LensIridiumBore BORE_LENS; + static IIcon iconIridiumBoreGlass; + + public GTItemLens() { + super(); + setUnlocalizedName("lensIridiumBore"); + GameRegistry.registerItem(this, "lensIridiumBore"); + setMaxStackSize(1); + setHasSubtypes(true); + BORE_LENS = new LensIridiumBore(); + } + + @Override + public void registerIcons(IIconRegister par1IconRegister) { + iconIridiumBoreGlass = par1IconRegister.registerIcon("gregtania:lensIridiumBoreGlass"); + this.itemIcon = par1IconRegister.registerIcon("gregtania:lensIridiumBore"); + } + + @Override + public void apply(ItemStack stack, BurstProperties props) { + BORE_LENS.apply(stack, props); + } + + @Override + public boolean collideBurst(IManaBurst burst, MovingObjectPosition pos, boolean isManaBlock, boolean dead, ItemStack stack) { + EntityThrowable entity = (EntityThrowable) burst; + return BORE_LENS.collideBurst(burst, entity, pos, isManaBlock, dead, stack); + } + + @Override + public void updateBurst(IManaBurst burst, ItemStack stack) { + EntityThrowable entity = (EntityThrowable) burst; + BORE_LENS.updateBurst(burst, entity, stack); + + } + + + + @Override + public int getLensColor(ItemStack stack) { + return 0xFFFFFF; + } + + @Override + public boolean requiresMultipleRenderPasses() { + return true; + } + + @Override + public IIcon getIconFromDamageForRenderPass(int par1, int par2) { + return par2 == 1 ? itemIcon : iconIridiumBoreGlass; + } + + @Override + public boolean doParticles(IManaBurst burst, ItemStack stack) { + return true; + } + + @Override + public boolean canCombineLenses(ItemStack itemStack, ItemStack itemStack1) { + return false; + } + + @Override + public ItemStack getCompositeLens(ItemStack stack) { + return null; + } + + @Override + public ItemStack setCompositeLens(ItemStack sourceLens, ItemStack compositeLens) { + return sourceLens; + } + + @Override + public boolean shouldPull(ItemStack stack) { + return true; + } + + @Override + public boolean isControlLens(ItemStack stack) { + return false; + } + + @Override + public boolean allowBurstShooting(ItemStack stack, IManaSpreader spreader, boolean redstone) { + return BORE_LENS.allowBurstShooting(stack, spreader, redstone); + } + + @Override + public void onControlledSpreaderTick(ItemStack stack, IManaSpreader spreader, boolean redstone) { + BORE_LENS.onControlledSpreaderTick(stack, spreader, redstone); + } + + @Override + public void onControlledSpreaderPulse(ItemStack stack, IManaSpreader spreader, boolean redstone) { + BORE_LENS.onControlledSpreaderPulse(stack, spreader, redstone); + } +} diff --git a/src/main/java/com/gmail/pharaun/gregtania/botania/LensIridiumBore.java b/src/main/java/com/gmail/pharaun/gregtania/botania/LensIridiumBore.java new file mode 100644 index 0000000..ad9d825 --- /dev/null +++ b/src/main/java/com/gmail/pharaun/gregtania/botania/LensIridiumBore.java @@ -0,0 +1,90 @@ +package com.gmail.pharaun.gregtania.botania; + +/** + * 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 24, 2015, 4:36:20 PM (GMT)] + * Modified by Codewarrior0 + */ + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.projectile.EntityThrowable; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import vazkii.botania.api.internal.IManaBurst; +import vazkii.botania.api.mana.IManaBlock; +import vazkii.botania.common.block.ModBlocks; +import vazkii.botania.common.core.handler.ConfigHandler; +import vazkii.botania.common.item.ModItems; +import vazkii.botania.common.item.lens.ItemLens; +import vazkii.botania.common.item.lens.Lens; + +public class LensIridiumBore extends Lens { + + @Override + public boolean collideBurst(IManaBurst burst, EntityThrowable entity, MovingObjectPosition pos, boolean isManaBlock, boolean dead, ItemStack stack) { + World world = entity.worldObj; + int x = pos.blockX; + int y = pos.blockY; + int z = pos.blockZ; + Block block = world.getBlock(x, y, z); + int meta = world.getBlockMetadata(x, y, z); + ItemStack composite = ((ItemLens) ModItems.lens).getCompositeLens(stack); + boolean warp = composite != null && composite.getItem() == ModItems.lens && composite.getItemDamage() == ItemLens.WARP; + + if(warp && (block == ModBlocks.pistonRelay || block == Blocks.piston || block == Blocks.piston_extension || block == Blocks.piston_head)) + return false; + + int harvestLevel = 999; + + TileEntity tile = world.getTileEntity(x, y, z); + + float hardness = block.getBlockHardness(world, x, y, z); + int neededHarvestLevel = block.getHarvestLevel(meta); + int mana = burst.getMana(); + + ChunkCoordinates coords = burst.getBurstSourceChunkCoordinates(); + if((coords.posX != x || coords.posY != y || coords.posZ != z) && !(tile instanceof IManaBlock) && neededHarvestLevel <= harvestLevel && hardness != -1 && (burst.isFake() || mana >= 24)) { + List items = new ArrayList(); + + items.addAll(block.getDrops(world, x, y, z, meta, 0)); + + if(!burst.hasAlreadyCollidedAt(x, y, z)) { + if(!burst.isFake() && !entity.worldObj.isRemote) { + world.setBlockToAir(x, y, z); + if(ConfigHandler.blockBreakParticles) + entity.worldObj.playAuxSFX(2001, x, y, z, Block.getIdFromBlock(block) + (meta << 12)); + + boolean offBounds = coords.posY < 0; + boolean doWarp = warp && !offBounds; + int dropX = doWarp ? coords.posX : x; + int dropY = doWarp ? coords.posY : y; + int dropZ = doWarp ? coords.posZ : z; + + for(ItemStack stack_ : items) + world.spawnEntityInWorld(new EntityItem(world, dropX + 0.5, dropY + 0.5, dropZ + 0.5, stack_)); + + burst.setMana(mana - 24); + } + } + + dead = false; + } + + return dead; + } + +} \ No newline at end of file diff --git a/src/main/java/com/gmail/pharaun/gregtania/lexicon/GTLexiconData.java b/src/main/java/com/gmail/pharaun/gregtania/lexicon/GTLexiconData.java index 7f0fb9b..b548430 100644 --- a/src/main/java/com/gmail/pharaun/gregtania/lexicon/GTLexiconData.java +++ b/src/main/java/com/gmail/pharaun/gregtania/lexicon/GTLexiconData.java @@ -3,6 +3,7 @@ import vazkii.botania.api.BotaniaAPI; import vazkii.botania.api.lexicon.LexiconEntry; import vazkii.botania.api.lexicon.LexiconPage; +import vazkii.botania.common.lexicon.page.PageCraftingRecipe; import vazkii.botania.common.lexicon.page.PagePetalRecipe; import vazkii.botania.common.lexicon.page.PageRuneRecipe; import vazkii.botania.common.lexicon.page.PageText; @@ -24,6 +25,7 @@ public class GTLexiconData { public static LexiconEntry entryEvolvedOrechidIgnem; public static LexiconEntry entryEvolvedOrechidEndium; public static LexiconEntry entryStratodendron; + private static GTLexiconEntry entryIridiumBore; public static void init() { BotaniaAPI.addCategory(gtLexiconCategory = new GTLexiconCategory("gregtania.category.gregtania")); @@ -59,7 +61,12 @@ public static void init() { entryStratodendron = new GTLexiconEntry(SUBTILE_STRATODENDRON, gtLexiconCategory); + entryIridiumBore = new GTLexiconEntry("lensIridiumBore", gtLexiconCategory); + entryIridiumBore.setLexiconPages( + new PageText("0"), + new PageCraftingRecipe("1", recipeIridiumBoreLens) + ); } public static void postInit() { diff --git a/src/main/java/com/gmail/pharaun/gregtania/misc/ModCraftingRecipes.java b/src/main/java/com/gmail/pharaun/gregtania/misc/ModCraftingRecipes.java index 2799ec2..e2e3778 100644 --- a/src/main/java/com/gmail/pharaun/gregtania/misc/ModCraftingRecipes.java +++ b/src/main/java/com/gmail/pharaun/gregtania/misc/ModCraftingRecipes.java @@ -2,16 +2,21 @@ import com.gmail.pharaun.gregtania.botania.SubTileClayconiaAlluvia; import com.gmail.pharaun.gregtania.botania.Util; +import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.ShapedOreRecipe; import vazkii.botania.api.BotaniaAPI; import vazkii.botania.api.recipe.RecipePetals; import vazkii.botania.api.recipe.RecipeRuneAltar; import vazkii.botania.common.Botania; import vazkii.botania.common.block.ModBlocks; +import vazkii.botania.common.item.ModItems; import vazkii.botania.common.item.block.ItemBlockSpecialFlower; +import vazkii.botania.common.item.lens.ItemLens; import static com.gmail.pharaun.gregtania.misc.ModFlowers.*; +import static com.gmail.pharaun.gregtania.proxies.CommonProxy.iridiumBoreLens; /** * Created by Rio on 7/12/2018. @@ -37,6 +42,8 @@ public class ModCraftingRecipes { public static RecipePetals recipeBumbleiscus; public static RecipePetals recipeClayconiaAlluvia; + public static ShapedOreRecipe recipeIridiumBoreLens; + private static final int costTier1 = 5200; private static final int costTier2 = 8000; private static final int costTier3 = 12000; @@ -145,5 +152,13 @@ public static void init() { "petalGray", "petalLightGray", "petalLightGray", "petalCyan" ); } + + recipeIridiumBoreLens = new ShapedOreRecipe(iridiumBoreLens, + "SPS", "PBP", "SPS", + 'P', "plateIridium", + 'S', "screwIridium", + 'B', new ItemStack(ModItems.lens, 1, ItemLens.MINE) + ); + GameRegistry.addRecipe(recipeIridiumBoreLens); } } diff --git a/src/main/java/com/gmail/pharaun/gregtania/proxies/CommonProxy.java b/src/main/java/com/gmail/pharaun/gregtania/proxies/CommonProxy.java index 884410d..f63f8e1 100644 --- a/src/main/java/com/gmail/pharaun/gregtania/proxies/CommonProxy.java +++ b/src/main/java/com/gmail/pharaun/gregtania/proxies/CommonProxy.java @@ -1,5 +1,6 @@ package com.gmail.pharaun.gregtania.proxies; +import com.gmail.pharaun.gregtania.botania.GTItemLens; import com.gmail.pharaun.gregtania.botania.Util; import com.gmail.pharaun.gregtania.lexicon.GTLexiconData; import com.gmail.pharaun.gregtania.misc.BotaniaHelper; @@ -33,8 +34,11 @@ public class CommonProxy { + public static GTItemLens iridiumBoreLens; + public void preInit(FMLPreInitializationEvent event) { CS.GT.mAfterPostInit.add(this::afterGregPostInit); + iridiumBoreLens = new GTItemLens(); } public void init(FMLInitializationEvent event) { diff --git a/src/main/resources/assets/gregtania/lang/en_US.lang b/src/main/resources/assets/gregtania/lang/en_US.lang index 4cc88a8..c9c1496 100644 --- a/src/main/resources/assets/gregtania/lang/en_US.lang +++ b/src/main/resources/assets/gregtania/lang/en_US.lang @@ -71,4 +71,11 @@ tile.botania:flower.gregtania.bumblebiscus.reference=What little bumbles are mad gregtania.entry.bumblebiscus=Bumblebiscus gregtania.tagline.bumblebiscus=Bumble Hives from Silage gregtania.page.bumblebiscus0=Can't find any bumblebee hives? No problem! The &1Bumblebiscus&0 will turn any nearby &4Dry Grass Bales&0 into random &4Bumble Hives&0, at a hefty mana cost. -gregtania.page.bumblebiscus1=&oMade by breeding HTNYCAEVIH with SUCSEEBIH&r. \ No newline at end of file +gregtania.page.bumblebiscus1=&oMade by breeding HTNYCAEVIH with SUCSEEBIH&r. + +item.lensIridiumBore.name=Iridium-Plated Bore Lens + +gregtania.entry.lensIridiumBore=Iridium-Plated Bore Lens +gregtania.tagline.lensIridiumBore=Improved Bore Lens +gregtania.page.lensIridiumBore0=Some rare materials are simply too robust for an ordinary &1Bore Lens&0 to break. To that end, a more powerful Bore can be made by reinforcing it with Iridium. The &1Iridium-Plated Bore Lens&0 is mighty enough to break through almost any block, including Obsidian. However, it cannot be combined with any other lenses. +gregtania.page.lensIridiumBore1=Iridium-Plated Bore Lens diff --git a/src/main/resources/assets/gregtania/textures/items/lensIridiumBore.png b/src/main/resources/assets/gregtania/textures/items/lensIridiumBore.png new file mode 100644 index 0000000000000000000000000000000000000000..681b321f40127190dd9075d3ec25739476259827 GIT binary patch literal 3044 zcmV004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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 bz`y_ib@25?6VrR?00000NkvXXu0mjfyRBNf literal 0 HcmV?d00001