Added the Updraft Array (feather + glowstone)

This commit is contained in:
WayofTime 2016-07-01 19:07:43 -04:00
parent 39d215887f
commit b4ff6d5d2f
11 changed files with 124 additions and 11 deletions

View file

@ -0,0 +1,52 @@
package WayofTime.bloodmagic.alchemyArray;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import WayofTime.bloodmagic.api.alchemyCrafting.AlchemyArrayEffect;
import WayofTime.bloodmagic.api.iface.IAlchemyArray;
public class AlchemyArrayEffectUpdraft extends AlchemyArrayEffect
{
public AlchemyArrayEffectUpdraft(String key)
{
super(key);
}
@Override
public boolean update(TileEntity tile, int ticksActive)
{
return false;
}
@Override
public void onEntityCollidedWithBlock(IAlchemyArray array, World world, BlockPos pos, IBlockState state, Entity entity)
{
double motionY = 1.5;
entity.fallDistance = 0;
entity.motionY = motionY;
}
@Override
public void writeToNBT(NBTTagCompound tag)
{
}
@Override
public void readFromNBT(NBTTagCompound tag)
{
}
@Override
public AlchemyArrayEffect getNewCopy()
{
return new AlchemyArrayEffectUpdraft(key);
}
}

View file

@ -60,7 +60,15 @@ public class AlchemyArrayRecipeRegistry
{
arrayRecipe.catalystMap.put(ItemStackWrapper.getHolder(catalystStack), arrayEffect);
if (circleRenderer != null)
arrayRecipe.circleRenderer = circleRenderer;
{
if (arrayRecipe.defaultCircleRenderer == null)
{
arrayRecipe.defaultCircleRenderer = circleRenderer;
} else
{
arrayRecipe.circleMap.put(ItemStackWrapper.getHolder(catalystStack), circleRenderer);
}
}
return;
}
}
@ -157,7 +165,7 @@ public class AlchemyArrayRecipeRegistry
{
AlchemyArrayRecipe arrayRecipe = entry.getValue();
if (arrayRecipe.doesInputMatchRecipe(input))
arrayRecipe.circleRenderer = circleRenderer;
arrayRecipe.defaultCircleRenderer = circleRenderer;
}
}
@ -208,21 +216,23 @@ public class AlchemyArrayRecipeRegistry
return getAlchemyArrayEffect(Collections.singletonList(input), catalystStack);
}
public static AlchemyCircleRenderer getAlchemyCircleRenderer(List<ItemStack> input)
public static AlchemyCircleRenderer getAlchemyCircleRenderer(List<ItemStack> input, @Nullable ItemStack catalystStack)
{
for (Entry<List<ItemStack>, AlchemyArrayRecipe> entry : recipes.entrySet())
{
AlchemyArrayRecipe arrayRecipe = entry.getValue();
if (arrayRecipe.doesInputMatchRecipe(input))
return arrayRecipe.circleRenderer;
{
return arrayRecipe.getAlchemyArrayRendererForCatalyst(catalystStack);
}
}
return defaultRenderer;
}
public static AlchemyCircleRenderer getAlchemyCircleRenderer(ItemStack itemStack)
public static AlchemyCircleRenderer getAlchemyCircleRenderer(ItemStack itemStack, @Nullable ItemStack catalystStack)
{
return getAlchemyCircleRenderer(Collections.singletonList(itemStack));
return getAlchemyCircleRenderer(Collections.singletonList(itemStack), catalystStack);
}
@Getter
@ -230,9 +240,10 @@ public class AlchemyArrayRecipeRegistry
@EqualsAndHashCode
public static class AlchemyArrayRecipe
{
public AlchemyCircleRenderer circleRenderer;
public AlchemyCircleRenderer defaultCircleRenderer;
public final List<ItemStack> input;
public final BiMap<ItemStackWrapper, AlchemyArrayEffect> catalystMap = HashBiMap.create();
public final BiMap<ItemStackWrapper, AlchemyCircleRenderer> circleMap = HashBiMap.create();
private AlchemyArrayRecipe(List<ItemStack> input, ItemStack catalystStack, AlchemyArrayEffect arrayEffect, AlchemyCircleRenderer circleRenderer, boolean useless)
{
@ -240,7 +251,7 @@ public class AlchemyArrayRecipeRegistry
catalystMap.put(ItemStackWrapper.getHolder(catalystStack), arrayEffect);
this.circleRenderer = circleRenderer;
this.defaultCircleRenderer = circleRenderer;
}
public AlchemyArrayRecipe(ItemStack inputStack, ItemStack catalystStack, AlchemyArrayEffect arrayEffect, AlchemyCircleRenderer circleRenderer)
@ -298,6 +309,25 @@ public class AlchemyArrayRecipeRegistry
return null;
}
public AlchemyCircleRenderer getAlchemyArrayRendererForCatalyst(@Nullable ItemStack comparedStack)
{
for (Entry<ItemStackWrapper, AlchemyCircleRenderer> entry : circleMap.entrySet())
{
ItemStack catalystStack = entry.getKey().toStack();
if (comparedStack == null && catalystStack == null)
return entry.getValue();
if (comparedStack == null || catalystStack == null)
continue;
if (catalystStack.isItemEqual(comparedStack))
return entry.getValue();
}
return defaultCircleRenderer;
}
}
public static BiMap<List<ItemStack>, AlchemyArrayRecipe> getRecipes()

