From c5b517248118568707110d0b295fcb40c9c934e5 Mon Sep 17 00:00:00 2001 From: Electroblob77 <35599699+Electroblob77@users.noreply.github.com> Date: Wed, 8 Apr 2020 00:16:12 +0100 Subject: [PATCH] Add lecterns --- .../wizardry/WizardryGuiHandler.java | 10 + .../wizardry/block/BlockBookshelf.java | 37 ++ .../wizardry/block/BlockLectern.java | 122 +++++ .../wizardry/client/ClientProxy.java | 7 +- .../client/gui/GuiArcaneWorkbench.java | 52 +- .../client/gui/GuiButtonSpellSort.java | 57 +++ .../gui/{handbook => }/GuiButtonTurnPage.java | 24 +- .../wizardry/client/gui/GuiLectern.java | 467 ++++++++++++++++++ .../wizardry/client/gui/GuiSpellBook.java | 110 +---- .../wizardry/client/gui/GuiSpellInfo.java | 137 +++++ .../gui/handbook/GuiWizardHandbook.java | 13 +- .../wizardry/client/model/WizardryModels.java | 7 + .../particle/ParticleBlockHighlight.java | 58 +++ .../client/renderer/RenderLectern.java | 53 ++ .../inventory/ContainerArcaneWorkbench.java | 59 +-- .../wizardry/packet/PacketLectern.java | 73 +++ .../packet/WizardryPacketHandler.java | 1 + .../wizardry/registry/WizardryBlocks.java | 13 + .../wizardry/registry/WizardryItems.java | 7 + .../electroblob/wizardry/spell/Spell.java | 5 +- .../tileentity/TileEntityLectern.java | 98 ++++ .../wizardry/util/ISpellSortable.java | 35 ++ .../wizardry/util/ParticleBuilder.java | 2 + .../blockstates/acacia_lectern.json | 14 + .../ebwizardry/blockstates/birch_lectern.json | 14 + .../blockstates/dark_oak_lectern.json | 14 + .../blockstates/jungle_lectern.json | 14 + .../ebwizardry/blockstates/oak_lectern.json | 14 + .../blockstates/spruce_lectern.json | 14 + .../assets/ebwizardry/lang/en_gb.lang | 9 + .../assets/ebwizardry/lang/en_us.lang | 9 + .../models/block/acacia_lectern.json | 10 + .../models/block/birch_lectern.json | 10 + .../models/block/dark_oak_lectern.json | 10 + .../models/block/jungle_lectern.json | 10 + .../ebwizardry/models/block/lectern.json | 116 +++++ .../ebwizardry/models/block/oak_lectern.json | 10 + .../models/block/spruce_lectern.json | 10 + .../models/item/acacia_lectern.json | 3 + .../ebwizardry/models/item/birch_lectern.json | 3 + .../models/item/dark_oak_lectern.json | 3 + .../models/item/jungle_lectern.json | 3 + .../ebwizardry/models/item/oak_lectern.json | 3 + .../models/item/spruce_lectern.json | 3 + .../ebwizardry/spells/arcane_jammer.json | 2 +- .../textures/blocks/acacia_lectern_base.png | Bin 0 -> 1801 bytes .../textures/blocks/acacia_lectern_side.png | Bin 0 -> 1902 bytes .../textures/blocks/acacia_lectern_top.png | Bin 0 -> 1990 bytes .../blocks/acacia_lectern_underside.png | Bin 0 -> 1528 bytes .../textures/blocks/birch_lectern_base.png | Bin 0 -> 1790 bytes .../textures/blocks/birch_lectern_side.png | Bin 0 -> 1808 bytes .../textures/blocks/birch_lectern_top.png | Bin 0 -> 1977 bytes .../blocks/birch_lectern_underside.png | Bin 0 -> 1593 bytes .../textures/blocks/dark_oak_lectern_base.png | Bin 0 -> 369 bytes .../textures/blocks/dark_oak_lectern_side.png | Bin 0 -> 1605 bytes .../textures/blocks/dark_oak_lectern_top.png | Bin 0 -> 521 bytes .../blocks/dark_oak_lectern_underside.png | Bin 0 -> 5532 bytes .../textures/blocks/gilded_dark_oak_wood.png | Bin 526 -> 2075 bytes .../textures/blocks/jungle_lectern_base.png | Bin 0 -> 1763 bytes .../textures/blocks/jungle_lectern_side.png | Bin 0 -> 1864 bytes .../textures/blocks/jungle_lectern_top.png | Bin 0 -> 1954 bytes .../blocks/jungle_lectern_underside.png | Bin 0 -> 1597 bytes .../textures/blocks/oak_lectern_base.png | Bin 0 -> 1844 bytes .../textures/blocks/oak_lectern_side.png | Bin 0 -> 1743 bytes .../textures/blocks/oak_lectern_top.png | Bin 0 -> 2001 bytes .../textures/blocks/oak_lectern_underside.png | Bin 0 -> 1532 bytes .../textures/blocks/spruce_lectern_base.png | Bin 0 -> 1721 bytes .../textures/blocks/spruce_lectern_side.png | Bin 0 -> 1621 bytes .../textures/blocks/spruce_lectern_top.png | Bin 0 -> 1947 bytes .../blocks/spruce_lectern_underside.png | Bin 0 -> 1556 bytes .../textures/entity/lectern_book.png | Bin 0 -> 4480 bytes .../textures/gui/arcane_workbench.png | Bin 40318 -> 40214 bytes .../ebwizardry/textures/gui/lectern.png | Bin 0 -> 43369 bytes .../textures/gui/spell_book_advanced.png | Bin 12024 -> 11179 bytes .../textures/gui/spell_book_apprentice.png | Bin 11927 -> 10989 bytes .../textures/gui/spell_book_master.png | Bin 12366 -> 11748 bytes .../textures/gui/spell_book_novice.png | Bin 11511 -> 10720 bytes .../textures/gui/spell_sort_buttons.png | Bin 0 -> 723 bytes .../textures/particle/block_highlight.png | Bin 0 -> 1465 bytes 79 files changed, 1534 insertions(+), 211 deletions(-) create mode 100644 src/main/java/electroblob/wizardry/block/BlockLectern.java create mode 100644 src/main/java/electroblob/wizardry/client/gui/GuiButtonSpellSort.java rename src/main/java/electroblob/wizardry/client/gui/{handbook => }/GuiButtonTurnPage.java (69%) create mode 100644 src/main/java/electroblob/wizardry/client/gui/GuiLectern.java create mode 100644 src/main/java/electroblob/wizardry/client/gui/GuiSpellInfo.java create mode 100644 src/main/java/electroblob/wizardry/client/particle/ParticleBlockHighlight.java create mode 100644 src/main/java/electroblob/wizardry/client/renderer/RenderLectern.java create mode 100644 src/main/java/electroblob/wizardry/packet/PacketLectern.java create mode 100644 src/main/java/electroblob/wizardry/tileentity/TileEntityLectern.java create mode 100644 src/main/java/electroblob/wizardry/util/ISpellSortable.java create mode 100644 src/main/resources/assets/ebwizardry/blockstates/acacia_lectern.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/birch_lectern.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/dark_oak_lectern.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/jungle_lectern.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/oak_lectern.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/spruce_lectern.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/acacia_lectern.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/birch_lectern.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/dark_oak_lectern.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/jungle_lectern.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/lectern.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/oak_lectern.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/spruce_lectern.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/acacia_lectern.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/birch_lectern.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/dark_oak_lectern.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/jungle_lectern.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/oak_lectern.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/spruce_lectern.json create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/acacia_lectern_base.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/acacia_lectern_side.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/acacia_lectern_top.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/acacia_lectern_underside.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/birch_lectern_base.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/birch_lectern_side.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/birch_lectern_top.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/birch_lectern_underside.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/dark_oak_lectern_base.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/dark_oak_lectern_side.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/dark_oak_lectern_top.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/dark_oak_lectern_underside.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/jungle_lectern_base.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/jungle_lectern_side.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/jungle_lectern_top.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/jungle_lectern_underside.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/oak_lectern_base.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/oak_lectern_side.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/oak_lectern_top.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/oak_lectern_underside.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/spruce_lectern_base.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/spruce_lectern_side.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/spruce_lectern_top.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/spruce_lectern_underside.png create mode 100644 src/main/resources/assets/ebwizardry/textures/entity/lectern_book.png create mode 100644 src/main/resources/assets/ebwizardry/textures/gui/lectern.png create mode 100644 src/main/resources/assets/ebwizardry/textures/gui/spell_sort_buttons.png create mode 100644 src/main/resources/assets/ebwizardry/textures/particle/block_highlight.png diff --git a/src/main/java/electroblob/wizardry/WizardryGuiHandler.java b/src/main/java/electroblob/wizardry/WizardryGuiHandler.java index 69aa420f..01d8d68a 100644 --- a/src/main/java/electroblob/wizardry/WizardryGuiHandler.java +++ b/src/main/java/electroblob/wizardry/WizardryGuiHandler.java @@ -7,6 +7,7 @@ import electroblob.wizardry.item.ItemSpellBook; import electroblob.wizardry.item.ItemWizardHandbook; import electroblob.wizardry.tileentity.TileEntityArcaneWorkbench; import electroblob.wizardry.tileentity.TileEntityBookshelf; +import electroblob.wizardry.tileentity.TileEntityLectern; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; @@ -23,6 +24,7 @@ public class WizardryGuiHandler implements IGuiHandler { public static final int WIZARD_HANDBOOK = nextGuiId++; public static final int PORTABLE_CRAFTING = nextGuiId++; public static final int BOOKSHELF = nextGuiId++; + public static final int LECTERN = nextGuiId++; @Override public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z){ @@ -87,6 +89,14 @@ public class WizardryGuiHandler implements IGuiHandler { (TileEntityBookshelf)tileEntity); } + }else if(id == LECTERN){ + + TileEntity tileEntity = world.getTileEntity(new BlockPos(x, y, z)); + + if(tileEntity instanceof TileEntityLectern){ + return new electroblob.wizardry.client.gui.GuiLectern((TileEntityLectern)tileEntity); + } + } return null; diff --git a/src/main/java/electroblob/wizardry/block/BlockBookshelf.java b/src/main/java/electroblob/wizardry/block/BlockBookshelf.java index 9fc4c90a..ee4de190 100644 --- a/src/main/java/electroblob/wizardry/block/BlockBookshelf.java +++ b/src/main/java/electroblob/wizardry/block/BlockBookshelf.java @@ -13,6 +13,7 @@ import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; import net.minecraft.inventory.InventoryHelper; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; @@ -22,8 +23,11 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.property.IExtendedBlockState; import net.minecraftforge.common.property.Properties; +import org.apache.commons.lang3.ArrayUtils; import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; public class BlockBookshelf extends BlockHorizontal implements ITileEntityProvider { @@ -134,4 +138,37 @@ public class BlockBookshelf extends BlockHorizontal implements ITileEntityProvid } } + /** + * Returns a list of nearby bookshelves' inventories, where 'bookshelves' are any tile entities with inventories + * whose blocks are specified in the config file under the {@code bookshelfBlocks} option. + * @param world The world to search in + * @param centre The position to search around + * @param exclude Any tile entities that should be excluded from the returned list + * @return A list of nearby {@link IInventory} objects that count as valid bookshelves + */ + public static List findNearbyBookshelves(World world, BlockPos centre, TileEntity... exclude){ + + List bookshelves = new ArrayList<>(); + + int searchRadius = 4; // TODO: Config option for this + + for(int x = -searchRadius; x <= searchRadius; x++){ + for(int y = -searchRadius; y <= searchRadius; y++){ + for(int z = -searchRadius; z <= searchRadius; z++){ + + BlockPos pos = centre.add(x, y, z); + // TODO: Config option for allowed containers + if(world.getBlockState(pos).getBlock() instanceof BlockBookshelf){ + TileEntity te = world.getTileEntity(pos); + if(te instanceof IInventory && !ArrayUtils.contains(exclude, te)) bookshelves.add((IInventory)te); + } + + } + } + } + + return bookshelves; + + } + } diff --git a/src/main/java/electroblob/wizardry/block/BlockLectern.java b/src/main/java/electroblob/wizardry/block/BlockLectern.java new file mode 100644 index 00000000..922c4118 --- /dev/null +++ b/src/main/java/electroblob/wizardry/block/BlockLectern.java @@ -0,0 +1,122 @@ +package electroblob.wizardry.block; + +import electroblob.wizardry.Wizardry; +import electroblob.wizardry.WizardryGuiHandler; +import electroblob.wizardry.registry.WizardryTabs; +import electroblob.wizardry.tileentity.TileEntityLectern; +import electroblob.wizardry.util.ParticleBuilder; +import electroblob.wizardry.util.ParticleBuilder.Type; +import net.minecraft.block.BlockHorizontal; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import javax.annotation.Nullable; +import java.util.Random; + +public class BlockLectern extends BlockHorizontal implements ITileEntityProvider { + + public BlockLectern(){ + super(Material.WOOD); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); + this.setCreativeTab(WizardryTabs.WIZARDRY); + } + + @Override + protected BlockStateContainer createBlockState(){ + return new BlockStateContainer.Builder(this).add(FACING).build(); + } + + @Override + public IBlockState getStateFromMeta(int meta){ + EnumFacing enumfacing = EnumFacing.byIndex(meta); + if(enumfacing.getAxis() == EnumFacing.Axis.Y) enumfacing = EnumFacing.NORTH; + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @Override + public int getMetaFromState(IBlockState state){ + return state.getValue(FACING).getIndex(); + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand){ + + EntityPlayer entityplayer = world.getClosestPlayer(pos.getX() + 0.5, pos.getY() + 0.5, + pos.getZ() + 0.5, TileEntityLectern.BOOK_OPEN_DISTANCE, false); + + if(entityplayer != null){ + ParticleBuilder.create(Type.DUST).pos(pos.getX() + rand.nextFloat(), pos.getY() + 1, pos.getZ() + rand.nextFloat()) + .vel(0, 0.03, 0).clr(1, 1, 0.65f).fade(0.7f, 0, 1).shaded(false).spawn(world); + } + } + + @Override + public boolean isOpaqueCube(IBlockState state){ + return false; + } + + @Override + public boolean isFullCube(IBlockState state){ + return false; + } + + @Override + public boolean isFullBlock(IBlockState state){ + return false; + } + + @Override + public boolean isNormalCube(IBlockState state){ + return false; + } + + @Override + public boolean canPlaceTorchOnTop(IBlockState state, IBlockAccess world, BlockPos pos){ + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess world, IBlockState state, BlockPos pos, EnumFacing face){ + return face == EnumFacing.DOWN ? BlockFaceShape.SOLID : BlockFaceShape.UNDEFINED; + } + + @Override + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer){ + return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite()); + } + + @Nullable + @Override + public TileEntity createNewTileEntity(World world, int meta){ + return new TileEntityLectern(); + } + + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState block, EntityPlayer player, EnumHand hand, + EnumFacing side, float hitX, float hitY, float hitZ){ + + TileEntity tileEntity = world.getTileEntity(pos); + + if(tileEntity == null || player.isSneaking()){ + return false; + } + + player.openGui(Wizardry.instance, WizardryGuiHandler.LECTERN, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + +} diff --git a/src/main/java/electroblob/wizardry/client/ClientProxy.java b/src/main/java/electroblob/wizardry/client/ClientProxy.java index b81987be..64e746d7 100644 --- a/src/main/java/electroblob/wizardry/client/ClientProxy.java +++ b/src/main/java/electroblob/wizardry/client/ClientProxy.java @@ -32,10 +32,7 @@ import electroblob.wizardry.packet.*; import electroblob.wizardry.registry.Spells; import electroblob.wizardry.registry.WizardrySounds; import electroblob.wizardry.spell.*; -import electroblob.wizardry.tileentity.TileEntityArcaneWorkbench; -import electroblob.wizardry.tileentity.TileEntityMagicLight; -import electroblob.wizardry.tileentity.TileEntityShrineCore; -import electroblob.wizardry.tileentity.TileEntityStatue; +import electroblob.wizardry.tileentity.*; import electroblob.wizardry.util.ParticleBuilder; import electroblob.wizardry.util.ParticleBuilder.Type; import electroblob.wizardry.util.WandHelper; @@ -310,6 +307,7 @@ public class ClientProxy extends CommonProxy { public void registerParticles(){ // I'll be a good programmer and use the API method rather than the one above. Lead by example, as they say... ParticleWizardry.registerParticle(Type.BEAM, ParticleBeam::new); + ParticleWizardry.registerParticle(Type.BLOCK_HIGHLIGHT, ParticleBlockHighlight::new); ParticleWizardry.registerParticle(Type.BUFF, ParticleBuff::new); ParticleWizardry.registerParticle(Type.DARK_MAGIC, ParticleDarkMagic::new); ParticleWizardry.registerParticle(Type.DUST, ParticleDust::new); @@ -762,6 +760,7 @@ public class ClientProxy extends CommonProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityArcaneWorkbench.class, new RenderArcaneWorkbench()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityStatue.class, renderStatue = new RenderStatue()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMagicLight.class, new RenderMagicLight()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLectern.class, new RenderLectern()); } } \ No newline at end of file diff --git a/src/main/java/electroblob/wizardry/client/gui/GuiArcaneWorkbench.java b/src/main/java/electroblob/wizardry/client/gui/GuiArcaneWorkbench.java index 28901598..245390eb 100644 --- a/src/main/java/electroblob/wizardry/client/gui/GuiArcaneWorkbench.java +++ b/src/main/java/electroblob/wizardry/client/gui/GuiArcaneWorkbench.java @@ -17,6 +17,7 @@ import electroblob.wizardry.packet.WizardryPacketHandler; import electroblob.wizardry.registry.WizardrySounds; import electroblob.wizardry.spell.Spell; import electroblob.wizardry.tileentity.TileEntityArcaneWorkbench; +import electroblob.wizardry.util.ISpellSortable; import electroblob.wizardry.util.WandHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; @@ -115,9 +116,9 @@ public class GuiArcaneWorkbench extends GuiContainer { this.buttonList.clear(); this.buttonList.add(this.applyBtn = new GuiButtonApply(0, this.width / 2 + 64, this.height / 2 + 3)); - this.buttonList.add(new GuiButtonSort(1, this.guiLeft - 44, this.guiTop + 8, ContainerArcaneWorkbench.SortType.TIER)); - this.buttonList.add(new GuiButtonSort(2, this.guiLeft - 31, this.guiTop + 8, ContainerArcaneWorkbench.SortType.ELEMENT)); - this.buttonList.add(new GuiButtonSort(3, this.guiLeft - 18, this.guiTop + 8, ContainerArcaneWorkbench.SortType.ALPHABETICAL)); + this.buttonList.add(new GuiButtonSpellSort(1, this.guiLeft - 44, this.guiTop + 8, ISpellSortable.SortType.TIER, arcaneWorkbenchContainer, this)); + this.buttonList.add(new GuiButtonSpellSort(2, this.guiLeft - 31, this.guiTop + 8, ISpellSortable.SortType.ELEMENT, arcaneWorkbenchContainer, this)); + this.buttonList.add(new GuiButtonSpellSort(3, this.guiLeft - 18, this.guiTop + 8, ISpellSortable.SortType.ALPHABETICAL, arcaneWorkbenchContainer, this)); this.searchField = new GuiTextField(0, this.fontRenderer, this.guiLeft - 113, this.guiTop + 22, 104, this.fontRenderer.FONT_HEIGHT); this.searchField.setMaxStringLength(50); @@ -294,7 +295,7 @@ public class GuiArcaneWorkbench extends GuiContainer { // Scroll bar DrawingUtils.drawTexturedRect(guiLeft - BOOKSHELF_UI_WIDTH + SCROLL_BAR_LEFT, guiTop + SCROLL_BAR_TOP + (int)(scroll * (SCROLL_BAR_HEIGHT - SCROLL_HANDLE_HEIGHT) + 0.5f), - getMaxScrollRows() > 0 ? 30 : 30 + SCROLL_BAR_WIDTH, 476, + getMaxScrollRows() > 0 ? 0 : SCROLL_BAR_WIDTH, 476, SCROLL_BAR_WIDTH, SCROLL_HANDLE_HEIGHT, TEXTURE_WIDTH, TEXTURE_HEIGHT); // Tooltip only drawn if there is a wand @@ -507,7 +508,7 @@ public class GuiArcaneWorkbench extends GuiContainer { } } - this.buttonList.forEach(b -> b.drawButtonForegroundLayer(mouseX, mouseY)); + this.buttonList.forEach(b -> b.drawButtonForegroundLayer(mouseX - guiLeft, mouseY - guiTop)); } // Controls @@ -528,7 +529,7 @@ public class GuiArcaneWorkbench extends GuiContainer { animationTimer = 20; } - if(button instanceof GuiButtonSort) this.arcaneWorkbenchContainer.setSortType(((GuiButtonSort)button).sortType); + if(button instanceof GuiButtonSpellSort) this.arcaneWorkbenchContainer.setSortType(((GuiButtonSpellSort)button).sortType); } } @@ -587,45 +588,6 @@ public class GuiArcaneWorkbench extends GuiContainer { } } - // Nested classes - - private class GuiButtonSort extends GuiButton { - - private final ContainerArcaneWorkbench.SortType sortType; - - public GuiButtonSort(int id, int x, int y, ContainerArcaneWorkbench.SortType sortType){ - super(id, x, y, 10, 10, I18n.format("container." + Wizardry.MODID + ":arcane_workbench.sort_" + sortType.name)); - this.sortType = sortType; - } - - @Override - public void drawButton(Minecraft minecraft, int mouseX, int mouseY, float partialTicks){ - - if(this.visible){ - - // Whether the button is highlighted - this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; - - int k = 0; - int l = 476 + this.sortType.ordinal() * this.height; - - if(sortType == GuiArcaneWorkbench.this.arcaneWorkbenchContainer.getSortType()){ - k += this.width; - if(GuiArcaneWorkbench.this.arcaneWorkbenchContainer.isSortDescending()) k += this.width; - } - - DrawingUtils.drawTexturedRect(this.x, this.y, k, l, this.width, this.height, TEXTURE_WIDTH, TEXTURE_HEIGHT); - - } - } - - @Override - public void drawButtonForegroundLayer(int mouseX, int mouseY){ - if(hovered) drawHoveringText(this.displayString, mouseX - guiLeft, mouseY - guiTop); - } - - } - private static class GuiButtonApply extends GuiButton { public GuiButtonApply(int id, int x, int y){ diff --git a/src/main/java/electroblob/wizardry/client/gui/GuiButtonSpellSort.java b/src/main/java/electroblob/wizardry/client/gui/GuiButtonSpellSort.java new file mode 100644 index 00000000..8e5c8439 --- /dev/null +++ b/src/main/java/electroblob/wizardry/client/gui/GuiButtonSpellSort.java @@ -0,0 +1,57 @@ +package electroblob.wizardry.client.gui; + +import electroblob.wizardry.Wizardry; +import electroblob.wizardry.client.DrawingUtils; +import electroblob.wizardry.util.ISpellSortable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.ResourceLocation; + +public class GuiButtonSpellSort extends GuiButton { + + private static final ResourceLocation TEXTURE = new ResourceLocation(Wizardry.MODID, "textures/gui/spell_sort_buttons.png"); + private static final int TEXTURE_WIDTH = 32; + private static final int TEXTURE_HEIGHT = 32; + + public final ISpellSortable.SortType sortType; + + private final ISpellSortable sortable; + private final GuiScreen parent; + + public GuiButtonSpellSort(int id, int x, int y, ISpellSortable.SortType sortType, ISpellSortable sortable, GuiScreen parent){ + super(id, x, y, 10, 10, I18n.format("container." + Wizardry.MODID + ":arcane_workbench.sort_" + sortType.name)); + this.sortType = sortType; + this.sortable = sortable; + this.parent = parent; + } + + @Override + public void drawButton(Minecraft minecraft, int mouseX, int mouseY, float partialTicks){ + + if(this.visible){ + + // Whether the button is highlighted + this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + + int k = 0; + int l = this.sortType.ordinal() * this.height; + + if(sortType == sortable.getSortType()){ + k += this.width; + if(sortable.isSortDescending()) k += this.width; + } + + parent.mc.getTextureManager().bindTexture(TEXTURE); + DrawingUtils.drawTexturedRect(this.x, this.y, k, l, this.width, this.height, TEXTURE_WIDTH, TEXTURE_HEIGHT); + + } + } + + @Override + public void drawButtonForegroundLayer(int mouseX, int mouseY){ + if(hovered) parent.drawHoveringText(this.displayString, mouseX, mouseY); + } + +} diff --git a/src/main/java/electroblob/wizardry/client/gui/handbook/GuiButtonTurnPage.java b/src/main/java/electroblob/wizardry/client/gui/GuiButtonTurnPage.java similarity index 69% rename from src/main/java/electroblob/wizardry/client/gui/handbook/GuiButtonTurnPage.java rename to src/main/java/electroblob/wizardry/client/gui/GuiButtonTurnPage.java index 662e71a1..ef45cae1 100644 --- a/src/main/java/electroblob/wizardry/client/gui/handbook/GuiButtonTurnPage.java +++ b/src/main/java/electroblob/wizardry/client/gui/GuiButtonTurnPage.java @@ -1,6 +1,5 @@ -package electroblob.wizardry.client.gui.handbook; +package electroblob.wizardry.client.gui; -import electroblob.wizardry.Wizardry; import electroblob.wizardry.client.DrawingUtils; import electroblob.wizardry.registry.WizardrySounds; import net.minecraft.client.Minecraft; @@ -11,12 +10,12 @@ import net.minecraft.client.renderer.GlStateManager; import net.minecraft.util.ResourceLocation; //@SideOnly(Side.CLIENT) -class GuiButtonTurnPage extends GuiButton { +public class GuiButtonTurnPage extends GuiButton { - static final int WIDTH = 20; - static final int HEIGHT = 12; + public static final int WIDTH = 20; + public static final int HEIGHT = 12; - enum Type { + public enum Type { NEXT_PAGE(0, 196), PREVIOUS_PAGE(0, 208), @@ -34,11 +33,15 @@ class GuiButtonTurnPage extends GuiButton { public final Type type; - private static final ResourceLocation texture = new ResourceLocation(Wizardry.MODID, "textures/gui/handbook.png"); + private final ResourceLocation texture; + private final int textureWidth, textureHeight; - public GuiButtonTurnPage(int id, int x, int y, Type type){ + public GuiButtonTurnPage(int id, int x, int y, Type type, ResourceLocation texture, int textureWidth, int textureHeight){ super(id, x, y, WIDTH, HEIGHT, ""); this.type = type; + this.texture = texture; + this.textureWidth = textureWidth; + this.textureHeight = textureHeight; } @Override @@ -50,12 +53,13 @@ class GuiButtonTurnPage extends GuiButton { public void drawButton(Minecraft minecraft, int mouseX, int mouseY, float partialTicks){ if(this.visible){ - + boolean flag = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); minecraft.getTextureManager().bindTexture(texture); - DrawingUtils.drawTexturedRect(this.x, this.y, flag ? type.u + width : type.u, type.v, width, height, 512, 256); + DrawingUtils.drawTexturedRect(this.x, this.y, flag ? type.u + width : type.u, type.v, width, height, textureWidth, textureHeight); } } + } diff --git a/src/main/java/electroblob/wizardry/client/gui/GuiLectern.java b/src/main/java/electroblob/wizardry/client/gui/GuiLectern.java new file mode 100644 index 00000000..6c69b6f2 --- /dev/null +++ b/src/main/java/electroblob/wizardry/client/gui/GuiLectern.java @@ -0,0 +1,467 @@ +package electroblob.wizardry.client.gui; + +import electroblob.wizardry.Wizardry; +import electroblob.wizardry.block.BlockBookshelf; +import electroblob.wizardry.client.DrawingUtils; +import electroblob.wizardry.client.gui.GuiButtonTurnPage.Type; +import electroblob.wizardry.data.SpellGlyphData; +import electroblob.wizardry.item.ItemSpellBook; +import electroblob.wizardry.packet.PacketLectern; +import electroblob.wizardry.packet.WizardryPacketHandler; +import electroblob.wizardry.registry.Spells; +import electroblob.wizardry.registry.WizardrySounds; +import electroblob.wizardry.spell.Spell; +import electroblob.wizardry.tileentity.TileEntityLectern; +import electroblob.wizardry.util.ISpellSortable; +import electroblob.wizardry.util.ParticleBuilder; +import electroblob.wizardry.util.WizardryUtilities; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.audio.SoundHandler; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiTextField; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.resources.I18n; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.network.play.client.CPacketCloseWindow; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Locale; +import java.util.stream.Collectors; + +public class GuiLectern extends GuiSpellInfo implements ISpellSortable { + + private static final ResourceLocation TEXTURE = new ResourceLocation(Wizardry.MODID, "textures/gui/lectern.png"); + /** The distance of the page buttons from the bottom outside corners of the GUI. */ + private static final int PAGE_BUTTON_INSET_X = 22, PAGE_BUTTON_INSET_Y = 13; + /** The distance between adjacent page turn buttons. */ + private static final int PAGE_BUTTON_SPACING = 20; + /** The distance of the sort buttons from the top left corner of the GUI. */ + private static final int SORT_BUTTON_INSET_X = 96, SORT_BUTTON_INSET_Y = 20; + /** The distance between adjacent sort buttons. */ + private static final int SORT_BUTTON_SPACING = 13; + /** The distance of the spell buttons from the top outside corners of the GUI. */ + private static final int SPELL_BUTTON_INSET_X = 23, SPELL_BUTTON_INSET_Y = 44; + /** The distance between adjacent spell buttons (in both x and y). */ + private static final int SPELL_BUTTON_SPACING = 38; + + private static final int SPELL_ROWS = 3, SPELL_COLUMNS = 3; + public static final int SPELL_BUTTON_COUNT = SPELL_ROWS * SPELL_COLUMNS * 2; // x2 because there are 2 pages + + private final TileEntityLectern lectern; + + private GuiButton nextPageButton; + private GuiButton prevPageButton; + private GuiButton lastPageButton; + private GuiButton firstPageButton; + private GuiButton indexButton; + private GuiButton locateButton; + + private GuiButton[] sortButtons = new GuiButton[3]; + private GuiButtonSpell[] spellButtons = new GuiButtonSpell[SPELL_BUTTON_COUNT]; + + /** The spell currently being viewed, or null if the index is being viewed. */ + private Spell currentSpell; + /** The available spells in nearby bookshelves; should not contain duplicates. */ + private List availableSpells = new ArrayList<>(); + /** The spells matching the current search criteria, sorted according to the current sort settings. Will be a subset + * of {@link GuiLectern#availableSpells}. */ + private List matchingSpells; + + private ISpellSortable.SortType sortType = ISpellSortable.SortType.TIER; + private boolean sortDescending = false; + + private GuiTextField searchField; + private boolean searchNeedsClearing; + + private int currentPage = 0; + + public GuiLectern(TileEntityLectern lectern){ + super(288, 180); + this.lectern = lectern; + this.currentSpell = lectern.currentSpell; + this.setTextureSize(512, 512); + } + + @Override + public Spell getSpell(){ + return currentSpell; + } + + @Override + public ResourceLocation getTexture(){ + return TEXTURE; + } + + @Override + public SortType getSortType(){ + return sortType; + } + + @Override + public boolean isSortDescending(){ + return sortDescending; + } + + private int getPageCount(){ + return MathHelper.ceil((float)matchingSpells.size() / SPELL_BUTTON_COUNT); + } + + private Spell getSpellForButton(GuiButtonSpell button){ + return matchingSpells.get(currentPage * SPELL_BUTTON_COUNT + button.index); + } + + @Override + public void initGui(){ + + super.initGui(); + + updateAvailableSpells(); + + final int left = this.width / 2 - this.xSize / 2; + final int top = this.height / 2 - this.ySize / 2; + + int buttonID = 0; + + // Page buttons + this.buttonList.add(nextPageButton = new GuiButtonTurnPage(buttonID++, left + xSize - PAGE_BUTTON_INSET_X - GuiButtonTurnPage.WIDTH, + top + ySize - PAGE_BUTTON_INSET_Y - GuiButtonTurnPage.HEIGHT, Type.NEXT_PAGE, TEXTURE, textureWidth, textureHeight)); + + this.buttonList.add(prevPageButton = new GuiButtonTurnPage(buttonID++, left + PAGE_BUTTON_INSET_X, + top + ySize - PAGE_BUTTON_INSET_Y - GuiButtonTurnPage.HEIGHT, Type.PREVIOUS_PAGE, TEXTURE, textureWidth, textureHeight)); + + this.buttonList.add(lastPageButton = new GuiButtonTurnPage(buttonID++, left + xSize - PAGE_BUTTON_INSET_X - GuiButtonTurnPage.WIDTH - PAGE_BUTTON_SPACING, + top + ySize - PAGE_BUTTON_INSET_Y - GuiButtonTurnPage.HEIGHT, Type.NEXT_SECTION, TEXTURE, textureWidth, textureHeight)); + + this.buttonList.add(firstPageButton = new GuiButtonTurnPage(buttonID++, left + PAGE_BUTTON_INSET_X + PAGE_BUTTON_SPACING, + top + ySize - PAGE_BUTTON_INSET_Y - GuiButtonTurnPage.HEIGHT, Type.PREVIOUS_SECTION, TEXTURE, textureWidth, textureHeight)); + + this.buttonList.add(indexButton = new GuiButtonTurnPage(buttonID++, left + xSize/2 - 23, + top + ySize - PAGE_BUTTON_INSET_Y - GuiButtonTurnPage.HEIGHT, Type.CONTENTS, TEXTURE, textureWidth, textureHeight)); + + this.buttonList.add(locateButton = new GuiButtonLocateBook(buttonID++, left + xSize/2 - 34, + top + ySize - PAGE_BUTTON_INSET_Y - GuiButtonTurnPage.HEIGHT)); + + // Sort buttons + for(SortType sortType : SortType.values()){ + this.buttonList.add(sortButtons[sortType.ordinal()] = new GuiButtonSpellSort(buttonID++, + left + SORT_BUTTON_INSET_X + SORT_BUTTON_SPACING * sortType.ordinal(), + top + SORT_BUTTON_INSET_Y, sortType, this, this)); + } + + // Spell buttons + for(int i = 0; i < SPELL_BUTTON_COUNT; i++){ + + int row = i % SPELL_COLUMNS; + int column = (i / SPELL_COLUMNS) % SPELL_ROWS; + + int x = i < SPELL_BUTTON_COUNT/2 ? SPELL_BUTTON_INSET_X + row * SPELL_BUTTON_SPACING + : xSize - SPELL_BUTTON_INSET_X - GuiButtonSpell.WIDTH - (2-row) * SPELL_BUTTON_SPACING; + int y = SPELL_BUTTON_INSET_Y + column * SPELL_BUTTON_SPACING; + + this.buttonList.add(spellButtons[i] = new GuiButtonSpell(buttonID++, left + x, top + y, i)); + } + + this.searchField = new GuiTextField(0, this.fontRenderer, left + 157, top + 21, 106, this.fontRenderer.FONT_HEIGHT); + this.searchField.setMaxStringLength(50); + this.searchField.setEnableBackgroundDrawing(false); + this.searchField.setVisible(true); + this.searchField.setTextColor(16777215); + this.searchField.setCanLoseFocus(false); + this.searchField.setFocused(true); + + updateMatchingSpells(); + updateButtonVisiblity(); + + } + + @Override + public void onGuiClosed(){ + WizardryPacketHandler.net.sendToServer(new PacketLectern.Message(lectern.getPos(), currentSpell)); + super.onGuiClosed(); + } + + @Override + protected void drawBackgroundLayer(int left, int top, int mouseX, int mouseY){ + if(currentSpell == Spells.none){ + drawIndexPage(left, top); + }else{ + super.drawBackgroundLayer(left, top, mouseX, mouseY); + } + } + + @Override + protected void drawForegroundLayer(int left, int top, int mouseX, int mouseY){ + + if(currentSpell == Spells.none){ + this.fontRenderer.drawString(I18n.format("gui." + Wizardry.MODID + ":lectern.title"), + left + 20, top + SORT_BUTTON_INSET_Y, 0); + }else{ + super.drawForegroundLayer(left, top, mouseX, mouseY); + } + + this.buttonList.forEach(b -> b.drawButtonForegroundLayer(mouseX, mouseY)); + } + + private void drawIndexPage(int left, int top){ + + for(int i = 0; i < SPELL_BUTTON_COUNT; i++){ + + int index = currentPage * SPELL_BUTTON_COUNT + i; + Spell spell = index < matchingSpells.size() ? matchingSpells.get(index) : Spells.none; + boolean discovered = Wizardry.proxy.shouldDisplayDiscovered(spell, null); + + Minecraft.getMinecraft().renderEngine.bindTexture(discovered ? spell.getIcon() : Spells.none.getIcon()); + + int row = i % SPELL_COLUMNS; + int column = (i / SPELL_COLUMNS) % SPELL_ROWS; + + int x = i < SPELL_BUTTON_COUNT/2 ? SPELL_BUTTON_INSET_X + row * SPELL_BUTTON_SPACING + : xSize - SPELL_BUTTON_INSET_X - GuiButtonSpell.WIDTH - (2-row) * SPELL_BUTTON_SPACING; + int y = SPELL_BUTTON_INSET_Y + column * SPELL_BUTTON_SPACING; + + DrawingUtils.drawTexturedRect(left + x + 1, top + y + 1, 0, 0, 32, 32, 32, 32); + } + + mc.renderEngine.bindTexture(getTexture()); + DrawingUtils.drawTexturedRect(left, top, 0, 256, xSize, ySize, textureWidth, textureHeight); + + this.searchField.drawTextBox(); + + GlStateManager.color(1, 1, 1, 1); + mc.renderEngine.bindTexture(getTexture()); + + } + + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { + super.mouseClicked(mouseX, mouseY, mouseButton); + searchNeedsClearing = true; + } + + @Override + protected void actionPerformed(GuiButton button){ + + int lastPage = getPageCount() - 1; + + if(button == indexButton){ + currentSpell = Spells.none; + currentPage = 0; + + }else if(button == locateButton){ + // Close the GUI + this.mc.player.connection.sendPacket(new CPacketCloseWindow(this.mc.player.openContainer.windowId)); + this.mc.displayGuiScreen(null); + + // Find the location(s) of the current spell's book(s) and highlight them + for(IInventory bookshelf : BlockBookshelf.findNearbyBookshelves(lectern.getWorld(), lectern.getPos())){ + + for(int i = 0; i < bookshelf.getSizeInventory(); i++){ + + ItemStack stack = bookshelf.getStackInSlot(i); + + if(stack.getItem() instanceof ItemSpellBook){ + + Spell spell = Spell.byMetadata(stack.getMetadata()); + + if(spell == this.currentSpell){ + BlockPos pos = (((TileEntity)bookshelf).getPos()); + for(EnumFacing side : EnumFacing.VALUES){ + ParticleBuilder.create(ParticleBuilder.Type.BLOCK_HIGHLIGHT).pos( + WizardryUtilities.getFaceCentre(pos, side) + .add(new Vec3d(side.getDirectionVec()) + .scale(WizardryUtilities.ANTI_Z_FIGHTING_OFFSET))) + .face(side).clr(0.9f, 0.5f, 0.8f).fade(0.7f, 0, 1).spawn(mc.world); + } + break; // This bookshelf has the spell, skip to the next bookshelf + } + } + } + } + + }else if(button == nextPageButton){ + if(currentPage < lastPage) currentPage++; + + }else if(button == prevPageButton){ + if(currentPage > 0) currentPage--; + + }else if(button == lastPageButton){ + currentPage = lastPage; + + }else if(button == firstPageButton){ + currentPage = 0; + + }else if(button instanceof GuiButtonSpell){ + currentSpell = getSpellForButton((GuiButtonSpell)button); + + }else if(button instanceof GuiButtonSpellSort){ + + SortType sortType = (((GuiButtonSpellSort)button).sortType); + + if(this.sortType == sortType){ + this.sortDescending = !this.sortDescending; + }else{ + this.sortType = sortType; + this.sortDescending = false; + } + + updateMatchingSpells(); + } + + updateButtonVisiblity(); + + } + + @Override + protected void keyTyped(char typedChar, int keyCode) throws IOException { + + if(this.searchNeedsClearing){ + this.searchNeedsClearing = false; + this.searchField.setText(""); + this.currentPage = 0; + } + + if(this.searchField.textboxKeyTyped(typedChar, keyCode)){ + this.currentPage = 0; + updateMatchingSpells(); + updateButtonVisiblity(); + }else{ + super.keyTyped(typedChar, keyCode); + } + } + + private void updateButtonVisiblity(){ + + if(currentSpell == Spells.none){ + + this.searchField.setVisible(true); + + int lastPage = getPageCount() - 1; + + prevPageButton.visible = currentPage > 0; + firstPageButton.visible = currentPage > 0; + nextPageButton.visible = currentPage < lastPage; + lastPageButton.visible = currentPage < lastPage; + + indexButton.visible = false; + locateButton.visible = false; + + for(GuiButton button : sortButtons) button.visible = true; + + for(GuiButtonSpell button : spellButtons){ + button.visible = currentPage * SPELL_BUTTON_COUNT + button.index < matchingSpells.size(); + } + + }else{ + this.searchField.setVisible(false); + this.buttonList.forEach(b -> b.visible = false); // Hide all buttons... + indexButton.visible = true; // ... except the index button and locate button + locateButton.visible = true; + } + } + + private void updateMatchingSpells(){ + matchingSpells = availableSpells.stream() + .filter(s -> s.matches(searchField.getText().toLowerCase(Locale.ROOT))) + .sorted(sortDescending ? sortType.comparator.reversed() : sortType.comparator) + .collect(Collectors.toList()); + } + + // TODO: Call this when a bookshelf is added or removed + // TODO: Config option to always display all spells when in creative + private void updateAvailableSpells(){ + + availableSpells.clear(); + + // No need to exclude the lectern TE because it's not an IInventory! + for(IInventory bookshelf : BlockBookshelf.findNearbyBookshelves(lectern.getWorld(), lectern.getPos())){ + + for(int i=0; i= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + GlStateManager.color(1, 1, 1, 1); + minecraft.getTextureManager().bindTexture(TEXTURE); + + DrawingUtils.drawTexturedRect(this.x, this.y, flag ? width : 0, 184, width, height, textureWidth, textureHeight); + } + } + + } + + private class GuiButtonSpell extends GuiButtonInvisible { + + private static final int WIDTH = 34, HEIGHT = 34; + + private final int index; + + public GuiButtonSpell(int id, int x, int y, int index){ + super(id, x, y, WIDTH, HEIGHT); + this.index = index; + } + + @Override + public void playPressSound(SoundHandler soundHandler){ + soundHandler.playSound(PositionedSoundRecord.getMasterRecord(WizardrySounds.MISC_PAGE_TURN, 1)); + } + + @Override + public void drawButton(Minecraft minecraft, int mouseX, int mouseY, float partialTicks){ + if(visible){ + super.drawButton(minecraft, mouseX, mouseY, partialTicks); + if(hovered){ + mc.renderEngine.bindTexture(getTexture()); + DrawingUtils.drawTexturedRect(x, y, 40, 180, width, height, textureWidth, textureHeight); + } + } + } + + @Override + public void drawButtonForegroundLayer(int mouseX, int mouseY){ + if(visible && hovered){ + Spell spell = getSpellForButton(this); + if(Wizardry.proxy.shouldDisplayDiscovered(spell, null)){ + drawHoveringText(Collections.singletonList(spell.getDisplayName()), mouseX, mouseY, fontRenderer); + }else{ + drawHoveringText(Collections.singletonList(SpellGlyphData.getGlyphName(spell, mc.world)), + mouseX, mouseY, mc.standardGalacticFontRenderer); + } + } + } + + } + +} diff --git a/src/main/java/electroblob/wizardry/client/gui/GuiSpellBook.java b/src/main/java/electroblob/wizardry/client/gui/GuiSpellBook.java index 3e26c194..d46a9886 100644 --- a/src/main/java/electroblob/wizardry/client/gui/GuiSpellBook.java +++ b/src/main/java/electroblob/wizardry/client/gui/GuiSpellBook.java @@ -1,113 +1,35 @@ package electroblob.wizardry.client.gui; -import electroblob.wizardry.Wizardry; -import electroblob.wizardry.client.DrawingUtils; -import electroblob.wizardry.constants.Tier; -import electroblob.wizardry.data.SpellGlyphData; -import electroblob.wizardry.data.WizardData; import electroblob.wizardry.item.ItemSpellBook; -import electroblob.wizardry.registry.Spells; -import electroblob.wizardry.registry.WizardrySounds; import electroblob.wizardry.spell.Spell; -import net.minecraft.client.Minecraft; -import net.minecraft.client.audio.PositionedSoundRecord; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import org.lwjgl.input.Keyboard; +import net.minecraft.util.ResourceLocation; -public class GuiSpellBook extends GuiScreen { +public class GuiSpellBook extends GuiSpellInfo { - private int xSize, ySize; - private ItemSpellBook book; - private Spell spell; + private final ItemSpellBook book; + private final Spell spell; public GuiSpellBook(ItemStack stack){ - super(); - xSize = 288; - ySize = 180; - if(!(stack.getItem() instanceof ItemSpellBook)) throw new ClassCastException("Cannot create spell book GUI for item that does not extend ItemSpellBook!"); + + super(288, 180); + + if(!(stack.getItem() instanceof ItemSpellBook)){ + throw new ClassCastException("Cannot create spell book GUI for item that does not extend ItemSpellBook!"); + } + this.book = (ItemSpellBook)stack.getItem(); - this.spell = Spell.byMetadata(stack.getItemDamage()); + this.spell = (Spell.byMetadata(stack.getItemDamage())); } @Override - public void drawScreen(int par1, int par2, float par3){ - - int xPos = this.width / 2 - xSize / 2; - int yPos = this.height / 2 - this.ySize / 2; - - EntityPlayer player = Minecraft.getMinecraft().player; - - boolean discovered = true; - if(Wizardry.settings.discoveryMode && !player.isCreative() && WizardData.get(player) != null - && !WizardData.get(player).hasSpellBeenDiscovered(spell)){ - discovered = false; - } - - GlStateManager.color(1, 1, 1, 1); // Just in case - - // Draws spell illustration on opposite page, underneath the book so it shows through the hole. - Minecraft.getMinecraft().renderEngine.bindTexture(discovered ? spell.getIcon() : Spells.none.getIcon()); - DrawingUtils.drawTexturedRect(xPos + 146, yPos + 20, 0, 0, 128, 128, 128, 128); - - Minecraft.getMinecraft().renderEngine.bindTexture(book.getGuiTexture(spell)); - DrawingUtils.drawTexturedRect(xPos, yPos, 0, 0, xSize, ySize, xSize, 256); - - super.drawScreen(par1, par2, par3); - - if(discovered){ - this.fontRenderer.drawString(spell.getDisplayName(), xPos + 17, yPos + 15, 0); - this.fontRenderer.drawString(spell.getType().getDisplayName(), xPos + 17, yPos + 26, 0x777777); - }else{ - this.mc.standardGalacticFontRenderer.drawString(SpellGlyphData.getGlyphName(spell, player.world), xPos + 17, - yPos + 15, 0); - this.mc.standardGalacticFontRenderer.drawString(spell.getType().getDisplayName(), xPos + 17, yPos + 26, - 0x777777); - } - - // Novice is usually white but this doesn't show up - String tier = I18n.format("gui.ebwizardry:spell_book.tier", spell.getTier() == Tier.NOVICE ? - "\u00A77" + spell.getTier().getDisplayName() : spell.getTier().getDisplayNameWithFormatting()); - this.fontRenderer.drawString(tier, xPos + 17, yPos + 45, 0); - - String element = I18n.format("gui.ebwizardry:spell_book.element", spell.getElement().getFormattingCode() + spell.getElement().getDisplayName()); - if(!discovered) element = I18n.format("gui.ebwizardry:spell_book.element_undiscovered"); - this.fontRenderer.drawString(element, xPos + 17, yPos + 57, 0); - - String manaCost = I18n.format("gui.ebwizardry:spell_book.mana_cost", spell.getCost()); - if(spell.isContinuous) manaCost = I18n.format("gui.ebwizardry:spell_book.mana_cost_continuous", spell.getCost()); - if(!discovered) manaCost = I18n.format("gui.ebwizardry:spell_book.mana_cost_undiscovered"); - this.fontRenderer.drawString(manaCost, xPos + 17, yPos + 69, 0); - - if(discovered){ - this.fontRenderer.drawSplitString(spell.getDescription(), xPos + 17, yPos + 83, 118, 0); - }else{ - this.mc.standardGalacticFontRenderer.drawSplitString( - SpellGlyphData.getGlyphDescription(spell, player.world), xPos + 17, yPos + 83, 118, 0); - } + public Spell getSpell(){ + return spell; } @Override - public void initGui(){ - super.initGui(); - Keyboard.enableRepeatEvents(true); - this.buttonList.clear(); - - this.mc.getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(WizardrySounds.MISC_BOOK_OPEN, 1)); - } - - @Override - public void onGuiClosed(){ - super.onGuiClosed(); - Keyboard.enableRepeatEvents(false); - } - - @Override - public boolean doesGuiPauseGame(){ - return Wizardry.settings.booksPauseGame; + public ResourceLocation getTexture(){ + return book.getGuiTexture(spell); } } diff --git a/src/main/java/electroblob/wizardry/client/gui/GuiSpellInfo.java b/src/main/java/electroblob/wizardry/client/gui/GuiSpellInfo.java new file mode 100644 index 00000000..0bb77c4f --- /dev/null +++ b/src/main/java/electroblob/wizardry/client/gui/GuiSpellInfo.java @@ -0,0 +1,137 @@ +package electroblob.wizardry.client.gui; + +import electroblob.wizardry.Wizardry; +import electroblob.wizardry.client.DrawingUtils; +import electroblob.wizardry.constants.Tier; +import electroblob.wizardry.data.SpellGlyphData; +import electroblob.wizardry.registry.Spells; +import electroblob.wizardry.registry.WizardrySounds; +import electroblob.wizardry.spell.Spell; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.input.Keyboard; + +/** Abstract base class for both {@link GuiSpellBook} and {@link GuiLectern}. Centralises code common to both + * those classes. */ +public abstract class GuiSpellInfo extends GuiScreen { + + protected static final String TRANSLATION_KEY_PREFIX = "gui." + Wizardry.MODID + ":spell_book"; + + protected final int xSize, ySize; + protected int textureWidth = 512; + protected int textureHeight = 256; + + public GuiSpellInfo(int xSize, int ySize){ + super(); + this.xSize = xSize; + this.ySize = ySize; + } + + protected void setTextureSize(int width, int height){ + this.textureWidth = width; + this.textureHeight = height; + } + + /** Returns the spell to be displayed by this GUI. */ + public abstract Spell getSpell(); + + /** Returns the main texture for the background of this GUI. */ + public abstract ResourceLocation getTexture(); + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks){ + int left = this.width/2 - xSize/2; + int top = this.height/2 - this.ySize/2; + this.drawBackgroundLayer(left, top, mouseX, mouseY); + super.drawScreen(mouseX, mouseY, partialTicks); // Just draws the buttons + this.drawForegroundLayer(left, top, mouseX, mouseY); + } + + /** + * Draws the background of the spell info GUI. This is called before buttons are drawn. + * @param left The x-coordinate of the left-hand edge of the GUI + * @param top The y-coordinate of the top edge of the GUI + * @param mouseX The current x position of the mouse pointer + * @param mouseY The current y position of the mouse pointer + */ + protected void drawBackgroundLayer(int left, int top, int mouseX, int mouseY){ + + boolean discovered = Wizardry.proxy.shouldDisplayDiscovered(getSpell(), null); + + GlStateManager.color(1, 1, 1, 1); // Just in case + + // Draws spell illustration on opposite page, underneath the book so it shows through the hole. + Minecraft.getMinecraft().renderEngine.bindTexture(discovered ? getSpell().getIcon() : Spells.none.getIcon()); + DrawingUtils.drawTexturedRect(left + 146, top + 20, 0, 0, 128, 128, 128, 128); + + Minecraft.getMinecraft().renderEngine.bindTexture(getTexture()); + DrawingUtils.drawTexturedRect(left, top, 0, 0, xSize, ySize, textureWidth, textureHeight); + } + + /** + * Draws the foreground of the spell info GUI. This is called after buttons are drawn. + * @param left The x-coordinate of the left-hand edge of the GUI + * @param top The y-coordinate of the top edge of the GUI + * @param mouseX The current x position of the mouse pointer + * @param mouseY The current y position of the mouse pointer + */ + protected void drawForegroundLayer(int left, int top, int mouseX, int mouseY){ + + boolean discovered = Wizardry.proxy.shouldDisplayDiscovered(getSpell(), null); + + if(discovered){ + this.fontRenderer.drawString(getSpell().getDisplayName(), left + 17, top + 15, 0); + this.fontRenderer.drawString(getSpell().getType().getDisplayName(), left + 17, top + 26, 0x777777); + }else{ + this.mc.standardGalacticFontRenderer.drawString(SpellGlyphData.getGlyphName(getSpell(), mc.world), left + 17, + top + 15, 0); + this.mc.standardGalacticFontRenderer.drawString(getSpell().getType().getDisplayName(), left + 17, top + 26, + 0x777777); + } + + // Novice is usually white but this doesn't show up + String tier = I18n.format(TRANSLATION_KEY_PREFIX + ".tier", getSpell().getTier() == Tier.NOVICE ? + "\u00A77" + getSpell().getTier().getDisplayName() : getSpell().getTier().getDisplayNameWithFormatting()); + this.fontRenderer.drawString(tier, left + 17, top + 45, 0); + + String element = I18n.format(TRANSLATION_KEY_PREFIX + ".element", getSpell().getElement().getFormattingCode() + getSpell().getElement().getDisplayName()); + if(!discovered) element = I18n.format(TRANSLATION_KEY_PREFIX + ".element_undiscovered"); + this.fontRenderer.drawString(element, left + 17, top + 57, 0); + + String manaCost = I18n.format(TRANSLATION_KEY_PREFIX + ".mana_cost", getSpell().getCost()); + if(getSpell().isContinuous) manaCost = I18n.format(TRANSLATION_KEY_PREFIX + ".mana_cost_continuous", getSpell().getCost()); + if(!discovered) manaCost = I18n.format(TRANSLATION_KEY_PREFIX + ".mana_cost_undiscovered"); + this.fontRenderer.drawString(manaCost, left + 17, top + 69, 0); + + if(discovered){ + this.fontRenderer.drawSplitString(getSpell().getDescription(), left + 17, top + 83, 118, 0); + }else{ + this.mc.standardGalacticFontRenderer.drawSplitString( + SpellGlyphData.getGlyphDescription(getSpell(), mc.world), left + 17, top + 83, 118, 0); + } + } + + @Override + public void initGui(){ + super.initGui(); + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + this.mc.getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(WizardrySounds.MISC_BOOK_OPEN, 1)); + } + + @Override + public void onGuiClosed(){ + super.onGuiClosed(); + Keyboard.enableRepeatEvents(false); + } + + @Override + public boolean doesGuiPauseGame(){ + return Wizardry.settings.booksPauseGame; + } + +} diff --git a/src/main/java/electroblob/wizardry/client/gui/handbook/GuiWizardHandbook.java b/src/main/java/electroblob/wizardry/client/gui/handbook/GuiWizardHandbook.java index 13fa335f..bf947a03 100644 --- a/src/main/java/electroblob/wizardry/client/gui/handbook/GuiWizardHandbook.java +++ b/src/main/java/electroblob/wizardry/client/gui/handbook/GuiWizardHandbook.java @@ -8,7 +8,8 @@ import electroblob.wizardry.Wizardry; import electroblob.wizardry.client.ClientProxy; import electroblob.wizardry.client.DrawingUtils; import electroblob.wizardry.client.gui.GuiButtonInvisible; -import electroblob.wizardry.client.gui.handbook.GuiButtonTurnPage.Type; +import electroblob.wizardry.client.gui.GuiButtonTurnPage; +import electroblob.wizardry.client.gui.GuiButtonTurnPage.Type; import electroblob.wizardry.constants.Constants; import electroblob.wizardry.constants.Element; import electroblob.wizardry.constants.Tier; @@ -348,19 +349,19 @@ public class GuiWizardHandbook extends GuiScreen { this.buttonList.clear(); this.buttonList.add(next = new GuiButtonTurnPage(nextButtonId++, left + GUI_WIDTH - BUTTON_INSET_X - GuiButtonTurnPage.WIDTH, - top + GUI_HEIGHT - BUTTON_INSET_Y - GuiButtonTurnPage.HEIGHT, Type.NEXT_PAGE)); + top + GUI_HEIGHT - BUTTON_INSET_Y - GuiButtonTurnPage.HEIGHT, Type.NEXT_PAGE, texture, TEXTURE_WIDTH, TEXTURE_HEIGHT)); this.buttonList.add(previous = new GuiButtonTurnPage(nextButtonId++, left + BUTTON_INSET_X, - top + GUI_HEIGHT - BUTTON_INSET_Y - GuiButtonTurnPage.HEIGHT, Type.PREVIOUS_PAGE)); + top + GUI_HEIGHT - BUTTON_INSET_Y - GuiButtonTurnPage.HEIGHT, Type.PREVIOUS_PAGE, texture, TEXTURE_WIDTH, TEXTURE_HEIGHT)); this.buttonList.add(nextSection = new GuiButtonTurnPage(nextButtonId++, left + GUI_WIDTH - BUTTON_INSET_X - GuiButtonTurnPage.WIDTH - BUTTON_SPACING, - top + GUI_HEIGHT - BUTTON_INSET_Y - GuiButtonTurnPage.HEIGHT, Type.NEXT_SECTION)); + top + GUI_HEIGHT - BUTTON_INSET_Y - GuiButtonTurnPage.HEIGHT, Type.NEXT_SECTION, texture, TEXTURE_WIDTH, TEXTURE_HEIGHT)); this.buttonList.add(previousSection = new GuiButtonTurnPage(nextButtonId++, left + BUTTON_INSET_X + BUTTON_SPACING, - top + GUI_HEIGHT - BUTTON_INSET_Y - GuiButtonTurnPage.HEIGHT, Type.PREVIOUS_SECTION)); + top + GUI_HEIGHT - BUTTON_INSET_Y - GuiButtonTurnPage.HEIGHT, Type.PREVIOUS_SECTION, texture, TEXTURE_WIDTH, TEXTURE_HEIGHT)); this.buttonList.add(menu = new GuiButtonTurnPage(nextButtonId++, left + GUI_WIDTH/2 - 28, - top + GUI_HEIGHT - BUTTON_INSET_Y - GuiButtonTurnPage.HEIGHT, Type.CONTENTS)); + top + GUI_HEIGHT - BUTTON_INSET_Y - GuiButtonTurnPage.HEIGHT, Type.CONTENTS, texture, TEXTURE_WIDTH, TEXTURE_HEIGHT)); this.buttonList.add(bookmark = new GuiButtonInvisible(nextButtonId++, left + 130, top + 172, 11, 19) { @Override diff --git a/src/main/java/electroblob/wizardry/client/model/WizardryModels.java b/src/main/java/electroblob/wizardry/client/model/WizardryModels.java index 11ad3990..e03e22d5 100644 --- a/src/main/java/electroblob/wizardry/client/model/WizardryModels.java +++ b/src/main/java/electroblob/wizardry/client/model/WizardryModels.java @@ -84,6 +84,13 @@ public final class WizardryModels { registerItemModel(Item.getItemFromBlock(WizardryBlocks.acacia_bookshelf)); registerItemModel(Item.getItemFromBlock(WizardryBlocks.dark_oak_bookshelf)); + registerItemModel(Item.getItemFromBlock(WizardryBlocks.oak_lectern)); + registerItemModel(Item.getItemFromBlock(WizardryBlocks.spruce_lectern)); + registerItemModel(Item.getItemFromBlock(WizardryBlocks.birch_lectern)); + registerItemModel(Item.getItemFromBlock(WizardryBlocks.jungle_lectern)); + registerItemModel(Item.getItemFromBlock(WizardryBlocks.acacia_lectern)); + registerItemModel(Item.getItemFromBlock(WizardryBlocks.dark_oak_lectern)); + // Items registerMultiTexturedModel((ItemCrystal)WizardryItems.magic_crystal); diff --git a/src/main/java/electroblob/wizardry/client/particle/ParticleBlockHighlight.java b/src/main/java/electroblob/wizardry/client/particle/ParticleBlockHighlight.java new file mode 100644 index 00000000..8188fd45 --- /dev/null +++ b/src/main/java/electroblob/wizardry/client/particle/ParticleBlockHighlight.java @@ -0,0 +1,58 @@ +package electroblob.wizardry.client.particle; + +import electroblob.wizardry.Wizardry; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.relauncher.Side; + +//@SideOnly(Side.CLIENT) +@Mod.EventBusSubscriber(Side.CLIENT) +public class ParticleBlockHighlight extends ParticleWizardry { + + private static final ResourceLocation TEXTURE = new ResourceLocation(Wizardry.MODID, "particle/block_highlight"); + + public ParticleBlockHighlight(World world, double x, double y, double z){ + + super(world, x, y, z, TEXTURE); + + this.particleGravity = 0; + this.setMaxAge(160); + this.particleScale = 5; + this.shaded = false; + } + + @Override + public boolean shouldDisableDepth(){ + return true; + } + + @Override + public void onUpdate(){ + + super.onUpdate(); + + // Fading + if(this.particleAge > this.particleMaxAge/2){ + this.setAlphaF(1 - ((float)this.particleAge - this.particleMaxAge/2f) / (this.particleMaxAge/2f)); + } + + EnumFacing facing = EnumFacing.fromAngle(yaw); + if(pitch == 90) facing = EnumFacing.UP; + if(pitch == -90) facing = EnumFacing.DOWN; + + // Disappears if there is no block behind it (this is the same check used to spawn it) + if(!world.getBlockState(new BlockPos(posX, posY, posZ).offset(facing.getOpposite())).getMaterial().isSolid()){ + this.setExpired(); + } + } + + @SubscribeEvent + public static void onTextureStitchEvent(TextureStitchEvent.Pre event){ + event.getMap().registerSprite(TEXTURE); + } +} diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderLectern.java b/src/main/java/electroblob/wizardry/client/renderer/RenderLectern.java new file mode 100644 index 00000000..4872b09b --- /dev/null +++ b/src/main/java/electroblob/wizardry/client/renderer/RenderLectern.java @@ -0,0 +1,53 @@ +package electroblob.wizardry.client.renderer; + +import electroblob.wizardry.Wizardry; +import electroblob.wizardry.tileentity.TileEntityLectern; +import net.minecraft.block.BlockHorizontal; +import net.minecraft.client.model.ModelBook; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; + +public class RenderLectern extends TileEntitySpecialRenderer { + + private static final ResourceLocation BOOK_TEXTURE = new ResourceLocation(Wizardry.MODID, "textures/entity/lectern_book.png"); + private final ModelBook modelBook = new ModelBook(); + + @Override + public void render(TileEntityLectern te, double x, double y, double z, float partialTicks, int destroyStage, float alpha){ + + GlStateManager.pushMatrix(); + GlStateManager.translate((float)x + 0.5F, (float)y + 1, (float)z + 0.5F); + GlStateManager.rotate(90 - te.getWorld().getBlockState(te.getPos()).getValue(BlockHorizontal.FACING).getHorizontalAngle(), 0, 1, 0); + + float time = (float)te.ticksExisted + partialTicks; + + float spread = te.bookSpreadPrev + (te.bookSpread - te.bookSpreadPrev) * partialTicks; + + GlStateManager.translate(0, 0.12, 0); + if(spread > 0.3) GlStateManager.translate(0, MathHelper.sin(time * 0.1F) * 0.01F, 0); + + GlStateManager.rotate(112.5F, 0, 0, 1); + + GlStateManager.translate(0, 0.04 + (1 - spread) * 0.09, (1 - spread) * -0.1875); + + GlStateManager.rotate((1 - spread) * -90, 0, 1, 0); + + this.bindTexture(BOOK_TEXTURE); + + float f3 = te.pageFlipPrev + (te.pageFlip - te.pageFlipPrev) * partialTicks + 0.25F; + float f4 = te.pageFlipPrev + (te.pageFlip - te.pageFlipPrev) * partialTicks + 0.75F; + f3 = (f3 - (float)MathHelper.fastFloor(f3)) * 1.6F - 0.3F; + f4 = (f4 - (float)MathHelper.fastFloor(f4)) * 1.6F - 0.3F; + + f3 = MathHelper.clamp(f3, 0, 1); + f4 = MathHelper.clamp(f4, 0, 1); + + GlStateManager.enableCull(); + this.modelBook.render(null, time, f3, f4, spread, 0.0F, 0.0625F); + GlStateManager.popMatrix(); + + } + +} diff --git a/src/main/java/electroblob/wizardry/inventory/ContainerArcaneWorkbench.java b/src/main/java/electroblob/wizardry/inventory/ContainerArcaneWorkbench.java index a3dc3704..123fa1c0 100644 --- a/src/main/java/electroblob/wizardry/inventory/ContainerArcaneWorkbench.java +++ b/src/main/java/electroblob/wizardry/inventory/ContainerArcaneWorkbench.java @@ -9,6 +9,7 @@ import electroblob.wizardry.registry.WizardryAdvancementTriggers; import electroblob.wizardry.registry.WizardryItems; import electroblob.wizardry.spell.Spell; import electroblob.wizardry.tileentity.TileEntityArcaneWorkbench; +import electroblob.wizardry.util.ISpellSortable; import electroblob.wizardry.util.WandHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -18,9 +19,7 @@ import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraftforge.common.MinecraftForge; @@ -47,7 +46,7 @@ import java.util.stream.Collectors; * for consistency, just in case). The bookshelf slot delegates to a virtual slot on the client side (which is where * the search and sorting is done), and then the click is sent to the server. */ -public class ContainerArcaneWorkbench extends Container { +public class ContainerArcaneWorkbench extends Container implements ISpellSortable { /** The arcane workbench tile entity associated with this container. */ public TileEntityArcaneWorkbench tileentity; @@ -70,7 +69,7 @@ public class ContainerArcaneWorkbench extends Container { private List activeBookshelfSlots = new ArrayList<>(); private int scroll = 0; - private SortType sortType = SortType.TIER; + private ISpellSortable.SortType sortType = ISpellSortable.SortType.TIER; private boolean sortDescending = false; private String searchText = ""; @@ -369,7 +368,7 @@ public class ContainerArcaneWorkbench extends Container { } /** Sets the sorting type to the given type, or toggles the sort direction if it is already that type. */ - public void setSortType(SortType sortType){ + public void setSortType(ISpellSortable.SortType sortType){ if(this.sortType == sortType){ this.sortDescending = !this.sortDescending; @@ -381,12 +380,12 @@ public class ContainerArcaneWorkbench extends Container { updateActiveBookshelfSlots(); } - /** Returns the current sorting type. */ - public SortType getSortType(){ + @Override + public ISpellSortable.SortType getSortType(){ return sortType; } - /** Returns true if the current sorting is in descending order, false otherwise. */ + @Override public boolean isSortDescending(){ return sortDescending; } @@ -435,6 +434,7 @@ public class ContainerArcaneWorkbench extends Container { // N.B. If we drop the requirement of it working with any container it could potentially be a lot easier since // we then always have control over the bookshelf classes + // TODO: Call this when a bookshelf is added or removed /** Called on initialisation, and whenever a bookshelf is added or removed. */ private void refreshBookshelfSlots(){ @@ -442,7 +442,7 @@ public class ContainerArcaneWorkbench extends Container { // TESTME: May need to do this for inventoryItemStacks (probably not though, seems like MC handles it) bookshelfSlots.clear(); - for(IInventory bookshelf : findNearbyBookshelves()){ + for(IInventory bookshelf : BlockBookshelf.findNearbyBookshelves(tileentity.getWorld(), tileentity.getPos(), tileentity)){ for(int i=0; i findNearbyBookshelves(){ - - List bookshelves = new ArrayList<>(); - - int searchRadius = 4; // TODO: Config option for this - - for(int x = -searchRadius; x <= searchRadius; x++){ - for(int y = -searchRadius; y <= searchRadius; y++){ - for(int z = -searchRadius; z <= searchRadius; z++){ - - BlockPos pos = this.tileentity.getPos().add(x, y, z); - // TODO: Config option for allowed containers - if(this.tileentity.getWorld().getBlockState(pos).getBlock() instanceof BlockBookshelf){ - TileEntity te = this.tileentity.getWorld().getTileEntity(pos); - if(te instanceof IInventory && te != this.tileentity) bookshelves.add((IInventory)te); - } - - } - } - } - - return bookshelves; - - } - - public enum SortType { - - TIER("tier", Comparator.naturalOrder()), - ELEMENT("element", Comparator.comparing(Spell::getElement).thenComparing(Spell::getTier)), - ALPHABETICAL("alphabetical", Comparator.comparing(Spell::getUnlocalisedName)); - - public String name; - public Comparator comparator; - - SortType(String name, Comparator comparator){ - this.name = name; - this.comparator = comparator; - } - - } } diff --git a/src/main/java/electroblob/wizardry/packet/PacketLectern.java b/src/main/java/electroblob/wizardry/packet/PacketLectern.java new file mode 100644 index 00000000..c499aa6e --- /dev/null +++ b/src/main/java/electroblob/wizardry/packet/PacketLectern.java @@ -0,0 +1,73 @@ +package electroblob.wizardry.packet; + +import electroblob.wizardry.Wizardry; +import electroblob.wizardry.spell.Spell; +import electroblob.wizardry.tileentity.TileEntityLectern; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; + +/** [Client -> Server] This packet is sent when a player closes the lectern GUI to send the last-viewed spell to + * the server. */ +public class PacketLectern implements IMessageHandler { + + @Override + public IMessage onMessage(Message message, MessageContext ctx){ + + // Just to make sure that the side is correct + if(ctx.side.isServer()){ + + final EntityPlayerMP player = ctx.getServerHandler().player; + + player.getServerWorld().addScheduledTask(() -> { + + TileEntity tileentity = player.world.getTileEntity(message.pos); + + if(tileentity instanceof TileEntityLectern){ + + ((TileEntityLectern)tileentity).currentSpell = message.spell; + ((TileEntityLectern)tileentity).sync(); // Update other clients with the new state + + }else{ + Wizardry.logger.warn("Received a PacketLectern, but no lectern existed at the position specified!"); + } + + }); + } + + return null; + } + + public static class Message implements IMessage { + + private BlockPos pos; + private Spell spell; + + // This constructor is required otherwise you'll get errors (used somewhere in fml through reflection) + public Message(){} + + public Message(BlockPos pos, Spell spell){ + this.pos = pos; + this.spell = spell; + } + + @Override + public void fromBytes(ByteBuf buf){ + // The order is important + pos = new BlockPos(buf.readInt(), buf.readInt(), buf.readInt()); + spell = Spell.byNetworkID(buf.readInt()); + } + + @Override + public void toBytes(ByteBuf buf){ + buf.writeInt(pos.getX()); + buf.writeInt(pos.getY()); + buf.writeInt(pos.getZ()); + buf.writeInt(spell.networkID()); + } + } +} diff --git a/src/main/java/electroblob/wizardry/packet/WizardryPacketHandler.java b/src/main/java/electroblob/wizardry/packet/WizardryPacketHandler.java index 045205bf..8feabd56 100644 --- a/src/main/java/electroblob/wizardry/packet/WizardryPacketHandler.java +++ b/src/main/java/electroblob/wizardry/packet/WizardryPacketHandler.java @@ -31,6 +31,7 @@ public class WizardryPacketHandler { registerMessage(PacketEmitterData.class, PacketEmitterData.Message.class); registerMessage(PacketPossession.class, PacketPossession.Message.class); registerMessage(PacketConquerShrine.class, PacketConquerShrine.Message.class); + registerMessage(PacketLectern.class, PacketLectern.Message.class); } private static int nextPacketId = 0; diff --git a/src/main/java/electroblob/wizardry/registry/WizardryBlocks.java b/src/main/java/electroblob/wizardry/registry/WizardryBlocks.java index ed25dfd4..244e5291 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardryBlocks.java +++ b/src/main/java/electroblob/wizardry/registry/WizardryBlocks.java @@ -64,6 +64,12 @@ public final class WizardryBlocks { public static final Block jungle_bookshelf = placeholder(); public static final Block acacia_bookshelf = placeholder(); public static final Block dark_oak_bookshelf = placeholder(); + public static final Block oak_lectern = placeholder(); + public static final Block spruce_lectern = placeholder(); + public static final Block birch_lectern = placeholder(); + public static final Block jungle_lectern = placeholder(); + public static final Block acacia_lectern = placeholder(); + public static final Block dark_oak_lectern = placeholder(); /** * Sets both the registry and unlocalised names of the given block, then registers it with the given registry. Use @@ -110,6 +116,12 @@ public final class WizardryBlocks { registerBlock(registry, "jungle_bookshelf", new BlockBookshelf()); registerBlock(registry, "acacia_bookshelf", new BlockBookshelf()); registerBlock(registry, "dark_oak_bookshelf", new BlockBookshelf()); + registerBlock(registry, "oak_lectern", new BlockLectern()); + registerBlock(registry, "birch_lectern", new BlockLectern()); + registerBlock(registry, "spruce_lectern", new BlockLectern()); + registerBlock(registry, "jungle_lectern", new BlockLectern()); + registerBlock(registry, "acacia_lectern", new BlockLectern()); + registerBlock(registry, "dark_oak_lectern", new BlockLectern()); } @@ -124,5 +136,6 @@ public final class WizardryBlocks { GameRegistry.registerTileEntity(TileEntityPlayerSaveTimed.class, new ResourceLocation(Wizardry.MODID, "player_save_timed")); GameRegistry.registerTileEntity(TileEntityShrineCore.class, new ResourceLocation(Wizardry.MODID, "shrine_core")); GameRegistry.registerTileEntity(TileEntityBookshelf.class, new ResourceLocation(Wizardry.MODID, "bookshelf")); + GameRegistry.registerTileEntity(TileEntityLectern.class, new ResourceLocation(Wizardry.MODID, "lectern")); } } \ No newline at end of file diff --git a/src/main/java/electroblob/wizardry/registry/WizardryItems.java b/src/main/java/electroblob/wizardry/registry/WizardryItems.java index b5c52052..e717d7f8 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardryItems.java +++ b/src/main/java/electroblob/wizardry/registry/WizardryItems.java @@ -407,6 +407,13 @@ public final class WizardryItems { registerItemBlock(registry, WizardryBlocks.acacia_bookshelf); registerItemBlock(registry, WizardryBlocks.dark_oak_bookshelf); + registerItemBlock(registry, WizardryBlocks.oak_lectern); + registerItemBlock(registry, WizardryBlocks.spruce_lectern); + registerItemBlock(registry, WizardryBlocks.birch_lectern); + registerItemBlock(registry, WizardryBlocks.jungle_lectern); + registerItemBlock(registry, WizardryBlocks.acacia_lectern); + registerItemBlock(registry, WizardryBlocks.dark_oak_lectern); + // Items registerItem(registry, "magic_crystal", new ItemCrystal()); diff --git a/src/main/java/electroblob/wizardry/spell/Spell.java b/src/main/java/electroblob/wizardry/spell/Spell.java index 8db0c753..b93b35ff 100644 --- a/src/main/java/electroblob/wizardry/spell/Spell.java +++ b/src/main/java/electroblob/wizardry/spell/Spell.java @@ -552,6 +552,9 @@ public abstract class Spell extends IForgeRegistryEntry.Impl implements C return ((ForgeRegistry)registry).getID(this); } + // N.B. You don't *have* to use the network ID for networking, metadata is consistent within a world and will work + // fine, *however* when syncing a list/array of spells it is much more convenient to use network IDs. + /** Returns this spell's network ID number, similar to mod-specific entity IDs.
*
* Unlike {@link Spell#metadata()}, this is guaranteed to be sequential so is suitable for indexed lookup. @@ -947,7 +950,7 @@ public abstract class Spell extends IForgeRegistryEntry.Impl implements C return spell == null ? Spells.none : spell; } - /** Gets a spell instance from its network ID. Or the {@link None} spell if no such spell exists. */ + /** Gets a spell instance from its network ID, or the {@link None} spell if no such spell exists. */ public static Spell byNetworkID(int id){ if(id < 0 || id >= registry.getValuesCollection().size()){ return Spells.none; diff --git a/src/main/java/electroblob/wizardry/tileentity/TileEntityLectern.java b/src/main/java/electroblob/wizardry/tileentity/TileEntityLectern.java new file mode 100644 index 00000000..2cbdd8e6 --- /dev/null +++ b/src/main/java/electroblob/wizardry/tileentity/TileEntityLectern.java @@ -0,0 +1,98 @@ +package electroblob.wizardry.tileentity; + +import electroblob.wizardry.registry.Spells; +import electroblob.wizardry.spell.Spell; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.MathHelper; + +import java.util.Random; + +/** Controls the book animations and remembers the GUI state when not in use. */ +public class TileEntityLectern extends TileEntity implements ITickable { + + public static final double BOOK_OPEN_DISTANCE = 5; + + private static final Random rand = new Random(); + + public int ticksExisted; + public float pageFlip; + public float pageFlipPrev; + public float flipT; + public float flipA; + public float bookSpread; + public float bookSpreadPrev; + + public Spell currentSpell = Spells.none; + + @Override + public void update(){ + + this.bookSpreadPrev = this.bookSpread; + + EntityPlayer entityplayer = this.world.getClosestPlayer(this.pos.getX() + 0.5, this.pos.getY() + 0.5, + this.pos.getZ() + 0.5, BOOK_OPEN_DISTANCE, false); + + if(entityplayer != null){ + + this.bookSpread += 0.1f; + + if(this.bookSpread < 0.5f || rand.nextInt(40) == 0){ + float f1 = this.flipT; + while(f1 == flipT) this.flipT += (float)(rand.nextInt(4) - rand.nextInt(4)); + } + + }else{ + this.bookSpread -= 0.1f; + } + + this.bookSpread = MathHelper.clamp(this.bookSpread, 0.0f, 1.0f); + + this.ticksExisted++; + + this.pageFlipPrev = this.pageFlip; + float f = (this.flipT - this.pageFlip) * 0.4f; + f = MathHelper.clamp(f, -0.2f, 0.2f); + this.flipA += (f - this.flipA) * 0.9f; + this.pageFlip += this.flipA; + + } + + /** Called to manually sync the tile entity with clients. */ + public void sync(){ + this.world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound compound){ + super.writeToNBT(compound); // Confusingly, this method both writes to the supplied compound and returns it + compound.setInteger("spell", currentSpell.metadata()); + return compound; + } + + @Override + public void readFromNBT(NBTTagCompound compound){ + super.readFromNBT(compound); + currentSpell = Spell.byMetadata(compound.getInteger("spell")); + } + + @Override + public final NBTTagCompound getUpdateTag(){ + return this.writeToNBT(new NBTTagCompound()); + } + + @Override + public SPacketUpdateTileEntity getUpdatePacket(){ + return new SPacketUpdateTileEntity(pos, getBlockMetadata(), this.getUpdateTag()); + } + + @Override + public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt){ + readFromNBT(pkt.getNbtCompound()); + } + +} diff --git a/src/main/java/electroblob/wizardry/util/ISpellSortable.java b/src/main/java/electroblob/wizardry/util/ISpellSortable.java new file mode 100644 index 00000000..e6dd1ce7 --- /dev/null +++ b/src/main/java/electroblob/wizardry/util/ISpellSortable.java @@ -0,0 +1,35 @@ +package electroblob.wizardry.util; + +import electroblob.wizardry.spell.Spell; + +import java.util.Comparator; + +/** Interface for things that have a list of spells that can be sorted using {@link SortType}. This allows + * {@link electroblob.wizardry.client.gui.GuiButtonSpellSort GuiButtonSpellSort} to change its appearance based on the + * current sort setting. */ +public interface ISpellSortable { + + /** Returns the current sort type this {@code ISpellSortable} is set to sort by. */ + SortType getSortType(); + + /** Returns true if this {@code ISpellSortable} is currently set to sort in descending order, false if it is + * set to sort in ascending order. */ + boolean isSortDescending(); + + enum SortType { + + TIER("tier", Comparator.naturalOrder()), + ELEMENT("element", Comparator.comparing(Spell::getElement).thenComparing(Spell::getTier)), + ALPHABETICAL("alphabetical", Comparator.comparing(Spell::getUnlocalisedName)); + + public String name; + public Comparator comparator; + + SortType(String name, Comparator comparator){ + this.name = name; + this.comparator = comparator; + } + + } + +} diff --git a/src/main/java/electroblob/wizardry/util/ParticleBuilder.java b/src/main/java/electroblob/wizardry/util/ParticleBuilder.java index 273875b2..e0a1e8e2 100644 --- a/src/main/java/electroblob/wizardry/util/ParticleBuilder.java +++ b/src/main/java/electroblob/wizardry/util/ParticleBuilder.java @@ -93,6 +93,8 @@ public final class ParticleBuilder { public static class Type { /** 3D-rendered light-beam particle.

Defaults:
Lifetime: 1 tick
Colour: white */ public static final ResourceLocation BEAM = new ResourceLocation(Wizardry.MODID,"beam"); + /** Square block face highlight particle.

Defaults:
Lifetime: 160 ticks
Colour: white */ + public static final ResourceLocation BLOCK_HIGHLIGHT = new ResourceLocation(Wizardry.MODID,"block_highlight"); /** Helical animated 'buffing' particle.

Defaults:
Lifetime: 15 ticks *
Velocity: (0, 0.27, 0)
Colour: white */ public static final ResourceLocation BUFF = new ResourceLocation(Wizardry.MODID,"buff"); diff --git a/src/main/resources/assets/ebwizardry/blockstates/acacia_lectern.json b/src/main/resources/assets/ebwizardry/blockstates/acacia_lectern.json new file mode 100644 index 00000000..20fb6530 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/acacia_lectern.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:acacia_lectern" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/birch_lectern.json b/src/main/resources/assets/ebwizardry/blockstates/birch_lectern.json new file mode 100644 index 00000000..1acb6ae4 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/birch_lectern.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:birch_lectern" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/dark_oak_lectern.json b/src/main/resources/assets/ebwizardry/blockstates/dark_oak_lectern.json new file mode 100644 index 00000000..d193e745 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/dark_oak_lectern.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:dark_oak_lectern" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/jungle_lectern.json b/src/main/resources/assets/ebwizardry/blockstates/jungle_lectern.json new file mode 100644 index 00000000..e12d2b53 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/jungle_lectern.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:jungle_lectern" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/oak_lectern.json b/src/main/resources/assets/ebwizardry/blockstates/oak_lectern.json new file mode 100644 index 00000000..eb8141e5 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/oak_lectern.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:oak_lectern" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/spruce_lectern.json b/src/main/resources/assets/ebwizardry/blockstates/spruce_lectern.json new file mode 100644 index 00000000..dffef19a --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/spruce_lectern.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:spruce_lectern" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/lang/en_gb.lang b/src/main/resources/assets/ebwizardry/lang/en_gb.lang index c51e35cf..c2b51ac9 100644 --- a/src/main/resources/assets/ebwizardry/lang/en_gb.lang +++ b/src/main/resources/assets/ebwizardry/lang/en_gb.lang @@ -40,6 +40,13 @@ tile.ebwizardry\:jungle_bookshelf.name=Jungle Bookshelf tile.ebwizardry\:acacia_bookshelf.name=Acacia Bookshelf tile.ebwizardry\:dark_oak_bookshelf.name=Dark Oak Bookshelf +tile.ebwizardry\:oak_lectern.name=Oak Lectern +tile.ebwizardry\:spruce_lectern.name=Spruce Lectern +tile.ebwizardry\:birch_lectern.name=Birch Lectern +tile.ebwizardry\:jungle_lectern.name=Jungle Lectern +tile.ebwizardry\:acacia_lectern.name=Acacia Lectern +tile.ebwizardry\:dark_oak_lectern.name=Dark Oak Lectern + item.ebwizardry\:crystal_magic.name=Magic Crystal item.ebwizardry\:crystal_fire.name=Fiery Crystal item.ebwizardry\:crystal_ice.name=Icy Crystal @@ -519,6 +526,8 @@ gui.ebwizardry\:spell_book.mana_cost=Mana Cost: %s gui.ebwizardry\:spell_book.mana_cost_continuous=Mana Cost: %s/second gui.ebwizardry\:spell_book.mana_cost_undiscovered=Mana Cost: ? +gui.ebwizardry\:lectern.title=Spell Lookup + container.ebwizardry\:arcane_workbench=Arcane Workbench container.ebwizardry\:arcane_workbench.apply=Apply container.ebwizardry\:arcane_workbench.mana=Mana\: diff --git a/src/main/resources/assets/ebwizardry/lang/en_us.lang b/src/main/resources/assets/ebwizardry/lang/en_us.lang index 6dee3005..ab54b962 100644 --- a/src/main/resources/assets/ebwizardry/lang/en_us.lang +++ b/src/main/resources/assets/ebwizardry/lang/en_us.lang @@ -40,6 +40,13 @@ tile.ebwizardry\:jungle_bookshelf.name=Jungle Bookshelf tile.ebwizardry\:acacia_bookshelf.name=Acacia Bookshelf tile.ebwizardry\:dark_oak_bookshelf.name=Dark Oak Bookshelf +tile.ebwizardry\:oak_lectern.name=Oak Lectern +tile.ebwizardry\:spruce_lectern.name=Spruce Lectern +tile.ebwizardry\:birch_lectern.name=Birch Lectern +tile.ebwizardry\:jungle_lectern.name=Jungle Lectern +tile.ebwizardry\:acacia_lectern.name=Acacia Lectern +tile.ebwizardry\:dark_oak_lectern.name=Dark Oak Lectern + item.ebwizardry\:crystal_magic.name=Magic Crystal item.ebwizardry\:crystal_fire.name=Fiery Crystal item.ebwizardry\:crystal_ice.name=Icy Crystal @@ -519,6 +526,8 @@ gui.ebwizardry\:spell_book.mana_cost=Mana Cost: %s gui.ebwizardry\:spell_book.mana_cost_continuous=Mana Cost: %s/second gui.ebwizardry\:spell_book.mana_cost_undiscovered=Mana Cost: ? +gui.ebwizardry\:lectern.title=Spell Lookup + container.ebwizardry\:arcane_workbench=Arcane Workbench container.ebwizardry\:arcane_workbench.apply=Apply container.ebwizardry\:arcane_workbench.mana=Mana\: diff --git a/src/main/resources/assets/ebwizardry/models/block/acacia_lectern.json b/src/main/resources/assets/ebwizardry/models/block/acacia_lectern.json new file mode 100644 index 00000000..1f7315c4 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/acacia_lectern.json @@ -0,0 +1,10 @@ +{ + "parent": "ebwizardry:block/lectern", + "textures": { + "particle": "ebwizardry:blocks/acacia_lectern_top", + "base": "ebwizardry:blocks/acacia_lectern_base", + "side": "ebwizardry:blocks/acacia_lectern_side", + "top": "ebwizardry:blocks/acacia_lectern_top", + "underside": "ebwizardry:blocks/acacia_lectern_underside" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/block/birch_lectern.json b/src/main/resources/assets/ebwizardry/models/block/birch_lectern.json new file mode 100644 index 00000000..5706382b --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/birch_lectern.json @@ -0,0 +1,10 @@ +{ + "parent": "ebwizardry:block/lectern", + "textures": { + "particle": "ebwizardry:blocks/birch_lectern_top", + "base": "ebwizardry:blocks/birch_lectern_base", + "side": "ebwizardry:blocks/birch_lectern_side", + "top": "ebwizardry:blocks/birch_lectern_top", + "underside": "ebwizardry:blocks/birch_lectern_underside" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/block/dark_oak_lectern.json b/src/main/resources/assets/ebwizardry/models/block/dark_oak_lectern.json new file mode 100644 index 00000000..fa7eb635 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/dark_oak_lectern.json @@ -0,0 +1,10 @@ +{ + "parent": "ebwizardry:block/lectern", + "textures": { + "particle": "ebwizardry:blocks/dark_oak_lectern_top", + "base": "ebwizardry:blocks/dark_oak_lectern_base", + "side": "ebwizardry:blocks/dark_oak_lectern_side", + "top": "ebwizardry:blocks/dark_oak_lectern_top", + "underside": "ebwizardry:blocks/dark_oak_lectern_underside" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/block/jungle_lectern.json b/src/main/resources/assets/ebwizardry/models/block/jungle_lectern.json new file mode 100644 index 00000000..0b560139 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/jungle_lectern.json @@ -0,0 +1,10 @@ +{ + "parent": "ebwizardry:block/lectern", + "textures": { + "particle": "ebwizardry:blocks/jungle_lectern_top", + "base": "ebwizardry:blocks/jungle_lectern_base", + "side": "ebwizardry:blocks/jungle_lectern_side", + "top": "ebwizardry:blocks/jungle_lectern_top", + "underside": "ebwizardry:blocks/jungle_lectern_underside" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/block/lectern.json b/src/main/resources/assets/ebwizardry/models/block/lectern.json new file mode 100644 index 00000000..03d694b3 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/lectern.json @@ -0,0 +1,116 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "elements": [ + { + "from": [2, 0, 2], + "to": [14, 1, 14], + "faces": { + "north": {"uv": [2, 15, 14, 16], "texture": "#side"}, + "east": {"uv": [2, 15, 14, 16], "texture": "#side"}, + "south": {"uv": [2, 15, 14, 16], "texture": "#side"}, + "west": {"uv": [2, 15, 14, 16], "texture": "#side"}, + "up": {"uv": [2, 2, 14, 14], "texture": "#base"}, + "down": {"uv": [2, 1, 14, 13], "texture": "#underside", "cullface": "down"} + } + }, + { + "from": [3, 1, 3], + "to": [13, 2, 13], + "faces": { + "north": {"uv": [3, 14, 13, 15], "texture": "#side"}, + "east": {"uv": [3, 14, 13, 15], "texture": "#side"}, + "south": {"uv": [3, 14, 13, 15], "texture": "#side"}, + "west": {"uv": [3, 14, 13, 15], "texture": "#side"}, + "up": {"uv": [3, 3, 13, 13], "texture": "#base"} + } + }, + { + "from": [4, 13, 4], + "to": [12, 15, 12], + "faces": { + "north": {"uv": [4, 1, 12, 3], "texture": "#side"}, + "east": {"uv": [4, 1, 12, 3], "texture": "#side"}, + "south": {"uv": [4, 1, 12, 3], "texture": "#side"}, + "west": {"uv": [4, 1, 12, 3], "texture": "#side"}, + "down": {"uv": [4, 3, 12, 11], "texture": "#underside"} + } + }, + { + "from": [5, 2, 5], + "to": [11, 13, 11], + "faces": { + "north": {"uv": [5, 3, 11, 14], "texture": "#side"}, + "east": {"uv": [5, 3, 11, 14], "texture": "#side"}, + "south": {"uv": [5, 3, 11, 14], "texture": "#side"}, + "west": {"uv": [5, 3, 11, 14], "texture": "#side"} + } + }, + { + "from": [0, 14.07612, 3.61732], + "to": [16, 16.07612, 17.61732], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [0, 14, 16, 16], "texture": "#top"}, + "east": {"uv": [1, 14, 15, 16], "texture": "#underside"}, + "south": {"uv": [0, 14, 16, 16], "texture": "#top"}, + "west": {"uv": [1, 14, 15, 16], "texture": "#underside"}, + "up": {"uv": [0, 0, 16, 14], "rotation": 180, "texture": "#top"}, + "down": {"uv": [0, 0, 16, 14], "texture": "#underside"} + } + }, + { + "from": [1, 16.07612, 3.61732], + "to": [15, 17.07612, 4.61732], + "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 8, 8]}, + "faces": { + "north": {"uv": [1, 13, 15, 14], "texture": "#top"}, + "east": {"uv": [1, 13, 2, 14], "texture": "#top"}, + "south": {"uv": [1, 13, 15, 14], "rotation": 180, "texture": "#top"}, + "west": {"uv": [14, 13, 15, 14], "texture": "#top"}, + "up": {"uv": [1, 13, 15, 14], "rotation": 180, "texture": "#top"} + } + }, + { + "from": [4, 15, 9], + "to": [12, 17, 12], + "faces": { + "east": {"uv": [9, 0, 12, 2], "rotation": 180, "texture": "#side"}, + "south": {"uv": [4, 0, 12, 2], "rotation": 180, "texture": "#side"}, + "west": {"uv": [4, 0, 7, 2], "rotation": 180, "texture": "#side"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "translation": [0, -1, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/block/oak_lectern.json b/src/main/resources/assets/ebwizardry/models/block/oak_lectern.json new file mode 100644 index 00000000..bbd75a37 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/oak_lectern.json @@ -0,0 +1,10 @@ +{ + "parent": "ebwizardry:block/lectern", + "textures": { + "particle": "ebwizardry:blocks/oak_lectern_top", + "base": "ebwizardry:blocks/oak_lectern_base", + "side": "ebwizardry:blocks/oak_lectern_side", + "top": "ebwizardry:blocks/oak_lectern_top", + "underside": "ebwizardry:blocks/oak_lectern_underside" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/block/spruce_lectern.json b/src/main/resources/assets/ebwizardry/models/block/spruce_lectern.json new file mode 100644 index 00000000..396cdfed --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/spruce_lectern.json @@ -0,0 +1,10 @@ +{ + "parent": "ebwizardry:block/lectern", + "textures": { + "particle": "ebwizardry:blocks/spruce_lectern_top", + "base": "ebwizardry:blocks/spruce_lectern_base", + "side": "ebwizardry:blocks/spruce_lectern_side", + "top": "ebwizardry:blocks/spruce_lectern_top", + "underside": "ebwizardry:blocks/spruce_lectern_underside" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/item/acacia_lectern.json b/src/main/resources/assets/ebwizardry/models/item/acacia_lectern.json new file mode 100644 index 00000000..59f077e4 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/acacia_lectern.json @@ -0,0 +1,3 @@ +{ + "parent": "ebwizardry:block/acacia_lectern" +} diff --git a/src/main/resources/assets/ebwizardry/models/item/birch_lectern.json b/src/main/resources/assets/ebwizardry/models/item/birch_lectern.json new file mode 100644 index 00000000..aaa107eb --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/birch_lectern.json @@ -0,0 +1,3 @@ +{ + "parent": "ebwizardry:block/birch_lectern" +} diff --git a/src/main/resources/assets/ebwizardry/models/item/dark_oak_lectern.json b/src/main/resources/assets/ebwizardry/models/item/dark_oak_lectern.json new file mode 100644 index 00000000..324650ba --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/dark_oak_lectern.json @@ -0,0 +1,3 @@ +{ + "parent": "ebwizardry:block/dark_oak_lectern" +} diff --git a/src/main/resources/assets/ebwizardry/models/item/jungle_lectern.json b/src/main/resources/assets/ebwizardry/models/item/jungle_lectern.json new file mode 100644 index 00000000..59a3dffd --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/jungle_lectern.json @@ -0,0 +1,3 @@ +{ + "parent": "ebwizardry:block/jungle_lectern" +} diff --git a/src/main/resources/assets/ebwizardry/models/item/oak_lectern.json b/src/main/resources/assets/ebwizardry/models/item/oak_lectern.json new file mode 100644 index 00000000..2ec35f3e --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/oak_lectern.json @@ -0,0 +1,3 @@ +{ + "parent": "ebwizardry:block/oak_lectern" +} diff --git a/src/main/resources/assets/ebwizardry/models/item/spruce_lectern.json b/src/main/resources/assets/ebwizardry/models/item/spruce_lectern.json new file mode 100644 index 00000000..4aeb91ca --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/spruce_lectern.json @@ -0,0 +1,3 @@ +{ + "parent": "ebwizardry:block/spruce_lectern" +} diff --git a/src/main/resources/assets/ebwizardry/spells/arcane_jammer.json b/src/main/resources/assets/ebwizardry/spells/arcane_jammer.json index bdd61d41..d6b4634d 100644 --- a/src/main/resources/assets/ebwizardry/spells/arcane_jammer.json +++ b/src/main/resources/assets/ebwizardry/spells/arcane_jammer.json @@ -12,7 +12,7 @@ }, "tier": "advanced", "element": "healing", - "type": "attack", + "type": "alteration", "cost": 30, "chargeup": 0, "cooldown": 50, diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/acacia_lectern_base.png b/src/main/resources/assets/ebwizardry/textures/blocks/acacia_lectern_base.png new file mode 100644 index 0000000000000000000000000000000000000000..7769787524173dcdecfce13b2725467a0ff44d60 GIT binary patch literal 1801 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-<*Py>N`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsEj3^PHrj$+PEkS0&RVhJ(csXMeGO{!=*Z#HlDF?bW;Wg(Fy6 z1o|d;H@y7+PwJVx&6$f*&rRDznvOo6jZ7n2=>e;9Kda3c=`V(W*)#|3~W5yFN%sU{LFqwbChnY9u{@*k`)w!!` ze@oSu<1gd$4rD(&-dXga@yf&3H&(T^l%>2Dsms26A<*({;XauK{QsW?rQSFa>!GtR zF-qh2*^0ZrUR`lKd7D_Q~8v8QC}SDj&F(N+iUfN z+4*5uy{7tqHS_ON^zOY&<9lfK*?Q--mlJkBPs-hwyv4%p{_4|u2`3-wyox%N<+$D_ ze{CS6>&GhT<(tzzH3T&S1>Jca!veHalP*}C2wd#b{A-nV=!_RTj4M)}opQSBAmQlt zh^r|xNUM)+wMwSK%%w^)EJ6EjI%VJ5vTU`8Vd3Ho0b3S>D8WzcNB1l;Ip(9GB%Qyn zDb~iAH_Yc*M~~`?MnS3LE9)$OXvxn%xw^q|{~ei)2XaokF#J7wIlADaQq+PMf$v$= za@iU5npowIO=w`0_OM~ybSh^GM_-SE#^DmNRVm*EtQXw5snV z<+Laq@-|rXK+Tga@?7PS{#_jsr{eZ}zQ?}a?$?vz2?oYGEWE|;XSH5k$qu->!gF({ zQ0x~&mtMnVGlbO-_PrMVWO#H+(772V%$CU|ZBFM}yG6olI93qv{GQsQQKw%on0)kt&*7IL+9&oMG%G$66O_Ak z>g8>RuP!<#Y~y(2Px|2r-K~Ew9oQ%FNn}$0$^*L#yM%)l6h^#N3SIJ>`G$>}40r$9 zhxe`paQA;%%ImZ$C$T?-S@&us+y3=iTh^NH$Tn15lIwD4s>*x0V{vdI@;svUT34HW;Trrj5Q3J7F;WFQ+*|6ZgB3!`t0QWfeY?^k1~nMb^3VY$%e@L zt7oZ8+&@?N=D1^{#jE4*qpZY)xkJ=P`S(d|(ccQ(f(VXP9vtLxM{uLSfZB^{4 zlvg*Fm@fCZD_@^daoz5T?Q~(;zF!tBGxs{(RlE`z%S;16tDw}sVd%M*qwRso9R*Fyi$#YMy`v%`y-My-}ZEv}k z&kXAlI^(~4fKaL$@kb^b+p+N|Z@{vC+A@QZ`K+HE?4I%Js>fS(*9Q5Cm!ub3{P_Hx>7dPrH?p^~3$ylpILdtB z`Lmhf9miMhuS)atd?IZq+5CdXXh+wb4X^B+gv)k4IiJWDw(hUM?4tcWzn(;VZr4=% zIU{A#>m3WzqNe->c4%;cjRZity*(>Qe59f;XLMZa+ZJQyivdTU-f6GUr>gu zrtMLq{f0mPOL!El_IYM++a9EN{@rR31_lPUByV>YhW{YAVDIwD3=9mM1s;*b3=De8 zAk0{?)V_>?fq}im)7O>#2@AWZkWS@vfoBX143Z_T5hc#~xw)x%B@E6*sfi`2DGKG8 zB^e6tp1uL$jeOz^42*7`E{-7R^#cr>q~oL+Q0KQ`_n7Z zmdx$t_?_6gL9HW7t=lQ>Zrq^|*6f+de&^Q*h^gc_CrD`VpU>yBZoc5GHN6vc+}v<+-zR zRy93Zef|FF=7V9&yJfzwG^=r{ZhCRjtDfav24m_Lr=?eBpRVNp(3bRcPy6c^&hu=z zJeIBPyl%haj@0L43{g6VY$iRoytB^yKgWv7&5Zrm^@SN7o0so%GRh4+SN*qb>ucXz zru|-=+sYqqHe*d#)fBd{`}K>OJNx-vN@A8z&sp^-z2Wr>XZxIM;s5M^v9X$j+TW46 Q0E!6)Pgg&ebxsLQ0INS(9{>OV literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/acacia_lectern_side.png b/src/main/resources/assets/ebwizardry/textures/blocks/acacia_lectern_side.png new file mode 100644 index 0000000000000000000000000000000000000000..5dfc524ba47360ac030eb49a9436a1585e33f181 GIT binary patch literal 1902 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-tExgGN`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsHWfh@AFBgXhn4kzy7Vfu_eB_L-Z{cu_4Ke$vOVtI?}P2`OynmGN(0e-)!$GiNfXX z=N?HeYt5@Sva7Q#J@w$+gs#_>7uch7)-0N@7qfrgzD;*xmdT%*ud%oK%gGc4bdM3rPXhI_S>QCwCGU3)SNXB)=lYfJgeZ}YsC9%_1cicMbFPYm^f40dKFu< zV2a8*g&7Vec~WcicCt;n8M>qSu*Usu7lLL_+vO$LCGE=mUQx&GwDZ3QX7>f9lG#Ki z_L_%n=uTg9uLcyR-Mq)$boB)N@XWTj&Qdk@%mu>zW&?wOsN zKFGN#u?RkDD&)$WbXwtbb>sgP{T~+U`0eRn3GAGt!Y-cH(z+lq?aCUzyX~YM@0`GiodtzQ#WfdZbgE8`xfv2(J5_4c zwTR%ey|c4B9*fP|b|dKYT&tLszx8ZO-fmnzk3A-L$HVp>gOVc?&zvyNZogLkoj+pn zVJZD(%NE>QlNjz~WPgPib>=5LpP!s@`!r9zc(Uq3OET*ZXxl|J*PHJDm41yy(z^xd0oscLs^*7pe0t$f?3J-F25 zTozsXtnc92sh13_*UAMlkc7C*BYCYrG?Cf=Z z^68Q)zXiJU1SXV(rHhHjZ+H9SsD1WxP4d&2sq)ERtRBpYnQ?QWY3o_)#_n0`` z|9@?ptv_Q%^YV4Koz9B3J}58$d}S8D+JjHg+N<_GTz!d+Co!&h%Hgbiytm{s9yDq8 zs&+1V`@Qy5jVeRGeaN{WeT$YqmnI38`k7S;ihYdB*cE(NFDyNv=(hDoj(Fd%Z#F%6 zP~SW6_%$81s9TRjcd}*qUkRM{)|d14{RE2|^*}rCbXGzYUd(hFFcjv^&pA4!o_fCBXPF|wzA#kv?=Cb&i$;N*g^=I&Z zkUcKGW>K2uzJyd6_7gQC3lqM-ZPJqVdKbWFdw$;rLC1}i%NxGzG@kLk>YdTHerL{} zS93pk)?57Ev@^y)ZB9r#*T-4E(sw?%IKlJ!oJ~J8t4_+_Qdu@#w(hdw8UD#PmVcX> z`QV`1wA<;2+O{tas3@D^-!JufvGMb}g=?crS6V1kcYVFo$+X~YOQS&6_CrqXvVZt4 zGRGfyKi&PunfzzJ%GXx5$4~IhY;?cl&Od+ho%>nMZ+1pjoV{Rp|J$+idrNlS`8B=m z>NAZvmqm7aR=0E?>(`pKdq>2hXIoeOxVz|(jlm9%JM0OZefPrl7gTP3Rx0`9;^NBr zZ=OvLTU6omte$?k)`fL2$v|<&zm07&r?&B8wRq^pruEv0|xx z83O|Ydx@v7EBg}`c2Oa&)w8BbGcYhnmbgZgIOpf)rskC}I2WZRmZYXAlxLP?D7bt2 z281{Ai8C-T26(zShFF}Q8obf(uz^5r;p3>nscLI4d70?&xbmc~lsI)HLO@w4__Y6p z{)B`F{6Cufc>XXj8w)WfF}pgQ5bD*s=*G#*yyQrx%mdwN@9)~)wViL8V(@C`#^jl& ztrxR6?qFEVGVeoS-RsPkHBB-GUI$)?PZeQ*sH87iWo9t5wc$hYWcAGjs>`0L&ilIk zQ3*SP!k?F3zfTF?^6mSb&glO`;Gc-Ag4Q83jhN$2$ul#|cLq7!f4?QbP(o^}mW6(D z^I@mz1ZxGMSm3n>Nzxw56Q8X`OP za30v%A7y&z@)l>QEWD^Stm#h4L(%9u;KR!$+zc};Tn$8{}i)o#K=X)pLP&W}N Ws@@-U;tK-<1B0ilpUXO@geCyPe2t_4 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/acacia_lectern_top.png b/src/main/resources/assets/ebwizardry/textures/blocks/acacia_lectern_top.png new file mode 100644 index 0000000000000000000000000000000000000000..4f588ada8aab2a2ebdaf1e55d6557e482b4e7414 GIT binary patch literal 1990 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 E0Am7_i~s-t literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/acacia_lectern_underside.png b/src/main/resources/assets/ebwizardry/textures/blocks/acacia_lectern_underside.png new file mode 100644 index 0000000000000000000000000000000000000000..8305f1707b9491ddd29870be023b9f8344f6c97a GIT binary patch literal 1528 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s->Z?K`N`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsHWvo;_`g22b1nbkWT$LLAedGMuv9+#LCDk3y8V?(V8*m%|L4 zgg&)I_`bHUH~+=mzQO#7iOc*w<`ywUo<>#|bKK?1&GPO%Z@y`*Ut|@>;Uc#7uH54J zpG1oeR?Pfl^)=J`g{xMs4)3F@#RWU84HbX1)QLQ1dbF*?J$mYu=b1CR?#;`T*ZSZYcKX_b zce~rmb{pxLzgyUUaHgSFZ}kluR$awrcE9SF_x;xAGs|n0>K&`T{Am8uY0}&9PXCRx zV*QrsMc3Nr%$vxU=Ra+)z0Up<7y0$G@2&j0daLTTZF#FtpG!VjrP2GA%ZpN* zZO%1#`@T8&F8z??Mpdm(8IF@g=S&smHZUvOQ}FEA>kRGi9WPQu3q&SrP1AOiU{v;G zO<>EIb4P{YLy~er_>$(<5We_|8NP>Oo^l-Kc6a(_Fy-Tk3I7W(nKwthmhQTFL^tZA(fvtz=NpDx!+?u<(lZVl zi7L2!aCpcQEnqNj?WS~L7YzgD34#qqG2*Y6FmSIv#iV{T@--v-Zia1!>K`Puv}Q}R z3MgEu+QgW%ftB&JrRzTy@rllnYpp`RN||I`db9Su^_kxfs$I_>WD_^}A>hQLnbKvp zYsJOm0?9sx>Yiev;lkgNyEK>1Ni=aTKK7=E(NbJ<+m1y?rw1f?s)jGjTD>}|me=%J z$Y-VQ*bV*S`&(4?GEZu+_gH#$?XF*@YYKg{^E|eu&Cb46!>zl`MOXfc+O^9+xwC9m zo>WLZzUWnyM`?p5r-k#IT{=uR*u7Bu#Bo@uiccX=QtS3tsl&-n#AH z^eG>{2LGA4eA+$M|66N=pDgan)48_pu=x9iqCKvfK6NLACiE6|dw2w8{;ilRbpGlBrg>-PteLa-?%pNb=JF2> zclUN1?7gY3Vd4L0<XrUt~F1mzj+@#Pp|0pv~$bvEW2L%f7OHi7Z&@^zVK(m_Iuh^e?L6@ zxhH%*_ifz?>!W_XZCRdQc;{M}*Aai_tf+0rr5E*0`BC`L_qBGOZT%W&S2aoi@ zhtH#?>Ry~Cm1e?muWbXX^#7c-s!PwR|M~qdt~M|FSDC`CIcZAW_wQUe+B(Jgu>KmC z|4a<8&n&jje!8E5fq^Z_+ueoXKL{?^yL>VO0|RG)M`SSrgPt-7Ggd6MFJoX}U@!6X zb!C6T!Y(Q-Xz?U>8v_G_WQl7;iF1B#Zfaf$gL6@8Vo7R>LV0FMhJw4NZ$Nk>pEv^p z!&Ofg#}JFtbAt`}4jJ(530t`|ea&xYp|hNeca$iMKp{ zru;Hc%S`>U;6y{?bd}Q8Yq$+2GERTk?P0;NWKy1|y}9uOhfJ?4$*oNMFJ>k=Bp(%C zvSi~&t-NU$S+!m-N`BJD#$)r~xvr$T-lZw*Hhf~4J)iXFYu?lmw|KWb_HS0Y?Y?_* q7O|&X7!T|$nelt+`?K30vRgi0q`GC!27d+y1_n=8KbLh*2~7abn#TwL literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/birch_lectern_base.png b/src/main/resources/assets/ebwizardry/textures/blocks/birch_lectern_base.png new file mode 100644 index 0000000000000000000000000000000000000000..19b1e4824340363fdaea73467ca261f690d74fe1 GIT binary patch literal 1790 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-WvfCWN`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsEj3kDm5egXeF$=w=obfdx-L*rb;koSuLB@X94tCqqKNpPz9f zL2*gw4>i@|-(~miGP)gsBmG|JIPp_sLOPzeDyMV0`|nfzPqX=c ztmFFnqW|*#Lk+jjw3kn8X6cgiKW}zyL5BJ^JEgo_CfTW_eUpoLYOBnrYcUI#yPta` zspho(eb4Rn>2s_!Hv2~Jo7kjlX0~W;c+CCy_Y-Dw|62H`@ltem+==%y%(NGTxBos8 zu;Z%#Qx*B5V*i(q-kvMwFhAe_$%474Ja*05>Yi!GUR0OeWcRV0;~5(qsrzE86)}bMeEZF#gklKs;X?g%{Hc|OjfMl6~yXte(phKs>wbe4Q>E^Ud#xLRv`=1nbXRy0E?iDvUTE?T` z;-J9b%*S)X!B1mC?-?~A#R;4&sSfGScQ%L#J!G5kW-hk^`)Y=LhH96BQXlFbbK_7t z!unWgN8ohFY2TavblNGlZ?gEPB&6acG*u>MhPFOR!RKv}#hQ=>#lgeHdRs8sw z)U`rx-ECL4JoS@Zd8Kx`T-BSE+2@&8n%()}>?TpTWMSG9>FoAv@u$oq79W<fE9%9g(JjZRap}`C5jXb*w zzaN|zJX@+-){p=B zPw5MP8n3;LDNXxcz~XQ-YiUwrtMGNdD@{Ff+nPjoEIi|XDE9k=@Y6jBe-E!HXxB^R zzIn}X?)M#M#T)7+s)cudKUkOeUee<8+7)dDNeaen?sk*aYb_NQ?+@Bz{VkpQ!1DvT zH#hz~e(Q1AsfgZ}S9RL=H&1?NJo{Eu_NC-i;+>P7e+hbgW_jB0FiTydo~0;Xxn4o} zthmSb^jTf~Co7HCMyOQHSy?%`x8_gu+f{FKX6_B(_kWaGckb8Yy3D%jdYf-&_;1#+ zEU$X&{zEFjR+hD$f2+2G-qq~aC#40>i7MVrd31iZuePs`oFQ+z>6;}R>werS?Uyy$ zz3WZOtCPFr?!H~|_k%%p@&4PrZ~9pM_U=-8e&={{`h@kn_OpJ_e-WG;R~qy6?#cOn ze5vdAI~ns!e_-EI=3DA?IQ;6i538T8HCt~Lcf~fJ-&QH%pI7mpexs@TGheypzWIOu z!hz+B9?AR`S1lJ=xLm8Ffq{X6Ey>&6h2cL4F4((#G6MqxXMsm#F$061G6*wPEVVCV zU|?V`@$_|Nf5O5p%E%gZ>ZAk%1A}CVYeb22er|4RUI~M9QEFmIYKlU6W=V#EyQgnJ zcq5-U0|TS2r;B5V#p$z?&U-NhiX5v?p8Tk%>aX!3(XCFgJk5Gd6HbY1a5R#(=+{e?}wwoXajt}!QaWLKQknd2(5&EV)owO+H@f}P*%p3i$Px3750tGro3fdw1l zRpxmpO_Ef)Xz;X%ZQ;w9n0t%zG?ygZK9ZCuH&0e<;g(sfLKjV}fAWW9I)oL~6uGaC zRG25e!bJL|!e1MkI|m$#(;*m+@7gXY@< zpU%$OerPR+&a}OpPW!9=KKkSP;BIBCzQK#EMkeECbEAuEDle<%YLzfNt4@$^UG`Y2 zH*>XG{E|SmoCekdmQI)Vi*HzEdB0_?^wa;%{`J$`Sj_WmK(WH$>FVdQ&MBb@0Le-{ A!2kdN literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/birch_lectern_side.png b/src/main/resources/assets/ebwizardry/textures/blocks/birch_lectern_side.png new file mode 100644 index 0000000000000000000000000000000000000000..e71307dd8d011368868bc4c6881773e92eaaec1b GIT binary patch literal 1808 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-^{YZ6N`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsHU}kDT;Gi|5aCkzy8=jdJa#kM2H@t)FyM@A@Ut*t^NQc&2Ui zm@+9~^|$}^v40O9)mhW?^`Pr>6Fp(yCoPT_UVDA^yLIMw-G$>1{MMZl=b5-*`d5iN z)67puey%)y`r2fL?c%N*--`eI=X$Hl;tgw`=yxZlY{tE!tG9@9zMp!w>Rfj8t)mat zM{88q-G9Ga@Y1{VBWjdB?s9@iW3MFF4L! znQ&t6UvJBsvtwd4=kAFOD|;97(=YFn!HK6<5z_nbWxv?F_O9yV4XNABOLJ2D4D|W4 z&#sr5b^QD*gC5%`7jBMDCi_(dn|i`Dgqn}}wP~rox{?;Zf??6aV-F_IXJlgI2-?KV$YBgO@fY4gYdpK8rEx6!Y2gBAj9J z`e;TU78bDtj{^;5D$`^#&#$o&Y~y&cS!9ZYL_^KH(q%&F|0 z$l=%`y8KAfLj_gH=eY)b0gdMz@)x!26HQ2EfD&v_|Vo*b3V-~0IPe}G_4V{?OrMvEj zkeANNqN!aL>(>2}%38BBuvy#ma!&Et?H7`~W!GI>Iy-Oo>wWEVq5kUGv#%}x#+bb& z^6|+lGhX;#Q~3HXz)^Ybjf0XB$<7LQ_}M(JSWIU6p_E)& zEXX{v?efXHy_Tzw{FS~Z(($1F;2fzdwaq)z@5OBlyKM6!#mMAPfkY_xqV>n`IX#+i z%=722_xpMpAH_7KJel(Gh^CG2nG~IW3-0U9_1kenljoRctn%`j1(w@%k3YKR{&>&d zHQysmcVAJM&9*&U>)DKizbsPDmCON4de=5G>$>V^ZeM!xmMUM1f0f3ipyH^k6aQQhd)iloGj_FnZCUjEWP$l{?OI7|$-9AX&**DC+Fo=0*!R6v4?nNWyZrh>7t40B zLaE~ijD(U;vRjhx6^G*pUlZk{W~{q?@Wig%Vh0X_J7}X&Nb%Z zdBujVTu0^)uhr~6eR+A|Rjd1bj-9O6R#>o^O(?ms>0(#A)vJk;+1H<3yku1J`Im9a zt8=|>PV)1Uj6Q|N`WsG5`~6L0$%DQ>`?jcs1SC2K*r)vN%=ucoZKa;}twpw36I!{J z-(gx^U{(;>=E9oyD$YR7=}~;Q79`)qQpSWYzPuQts;_2(k{)B~Hl!5OGv*JYt1_sFz*N775 z{M_8syb=cIqSVBa)D(sC%#sWRcTeAd@J2py1_nl3PZ!4!i_=pl@Ao##uqr8Y`i?LD zlfGU17OnTa=6TJW_jihUjWVuiZ(P0SgttaB9}JoL}F zs>?Uf7S)#i@vm#yW+mJ7GeLXzTXs*DWhhx(u&Q=#YtYT*e?R)EbG&d<{G9NrqsDRL zyWcxbEe`oMUEG7OL~hOM&&;1#TUXoUXljV5`>&W?$x{#UPhVa=WqWwA?4Rt1Ddzo;cRw)`b-(&Nk=>g6C;Ns~<@!-Y3ngE4 zJo&uSFRzj@n(JO%^FrRgMoYssUtM!_@}e*9Qgd%kHJg0&ZP|=Z^JEw4vab7-aYg&1 c#y5816WKbSu893+U|?YIboFyt=akR{03x7d2><{9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/birch_lectern_top.png b/src/main/resources/assets/ebwizardry/textures/blocks/birch_lectern_top.png new file mode 100644 index 0000000000000000000000000000000000000000..41146dff53993405aec62497da0916f529e22549 GIT binary patch literal 1977 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-H&%s2lmsP~D-;yvr)B1( zDwI?fq$;FVWTr7NRNPt{9=Yj>2G5`8BE>8!8#^9va67~M?8juCvY)wsQUMuc1w{@f^9b3-% z^^AOa%}z#pV|hO%c6kje8`;|u&Q9?+cX90B%2^WP_t`qWZ&CUCXR}TnI1=ljGcQqT z%HPvJc7E+C=6kotZBxeuH?D0rZgkY``t$4c>+ln2S^oz7YrC}DJ^qBe&+MlcvK{Uj zioE+4Z25Eg9UINqJ+@(d595CJ+WdMs;dtprv-)Hc*~R&dUoX zS`YeuRIa{!^RwR$QO!U>cV5S^f^e@R3koMJcALre^=jCvh8H`GD^i}Fa=PlULP5EZ zbtTK9!pjddJZEWStm9yBoRY7zWtwmHPOq+3>6MOO1g2cWrUS8uf+ zJery5U^r9RXqo|U&jky=ucr@Q|NC#&9xjP5r_XXRZ`KWFexW}v?x1RS#zB|^o1RtCj>HN6tC zb=fRw^UM>E#iDX<1)ZL2<+O75yXqGkv;A%PTW(Ew*e0KNWTEoRiTT&~*2=%TpU}&f zy=TTO;m2pCmKerqWlR&cw`5L!!_jj5BtvK7yg8Ao&nt|~EjM>g6rIO-$-hX-_t=32 zuaDGSID5C-GGFD7{T@kyga6r!(}KP;KePMvO)^_|eXpOGvoY`T;I#_B+nUu)idU+* z7MIMMBYs6`?xUTxace8}f2@CN?Rxk5)z@9Ty151`qawB(X}(*qHFt{URk;{umrr|V zhnR}&zuyt{A-VqD!*}lsQlgeMrRSf$^l*dwDWPMNl!f=~4eh>mJZII{6VliE3+sg> zZugp3A7DPs{j7S*#7B`w6Q}N2dpvAwOWF2kul_9RU6^BQ{2<-O_wsC^r`w)#ZTWCf zykMeawbYxsx{0gy+bPscxLjvEOF*KX^&j7D_BCbe1y-5HKk`dHIXB39hUm;$=brFi zIMd5}LFsoguU5?+gRRr{+9}<8pTU)MeMZ!}*(Ig-YK-EKzg()nvF6L_$iC9{do6b( z^*=M&_O4Qwlk%(HC4PL_=dOUw&LznLUWxq=Ey@<^drx1z!a4f2%}QJ6!enD(k;O5I zvS|_f6E192$a=fyaY4nA1IivxKBQUgzqTjhZ^z%ZHQ`=&FSLrWvWbSBI$12D^lfL=Q-;V^m z)|{eocZE~5ozvTQPKgZ7PtQoTWZ3G6NPGyo;(u!UE4$8+-J9yG-ia$#FTa|2EmKzA zlKbG~qCc$`Qs=H}b8MV{ML*`+Wy6kFHlOtP(<2r?oYCg|q4DG8X{E=zZ?T(wX4<~t zCFkxH&UW8_Pp-DSBi?=Z#ZB|Jxf36s(|Nz^x9tKpkKctkVzTC^dD)LX-obZ#<9_o~ zZ7cQ`L_fHfarU^uPUcr#ugxC+dicu!^;4aHbb3hzukKsiHmh{HvzDLOyDOnj zXG~8s4sFxsDm=xV-*w>zv+LL0Udj7BfAhcmf9dlosk+}8b>C-wU-dJ+`>1{6H1lIt zkN>JP?&j*cyLP8l{jEp)Pb`*V-#y(e%hqhV{M+hh+s%&Ti`s5Wua@`MOaFVu?DO$+ zjB|u&A2hkQAm@+E`IrWdVE)8sk2qynZz$i7jOIFewXw>I;jG_@iW!G{ zvNb%f&A9VA?qj%jGyCi`_G5>+HgpIrIeGqY`L)%&tEQ#yy~UtX9eSE+!p$(lUb}uL zb!LZ~3j%Z=ww|_qkmsvD(Rrf&lT)80H};=D!I^S1Q?*?rg->(B)i<|-w(2zMUns8J zcc=1HYhqs-`;9}(AG_puYB4dzUw9p7xH)ge1&^Hp_bYENzq;?wRVUl&{wGXz=B+s9 zJZI+&w?A^H*0aYaY?-V6#8!OSyqRAt=bkvMt;!r?DjX(lx23EnazRf{d)VS*_4Zdz ylyTHF7V$_v`1437D>1?M!;wcT-pl-G%GdtCH9$Y+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/birch_lectern_underside.png b/src/main/resources/assets/ebwizardry/textures/blocks/birch_lectern_underside.png new file mode 100644 index 0000000000000000000000000000000000000000..e8ae2c11e877b80fee27ad24b6a7ebba6daca2c0 GIT binary patch literal 1593 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-mQ;mAlmsP~D-;yvr)B1( zDwI?fq$;FVWTr7NRNPuSEqm4)4W73D>7tuiggB-@RXFwe3}4#M&xIE^d9B{%KmS^g zL4wdHwV*A3zvnNlFW|6t_H+Jnvby=O>U5RG!e=dt_HQoyYbSr^Ugf0Ah6)0aTgq(Q z?4L?MY5HmOH1*ZV39mf^Z#_Hk$!5ZGrOwL-@(QIk+3?I*Ipb4EN@`Tu<4VcXMs`OF z;+$rFel7Dp@qp{wXE_4v=QSU`+sS!Q{mWtrae?hyEu*@Ze4D2ieDSpL+hA6^lW8}l z?$mz1(5L;l=&#%@nK^6E@359`U%o&!h3Qvj|Lfl+X+XcTH zY89XKe+xVJYr2&c)C@gr(xof zk`?Rb#;D#%372Nvtstwjr0BDrF0;ZutKBYetMNM;3qa5vI+Nv)CTQPmw>FYMs&D*;OWD&|a$L z(D9)0kmNRn1e@s8^J*Od32q9?45>TxuAOAkS)-*rMk%gJ`xjG$AJZpJ3*d*&J{K6e${y~9;}e~YSK=1JETHy(9~#XEJX zPTg}VEBwmGSJyWjGhJKxn0MutoxbM#TXpj?Pm8V$%PkFEy?)`bSu373-#Sud`M*KR zKkJg`*3O3u*fKeGbLGt!&OPJcBg0&g!E$4gM{=5ywR&$%a@wQ?S|JaXm|19>Cn>xz z6I)xep?X5_rhnx-1RYM~PgvacPWs8ZJMUJk-I-sqO*kv{MpKr~s(epB$=y{&9hs~C z9(27tYa8Rds4CGvTWW(?GVZF`F|>c3e8&6C56g+EZx1~>9&vkqX2}-+gZCtlr@Z;= zJo)L4=${MN*Iz#UTh*sGb^4miZawlPvlnX2idNP))7!UfbN`o5`}kuQFG?soxncdg z%fEy_)H_sNU)1*O^m*kL#k;#0`+rH<{#kw^`D9tu`+TK81^X<055LY%(VJ)+v+E>} zvB=!R`IQ!}wFTv;dN<}Q;fcK{>v!{E+Lw9H5-izD)f{w;rB=*L{>UGzE_*k9*YS^< zbMq!#UG^eY_Ko-L+x-{ytUjNx6)Uj_-L0})S@`-wWB1Rq7SHf5{?zVdV9si2DU-5h zvFyo>O|uK+vUg6Xe6aZWjr-59{LZR=A`)x#uf5an{Kop(!R!5Oi*)#wdsxgh{_Ea( z@6E;VGyAj3@02{6YxiNV)t9E3eyTri#VMBr*Y38fihDWzWbMiwdza?Fk$S)S?Ubx9 zy)nCQzFjAu^y|0nx3G&Rf2l3LZT2@L)QvUw*1mtnm)?b3|KiQ}_WqkqJk6^OfApLD zUh%|sRpQLnkbt|__x2wb|1`_dKBHafY3D@qSoajBe=8o&4_@@2k;DE>(fr@t77Ppw zY)RhkE)4%caKYZ?lNlHoI14-?iy0X7ltGxWVyS%@0|NtliKnkC`x6#+QAPuvN?vOQ z1_sFz*N775{M_8syb=cIqSVBa)D(sC%#sWRcTeAd@J2py1_p+Yo-U3d7N_S1pXO?E z5V1YAfa4$sbJJhP`B&4w@ap|)-lp4Br<@_X_7*?Kp@=Cjj)@tSJy%Rx_wH-Y_j$!O z!ZKaC@vFK1+t`REY+ZFAxY45Xg4tb;W1cJwkFC41*Gv)0;o4GdHA64ym%-l)6PDDa zPJ4b%puKV0liOilnF#?79+DYiyOy0>}yCJX<1jFE=h{S~?}~&6N+*D>w2n^QL&(WzI48D7*D6D3c{~(x$0S@#ljZ z6E?>^thw{`>+`)Y)b8aA9sMU_z_24mKB8)A{Q1Un;(SwA{NL^T#+ZSDfx*+&&t;uc GLK6T-vGEK5 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/dark_oak_lectern_base.png b/src/main/resources/assets/ebwizardry/textures/blocks/dark_oak_lectern_base.png new file mode 100644 index 0000000000000000000000000000000000000000..f0e125ed0b174cd88d44ff575a8ff37feb310944 GIT binary patch literal 369 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^OD)tY%>NXqEAh zfq{Xuz$3Dlfk96hgc&QA+LtjfFtC?+`ns||VU`zX5Ut9eZ_L2JAX(xXQR1ARo12;HZf51i%l z^QHt}Z2j>Q2M!!Kz$9Gr_oI08A`||@)AfJwK75#%yyO2D?m6e1bbdZPt>4CBt=D#P zw!J|}>Iq{Gtq+HudTFl%bI!#5li4k9vb5q~_ovN<0-xA?&VEggmync@keG2nG$i%J z<12UWE^Jn8OJvxzxs%aniALT32ga#vHFduP%dHg51tK@FCf)97|G-fF|AF!0=gZ|K z)$;!xnDAQrz=lT`%2=k Qfq{X+)78&qol`;+07~|aQvd(} literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/dark_oak_lectern_side.png b/src/main/resources/assets/ebwizardry/textures/blocks/dark_oak_lectern_side.png new file mode 100644 index 0000000000000000000000000000000000000000..4c040558dbf0855015cd02969205e637fcc3c7a1 GIT binary patch literal 1605 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-PF00OlmsP~D-;yvr)B1( zDwI?fq$;FVWTr7NRNPt{9$ofEgXhn6tu)SQ4ouSyAD&}uJ>#iAelKdly~d@@9mfEceMDP$nKbS#w^C}r;6m<9c#7EPcyf_{rGrU*}E?#yc{8Xm)6d| z$oH3TZ^AyAUsY=+FT6gx^->+rl;4dtIw~Ix3ZiUyEaTX=B`2Ob?&QaJy6&%DcJ%C} z5_#JL`hWhFn4fpRdGSZRj+KQUGWO;uMmX7@ddB?c8ry|9)!y%0WVmhrEGu5cF!@d2 z-L`9NPTS}896ujs*gn@eKE~noorkp>RJX8xx%~3_`t|E4T;}|{;7{MB)yMU}nEPBV zd13iLPGXaH-KzAz7cT2AoxEN8blUW%*0zUK?!5h(l54Yf`;FiG%BJs4JYAOa>dvV* ziE)zmX5~x1YjEFgF~{~@i?x!f)}s}QC%E37>SQ%3`*z2o_<8NAQ=$TU-v}wVuCiFi zlFB0Kxk~!UufpQ#4<=>nHNEI6D7bK{wRQPTle3|H26rrk7PW7bcsw=!?w4~*?zuY| z=70PoT5$4&$pVQphL?}cU~}6c?|1d(gU@w)*w*v$yecU^!uC1r7}tXR8ucvGXS-PY zgq)aqK<3s)h8PwWE`v7*4y3)A(z{*3sZp}8M?r&mmxVs-mJO>+8bsdDX_QG}%y~Tb zK=G;-I;LET9RcYrU%C@CnswfbeiW{8;Ylrh6?)Yq8>>BuS+e6%x0v?ABa^(=Ib98n z-x|ehdM%`Q@-wMVJ0iJtw_W*k&e|#S`|fw!+HK!uo|j#CE%tlt?ynb;{jYpJdducn>GkdAOoE@xXDoKSD}BcH^Eb(C-Sf@oeB0cl_?GAK-Mk)r zKY7}W}2fTTFgmqbUe3ii{kgkQ#!TB3 zT~p(@V^Uhp@g6Pb8=Tgi({)){dGOknnd^3F|LCz~?vqpgz^|&@`)pCj#Dki8$=haU zMAlfX+@=;Tvvm5pbuTm-mv54pa`wf-`+;Sr_D(qaPEYTC)Nhp=r5Afny{b4GxLQN1 za&Plv55Km0b4a#w&LY#kf7aEb7j`@T;-s`Gr^Ct-0wG zk-c+~?90kmc4iLd|9(x~{lf2K+wOITz8p}pz4RkE;)~4(sj!HT`Qe$*6VlZ#ou2Xk zu)y-^hX0kG%;%Gl`Rshjp=$P)`BOW}RrUrerL}srZ+yYeQ-01UYTuFLu6MNGod?Q!xPmQ>LXI~!rS6TZ%=#uzX8PDx!H22L}-%)4PbDiVvyhHcr zosMUb+{-g>&GUsHe>p#R8B=}i%a+FV8^8MT-naW=|7Z8d%Y6Qyd>I%R*pj^6T^Rm@ z;DWu&Co?cGa29w(7BevDDT6R$#Zvn+1_lQ95>H=O_9rZ?JkoMEYgR=wFfd4#xJHyX z=jZ08=9Mrw7o{eaq^2m8XO?6rxO@5rgg5euGcYh*_jGX#u{gao_#j`C0Z;8xUKT~g zi4`9o+@1g7|Ng^^k4W@59C&CmW2U8qN6%iJ?D*T)xA#4`q1Rt3^zpZzPr%+bgN18E z`<}Pu)HDbRt8wfvP>cL3wK(GX#g*)*qI#RGze@bb;MsA1*{w7NhS1ymFRI;dq$qY} zw{HqtaZ4^(><80AmJ?x3DoHt;3Mv_+FP!`la$)(O>pahPofk8({t(V)pZ!2L!9IRg z+kuslVGc6_rpUH%PQQKk^n>IRhwIk*PWnCZ%*%Bp3F@=`(#pbJ5}kw$%PRkfJ?CT) Xjd=0$RQ(wS1_lOCS3j3^P6NXqEAh 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 AUH||9 delta 42 ycmbO&(8n@CS%85p$=lt9L6X6Ufn#s`cZbOiZ1S8;vfO5J&%We5+?>I-nGpc%&kTqF diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/jungle_lectern_base.png b/src/main/resources/assets/ebwizardry/textures/blocks/jungle_lectern_base.png new file mode 100644 index 0000000000000000000000000000000000000000..a4f7fde5fc9823c27abb720cb8b3a9e6d6be345d GIT binary patch literal 1763 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-K2?Q8lmsP~D-;yvr)B1( zDwI?fq$;FVWTr7NRNOin9yv`}ljqNKkzy8=jUA6S?7MD0;~jqDGed3nM-6BkVX zyXxTy>nA+5cAu)=q@4IWcj1-uE5vUy^!s+ z&p;&aum960_D`P8yL9yS+~)#$^XyM9KGSd~Ry_N&+~SuKwd?hEH>kF6UXiVt&9c{M z@zy%g3rczUrEJyPT9#>acG+ZkY-$SA6l^}`*e8`LbtOE0CDWqEeL|bh#6+%;;t)+y zS*I}7!905S0S{J3$qSJ(;uoCm6*GI3DKS1-!1X|Sf9IBvo1ev! zm01MinkI7OO-h;YbdLK!m*poGzBy|BzV^e#)&6$uoSP3hbtJx9Vd+(J@wh^o1RtCj>HN6tC zb=fRw^UM{G#iDX<1)ZL26|{2qyXqGkv;A%Pm)x50uuVSk$U^0r6Z6-|M(y8f9V}1NqaW3W%f+xoOQc%{+vd`GL}P+QyPvK_@7%dsn}-b>^V1&tl&D&@KW8fS1mc= zLTQryi(_}$i|={-u-+pnaIn7F(s*TcZqS!&AZ(udU1!Xxpq|L%5#f<7u!4Cj=FnYFv~Fa=J!r#t7%N_dlVbu?EBQM9o`rj z8Ey0Xo3ui*e(h|PmZcpBlq)iK%dyUWd!zA?;Kv>2{-R61HaETcAi8Jm_IVR-#)q8c zK3Dfn`TF7Ik7PFAo3mq8NNvw+m*vSGLATu9uIxKzaq5h6Sl!k6OT4=Hm%U^&eATsf z*EQLfb}8rfu)M7+ynabUvrFmTX`V^13e=ZoC*{<+N$to)iTBPOXqev8l0Ft z%kccW>Ur}Po9Q2@JN9d>`TGrjc;;7HuTf7}%J*hb=^P7|nqPb8G@Xr~xWz-EzBS0Y zW76SUDk&#!<}Wj@jrh7wevx6x-keJQ;`8^q8E&-kemnMj$!FdT&p2;wKQK!@<33Zi z+~Qh&&$Id0uEjC?JihQHDDlM-$6WpEwffRW5*!u_x2JvhR%C1IoON&I^7Orx%jeB| zX#D=lWbgT>pL9j({uVj;BlB)r(cBs5PCne~elop%oku|R8}W!gv(`U*`${T(>yK3v zg^U02|HzR3nOe9rSMNc?eQOiD><_Y^k{&)joTzW?)jeNq`-}f`55K6MG;254+L9o% zGw&Cf=gzce`)qG!@_~0|f!<&C1$&oIW?*38Ebxdd zW?;}$24TjErS@eE3=Hfgp1!W^PgvMRS;f!F*M=}KFi4iTMwB?`=jNv7l`uFLr6!i7 zrYMwWmSiZnd-?{1H}Z)yFfjUhx;TbdoIX3r*86aPNZb4`r*EmK@rro`Z`5l#(iFX5 z_JxIA3Ojak>?-*dZm~;LeXeY5*2Hs54=z=@%j$VjWYWS|ua(V9zBGq)ck9RO_-^~$ z=6TUO(Qn&LKNSfT*7o{THHT<97OFQd%XlOAuCT1mSx0Nav_~F6O}|zj-qI3f+P@@c z(kZPDOHo(fpj9?OtDj9QZ7p$p_GFRojFyDY1+_NYcA4#;nE4{+-Zj>Sh=i!v*^7e& zua{33%kDZ>{JOTN&xbwszN*yw#M0a+YwaS9?IIh^?<<(yUwBoL`9e-bgSl|FnT?P0 zoR3PM8;V?c_x^hsns_jpp~G@&s7R#h&ikMLu}N6`JKwPUcYlC`!Gopi1Jk4@oYaXYNa;Cr#a{-BAAjP?l;M#0Ms7e83Dzj1BId|_;_6Jxe)Ve$7* d$Npas*V`4-9JBl34F(1V22WQ%mvv4FO#so}K>q*$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/jungle_lectern_side.png b/src/main/resources/assets/ebwizardry/textures/blocks/jungle_lectern_side.png new file mode 100644 index 0000000000000000000000000000000000000000..44fb95211d548aeffc867c4c098f66431971cef5 GIT binary patch literal 1864 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-gR4R!N`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsHU}kKFV`gXhn4kzy7V#c7WdrgiK*C{sV_=(?}De{Z=+Mov=< z^lCDCyT5+-Pj>Om+mB^-*j45i?tCJY&T(;__Ic|_^Y_0G&O6k6FGgQN%TfQe;jgv% z7mVLjzCJCd?!3O7dFi%znST9GavhK7J(yGIud+pLLv_OB?+%Bm)3(p+->UOEnCH8< z#_fIYzhCD4F|)8(=*H^h4+_e2oIh|DrMzbP6UKfa&Z77ImmAEswzDr!Y3!UmA>z(o z2aVU$KNf$MYva8&fwg?%Tdoa9kFlM2`Q`QV>**)Xa@Gd_b9kwGk^PtTva=;Gemc#Q z_!Ry>%)jdL>}oId{Bq;!`m=vl@E=wzzkc%8kFRmb?{nAcS@)~{-n*h$Gq~xl;U3fd zpE4Njw-#DdZ)p*mD8yPABACJ+wa|q}%Gz?(l$F7=YZo$g^hr0nr|Id0@Jta*QPESF z>R=*O$~S3=7t2l7hYA-ywYEOnlIa(&k@U#xqCyo%^TnPC@g|>T7vFPt61-XQlWRvs zic|p4vyL9s8I6LkZm+bGt=aZG`-4_O!1CG3Vl&T1C@jWRYI!%W(KnzSlrzNrZCPu`jIipW2&~pCgG0??2!#SKl(1nJax*u*NH%qq1Yc!FGWp55?IU7hQYp z+9Z;@EDMD~Vth{=7YX*VOup1J(RklEgA+d=IP;aic-UWXL|Jy{2F;+Di;uiDHZGZ@ z9lr9!<5$@$HZGebZQ2r4>^nPu;n8VP?>M&V-7S5)uU)R%$TogWZdCj&{)okArTmw* zCGLo5Hft&7kb3IEo}SPn+xWpiLc#D%v$6C^OSv<==W-qe{*zEBoe-R9z{VD#e9Y{Vznvqrp%kvhWiZ}~Tin9b+Af5+u7nwo6+qGM^}dRDb(@B0o{ zCYh{b@V{G;^Vt5d@W%DIjMc|Jxi@>5hx^prxSX$NS*c%|y)6BVer)mAWA_xcvaSq% z8MUh=d+)DTmW8J+3S&;3iC22dcaiN!hI>XRkkC z|CeYn<9Wr8%LNAEHZ7(}2Rh#Iu+Pc3HIsAuuc*}XH)^h&T{?UD#Oi7JmL=bxt~*wk zGruhS*~6K;jdJ&`JHA%`3ggnHrl+#!@=3?pP3y2-ApI`;!aBVrWx8J?ey;NkvcAOJ zW4=^&!rAFF_V1i3@qO;rwR?Crw%(EB*t>Mu&V#>2e>;4soLaF`%Kx1AZPuKEBNw;6 zXFDkWL^wWfLQBx+*(OVa?A+4p8lDB0uzk2y<>IwGySwggzm5LpK%09HjP@Tc{5)x; z1xMDc*5_Ih+e7wo>2Y2A!_1$&oIW?*38EbxddW?;}$ z24TjErS@eE3=Hfgp1!W^PgvMRnN?J#?moi6z#v)T8d2h$pPQSSSHj?2l$uzQnxasi zS(2gP?&%v4-pD7;z`z*j>Eak-aeC_Hy8;%n(PjR? z|9Vr0Nc#0hxfVODzH-SNIcqH-9(cu7L)OS+RqG-_Z6WdBlectMP3wRE*K*JEzvsjc zwntgMm)d2vr+bBkpScMy4IGjy1CUzW;Ffo?c<+e0~O-Lhp zsZ3`DkMnhbz{r!*!rZ*go5JV1Z}Jq{DWX4Dr}dBwzxZ{zzYAHskEwStE=jv_&z5n) z%@tKP0$v3r&lEnjtlL|(W4~XfCG+`sIsO)*H*3x+aeE4-b)Eh7^9aj+uNCt5S=9b- zXFSP^qC(%$He15>~0?A}$@S)b~b9DKRGq-4*}ZK>5;eoxm}l=MPs gYtcQ~Bl{SYrWO6@_s*Kfz`(%Z>FVdQ&MBb@01v=x5dZ)H literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/jungle_lectern_top.png b/src/main/resources/assets/ebwizardry/textures/blocks/jungle_lectern_top.png new file mode 100644 index 0000000000000000000000000000000000000000..0683e9c752ff407fd00dc727f29bd79ee24ebf2a GIT binary patch literal 1954 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 N!PC{xWt~$(697D}`{n=u literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/oak_lectern_base.png b/src/main/resources/assets/ebwizardry/textures/blocks/oak_lectern_base.png new file mode 100644 index 0000000000000000000000000000000000000000..a7b2109ee45b256f82142dd40fcc0b229ddf794a GIT binary patch literal 1844 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s--K#<(N`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsEj3kDR2e$@BNQNHL3wK*!?^ZeMtx{rDX5W>f6btlhin)r^f4 z9X*`9)JCCQewKa+sgT!MfMZK$f z?z!t^`{nT&ed7m)pP$A)QD|Ir{PyNvLzOR6*YhJpI z9JTi0y<2A_xBp(@r3NMILc#o)=->rMkGXxhe01IY`1_f8daLA5yjR%!?ZwF-yqD4> zzZgA~6X3f3?R4R!{=#DJmxtcE6>)^0EPp(4nPc8M?yS#}i(g9AzSsNRpxeHA<>|06 z{*u(F?6q7wl;t*B_1eB~i53(Rt-JCdg|&RC3y%bQW!99;fcV^{T%xw+Y<*{97*kCp zLK-ISU`k-Rup_geoYPMjeso`GFW$+zg?ZtE zyNo^?W!Ve_O$0QY`8aMk_-P!FoZ+j|q$tXey5iiqVn!X6L%d#_%JmpzTo_Z5eV4eN zI#eyuDd5n-&GvA)g9fwCd)9x#dk?j5viPVZq|)UzNhW57pqLYn@#1GM7WE4`_XH+) z-CPm8ev#wiRcdEDCp#aT+EU>&E9jJ@ld(nmnsW*#b`}&K71vyNWRdFBn42NtwNs_C z)=T^|^xmGbNf9u(Pxv_QmJocE}9S_@k3?5yWc;-a-6}~m|-BC}S|7T&&Rcfjv=?We=ta$r7QPvNBdt95tMXCZ(kE|T z-MAg{I_l=`12(_>KBRt#)DBy&o0xV=?vG%2>5k=5ceg*YJa}Tt_L%7Q?RVdI_C?hO zzFlV8&#b>yPyX{_pW73E-MrQDZMH0r<+XO%?zhR=Hw)J}+|glpo|t6#tI_Lt?H;o^ zHq#y!UeMCJy74J<$v?g?)lW~kZQ=g3dDdI|txD2Y6kji1ent7wqZ&?A`A;7=AE>te zoU#4(j8ktU0v4Iv*Z*wIut*_k^*c@jZo{A58mk`8Tf8%I?rE{x&RJ5a$2nG6uKLTn z-M!Z@`_1G|{(t8!?!8W*x2}Gjy!>vhPkeoi**3F#Qg%ux+y7s-bl#n~Wd#Qder)Y> z^0v-ceBe&)@ojXw-y;G*AZCiQQ;meLi%s-dSdzS5b|N7;cwJ&~G z&2oQc|JCQS+$Z&yiz9;hbH8`bjmz5i{g`%seZ%qnLEA2sze(#a&blSZSnB&)p51=O z%)`=m;!dBPfBWpkn8><xH6bWPtFfrygYc;A@?ey{mlP1PL1t&HgnA_ z;V{N}y=Pk!q%6Gi<(FRhy1FOx&2BB*lMB*z+r6n?#MJ)qM;6=8+_Ss6|H=1!SZ?Oy z{h{$c!@)kKr~Eu2YZ(|A*pj^6T^Rm@;DWu&Co?cGa29w(7BevDDT6R$#Zvn+1_lQ9 z5>H=O_9ratB9=-o=dRk%z`!6`;u=xnoS&PUnpeW$T$GwvlA5AWo>`Ki;O^-g5Z=fq z&cMLv>FMGaVsZNHr1M@(fgoM-qlj>dKnj3ZI*v%_pQ6UeQT`qXNki2!( z_{Ju24xuGxdBTSj3vRD-IDSB^%Su{&YvvLAm7cTf3Lf6OZ~5JNdU5}j-ID3q&h8x? z8&@<5B$jO#RtfF>eA;@7$Ao|YrDdm9WX)iIKDW^GsMD+$Q8F9XEndRI=XZ)hggbM~ z6hEECg(bg^*m(YX_UzS<&0*y~dvi`dd9z4|v885nSh?k$`wQ>B*WEKG#Ppqfyxa2w z6&vopSFGO?xO(@CB6j1$89(opG+roa&2na2@TlTJh499%$BEI$TEu6tJ=v7>?(^r$ z;$yQJH8h(;MIuxyFTDA~`(W#?(~L_m{fYb_z2}2?QKaM1k8ZruCe{^e^{%#^iK{wM zAgHi1Ys>G1XtsB&-%Cv}*dT21=iE=hgy?5ST6CqKzP_FQuYDhb!L)Fnp#SNg85kHC NJYD@<);T3K0RWwkZS4R6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/oak_lectern_side.png b/src/main/resources/assets/ebwizardry/textures/blocks/oak_lectern_side.png new file mode 100644 index 0000000000000000000000000000000000000000..414690ab8a3f3543f17a0d907af2852cf6743d5c GIT binary patch literal 1743 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-g{wj$N`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsHU}kDl~egXeF$=w=p`j{>I;+N?@r-~7kYW{$<&JMT)qZ`Ecy z%_Li*;^_1H{r$Xu2amp4Q)rjvp%@XPxATak?AF((K6_p}`@C*r`g6y;Jb4KvNA1_4 zho_mJko>jhY3ljOir=Sq2HlqLJI-I}e`FW$9I@?+3sVog>-4=R%$a{WZ?AlIq?tgd&{^%71d>c5IP^~UkN z#JyRIncj8G-)=R>_FYT#L?PC~5Wy7ocTSxWCS^q-n!(G>Zac9G$eOeDpNVluH5AY~ z;Su9t(3o-Oilx^iEv{YMha452N{h`(yKEBfk+@@$lnZ~N(V+?Pcb~~Fz31*E7`gW+ z*N%!5sQ{j59X+Zm8U4Yb2wvj-LA-u2XguinP1r3+->$&yU66)U#4ns zbeDQVcf$c@9!`l3jYonNq-Xl7G%1U+q&lP*)-;HHny2lsNtjcCJ(A(JgmC7nP0v-` z6j=mM*eVO&Q8}q_+Oq#gr=Otn&F=DhzaK0PpI^f#_ zH&fQ%ewTLqL*T9y+g+bo_*LCE8<(BB`pe{th4t*$B8sb>XEY1z=vj+KZ=13!ZrA3s zw=KDrexJQ|#wqUP>6eUzO7=~e@p`)& zm#_^}`?jxYbdHPnJc-Hoh8S-4kkW4 z!&>amc9Q$mM6cSAI(6x@-!E@|X%^wK;nQ0|lMntSwTg%qRfqIp^Gw8t~@(ta@XD!&j=JvCG550N2 zo*(i2{rTXL7(dSS{_Od3d}qX;R!Zk+eY&~xiRPyGIZNlAH{bm#W$(PTXO>EF@-?3P z!*86Y@cPXs&u?k)`fL2$v|<&zm07&r?&B8wRq^pruEv0|xx83O|Ydx@v7 zEBg}`b`c8`mLR?L3=9mCC9V-A&iT2ysd*&~&PAz-C8;S2<(VZJ3hti10pX2&;tULo z5}q!OAr_~TQyiED^Q8W>{@n4fMo-VIE&qO7xR1A`4eZfY166mB%;_*7^Na?XntoeOp}ED%5BQz5xS<)`G1rK}QnlFdMB4bJ3$ zRK3S)D6AJK!e+rNX!*;fvcl86p}V{H;g#0(fc!lNGa0-t&AI>RxBNm*Q{{shUsTSv xtoeCrt+_^>JHHFaTaI>lZ5-yk{|yWoc55Vjed%cs!oa}5;OXk;vd$@?2>=&DB|iWF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/oak_lectern_top.png b/src/main/resources/assets/ebwizardry/textures/blocks/oak_lectern_top.png new file mode 100644 index 0000000000000000000000000000000000000000..ad128f79de0ad0f8efd0d4d565ad28eb4957dac6 GIT binary patch literal 2001 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/spruce_lectern_base.png b/src/main/resources/assets/ebwizardry/textures/blocks/spruce_lectern_base.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab6af8e17e46ad825129c63e5495a4aae9b610d GIT binary patch literal 1721 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/spruce_lectern_top.png b/src/main/resources/assets/ebwizardry/textures/blocks/spruce_lectern_top.png new file mode 100644 index 0000000000000000000000000000000000000000..6e3c7f1c3f2dfee07f497d0862e5f603bf407a4b GIT binary patch literal 1947 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 V&o}p*{@t{qOlxyk3QUKlAxa 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/gui/arcane_workbench.png b/src/main/resources/assets/ebwizardry/textures/gui/arcane_workbench.png index 786a491b95d8b0de62fd33bb51933362fa83f6a3..252ba0a658ed994512ee5df55ad4829e34b26d8e 100644 GIT binary patch delta 11921 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%0D1PQ*ug?lM$EFJ7 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 b3s(N)zp~a$$ET@85+v^F>gTe~DWM4f1cy4l delta 11972 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%0Da< VYCXRA+MisIxTmY1%Q~loCID2ZU?Bhi diff --git a/src/main/resources/assets/ebwizardry/textures/gui/lectern.png b/src/main/resources/assets/ebwizardry/textures/gui/lectern.png new file mode 100644 index 0000000000000000000000000000000000000000..a6b253c2939165bdda399d39ce0448caef1a4e7e GIT binary patch literal 43369 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 Nr=G5UF6*2UngF2QIn4k7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/gui/spell_book_advanced.png b/src/main/resources/assets/ebwizardry/textures/gui/spell_book_advanced.png index 72b51efd3f6c6b001ba0a9ca5af6aaed55721f59..1bc9af056afa0cb9d56db1c4a6d09cb3b1285f6d 100644 GIT binary patch literal 11179 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 X2fyPtT_j~V1>{ptS3j3^P6n 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 N#M9N!Wt~$(69A-1`MCf9 diff --git a/src/main/resources/assets/ebwizardry/textures/gui/spell_book_master.png b/src/main/resources/assets/ebwizardry/textures/gui/spell_book_master.png index 6a6396e11c97dad57d0775af6c6847b39915fc01..7266a64eea4ba58e102bb008f2597ca7aed0bd97 100644 GIT binary patch literal 11748 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 L)z4*}Q$iB}3ZS@| diff --git a/src/main/resources/assets/ebwizardry/textures/gui/spell_book_novice.png b/src/main/resources/assets/ebwizardry/textures/gui/spell_book_novice.png index 19a78f8f0fe877aba80bd1dd0a8f8d8b3950de30..206999144918d643ca9f0001ec28d4cc40443401 100644 GIT binary patch literal 10720 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 diff --git a/src/main/resources/assets/ebwizardry/textures/gui/spell_sort_buttons.png b/src/main/resources/assets/ebwizardry/textures/gui/spell_sort_buttons.png new file mode 100644 index 0000000000000000000000000000000000000000..9ed4d33735dc0de0b2c8767280196e7d1d815d83 GIT binary patch literal 723 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE)4%caKYZ?lNlHo zI14-?iy0WWg+Z8+Vb&Z81_lQ95>H=O_9rZ?0@{r8_)dE=Ffd4#xJHyX=jZ08=9Mrw z7o{eaq^2m8XO?6rxO@5rgg5euGcYh&d%8G=L>zuQ%|7F{gUB&^R{pK*)B9R^V!gJq zWI6jBbT&Mxl*`NF!{PDZs^3YG%K|;^Q}m8*IVY9X%G1avDOKYv^vJ1MT6)sKZm(%P zjeV+eKDIlXEf(6BFIRpQ^eW#+~#jmQXvhnpd(%G)Q zUf;09IPW^&&S!yld71M15SnMvsbRWcQk&uSvv+1r zyWHS)Yo>-x0^9VbPND|Sw$*kwc}@tDU*g{I?7~co-*5kPx;Kn000O z+zj7?8J*rb;koSxs!8&aSykd` zT~Fdi>mNLoaesDwN%`XKg?91YSbF2hQjdzrvhT$^x2HOH z{VL-wJ=t$s-^#ds=3L>Y513avzrV4njm2tHY1fXeFIT)s{V!2fXBIu>p>Vn4#utab z1iZ6;To%rMG)Y{2fq3WkcnhpX~Sdw0=4Cw)d$(-_!CxkNP{C=iL0zd-0LP-+QrTjM04A!PVO0tUHYsm#*c? z=(>H|qS-dusavCy%R+k6ngyX=M;ZzzEOwj8_BDG=$iqdC&vi}QxhcRj!L4E94yF*M z3mGO6s-BZOSXOwjGfwZ6C4djG3kXd4BVCHdHpsCb26}pGTe?>T++Ge`Rv|i0f!1s zH<24ECmBv#_WubKpXhwEyZqko2Up$a*YF9YwYDxuoVOyQi%*~LM>wZbCx)u?9ws*G4 zl|pXc=$w^L{bW~OiT!R{@^<6$dF(;CCkhVt82{Q^EwlUm1an9q;J4eo_xrJ7=O|EOYoT0?V6082LnXioh z$)1A?e?}J=Gc?t+7o|CU=X|p7=-cWQTWj{dc;b{X?IF)9(Gd9-BlkZaj{T`H`8K(! zUgWR7=*cxRyQkbSzgiouvfb_6<5c&+=N;!+a(!m^q~H27$ILt@@YkUXJ<+Y(*Y=)X zL{wasJ!;+ip{gRw%Ba4msn}5VVdr5!Db)#{bR#uxlu=$?egS+=jvyV!@K3zBSy4e@^i}jv@ z`w~8Uzxsz;K4eeK?#PdS7#JAXlDyqr82*Fcg1yTpGcYi47I;J!Gca%qgD@k*tT_@4 z3=Hfgp1!W^PgvN++0?dV{5s6Qz#v)T8d2h$pPQSSSHj?2l$uzQnxasiS(2gP?&%v4 z-pD7;z`&^F>Eak-aeC?Gja|(SBCh$@M8w#(mi#Vh`{PvS!10qoTRKsC@Q4>(z5y2+bD5jxw%%Tmq8w>{^Y)oN=6epO?#RFT{V)5!g zy}f)ppIhzU!XLGJ_T1f{63NC85GuNBopYeblvK{sn@i_xab$1}JYc|c?z!7%IWZxE>5)`xk zdMd-xFAvXe)Y;7=;3~LCqv`REmB&BZusAln|IOcQ^0LClFU;M%{V?O~vux{LA1a)4 zU)Ez1OXM`c91D8?^jm! a%qIjAQ&p3%r!z1xFnGH9xvX