From bf14e3ebb1708fc1d13a43b8211aa147004ff002 Mon Sep 17 00:00:00 2001 From: Arcaratus Date: Sun, 19 Apr 2015 12:23:24 -0400 Subject: [PATCH] Added stuffs --- .../alchemicalWizardry/api/Vector3.java | 41 +++++++ .../client/renderer/RenderFakeBlocks.java | 101 ++++++++++++++++++ .../client/renderer/RitualDivinerRender.java | 79 ++++++++++++++ .../achievements/AchievementTrigger.java | 33 +++--- .../achievements/AchievementsRegistry.java | 32 +++++- .../common/achievements/ModAchievements.java | 6 +- .../common/items/sigil/SigilOfTheBridge.java | 5 - .../assets/alchemicalwizardry/lang/en_US.lang | 6 +- 8 files changed, 276 insertions(+), 27 deletions(-) create mode 100644 src/main/java/WayofTime/alchemicalWizardry/api/Vector3.java create mode 100644 src/main/java/WayofTime/alchemicalWizardry/client/renderer/RenderFakeBlocks.java create mode 100644 src/main/java/WayofTime/alchemicalWizardry/client/renderer/RitualDivinerRender.java diff --git a/src/main/java/WayofTime/alchemicalWizardry/api/Vector3.java b/src/main/java/WayofTime/alchemicalWizardry/api/Vector3.java new file mode 100644 index 00000000..b8762c78 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/api/Vector3.java @@ -0,0 +1,41 @@ +package WayofTime.alchemicalWizardry.api; + +public class Vector3 +{ + public int x, y, z; + + public Vector3(int x, int y, int z) + { + this.x = x; + this.y = y; + this.z = z; + } + + public Vector3 add(Vector3 vec1) + { + return new Vector3(this.x + vec1.x, this.y + vec1.y, this.z + vec1.z); + } + + @Override + public String toString() + { + return "V3(" + x + "}, " + y + "}," + z + "})"; + } + + private boolean canEqual(Object object) + { + return object instanceof Vector3; + } + + @Override + public boolean equals(Object object) + { + return object == this ? true : (object instanceof Vector3 ? canEqual(this) && this.x == ((Vector3) object).x && this.y == ((Vector3) object).y && this.z == ((Vector3) object).z : false); + } + + @Override + public int hashCode() + { + return 48131 * x - 95021 * y + z; + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RenderFakeBlocks.java b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RenderFakeBlocks.java new file mode 100644 index 00000000..b0d36a28 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RenderFakeBlocks.java @@ -0,0 +1,101 @@ +package WayofTime.alchemicalWizardry.client.renderer; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +public class RenderFakeBlocks +{ + public static void drawFakeBlock(WayofTime.alchemicalWizardry.api.Vector3 vector3, Block block, int meta, double minX, double minY, double minZ, World world) + { + double maxX = minX + 1; + double maxY = minY + 1; + double maxZ = minZ + 1; + Tessellator tessellator = Tessellator.instance; + + tessellator.startDrawingQuads(); + + float texMinU, texMaxU, texMinV, texMaxV; + + texMinU = getMinU(block, meta, 0); + texMaxU = getMaxU(block, meta, 0); + texMinV = getMinV(block, meta, 0); + texMaxV = getMaxV(block, meta, 0); + tessellator.addVertexWithUV(minX, minY, minZ, texMinU, texMinV); + tessellator.addVertexWithUV(maxX, minY, minZ, texMaxU, texMinV); + tessellator.addVertexWithUV(maxX, minY, maxZ, texMaxU, texMaxV); + tessellator.addVertexWithUV(minX, minY, maxZ, texMinU, texMaxV); + + texMinU = getMinU(block, meta, 1); + texMaxU = getMaxU(block, meta, 1); + texMinV = getMinV(block, meta, 1); + texMaxV = getMaxV(block, meta, 1); + tessellator.addVertexWithUV(minX, maxY, maxZ, texMinU, texMaxV); + tessellator.addVertexWithUV(maxX, maxY, maxZ, texMaxU, texMaxV); + tessellator.addVertexWithUV(maxX, maxY, minZ, texMaxU, texMinV); + tessellator.addVertexWithUV(minX, maxY, minZ, texMinU, texMinV); + + texMinU = getMinU(block, meta, 2); + texMaxU = getMaxU(block, meta, 2); + texMinV = getMinV(block, meta, 2); + texMaxV = getMaxV(block, meta, 2); + tessellator.addVertexWithUV(maxX, minY, minZ, texMinU, texMaxV); + tessellator.addVertexWithUV(minX, minY, minZ, texMaxU, texMaxV); + tessellator.addVertexWithUV(minX, maxY, minZ, texMaxU, texMinV); + tessellator.addVertexWithUV(maxX, maxY, minZ, texMinU, texMinV); + + texMinU = getMinU(block, meta, 3); + texMaxU = getMaxU(block, meta, 3); + texMinV = getMinV(block, meta, 3); + texMaxV = getMaxV(block, meta, 3); + tessellator.addVertexWithUV(minX, minY, maxZ, texMinU, texMaxV); + tessellator.addVertexWithUV(maxX, minY, maxZ, texMaxU, texMaxV); + tessellator.addVertexWithUV(maxX, maxY, maxZ, texMaxU, texMinV); + tessellator.addVertexWithUV(minX, maxY, maxZ, texMinU, texMinV); + + texMinU = getMinU(block, meta, 4); + texMaxU = getMaxU(block, meta, 4); + texMinV = getMinV(block, meta, 4); + texMaxV = getMaxV(block, meta, 4); + tessellator.addVertexWithUV(minX, minY, minZ, texMinU, texMaxV); + tessellator.addVertexWithUV(minX, minY, maxZ, texMaxU, texMaxV); + tessellator.addVertexWithUV(minX, maxY, maxZ, texMaxU, texMinV); + tessellator.addVertexWithUV(minX, maxY, minZ, texMinU, texMinV); + + texMinU = getMinU(block, meta, 5); + texMaxU = getMaxU(block, meta, 5); + texMinV = getMinV(block, meta, 5); + texMaxV = getMaxV(block, meta, 5); + tessellator.addVertexWithUV(maxX, minY, maxZ, texMinU, texMaxV); + tessellator.addVertexWithUV(maxX, minY, minZ, texMaxU, texMaxV); + tessellator.addVertexWithUV(maxX, maxY, minZ, texMaxU, texMinV); + tessellator.addVertexWithUV(maxX, maxY, maxZ, texMinU, texMinV); + + tessellator.draw(); + } + + private static float getMinU(Block block, int meta, int side) + { + IIcon icon = block.getIcon(side, meta); + return icon.getMinU(); + } + + private static float getMaxU(Block block, int meta, int side) + { + IIcon icon = block.getIcon(side, meta); + return icon.getMaxU(); + } + + private static float getMinV(Block block, int meta, int side) + { + IIcon icon = block.getIcon(side, meta); + return icon.getMinV(); + } + + private static float getMaxV(Block block, int meta, int side) + { + IIcon icon = block.getIcon(side, meta); + return icon.getMaxV(); + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RitualDivinerRender.java b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RitualDivinerRender.java new file mode 100644 index 00000000..a265aa42 --- /dev/null +++ b/src/main/java/WayofTime/alchemicalWizardry/client/renderer/RitualDivinerRender.java @@ -0,0 +1,79 @@ +package WayofTime.alchemicalWizardry.client.renderer; + +import WayofTime.alchemicalWizardry.ModBlocks; +import WayofTime.alchemicalWizardry.api.Vector3; +import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone; +import WayofTime.alchemicalWizardry.api.rituals.RitualComponent; +import WayofTime.alchemicalWizardry.api.rituals.RitualEffect; +import WayofTime.alchemicalWizardry.api.rituals.Rituals; +import WayofTime.alchemicalWizardry.common.items.ItemRitualDiviner; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityClientPlayerMP; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderWorldLastEvent; + +public class RitualDivinerRender +{ + @SubscribeEvent + public void render(RenderWorldLastEvent event) + { + Minecraft minecraft = Minecraft.getMinecraft(); + EntityClientPlayerMP player = minecraft.thePlayer; + World world = player.worldObj; + + if (minecraft.objectMouseOver == null || minecraft.objectMouseOver.typeOfHit != MovingObjectPosition.MovingObjectType.BLOCK) + { + return; + } + + TileEntity tileEntity = world.getTileEntity(minecraft.objectMouseOver.blockX, minecraft.objectMouseOver.blockY, minecraft.objectMouseOver.blockZ); + + if (!(tileEntity instanceof IMasterRitualStone)) + { + return; + } + + Vector3 vec3 = new Vector3(minecraft.objectMouseOver.blockX, minecraft.objectMouseOver.blockY, minecraft.objectMouseOver.blockZ); + double posX = player.lastTickPosX + (player.posX - player.lastTickPosX) * event.partialTicks; + double posY = player.lastTickPosY + (player.posY - player.lastTickPosY) * event.partialTicks; + double posZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * event.partialTicks; + + if (player.inventory.getCurrentItem() != null && player.inventory.getCurrentItem().getItem() instanceof ItemRitualDiviner) + { + ItemRitualDiviner ritualDiviner = (ItemRitualDiviner) player.inventory.getCurrentItem().getItem(); + int direction = ritualDiviner.getDirection(player.inventory.getCurrentItem()); + RitualEffect ritualEffect = getEffectFromString(ritualDiviner.getCurrentRitual(player.inventory.getCurrentItem())); + + if (ritualEffect == null) + { + return; + } + + for (RitualComponent ritualComponent : ritualEffect.getRitualComponentList()) + { + Vector3 vX = vec3.add(new Vector3(ritualComponent.getX(direction), ritualComponent.getY(), ritualComponent.getZ(direction))); + double minX = vX.x - posX; + double minY = vX.y - posY; + double minZ = vX.z - posZ; + + if (!world.getBlock(vX.x, vX.y, vX.z).isOpaqueCube()) + { + RenderFakeBlocks.drawFakeBlock(vX, ModBlocks.ritualStone, ritualComponent.getStoneType(), minX, minY, minZ, world); + } + } + } + } + + public static RitualEffect getEffectFromString(String name) + { + Rituals ritual = Rituals.ritualMap.get(name); + + if (ritual == null) + return null; + + return ritual.effect; + } +} diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/AchievementTrigger.java b/src/main/java/WayofTime/alchemicalWizardry/common/achievements/AchievementTrigger.java index 836660fa..e05804aa 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/AchievementTrigger.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/achievements/AchievementTrigger.java @@ -11,20 +11,18 @@ public class AchievementTrigger @SubscribeEvent public void onItemPickedUp(PlayerEvent.ItemPickupEvent event) { - ItemStack stack = event.pickedUp.getEntityItem(); - - for (Item item : AchievementsRegistry.list) + for (Item item : AchievementsRegistry.pickupList) { + ItemStack stack = event.pickedUp.getEntityItem(); - } - - if (stack != null && stack.getItem() instanceof IPickupAchievement) - { - Achievement achievement = ((IPickupAchievement) stack.getItem()).getAchievementOnPickup(stack, event.player, event.pickedUp); - - if (achievement != null) + if (stack != null && stack.getItem() == item) { - event.player.addStat(achievement, 1); + Achievement achievement = AchievementsRegistry.getAchievementForItem(item); + + if (achievement != null) + { + event.player.addStat(achievement, 1); + } } } } @@ -32,13 +30,16 @@ public class AchievementTrigger @SubscribeEvent public void onItemCrafted(PlayerEvent.ItemCraftedEvent event) { - if (event.crafting != null && event.crafting.getItem() instanceof ICraftAchievement) + for (Item item : AchievementsRegistry.craftinglist) { - Achievement achievement = ((ICraftAchievement) event.crafting.getItem()).getAchievementOnCraft(event.crafting, event.player, event.craftMatrix); - - if (achievement != null) + if (event.crafting != null && event.crafting.getItem() == item) { - event.player.addStat(achievement, 1); + Achievement achievement = AchievementsRegistry.getAchievementForItem(event.crafting.getItem()); + + if (achievement != null) + { + event.player.addStat(achievement, 1); + } } } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/AchievementsRegistry.java b/src/main/java/WayofTime/alchemicalWizardry/common/achievements/AchievementsRegistry.java index e07683fc..5545ab85 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/AchievementsRegistry.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/achievements/AchievementsRegistry.java @@ -2,16 +2,42 @@ package WayofTime.alchemicalWizardry.common.achievements; import WayofTime.alchemicalWizardry.ModItems; import net.minecraft.item.Item; +import net.minecraft.stats.Achievement; import java.util.ArrayList; import java.util.List; public class AchievementsRegistry { - public static List list = new ArrayList(); + public final static List craftinglist = new ArrayList(); + public final static List pickupList = new ArrayList(); - public void addItemsToList() + public static void init() { - list.add(ModItems.sacrificialDagger); + addItemsToCraftingList(); + addItemsToPickupList(); + } + + public static void addItemsToCraftingList() + { + craftinglist.add(ModItems.sacrificialDagger); + } + + public static void addItemsToPickupList() + { + pickupList.add(ModItems.weakBloodOrb); + } + + public static Achievement getAchievementForItem(Item item) + { + if (item == ModItems.sacrificialDagger) + { + return ModAchievements.firstPrick; + } + if (item == ModItems.weakBloodOrb) + { + return ModAchievements.weakOrb; + } + return null; } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/ModAchievements.java b/src/main/java/WayofTime/alchemicalWizardry/common/achievements/ModAchievements.java index ce164d92..7c00ba4d 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/achievements/ModAchievements.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/achievements/ModAchievements.java @@ -5,19 +5,23 @@ import cpw.mods.fml.common.FMLCommonHandler; import net.minecraft.stats.Achievement; import net.minecraft.util.StatCollector; import net.minecraftforge.common.AchievementPage; +import net.minecraftforge.common.MinecraftForge; public class ModAchievements { public static AchievementPage alchemicalWizardryPage; public static Achievement firstPrick; + public static Achievement weakOrb; public static void init() { - firstPrick = new AchievementsMod(StatCollector.translateToLocal("achievement.firstPrick"), 0, 0, ModItems.sacrificialDagger, firstPrick); + firstPrick = new AchievementsMod(StatCollector.translateToLocal("firstPrick"), 0, 0, ModItems.sacrificialDagger, null); + weakOrb = new AchievementsMod(StatCollector.translateToLocal("weakOrb"), 3, 0, ModItems.weakBloodOrb, firstPrick); alchemicalWizardryPage = new AchievementPage("AlchemicalWizardry", AchievementsMod.achievements.toArray(new Achievement[AchievementsMod.achievements.size()])); AchievementPage.registerAchievementPage(alchemicalWizardryPage); + AchievementsRegistry.init(); FMLCommonHandler.instance().bus().register(new AchievementTrigger()); } } diff --git a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfTheBridge.java b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfTheBridge.java index 9240e032..9871a4ac 100644 --- a/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfTheBridge.java +++ b/src/main/java/WayofTime/alchemicalWizardry/common/items/sigil/SigilOfTheBridge.java @@ -257,11 +257,6 @@ public class SigilOfTheBridge extends EnergyItems implements ArmourUpgrade { verticalOffset--; } - - if (world.isRemote) - { - verticalOffset--; - } int posX = (int) Math.round(player.posX - 0.5f); int posY = (int) player.posY; diff --git a/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang b/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang index c86fee76..f566f175 100644 --- a/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang +++ b/src/main/resources/assets/alchemicalwizardry/lang/en_US.lang @@ -451,5 +451,7 @@ message.tanksegmenter.tankssetto=tank(s) set to: message.routerfocus.limit=Focus' Item Limit set to: #Achievements -achievement.alchemicalwizardy:firstPrick=Your first prick! -achievement.alchemicalwizardy:firstPrick.desc=The first drop of life into the Altar... \ No newline at end of file +achievement.alchemicalwizardry:firstPrick=Your First Prick! +achievement.alchemicalwizardry:firstPrick.desc=The first drop of life into the Altar... +achievement.alchemicalwizardry:weakOrb=Faintly Glowing Red... +achievement.alchemicalwizardry:weakOrb.desc=This orb will suffice...for now...