View file

@ -12,8 +12,9 @@ public class RenderAlchemyArray extends TileEntitySpecialRenderer<TileAlchemyArr
public void renderTileEntityAt(TileAlchemyArray alchemyArray, double x, double y, double z, float partialTicks, int destroyStage)
{
ItemStack inputStack = alchemyArray.getStackInSlot(0);
ItemStack catalystStack = alchemyArray.getStackInSlot(1);
int craftTime = alchemyArray.activeCounter;
AlchemyCircleRenderer renderer = AlchemyArrayRecipeRegistry.getAlchemyCircleRenderer(inputStack);
AlchemyCircleRenderer renderer = AlchemyArrayRecipeRegistry.getAlchemyCircleRenderer(inputStack, catalystStack);
renderer.renderAt(alchemyArray, x, y, z, (craftTime > 0 ? craftTime + partialTicks : 0));
}

View file

@ -15,7 +15,12 @@ public class AttractorAlchemyCircleRenderer extends AlchemyCircleRenderer
{
public AttractorAlchemyCircleRenderer()
{
super(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/ZombieBeacon.png"));
this(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/ZombieBeacon.png"));
}
public AttractorAlchemyCircleRenderer(ResourceLocation resourceLocation)
{
super(resourceLocation);
}
@Override

View file

@ -90,6 +90,15 @@ public class CategoryDemon
reactionsPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "reactions" + ".info"), 270));
entries.put(new ResourceLocation(keyBase + "reactions"), new EntryText(reactionsPages, TextHelper.localize(keyBase + "reactions"), false));
List<IPage> sentientGemPages = new ArrayList<IPage>();
sentientGemPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "sentientGem" + ".info.1"), 270));
sentientGemPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "sentientGem" + ".info.2"), 270));
entries.put(new ResourceLocation(keyBase + "sentientGem"), new EntryText(sentientGemPages, TextHelper.localize(keyBase + "sentientGem"), false));
List<IPage> routingPages = new ArrayList<IPage>();
routingPages.addAll(PageHelper.pagesForLongText(TextHelper.localize(keyBase + "routing" + ".info"), 270));
entries.put(new ResourceLocation(keyBase + "routing"), new EntryText(routingPages, TextHelper.localize(keyBase + "routing"), false));
return entries;
}
}

View file

@ -19,6 +19,7 @@ import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectAttractor;
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectBinding;
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectMovement;
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectSkeletonTurret;
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectUpdraft;
import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.altar.EnumAltarTier;
import WayofTime.bloodmagic.api.compress.CompressionRegistry;
@ -232,6 +233,8 @@ public class ModRecipes
AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.ROTTEN_FLESH), new ItemStack(Items.ROTTEN_FLESH), new AlchemyArrayEffectAttractor("attractor"), new AttractorAlchemyCircleRenderer());
AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.FEATHER), new ItemStack(Items.REDSTONE), new AlchemyArrayEffectMovement("movement"), new StaticAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/MovementArray.png")));
AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.FEATHER), new ItemStack(Items.GLOWSTONE_DUST), new AlchemyArrayEffectUpdraft("updraft"), new AttractorAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/UpdraftArray.png")));
AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.ARROW), new ItemStack(Items.FEATHER), new AlchemyArrayEffectSkeletonTurret("skeletonTurret"), new DualAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret1.png"), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret2.png")));
}