mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-12-23 11:49:23 +01:00
Made potion rings require blaze and work in the off hand
This commit is contained in:
parent
ba91bc35c0
commit
73d3dc95bc
5 changed files with 176 additions and 6 deletions
|
@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems;
|
|||
import de.ellpeck.actuallyadditions.mod.util.ModUtil;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
import net.minecraftforge.oredict.RecipeSorter;
|
||||
|
||||
public final class InitCrafting{
|
||||
|
@ -40,6 +41,9 @@ public final class InitCrafting{
|
|||
|
||||
RecipeSorter.register(ModUtil.MOD_ID+":recipeKeepDataShaped", RecipeKeepDataShaped.class, RecipeSorter.Category.SHAPED, "after:minecraft:shaped");
|
||||
RecipeSorter.register(ModUtil.MOD_ID+":recipeKeepDataShapeless", RecipeKeepDataShapeless.class, RecipeSorter.Category.SHAPELESS, "after:minecraft:shapeless");
|
||||
|
||||
GameRegistry.addRecipe(new RecipePotionRingCharging());
|
||||
RecipeSorter.register(ModUtil.MOD_ID+":recipePotionRingCharging", RecipePotionRingCharging.class, RecipeSorter.Category.SHAPELESS, "after:minecraft:shapeless");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -25,10 +25,13 @@ import net.minecraft.enchantment.EnchantmentData;
|
|||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.init.Enchantments;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.init.PotionTypes;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemFood;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.crafting.IRecipe;
|
||||
import net.minecraft.potion.PotionHelper;
|
||||
import net.minecraft.potion.PotionUtils;
|
||||
import net.minecraftforge.common.IPlantable;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
|
@ -669,8 +672,12 @@ public final class ItemCrafting{
|
|||
}
|
||||
|
||||
public static void addRingRecipeWithStack(ItemStack mainStack, int meta){
|
||||
GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemPotionRing, 1, meta), mainStack, mainStack, mainStack, mainStack, new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()), new ItemStack(Items.NETHER_WART), new ItemStack(Items.POTIONITEM), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RING.ordinal()));
|
||||
ItemStack potion = new ItemStack(Items.POTIONITEM);
|
||||
PotionUtils.addPotionToItemStack(potion, PotionTypes.AWKWARD);
|
||||
|
||||
GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemPotionRing, 1, meta), mainStack, mainStack, mainStack, mainStack, new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()), new ItemStack(Items.NETHER_WART), potion, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RING.ordinal()));
|
||||
RECIPES_POTION_RINGS.add(RecipeUtil.lastIRecipe());
|
||||
|
||||
GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemPotionRingAdvanced, 1, meta), new ItemStack(InitItems.itemPotionRing, 1, meta), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.ENDER_STAR.ordinal()));
|
||||
RECIPES_POTION_RINGS.add(RecipeUtil.lastIRecipe());
|
||||
}
|
||||
|
|
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* This file ("RecipePotionRingCharging.java") is part of the Actually Additions mod for Minecraft.
|
||||
* It is created and owned by Ellpeck and distributed
|
||||
* under the Actually Additions License to be found at
|
||||
* http://ellpeck.de/actaddlicense
|
||||
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
|
||||
*
|
||||
* © 2015-2016 Ellpeck
|
||||
*/
|
||||
|
||||
package de.ellpeck.actuallyadditions.mod.crafting;
|
||||
|
||||
import de.ellpeck.actuallyadditions.mod.items.ItemPotionRing;
|
||||
import de.ellpeck.actuallyadditions.mod.util.StackUtil;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.inventory.InventoryCrafting;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.crafting.IRecipe;
|
||||
import net.minecraft.util.NonNullList;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.ForgeHooks;
|
||||
|
||||
public class RecipePotionRingCharging implements IRecipe{
|
||||
|
||||
@Override
|
||||
public boolean matches(InventoryCrafting inv, World worldIn){
|
||||
boolean hasRing = false;
|
||||
|
||||
for(int i = 0; i < inv.getSizeInventory(); i++){
|
||||
ItemStack stack = inv.getStackInSlot(i);
|
||||
if(StackUtil.isValid(stack)){
|
||||
if(stack.getItem() instanceof ItemPotionRing){
|
||||
if(!hasRing){
|
||||
hasRing = true;
|
||||
}
|
||||
else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if(stack.getItem() != Items.BLAZE_POWDER){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return hasRing;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getCraftingResult(InventoryCrafting inv){
|
||||
ItemStack inputRing = StackUtil.getNull();
|
||||
int totalBlaze = 0;
|
||||
|
||||
for(int i = 0; i < inv.getSizeInventory(); i++){
|
||||
ItemStack stack = inv.getStackInSlot(i);
|
||||
if(StackUtil.isValid(stack)){
|
||||
if(stack.getItem() instanceof ItemPotionRing){
|
||||
inputRing = stack;
|
||||
}
|
||||
else if(stack.getItem() == Items.BLAZE_POWDER){
|
||||
totalBlaze += 20;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(StackUtil.isValid(inputRing) && totalBlaze > 0){
|
||||
ItemStack copy = inputRing.copy();
|
||||
|
||||
int total = ItemPotionRing.getStoredBlaze(copy)+totalBlaze;
|
||||
if(total <= ItemPotionRing.MAX_BLAZE){
|
||||
ItemPotionRing.setStoredBlaze(copy, total);
|
||||
return copy;
|
||||
}
|
||||
}
|
||||
|
||||
return StackUtil.getNull();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRecipeSize(){
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getRecipeOutput(){
|
||||
return StackUtil.getNull();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NonNullList<ItemStack> getRemainingItems(InventoryCrafting inv){
|
||||
return ForgeHooks.defaultRecipeGetRemainingItems(inv);
|
||||
}
|
||||
}
|
|
@ -25,11 +25,13 @@ import net.minecraft.entity.player.EntityPlayer;
|
|||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.potion.Potion;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.NonNullList;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
@ -41,6 +43,7 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem, IDi
|
|||
|
||||
public static final ThePotionRings[] ALL_RINGS = ThePotionRings.values();
|
||||
|
||||
public static final int MAX_BLAZE = 800;
|
||||
private final boolean isAdvanced;
|
||||
|
||||
public ItemPotionRing(boolean isAdvanced, String name){
|
||||
|
@ -55,12 +58,28 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem, IDi
|
|||
return damage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getDurabilityForDisplay(ItemStack stack){
|
||||
double diff = MAX_BLAZE-this.getStoredBlaze(stack);
|
||||
return diff/MAX_BLAZE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRGBDurabilityForDisplay(ItemStack stack){
|
||||
int curr = this.getStoredBlaze(stack);
|
||||
return MathHelper.hsvToRGB(Math.max(0.0F, (float)curr/MAX_BLAZE)/3.0F, 1.0F, 1.0F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName(ItemStack stack){
|
||||
return stack.getItemDamage() >= ALL_RINGS.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+ALL_RINGS[stack.getItemDamage()].name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean showDurabilityBar(ItemStack itemStack){
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate(ItemStack stack, World world, Entity player, int par4, boolean par5){
|
||||
super.onUpdate(stack, world, player, par4, par5);
|
||||
|
@ -68,11 +87,26 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem, IDi
|
|||
if(!world.isRemote && stack.getItemDamage() < ALL_RINGS.length){
|
||||
if(player instanceof EntityPlayer){
|
||||
EntityPlayer thePlayer = (EntityPlayer)player;
|
||||
|
||||
int storedBlaze = getStoredBlaze(stack);
|
||||
if(storedBlaze > 0){
|
||||
ItemStack equippedStack = thePlayer.getHeldItemMainhand();
|
||||
this.effectEntity(thePlayer, stack, StackUtil.isValid(equippedStack) && stack == equippedStack);
|
||||
ItemStack offhandStack = thePlayer.getHeldItemOffhand();
|
||||
|
||||
if(this.effectEntity(thePlayer, stack, (StackUtil.isValid(equippedStack) && stack == equippedStack) || (StackUtil.isValid(offhandStack) && stack == offhandStack))){
|
||||
if(world.getTotalWorldTime()%10 == 0){
|
||||
setStoredBlaze(stack, storedBlaze-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged){
|
||||
return slotChanged || !ItemStack.areItemsEqual(oldStack, newStack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemStackDisplayName(ItemStack stack){
|
||||
|
@ -95,6 +129,10 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem, IDi
|
|||
public void getSubItems(Item item, CreativeTabs tab, NonNullList list){
|
||||
for(int j = 0; j < ALL_RINGS.length; j++){
|
||||
list.add(new ItemStack(this, 1, j));
|
||||
|
||||
ItemStack full = new ItemStack(this, 1, j);
|
||||
setStoredBlaze(full, MAX_BLAZE);
|
||||
list.add(full);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -116,10 +154,28 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem, IDi
|
|||
};
|
||||
}
|
||||
|
||||
public static int getStoredBlaze(ItemStack stack){
|
||||
if(!StackUtil.isValid(stack) || !stack.hasTagCompound()){
|
||||
return 0;
|
||||
}
|
||||
else{
|
||||
return stack.getTagCompound().getInteger("Blaze");
|
||||
}
|
||||
}
|
||||
|
||||
public static void setStoredBlaze(ItemStack stack, int amount){
|
||||
if(StackUtil.isValid(stack)){
|
||||
if(!stack.hasTagCompound()){
|
||||
stack.setTagCompound(new NBTTagCompound());
|
||||
}
|
||||
stack.getTagCompound().setInteger("Blaze", amount);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean update(ItemStack stack, TileEntity tile, int elapsedTicks){
|
||||
boolean advanced = ((ItemPotionRing)stack.getItem()).isAdvanced;
|
||||
int range = advanced ? 96 : 16;
|
||||
int range = advanced ? 48 : 16;
|
||||
List<EntityLivingBase> entities = tile.getWorld().getEntitiesWithinAABB(EntityLivingBase.class, new AxisAlignedBB(tile.getPos().getX()-range, tile.getPos().getY()-range, tile.getPos().getZ()-range, tile.getPos().getX()+range, tile.getPos().getY()+range, tile.getPos().getZ()+range));
|
||||
if(entities != null && !entities.isEmpty()){
|
||||
if(advanced){
|
||||
|
@ -161,7 +217,7 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem, IDi
|
|||
return 325;
|
||||
}
|
||||
|
||||
private void effectEntity(EntityLivingBase thePlayer, ItemStack stack, boolean canUseBasic){
|
||||
private boolean effectEntity(EntityLivingBase thePlayer, ItemStack stack, boolean canUseBasic){
|
||||
ThePotionRings effect = ThePotionRings.values()[stack.getItemDamage()];
|
||||
Potion potion = Potion.getPotionById(effect.effectID);
|
||||
PotionEffect activeEffect = thePlayer.getActivePotionEffect(potion);
|
||||
|
@ -169,11 +225,21 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem, IDi
|
|||
if(!((ItemPotionRing)stack.getItem()).isAdvanced){
|
||||
if(canUseBasic){
|
||||
thePlayer.addPotionEffect(new PotionEffect(potion, effect.activeTime, effect.normalAmplifier, true, false));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else{
|
||||
thePlayer.addPotionEffect(new PotionEffect(potion, effect.activeTime, effect.advancedAmplifier, true, false));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addInformation(ItemStack stack, EntityPlayer playerIn, List<String> tooltip, boolean advanced){
|
||||
super.addInformation(stack, playerIn, tooltip, advanced);
|
||||
|
||||
tooltip.add(this.getStoredBlaze(stack)+"/"+MAX_BLAZE+" Blaze stored");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -903,7 +903,7 @@ booklet.actuallyadditions.chapter.jams.text.2=A <imp>Jam House<r> and <n>its inh
|
|||
booklet.actuallyadditions.chapter.jams.text.3=So. <n>You're probably wondering what the names of the jams mean. <n>Now, let me tell you: <n><n><i>-Honeydew Melon and Kiwi <n>-Honeydew Melon and Coconut <n>-Pineapple and Coconut <n>-Cherry, Apple and Cinnamon <n>-Plum, Apple and Lemon <n>-Grape, Kiwi and Banana <n>-Currant, Banana and Raspberry <n><n><r>Now, which one is which, you may ask? Figure it out yourself.
|
||||
|
||||
booklet.actuallyadditions.chapter.potionRings.name=Potion Rings
|
||||
booklet.actuallyadditions.chapter.potionRings.text.1=The <item>Potion Rings<r> have two versions: A <imp>normal version<r> and an <imp>advanced version<r>. <n>The normal version, when you have it in your hand, will give you a <imp>Potion Effect<r> of Level 1. The advanced version can be anywhere in your inventory and gives you an effect of Level 2!
|
||||
booklet.actuallyadditions.chapter.potionRings.text.1=<item>Potion Rings<r> can permanenty grant a set of potion effects. <n>A <item>Potion Ring<r> has <imp>two tiers<r>. The first tier needs to be <imp>held in any hand<r> and gives an effect of <imp>level one<r> while the second tier can be <imp>anywhere inside the inventory<r> and grants an effect of <imp>level two<r>. <n>To be able to use <item>Potion Rings<r> they first have to be <imp>filled up<r> with <item>Blaze Powder<r>. To do this, put the ring into a <imp>Crafting Grid<r> with <imp>one or more<r> Blaze Powder. <n>Over time, the powder inside the ring will be <imp>used up<r> to grant you the effect.
|
||||
|
||||
booklet.actuallyadditions.chapter.drill.name=Drills
|
||||
booklet.actuallyadditions.chapter.drill.text.1=The <item>Drill<r> works like a Pickaxe and a Shovel. It uses <imp>RF<r> per block. It can be <imp>charged in an Energizer<r> and upgraded by <imp>sneak-right-clicking<r> with it in your hand. There is <imp>a lot of upgrades<r>, but here is an explanation of some of them: <n>The <item>Mining Uprgades<r> enlarge the hole which the Drill digs. <n>The <item>Placement Upgrade<r>, after you right-click it in any slot of your hotbar, will make the Drill able to <imp>place a block from that slot by right-clicking<r>. You can also put a <item>Battery<r> inside the Drill to give it more charge.
|
||||
|
|
Loading…
Reference in a new issue