diff --git a/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectMovement.java b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectMovement.java new file mode 100644 index 00000000..5aed77df --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/alchemyArray/AlchemyArrayEffectMovement.java @@ -0,0 +1,37 @@ +package WayofTime.bloodmagic.alchemyArray; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import WayofTime.bloodmagic.api.alchemyCrafting.AlchemyArrayEffect; + +public class AlchemyArrayEffectMovement extends AlchemyArrayEffect +{ + public AlchemyArrayEffectMovement(String key) + { + super(key); + } + + @Override + public boolean update(TileEntity tile, int ticksActive) + { + return false; + } + + @Override + public void writeToNBT(NBTTagCompound tag) + { + + } + + @Override + public void readFromNBT(NBTTagCompound tag) + { + + } + + @Override + public AlchemyArrayEffect getNewCopy() + { + return new AlchemyArrayEffectMovement(key); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockAlchemyArray.java b/src/main/java/WayofTime/bloodmagic/block/BlockAlchemyArray.java index 2f998424..7c66a687 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockAlchemyArray.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockAlchemyArray.java @@ -100,6 +100,7 @@ public class BlockAlchemyArray extends BlockContainer @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + //TODO: Right click should rotate it TileAlchemyArray array = (TileAlchemyArray) world.getTileEntity(pos); if (array == null || player.isSneaking()) diff --git a/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/StaticAlchemyCircleRenderer.java b/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/StaticAlchemyCircleRenderer.java new file mode 100644 index 00000000..4f1b1212 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/client/render/alchemyArray/StaticAlchemyCircleRenderer.java @@ -0,0 +1,129 @@ +package WayofTime.bloodmagic.client.render.alchemyArray; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.VertexBuffer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import WayofTime.bloodmagic.api.alchemyCrafting.AlchemyCircleRenderer; + +public class StaticAlchemyCircleRenderer extends AlchemyCircleRenderer +{ + public StaticAlchemyCircleRenderer(ResourceLocation location) + { + super(location); + } + + public StaticAlchemyCircleRenderer() + { + this(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/MovementArray.png")); + } + + @Override + public float getSizeModifier(float craftTime) + { + return 1; + } + + @Override + public float getRotation(float craftTime) + { + float offset = 2; + if (craftTime >= offset) + { + float modifier = (craftTime - offset) * 5f; + return modifier * 1f; + } + return 0; + } + + @Override + public float getSecondaryRotation(float craftTime) + { + return 0; + } + + @Override + public void renderAt(TileEntity tile, double x, double y, double z, float craftTime) + { + Tessellator tessellator = Tessellator.getInstance(); + VertexBuffer wr = tessellator.getBuffer(); + + GlStateManager.pushMatrix(); + + float rot = getRotation(craftTime); + + float size = 1.0F * getSizeModifier(craftTime); + + // Bind the texture to the circle + Minecraft.getMinecraft().renderEngine.bindTexture(arrayResource); + + GlStateManager.disableCull(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(770, 1); + + GlStateManager.translate(x, y, z); + + // Specify which face this "circle" is located on + EnumFacing sideHit = EnumFacing.UP; + + GlStateManager.translate(sideHit.getFrontOffsetX() * offsetFromFace, sideHit.getFrontOffsetY() * offsetFromFace, sideHit.getFrontOffsetZ() * offsetFromFace); + + switch (sideHit) + { + case DOWN: + GlStateManager.translate(0, 0, 1); + GlStateManager.rotate(-90.0f, 1, 0, 0); + break; + case EAST: + GlStateManager.rotate(-90.0f, 0, 1, 0); + GlStateManager.translate(0, 0, -1); + break; + case NORTH: + break; + case SOUTH: + GlStateManager.rotate(180.0f, 0, 1, 0); + GlStateManager.translate(-1, 0, -1); + break; + case UP: + GlStateManager.translate(0, 1, 0); + GlStateManager.rotate(90.0f, 1, 0, 0); + break; + case WEST: + GlStateManager.translate(0, 0, 1); + GlStateManager.rotate(90.0f, 0, 1, 0); + break; + } + + GlStateManager.pushMatrix(); + GlStateManager.translate(0.5f, 0.5f, getVerticalOffset(craftTime)); + GlStateManager.rotate(rot, 0, 1, 0); +// GlStateManager.rotate(secondaryRot, 1, 0, 0); +// GlStateManager.rotate(secondaryRot, 0, 1, 0); + double var31 = 0.0D; + double var33 = 1.0D; + double var35 = 0; + double var37 = 1; + + GlStateManager.color(1f, 1f, 1f, 1f); + wr.begin(7, DefaultVertexFormats.POSITION_TEX); + // wr.setBrightness(200); + wr.pos(size / 2f, size / 2f, 0.0D).tex(var33, var37).endVertex(); + wr.pos(size / 2f, -size / 2f, 0.0D).tex(var33, var35).endVertex(); + wr.pos(-size / 2f, -size / 2f, 0.0D).tex(var31, var35).endVertex(); + wr.pos(-size / 2f, size / 2f, 0.0D).tex(var31, var37).endVertex(); + tessellator.draw(); + + GlStateManager.popMatrix(); + + // GlStateManager.depthMask(true); + GlStateManager.disableBlend(); + GlStateManager.enableCull(); + // GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + + GlStateManager.popMatrix(); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java index f37b3c1b..cc7c5d1e 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModRecipes.java @@ -3,14 +3,12 @@ package WayofTime.bloodmagic.registry; import java.util.ArrayList; import java.util.List; -import WayofTime.bloodmagic.api.BloodMagicAPI; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.ForgeModContainer; -import net.minecraftforge.fluids.UniversalBucket; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.oredict.RecipeSorter; @@ -19,6 +17,7 @@ import net.minecraftforge.oredict.ShapelessOreRecipe; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectAttractor; import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectBinding; +import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectMovement; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.api.altar.EnumAltarTier; import WayofTime.bloodmagic.api.compress.CompressionRegistry; @@ -34,6 +33,7 @@ import WayofTime.bloodmagic.api.ritual.EnumRuneType; import WayofTime.bloodmagic.block.BlockBloodRune; import WayofTime.bloodmagic.client.render.alchemyArray.AttractorAlchemyCircleRenderer; import WayofTime.bloodmagic.client.render.alchemyArray.BindingAlchemyCircleRenderer; +import WayofTime.bloodmagic.client.render.alchemyArray.StaticAlchemyCircleRenderer; import WayofTime.bloodmagic.compress.AdvancedCompressionHandler; import WayofTime.bloodmagic.compress.BaseCompressionHandler; import WayofTime.bloodmagic.compress.StorageBlockCraftingManager; @@ -229,6 +229,7 @@ public class ModRecipes AlchemyArrayRecipeRegistry.registerCraftingRecipe(ItemComponent.getStack(ItemComponent.REAGENT_TRANSPOSITION), new ItemStack(ModItems.slate, 1, 3), new ItemStack(ModItems.sigilTransposition), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/WIPArray.png")); AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.ROTTEN_FLESH), new ItemStack(Items.ROTTEN_FLESH), new AlchemyArrayEffectAttractor("attractor"), new AttractorAlchemyCircleRenderer()); + AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.GHAST_TEAR), new ItemStack(Items.GHAST_TEAR), new AlchemyArrayEffectMovement("attractor"), new StaticAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/MovementArray.png"))); } public static void addCompressionHandlers() diff --git a/src/main/resources/assets/bloodmagic/textures/models/AlchemyArrays/MovementArray.png b/src/main/resources/assets/bloodmagic/textures/models/AlchemyArrays/MovementArray.png new file mode 100644 index 00000000..8149c383 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/textures/models/AlchemyArrays/MovementArray.png differ