From 004c4c09e30a2c7343c69eead9231af98fdd0560 Mon Sep 17 00:00:00 2001 From: Electroblob77 <35599699+Electroblob77@users.noreply.github.com> Date: Wed, 25 Mar 2020 14:29:27 +0000 Subject: [PATCH] Add bookshelves --- .../wizardry/WizardryGuiHandler.java | 39 ++- .../wizardry/block/BlockBookshelf.java | 147 +++++++++ .../client/gui/GuiArcaneWorkbench.java | 2 +- .../wizardry/client/gui/GuiBookshelf.java | 54 ++++ .../client/model/BakedModelBookshelf.java | 72 +++++ .../wizardry/client/model/ModelBookshelf.java | 53 +++ .../client/model/ModelLoaderBookshelf.java | 28 ++ .../wizardry/client/model/WizardryModels.java | 11 + .../renderer/RenderArcaneWorkbench.java | 2 +- .../wizardry/event/SpellBindEvent.java | 2 +- .../ContainerArcaneWorkbench.java | 4 +- .../inventory/ContainerBookshelf.java | 122 +++++++ .../ContainerPortableWorkbench.java | 2 +- .../SlotItemClassList.java | 2 +- .../SlotItemList.java | 2 +- .../SlotWorkbenchItem.java | 5 +- .../wizardry/packet/PacketControlInput.java | 2 +- .../wizardry/registry/WizardryBlocks.java | 13 + .../wizardry/registry/WizardryItems.java | 7 + .../tileentity/TileEntityArcaneWorkbench.java | 1 + .../tileentity/TileEntityBookshelf.java | 221 +++++++++++++ .../blockstates/acacia_bookshelf.json | 8 + .../blockstates/birch_bookshelf.json | 8 + .../bookshelf_parts/acacia_bookshelf.json | 14 + .../bookshelf_parts/birch_bookshelf.json | 14 + .../blockstates/bookshelf_parts/books0.json | 14 + .../blockstates/bookshelf_parts/books1.json | 14 + .../blockstates/bookshelf_parts/books10.json | 14 + .../blockstates/bookshelf_parts/books11.json | 14 + .../blockstates/bookshelf_parts/books2.json | 14 + .../blockstates/bookshelf_parts/books3.json | 14 + .../blockstates/bookshelf_parts/books4.json | 14 + .../blockstates/bookshelf_parts/books5.json | 14 + .../blockstates/bookshelf_parts/books6.json | 14 + .../blockstates/bookshelf_parts/books7.json | 14 + .../blockstates/bookshelf_parts/books8.json | 14 + .../blockstates/bookshelf_parts/books9.json | 14 + .../bookshelf_parts/dark_oak_bookshelf.json | 14 + .../bookshelf_parts/jungle_bookshelf.json | 14 + .../bookshelf_parts/oak_bookshelf.json | 14 + .../bookshelf_parts/spruce_bookshelf.json | 14 + .../blockstates/dark_oak_bookshelf.json | 8 + .../blockstates/jungle_bookshelf.json | 8 + .../ebwizardry/blockstates/oak_bookshelf.json | 8 + .../blockstates/spruce_bookshelf.json | 8 + .../assets/ebwizardry/lang/en_gb.lang | 13 +- .../assets/ebwizardry/lang/en_us.lang | 13 +- .../models/block/acacia_bookshelf.json | 9 + .../models/block/birch_bookshelf.json | 9 + .../ebwizardry/models/block/books0.json | 33 ++ .../ebwizardry/models/block/books1.json | 33 ++ .../ebwizardry/models/block/books10.json | 33 ++ .../ebwizardry/models/block/books11.json | 33 ++ .../ebwizardry/models/block/books2.json | 33 ++ .../ebwizardry/models/block/books3.json | 33 ++ .../ebwizardry/models/block/books4.json | 33 ++ .../ebwizardry/models/block/books5.json | 33 ++ .../ebwizardry/models/block/books6.json | 33 ++ .../ebwizardry/models/block/books7.json | 33 ++ .../ebwizardry/models/block/books8.json | 33 ++ .../ebwizardry/models/block/books9.json | 33 ++ .../ebwizardry/models/block/bookshelf.json | 301 +----------------- .../models/block/dark_oak_bookshelf.json | 9 + .../models/block/jungle_bookshelf.json | 9 + .../models/block/oak_bookshelf.json | 9 + .../models/block/spruce_bookshelf.json | 9 + .../models/item/acacia_bookshelf.json | 3 + .../models/item/birch_bookshelf.json | 3 + .../models/item/dark_oak_bookshelf.json | 3 + .../models/item/jungle_bookshelf.json | 3 + .../ebwizardry/models/item/oak_bookshelf.json | 3 + .../models/item/spruce_bookshelf.json | 3 + .../blocks/acacia_bookshelf_inside.png | Bin 0 -> 5356 bytes .../textures/blocks/acacia_bookshelf_side.png | Bin 0 -> 5677 bytes .../textures/blocks/acacia_bookshelf_top.png | Bin 0 -> 5625 bytes .../blocks/birch_bookshelf_inside.png | Bin 0 -> 5346 bytes .../textures/blocks/birch_bookshelf_side.png | Bin 0 -> 5657 bytes .../textures/blocks/birch_bookshelf_top.png | Bin 0 -> 5606 bytes .../blocks/dark_oak_bookshelf_inside.png | Bin 0 -> 1234 bytes .../blocks/dark_oak_bookshelf_side.png | Bin 0 -> 1616 bytes .../blocks/dark_oak_bookshelf_top.png | Bin 0 -> 1560 bytes .../blocks/jungle_bookshelf_inside.png | Bin 0 -> 1306 bytes .../textures/blocks/jungle_bookshelf_side.png | Bin 0 -> 1564 bytes .../textures/blocks/jungle_bookshelf_top.png | Bin 0 -> 1561 bytes .../textures/blocks/oak_bookshelf_inside.png | Bin 0 -> 1301 bytes .../textures/blocks/oak_bookshelf_side.png | Bin 0 -> 1654 bytes .../textures/blocks/oak_bookshelf_top.png | Bin 0 -> 1573 bytes .../blocks/spruce_bookshelf_inside.png | Bin 250 -> 1236 bytes .../ebwizardry/textures/gui/bookshelf.png | Bin 0 -> 1009 bytes 89 files changed, 1572 insertions(+), 314 deletions(-) create mode 100644 src/main/java/electroblob/wizardry/block/BlockBookshelf.java create mode 100644 src/main/java/electroblob/wizardry/client/gui/GuiBookshelf.java create mode 100644 src/main/java/electroblob/wizardry/client/model/BakedModelBookshelf.java create mode 100644 src/main/java/electroblob/wizardry/client/model/ModelBookshelf.java create mode 100644 src/main/java/electroblob/wizardry/client/model/ModelLoaderBookshelf.java rename src/main/java/electroblob/wizardry/{tileentity => inventory}/ContainerArcaneWorkbench.java (98%) create mode 100644 src/main/java/electroblob/wizardry/inventory/ContainerBookshelf.java rename src/main/java/electroblob/wizardry/{tileentity => inventory}/ContainerPortableWorkbench.java (93%) rename src/main/java/electroblob/wizardry/{tileentity => inventory}/SlotItemClassList.java (95%) rename src/main/java/electroblob/wizardry/{tileentity => inventory}/SlotItemList.java (95%) rename src/main/java/electroblob/wizardry/{tileentity => inventory}/SlotWorkbenchItem.java (91%) create mode 100644 src/main/java/electroblob/wizardry/tileentity/TileEntityBookshelf.java create mode 100644 src/main/resources/assets/ebwizardry/blockstates/acacia_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/birch_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/acacia_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/birch_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books0.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books1.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books10.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books11.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books2.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books3.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books4.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books5.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books6.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books7.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books8.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books9.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/dark_oak_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/jungle_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/oak_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/spruce_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/dark_oak_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/jungle_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/oak_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/blockstates/spruce_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/acacia_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/birch_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/books0.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/books1.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/books10.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/books11.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/books2.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/books3.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/books4.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/books5.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/books6.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/books7.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/books8.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/books9.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/dark_oak_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/jungle_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/oak_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/models/block/spruce_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/acacia_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/birch_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/dark_oak_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/jungle_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/oak_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/models/item/spruce_bookshelf.json create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/acacia_bookshelf_inside.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/acacia_bookshelf_side.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/acacia_bookshelf_top.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/birch_bookshelf_inside.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/birch_bookshelf_side.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/birch_bookshelf_top.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/dark_oak_bookshelf_inside.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/dark_oak_bookshelf_side.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/dark_oak_bookshelf_top.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/jungle_bookshelf_inside.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/jungle_bookshelf_side.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/jungle_bookshelf_top.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/oak_bookshelf_inside.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/oak_bookshelf_side.png create mode 100644 src/main/resources/assets/ebwizardry/textures/blocks/oak_bookshelf_top.png create mode 100644 src/main/resources/assets/ebwizardry/textures/gui/bookshelf.png diff --git a/src/main/java/electroblob/wizardry/WizardryGuiHandler.java b/src/main/java/electroblob/wizardry/WizardryGuiHandler.java index 69ffe1ab..69aa420f 100644 --- a/src/main/java/electroblob/wizardry/WizardryGuiHandler.java +++ b/src/main/java/electroblob/wizardry/WizardryGuiHandler.java @@ -1,10 +1,12 @@ package electroblob.wizardry; +import electroblob.wizardry.inventory.ContainerArcaneWorkbench; +import electroblob.wizardry.inventory.ContainerBookshelf; +import electroblob.wizardry.inventory.ContainerPortableWorkbench; import electroblob.wizardry.item.ItemSpellBook; import electroblob.wizardry.item.ItemWizardHandbook; -import electroblob.wizardry.tileentity.ContainerArcaneWorkbench; -import electroblob.wizardry.tileentity.ContainerPortableWorkbench; import electroblob.wizardry.tileentity.TileEntityArcaneWorkbench; +import electroblob.wizardry.tileentity.TileEntityBookshelf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; @@ -20,40 +22,73 @@ public class WizardryGuiHandler implements IGuiHandler { public static final int ARCANE_WORKBENCH = nextGuiId++; public static final int WIZARD_HANDBOOK = nextGuiId++; public static final int PORTABLE_CRAFTING = nextGuiId++; + public static final int BOOKSHELF = nextGuiId++; @Override public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z){ + if(id == ARCANE_WORKBENCH){ + TileEntity tileEntity = world.getTileEntity(new BlockPos(x, y, z)); + if(tileEntity instanceof TileEntityArcaneWorkbench){ return new ContainerArcaneWorkbench(player.inventory, (TileEntityArcaneWorkbench)tileEntity); } + }else if(id == PORTABLE_CRAFTING){ return new ContainerPortableWorkbench(player.inventory, world, new BlockPos(x, y, z)); + + }else if(id == BOOKSHELF){ + + TileEntity tileEntity = world.getTileEntity(new BlockPos(x, y, z)); + + if(tileEntity instanceof TileEntityBookshelf){ + return new ContainerBookshelf(player.inventory, (TileEntityBookshelf)tileEntity); + } } + return null; } @Override public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z){ + if(id == ARCANE_WORKBENCH){ + TileEntity tileEntity = world.getTileEntity(new BlockPos(x, y, z)); + if(tileEntity instanceof TileEntityArcaneWorkbench){ return new electroblob.wizardry.client.gui.GuiArcaneWorkbench(player.inventory, (TileEntityArcaneWorkbench)tileEntity); } + }else if(id == WIZARD_HANDBOOK && (player.getHeldItemMainhand().getItem() instanceof ItemWizardHandbook || player.getHeldItemOffhand().getItem() instanceof ItemWizardHandbook)){ + return new electroblob.wizardry.client.gui.handbook.GuiWizardHandbook(); + }else if(id == SPELL_BOOK){ + if(player.getHeldItemMainhand().getItem() instanceof ItemSpellBook){ return new electroblob.wizardry.client.gui.GuiSpellBook(player.getHeldItemMainhand()); }else if(player.getHeldItemOffhand().getItem() instanceof ItemSpellBook){ return new electroblob.wizardry.client.gui.GuiSpellBook(player.getHeldItemOffhand()); } + }else if(id == PORTABLE_CRAFTING){ return new electroblob.wizardry.client.gui.GuiPortableCrafting(player.inventory, world, new BlockPos(x, y, z)); + + }else if(id == BOOKSHELF){ + + TileEntity tileEntity = world.getTileEntity(new BlockPos(x, y, z)); + + if(tileEntity instanceof TileEntityBookshelf){ + return new electroblob.wizardry.client.gui.GuiBookshelf(player.inventory, + (TileEntityBookshelf)tileEntity); + } + } + return null; } } \ No newline at end of file diff --git a/src/main/java/electroblob/wizardry/block/BlockBookshelf.java b/src/main/java/electroblob/wizardry/block/BlockBookshelf.java new file mode 100644 index 00000000..b4e23861 --- /dev/null +++ b/src/main/java/electroblob/wizardry/block/BlockBookshelf.java @@ -0,0 +1,147 @@ +package electroblob.wizardry.block; + +import electroblob.wizardry.Wizardry; +import electroblob.wizardry.WizardryGuiHandler; +import electroblob.wizardry.registry.WizardryTabs; +import electroblob.wizardry.tileentity.TileEntityBookshelf; +import net.minecraft.block.BlockHorizontal; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +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.inventory.InventoryHelper; +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.common.property.IExtendedBlockState; +import net.minecraftforge.common.property.Properties; + +import javax.annotation.Nullable; + +public class BlockBookshelf extends BlockHorizontal implements ITileEntityProvider { + + public static final int SLOT_COUNT = 12; + + public static final UnlistedPropertyBool[] BOOKS = new UnlistedPropertyBool[SLOT_COUNT]; + + static { + for(int i=0; i[] properties = { FACING }; +// return new BlockStateContainer(this, ArrayUtils.addAll(properties, BOOKS)); + return new BlockStateContainer.Builder(this).add(FACING).add(BOOKS).build(); + } + + @Override + public boolean isOpaqueCube(IBlockState state){ + return false; + } + + @Override + public boolean isFullCube(IBlockState state){ + return false; + } + + @Override + public BlockFaceShape getBlockFaceShape(IBlockAccess world, IBlockState state, BlockPos pos, EnumFacing face){ + return state.getValue(FACING).getAxis() == face.getAxis() ? BlockFaceShape.UNDEFINED : BlockFaceShape.SOLID; + } + + @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()); + } + + @Override + public void breakBlock(World world, BlockPos pos, IBlockState block){ + + TileEntity tileentity = world.getTileEntity(pos); + + if(tileentity instanceof TileEntityBookshelf){ + InventoryHelper.dropInventoryItems(world, pos, (TileEntityBookshelf)tileentity); + } + + super.breakBlock(world, pos, block); // For blocks that don't extend BlockContainer, this removes the TE + } + + @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 + public IBlockState getExtendedState(IBlockState state, IBlockAccess world, BlockPos pos){ + + IExtendedBlockState s = (IExtendedBlockState)super.getExtendedState(state, world, pos); + + if(world.getTileEntity(pos) instanceof TileEntityBookshelf){ + TileEntityBookshelf tileentity = ((TileEntityBookshelf)world.getTileEntity(pos)); + for(int i = 0; i < tileentity.getSizeInventory(); i++){ + s = s.withProperty(BOOKS[i], !tileentity.getStackInSlot(i).isEmpty()); + } + } + + return s; + } + + @Nullable + @Override + public TileEntity createNewTileEntity(World world, int meta){ + return new TileEntityBookshelf(); + } + + @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.BOOKSHELF, world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public boolean eventReceived(IBlockState state, World world, BlockPos pos, int id, int param){ + super.eventReceived(state, world, pos, id, param); + TileEntity tileentity = world.getTileEntity(pos); + return tileentity != null && tileentity.receiveClientEvent(id, param); + } + + // Copied from BlockFluidBase, only reason it exists is because of java's weird restrictions on generics + private static final class UnlistedPropertyBool extends Properties.PropertyAdapter { + + public UnlistedPropertyBool(String name){ + super(PropertyBool.create(name)); + } + } + +} diff --git a/src/main/java/electroblob/wizardry/client/gui/GuiArcaneWorkbench.java b/src/main/java/electroblob/wizardry/client/gui/GuiArcaneWorkbench.java index b4cf57a4..7d8be0a3 100644 --- a/src/main/java/electroblob/wizardry/client/gui/GuiArcaneWorkbench.java +++ b/src/main/java/electroblob/wizardry/client/gui/GuiArcaneWorkbench.java @@ -14,7 +14,7 @@ import electroblob.wizardry.packet.PacketControlInput; import electroblob.wizardry.packet.WizardryPacketHandler; import electroblob.wizardry.registry.WizardrySounds; import electroblob.wizardry.spell.Spell; -import electroblob.wizardry.tileentity.ContainerArcaneWorkbench; +import electroblob.wizardry.inventory.ContainerArcaneWorkbench; import electroblob.wizardry.tileentity.TileEntityArcaneWorkbench; import electroblob.wizardry.util.WandHelper; import net.minecraft.client.Minecraft; diff --git a/src/main/java/electroblob/wizardry/client/gui/GuiBookshelf.java b/src/main/java/electroblob/wizardry/client/gui/GuiBookshelf.java new file mode 100644 index 00000000..67091424 --- /dev/null +++ b/src/main/java/electroblob/wizardry/client/gui/GuiBookshelf.java @@ -0,0 +1,54 @@ +package electroblob.wizardry.client.gui; + +import electroblob.wizardry.Wizardry; +import electroblob.wizardry.inventory.ContainerBookshelf; +import electroblob.wizardry.tileentity.TileEntityBookshelf; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiBookshelf extends GuiContainer { + + private static final ResourceLocation TEXTURE = new ResourceLocation(Wizardry.MODID, "textures/gui/bookshelf.png"); + /** The player inventory bound to this GUI. */ + private final InventoryPlayer playerInventory; + /** The inventory contained within the corresponding bookshelf. */ + public IInventory bookshelfInventory; + + public GuiBookshelf(InventoryPlayer playerInv, TileEntityBookshelf bookshelfInv){ + super(new ContainerBookshelf(playerInv, bookshelfInv)); + this.playerInventory = playerInv; + this.bookshelfInventory = bookshelfInv; + this.allowUserInput = false; + this.ySize = 148; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks){ + this.drawDefaultBackground(); + super.drawScreen(mouseX, mouseY, partialTicks); + this.renderHoveredToolTip(mouseX, mouseY); + } + + @Override + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY){ + String s = this.bookshelfInventory.getDisplayName().getUnformattedText(); + this.fontRenderer.drawString(s, 8, 6, 4210752); + this.fontRenderer.drawString(this.playerInventory.getDisplayName().getUnformattedText(), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY){ + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(TEXTURE); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); + } + +} \ No newline at end of file diff --git a/src/main/java/electroblob/wizardry/client/model/BakedModelBookshelf.java b/src/main/java/electroblob/wizardry/client/model/BakedModelBookshelf.java new file mode 100644 index 00000000..4e682688 --- /dev/null +++ b/src/main/java/electroblob/wizardry/client/model/BakedModelBookshelf.java @@ -0,0 +1,72 @@ +package electroblob.wizardry.client.model; + +import electroblob.wizardry.block.BlockBookshelf; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemOverrideList; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.property.IExtendedBlockState; + +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; + +public class BakedModelBookshelf implements IBakedModel { + + private final IBakedModel bookshelf; + private final IBakedModel[] books; + + public BakedModelBookshelf(IBakedModel bookshelf, IBakedModel... books){ + this.bookshelf = bookshelf; + this.books = books; + } + + @Override + public List getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand){ + + IBakedModel fallback = Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelManager().getMissingModel(); + if(state == null) return fallback.getQuads(null, side, rand); + + // It took me waaay too long to realise I needed a new list here + List quads = new ArrayList<>(bookshelf.getQuads(state, side, rand)); // Lists ain't immutable, chief + + IExtendedBlockState extendedState = (IExtendedBlockState)state; + + for(int i = 0; i bakedTextureGetter){ + + try { + + IModel bookshelfModel = ModelLoaderRegistry.getModel(bookshelfModelLocation); + // I don't know why default state works here (surely it ought to be the state param?), but it works so who cares + IBakedModel bookshelf = bookshelfModel.bake(bookshelfModel.getDefaultState(), format, bakedTextureGetter); + + IBakedModel[] books = new IBakedModel[BlockBookshelf.SLOT_COUNT]; + + for(int i = 0; i < BlockBookshelf.SLOT_COUNT; i++){ + IModel bookModel = ModelLoaderRegistry.getModel(new ModelResourceLocation(new ResourceLocation(Wizardry.MODID, "bookshelf_parts/books" + i), variant)); + books[i] = bookModel.bake(bookModel.getDefaultState(), format, bakedTextureGetter); // Same here! + } + + return new BakedModelBookshelf(bookshelf, books); + + }catch(Exception exception){ + Wizardry.logger.error("Error baking bookshelf models: ", exception); + return ModelLoaderRegistry.getMissingModel().bake(state, format, bakedTextureGetter); + } + + } + +} diff --git a/src/main/java/electroblob/wizardry/client/model/ModelLoaderBookshelf.java b/src/main/java/electroblob/wizardry/client/model/ModelLoaderBookshelf.java new file mode 100644 index 00000000..0c7dcb79 --- /dev/null +++ b/src/main/java/electroblob/wizardry/client/model/ModelLoaderBookshelf.java @@ -0,0 +1,28 @@ +package electroblob.wizardry.client.model; + +import electroblob.wizardry.Wizardry; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.ICustomModelLoader; +import net.minecraftforge.client.model.IModel; + +public class ModelLoaderBookshelf implements ICustomModelLoader { + + private static final String SMART_MODEL_PREFIX = "models/block/smart_model/"; + + @Override + public void onResourceManagerReload(IResourceManager resourceManager){ + // Do nothing + } + + @Override + public boolean accepts(ResourceLocation modelLocation){ + return modelLocation.getNamespace().equals(Wizardry.MODID) && modelLocation.getPath().startsWith(SMART_MODEL_PREFIX); + } + + @Override + public IModel loadModel(ResourceLocation modelLocation){ + return new ModelBookshelf(modelLocation.getPath().substring(SMART_MODEL_PREFIX.length())); + } + +} diff --git a/src/main/java/electroblob/wizardry/client/model/WizardryModels.java b/src/main/java/electroblob/wizardry/client/model/WizardryModels.java index 2363eb1b..f2e2e6c3 100644 --- a/src/main/java/electroblob/wizardry/client/model/WizardryModels.java +++ b/src/main/java/electroblob/wizardry/client/model/WizardryModels.java @@ -21,6 +21,7 @@ import net.minecraft.util.NonNullList; import net.minecraftforge.client.event.ModelBakeEvent; import net.minecraftforge.client.event.ModelRegistryEvent; import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.client.model.ModelLoaderRegistry; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.relauncher.Side; @@ -69,6 +70,16 @@ public final class WizardryModels { ItemBlockMultiTextured gildedWoodItem = (ItemBlockMultiTextured)Item.getItemFromBlock(WizardryBlocks.gilded_wood); registerMultiTexturedModel(gildedWoodItem); + // Explanation for all this here -> https://github.com/TheGreyGhost/MinecraftByExample/tree/master/src/main/java/minecraftbyexample/mbe05_block_dynamic_block_model2 + ModelLoaderRegistry.registerLoader(new ModelLoaderBookshelf()); + + registerItemModel(Item.getItemFromBlock(WizardryBlocks.oak_bookshelf)); + registerItemModel(Item.getItemFromBlock(WizardryBlocks.spruce_bookshelf)); + registerItemModel(Item.getItemFromBlock(WizardryBlocks.birch_bookshelf)); + registerItemModel(Item.getItemFromBlock(WizardryBlocks.jungle_bookshelf)); + registerItemModel(Item.getItemFromBlock(WizardryBlocks.acacia_bookshelf)); + registerItemModel(Item.getItemFromBlock(WizardryBlocks.dark_oak_bookshelf)); + // Items registerMultiTexturedModel((ItemCrystal)WizardryItems.magic_crystal); diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderArcaneWorkbench.java b/src/main/java/electroblob/wizardry/client/renderer/RenderArcaneWorkbench.java index ae9751ac..2f645301 100644 --- a/src/main/java/electroblob/wizardry/client/renderer/RenderArcaneWorkbench.java +++ b/src/main/java/electroblob/wizardry/client/renderer/RenderArcaneWorkbench.java @@ -1,7 +1,7 @@ package electroblob.wizardry.client.renderer; import electroblob.wizardry.Wizardry; -import electroblob.wizardry.tileentity.ContainerArcaneWorkbench; +import electroblob.wizardry.inventory.ContainerArcaneWorkbench; import electroblob.wizardry.tileentity.TileEntityArcaneWorkbench; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.BufferBuilder; diff --git a/src/main/java/electroblob/wizardry/event/SpellBindEvent.java b/src/main/java/electroblob/wizardry/event/SpellBindEvent.java index 2e2de430..08b1d2b5 100644 --- a/src/main/java/electroblob/wizardry/event/SpellBindEvent.java +++ b/src/main/java/electroblob/wizardry/event/SpellBindEvent.java @@ -1,6 +1,6 @@ package electroblob.wizardry.event; -import electroblob.wizardry.tileentity.ContainerArcaneWorkbench; +import electroblob.wizardry.inventory.ContainerArcaneWorkbench; import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.player.PlayerContainerEvent; diff --git a/src/main/java/electroblob/wizardry/tileentity/ContainerArcaneWorkbench.java b/src/main/java/electroblob/wizardry/inventory/ContainerArcaneWorkbench.java similarity index 98% rename from src/main/java/electroblob/wizardry/tileentity/ContainerArcaneWorkbench.java rename to src/main/java/electroblob/wizardry/inventory/ContainerArcaneWorkbench.java index 7582ba0e..be8297c6 100644 --- a/src/main/java/electroblob/wizardry/tileentity/ContainerArcaneWorkbench.java +++ b/src/main/java/electroblob/wizardry/inventory/ContainerArcaneWorkbench.java @@ -1,4 +1,4 @@ -package electroblob.wizardry.tileentity; +package electroblob.wizardry.inventory; import electroblob.wizardry.Wizardry; import electroblob.wizardry.event.SpellBindEvent; @@ -6,6 +6,7 @@ import electroblob.wizardry.item.IWorkbenchItem; import electroblob.wizardry.item.ItemSpellBook; import electroblob.wizardry.registry.WizardryAdvancementTriggers; import electroblob.wizardry.registry.WizardryItems; +import electroblob.wizardry.tileentity.TileEntityArcaneWorkbench; import electroblob.wizardry.util.WandHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -161,6 +162,7 @@ public class ContainerArcaneWorkbench extends Container { // FIXME: It only seems to be syncing correctly when a stack is put into the slot, not taken out. // This is because markDirty isn't called in the tileentity, I think. + // You can simulate this using hoppers! this.tileentity.sync(); } diff --git a/src/main/java/electroblob/wizardry/inventory/ContainerBookshelf.java b/src/main/java/electroblob/wizardry/inventory/ContainerBookshelf.java new file mode 100644 index 00000000..abe711df --- /dev/null +++ b/src/main/java/electroblob/wizardry/inventory/ContainerBookshelf.java @@ -0,0 +1,122 @@ +package electroblob.wizardry.inventory; + +import electroblob.wizardry.block.BlockBookshelf; +import electroblob.wizardry.item.ItemSpellBook; +import electroblob.wizardry.tileentity.TileEntityBookshelf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class ContainerBookshelf extends Container { + + /** The bookshelf tile entity associated with this container. */ + public TileEntityBookshelf tileentity; + + public ContainerBookshelf(IInventory inventory, TileEntityBookshelf tileentity){ + + this.tileentity = tileentity; + + for(int y = 0; y < 2; y++){ + for(int x = 0; x < BlockBookshelf.SLOT_COUNT / 2; x++){ + this.addSlotToContainer(new SlotBookshelf(tileentity, x + BlockBookshelf.SLOT_COUNT / 2 * y, 35 + x * 18, 17 + y * 18, 64, ItemSpellBook.class)); + } + } + + for(int x = 0; x < 9; x++){ + this.addSlotToContainer(new Slot(inventory, x, 8 + x * 18, 124)); + } + + for(int y = 0; y < 3; y++){ + for(int x = 0; x < 9; x++){ + this.addSlotToContainer(new Slot(inventory, 9 + x + y * 9, 8 + x * 18, 66 + y * 18)); + } + } + + this.onSlotChanged(); + + } + + /** Called from individual slots when their item is changed or removed. */ + public void onSlotChanged(){ + this.tileentity.sync(); + } + + @Override + public boolean canInteractWith(EntityPlayer player){ + return this.tileentity.isUsableByPlayer(player); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int clickedSlotId){ + + ItemStack remainder = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(clickedSlotId); + + if(slot != null && slot.getHasStack()){ + + ItemStack stack = slot.getStack(); // The stack that was there originally + remainder = stack.copy(); // A copy of that stack + + // Bookshelf -> inventory + if(clickedSlotId < BlockBookshelf.SLOT_COUNT){ + // Tries to move the stack into the player's inventory. If this fails... + if(!this.mergeItemStack(stack, BlockBookshelf.SLOT_COUNT, this.inventorySlots.size(), true)){ + return ItemStack.EMPTY; // ...nothing else happens. + } + } + // Inventory -> bookshelf + else{ + + int minSlotId = 0; + int maxSlotId = BlockBookshelf.SLOT_COUNT - 1; + + if(!(stack.getItem() instanceof ItemSpellBook)) return ItemStack.EMPTY; + + if(!this.mergeItemStack(stack, minSlotId, maxSlotId + 1, false)){ + return ItemStack.EMPTY; + } + } + + if(stack.getCount() == 0){ + slot.putStack(ItemStack.EMPTY); + }else{ + slot.onSlotChanged(); + } + + if(stack.getCount() == remainder.getCount()){ + return ItemStack.EMPTY; + } + + slot.onTake(player, stack); + } + + return remainder; + } + + public class SlotBookshelf extends SlotItemClassList { + + @SafeVarargs + public SlotBookshelf(IInventory inventory, int index, int x, int y, int stackLimit, Class... allowedItemClasses){ + super(inventory, index, x, y, stackLimit, allowedItemClasses); + } + + @Override + public void putStack(ItemStack stack){ + boolean statusChanged = this.getStack().isEmpty() != stack.isEmpty(); + super.putStack(stack); + if(statusChanged) ContainerBookshelf.this.onSlotChanged(); + } + + @Override + public ItemStack onTake(EntityPlayer player, ItemStack stack){ + ItemStack result = super.onTake(player, stack); + ContainerBookshelf.this.onSlotChanged(); + return result; + } + + } + +} diff --git a/src/main/java/electroblob/wizardry/tileentity/ContainerPortableWorkbench.java b/src/main/java/electroblob/wizardry/inventory/ContainerPortableWorkbench.java similarity index 93% rename from src/main/java/electroblob/wizardry/tileentity/ContainerPortableWorkbench.java rename to src/main/java/electroblob/wizardry/inventory/ContainerPortableWorkbench.java index 92b6f3c6..2111f1f7 100644 --- a/src/main/java/electroblob/wizardry/tileentity/ContainerPortableWorkbench.java +++ b/src/main/java/electroblob/wizardry/inventory/ContainerPortableWorkbench.java @@ -1,4 +1,4 @@ -package electroblob.wizardry.tileentity; +package electroblob.wizardry.inventory; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; diff --git a/src/main/java/electroblob/wizardry/tileentity/SlotItemClassList.java b/src/main/java/electroblob/wizardry/inventory/SlotItemClassList.java similarity index 95% rename from src/main/java/electroblob/wizardry/tileentity/SlotItemClassList.java rename to src/main/java/electroblob/wizardry/inventory/SlotItemClassList.java index 783249d9..bbdbd1b7 100644 --- a/src/main/java/electroblob/wizardry/tileentity/SlotItemClassList.java +++ b/src/main/java/electroblob/wizardry/inventory/SlotItemClassList.java @@ -1,4 +1,4 @@ -package electroblob.wizardry.tileentity; +package electroblob.wizardry.inventory; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; diff --git a/src/main/java/electroblob/wizardry/tileentity/SlotItemList.java b/src/main/java/electroblob/wizardry/inventory/SlotItemList.java similarity index 95% rename from src/main/java/electroblob/wizardry/tileentity/SlotItemList.java rename to src/main/java/electroblob/wizardry/inventory/SlotItemList.java index db95b5e0..bf1a82a9 100644 --- a/src/main/java/electroblob/wizardry/tileentity/SlotItemList.java +++ b/src/main/java/electroblob/wizardry/inventory/SlotItemList.java @@ -1,4 +1,4 @@ -package electroblob.wizardry.tileentity; +package electroblob.wizardry.inventory; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; diff --git a/src/main/java/electroblob/wizardry/tileentity/SlotWorkbenchItem.java b/src/main/java/electroblob/wizardry/inventory/SlotWorkbenchItem.java similarity index 91% rename from src/main/java/electroblob/wizardry/tileentity/SlotWorkbenchItem.java rename to src/main/java/electroblob/wizardry/inventory/SlotWorkbenchItem.java index 0e0a2f7d..83eb3659 100644 --- a/src/main/java/electroblob/wizardry/tileentity/SlotWorkbenchItem.java +++ b/src/main/java/electroblob/wizardry/inventory/SlotWorkbenchItem.java @@ -1,4 +1,4 @@ -package electroblob.wizardry.tileentity; +package electroblob.wizardry.inventory; import electroblob.wizardry.item.IWorkbenchItem; import net.minecraft.entity.player.EntityPlayer; @@ -29,8 +29,9 @@ public class SlotWorkbenchItem extends Slot { @Override public ItemStack onTake(EntityPlayer player, ItemStack stack){ + ItemStack result = super.onTake(player, stack); this.container.onSlotChanged(slotNumber, ItemStack.EMPTY, player); - return super.onTake(player, stack); + return result; } @Override diff --git a/src/main/java/electroblob/wizardry/packet/PacketControlInput.java b/src/main/java/electroblob/wizardry/packet/PacketControlInput.java index f2a43d39..837a0baf 100644 --- a/src/main/java/electroblob/wizardry/packet/PacketControlInput.java +++ b/src/main/java/electroblob/wizardry/packet/PacketControlInput.java @@ -6,7 +6,7 @@ import electroblob.wizardry.packet.PacketControlInput.Message; import electroblob.wizardry.registry.Spells; import electroblob.wizardry.spell.Possession; import electroblob.wizardry.spell.Resurrection; -import electroblob.wizardry.tileentity.ContainerArcaneWorkbench; +import electroblob.wizardry.inventory.ContainerArcaneWorkbench; import electroblob.wizardry.util.SpellModifiers; import electroblob.wizardry.util.WizardryUtilities; import io.netty.buffer.ByteBuf; diff --git a/src/main/java/electroblob/wizardry/registry/WizardryBlocks.java b/src/main/java/electroblob/wizardry/registry/WizardryBlocks.java index 2e4baa68..ed25dfd4 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardryBlocks.java +++ b/src/main/java/electroblob/wizardry/registry/WizardryBlocks.java @@ -58,6 +58,12 @@ public final class WizardryBlocks { public static final Block obsidian_crust = placeholder(); public static final Block dry_frosted_ice = placeholder(); public static final Block gilded_wood = placeholder(); + public static final Block oak_bookshelf = placeholder(); + public static final Block spruce_bookshelf = placeholder(); + public static final Block birch_bookshelf = placeholder(); + public static final Block jungle_bookshelf = placeholder(); + public static final Block acacia_bookshelf = placeholder(); + public static final Block dark_oak_bookshelf = placeholder(); /** * Sets both the registry and unlocalised names of the given block, then registers it with the given registry. Use @@ -98,6 +104,12 @@ public final class WizardryBlocks { registerBlock(registry, "obsidian_crust", new BlockObsidianCrust()); registerBlock(registry, "dry_frosted_ice", new BlockDryFrostedIce()); registerBlock(registry, "gilded_wood", new BlockPlanks().setCreativeTab(WizardryTabs.WIZARDRY)); + registerBlock(registry, "oak_bookshelf", new BlockBookshelf()); + registerBlock(registry, "spruce_bookshelf", new BlockBookshelf()); + registerBlock(registry, "birch_bookshelf", new BlockBookshelf()); + registerBlock(registry, "jungle_bookshelf", new BlockBookshelf()); + registerBlock(registry, "acacia_bookshelf", new BlockBookshelf()); + registerBlock(registry, "dark_oak_bookshelf", new BlockBookshelf()); } @@ -111,5 +123,6 @@ public final class WizardryBlocks { GameRegistry.registerTileEntity(TileEntityPlayerSave.class, new ResourceLocation(Wizardry.MODID, "player_save")); 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")); } } \ 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 10ae105c..b5c52052 100644 --- a/src/main/java/electroblob/wizardry/registry/WizardryItems.java +++ b/src/main/java/electroblob/wizardry/registry/WizardryItems.java @@ -400,6 +400,13 @@ public final class WizardryItems { registerMultiTexturedItemBlock(registry, WizardryBlocks.runestone_pedestal, false, elements); registerMultiTexturedItemBlock(registry, WizardryBlocks.gilded_wood, true, woodTypes); + registerItemBlock(registry, WizardryBlocks.oak_bookshelf); + registerItemBlock(registry, WizardryBlocks.spruce_bookshelf); + registerItemBlock(registry, WizardryBlocks.birch_bookshelf); + registerItemBlock(registry, WizardryBlocks.jungle_bookshelf); + registerItemBlock(registry, WizardryBlocks.acacia_bookshelf); + registerItemBlock(registry, WizardryBlocks.dark_oak_bookshelf); + // Items registerItem(registry, "magic_crystal", new ItemCrystal()); diff --git a/src/main/java/electroblob/wizardry/tileentity/TileEntityArcaneWorkbench.java b/src/main/java/electroblob/wizardry/tileentity/TileEntityArcaneWorkbench.java index cfc6dc09..37c4bf4c 100644 --- a/src/main/java/electroblob/wizardry/tileentity/TileEntityArcaneWorkbench.java +++ b/src/main/java/electroblob/wizardry/tileentity/TileEntityArcaneWorkbench.java @@ -1,6 +1,7 @@ package electroblob.wizardry.tileentity; import electroblob.wizardry.Wizardry; +import electroblob.wizardry.inventory.ContainerArcaneWorkbench; import electroblob.wizardry.item.IManaStoringItem; import electroblob.wizardry.item.IWorkbenchItem; import electroblob.wizardry.item.ItemCrystal; diff --git a/src/main/java/electroblob/wizardry/tileentity/TileEntityBookshelf.java b/src/main/java/electroblob/wizardry/tileentity/TileEntityBookshelf.java new file mode 100644 index 00000000..ce513635 --- /dev/null +++ b/src/main/java/electroblob/wizardry/tileentity/TileEntityBookshelf.java @@ -0,0 +1,221 @@ +package electroblob.wizardry.tileentity; + +import electroblob.wizardry.Wizardry; +import electroblob.wizardry.block.BlockBookshelf; +import electroblob.wizardry.item.ItemSpellBook; +import electroblob.wizardry.util.NBTExtras; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +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.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.common.util.Constants.NBT; + +public class TileEntityBookshelf extends TileEntity implements IInventory, ITickable { + + /** The inventory of the bookshelf. */ + private NonNullList inventory; + + public TileEntityBookshelf(){ + inventory = NonNullList.withSize(BlockBookshelf.SLOT_COUNT, ItemStack.EMPTY); + } + + /** 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 void update(){ + // Nothing here for now + } + + @Override + public int getSizeInventory(){ + return inventory.size(); + } + + @Override + public ItemStack getStackInSlot(int slot){ + return inventory.get(slot); + } + + @Override + public ItemStack decrStackSize(int slot, int amount){ + + ItemStack stack = getStackInSlot(slot); + + if(!stack.isEmpty()){ + if(stack.getCount() <= amount){ + setInventorySlotContents(slot, ItemStack.EMPTY); + }else{ + stack = stack.splitStack(amount); + if(stack.getCount() == 0){ + setInventorySlotContents(slot, ItemStack.EMPTY); + } + } + this.markDirty(); + } + + return stack; + } + + @Override + public ItemStack removeStackFromSlot(int slot){ + + ItemStack stack = getStackInSlot(slot); + + if(!stack.isEmpty()){ + setInventorySlotContents(slot, ItemStack.EMPTY); + } + + return stack; + } + + @Override + public void setInventorySlotContents(int slot, ItemStack stack){ + + inventory.set(slot, stack); + + //ItemStack previous = inventory.set(slot, stack); + + //if(previous.isEmpty() != stack.isEmpty()) this.sync(); + + if(!stack.isEmpty() && stack.getCount() > getInventoryStackLimit()){ + stack.setCount(getInventoryStackLimit()); + } + } + + @Override + public String getName(){ + return "container." + Wizardry.MODID + ":bookshelf"; + } + + @Override + public boolean hasCustomName(){ + return false; + } + + @Override + public ITextComponent getDisplayName(){ + return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName()); + } + + @Override + public int getInventoryStackLimit(){ + return 64; + } + + @Override + public boolean isUsableByPlayer(EntityPlayer player){ + return world.getTileEntity(pos) == this && player.getDistanceSqToCenter(pos) < 64; + } + + @Override + public void openInventory(EntityPlayer player){ + + } + + @Override + public void closeInventory(EntityPlayer player){ + + } + + @Override + public boolean isItemValidForSlot(int slotNumber, ItemStack itemstack){ + return itemstack.isEmpty() || itemstack.getItem() instanceof ItemSpellBook; // TODO: Add a whitelist + } + + @Override + public void readFromNBT(NBTTagCompound tagCompound){ + + super.readFromNBT(tagCompound); + + NBTTagList tagList = tagCompound.getTagList("Inventory", NBT.TAG_COMPOUND); + for(int i = 0; i < tagList.tagCount(); i++){ + NBTTagCompound tag = tagList.getCompoundTagAt(i); + byte slot = tag.getByte("Slot"); + if(slot >= 0 && slot < getSizeInventory()){ + setInventorySlotContents(slot, new ItemStack(tag)); + } + } + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound tagCompound){ + + super.writeToNBT(tagCompound); + + NBTTagList itemList = new NBTTagList(); + for(int i = 0; i < getSizeInventory(); i++){ + ItemStack stack = getStackInSlot(i); + if(!stack.isEmpty()){ + NBTTagCompound tag = new NBTTagCompound(); + tag.setByte("Slot", (byte)i); + stack.writeToNBT(tag); + itemList.appendTag(tag); + } + } + + NBTExtras.storeTagSafely(tagCompound, "Inventory", itemList); + return tagCompound; + } + + @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()); + } + + // What are all these for? + + @Override + public int getField(int id){ + return 0; + } + + @Override + public void setField(int id, int value){ + + } + + @Override + public int getFieldCount(){ + return 0; + } + + @Override + public void clear(){ + for(int i = 0; i < getSizeInventory(); i++){ + setInventorySlotContents(i, ItemStack.EMPTY); + } + } + + @Override + public boolean isEmpty(){ + for(int i = 0; i < getSizeInventory(); i++){ + if(!getStackInSlot(i).isEmpty()){ + return false; + } + } + return true; + } + +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/acacia_bookshelf.json b/src/main/resources/assets/ebwizardry/blockstates/acacia_bookshelf.json new file mode 100644 index 00000000..4aa96488 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/acacia_bookshelf.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "ebwizardry:smart_model/acacia_bookshelf#facing=north" }, + "facing=east": { "model": "ebwizardry:smart_model/acacia_bookshelf#facing=east" }, + "facing=south": { "model": "ebwizardry:smart_model/acacia_bookshelf#facing=south" }, + "facing=west": { "model": "ebwizardry:smart_model/acacia_bookshelf#facing=west" } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/birch_bookshelf.json b/src/main/resources/assets/ebwizardry/blockstates/birch_bookshelf.json new file mode 100644 index 00000000..656889cc --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/birch_bookshelf.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "ebwizardry:smart_model/birch_bookshelf#facing=north" }, + "facing=east": { "model": "ebwizardry:smart_model/birch_bookshelf#facing=east" }, + "facing=south": { "model": "ebwizardry:smart_model/birch_bookshelf#facing=south" }, + "facing=west": { "model": "ebwizardry:smart_model/birch_bookshelf#facing=west" } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/acacia_bookshelf.json b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/acacia_bookshelf.json new file mode 100644 index 00000000..c517daf9 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/acacia_bookshelf.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:acacia_bookshelf" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/birch_bookshelf.json b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/birch_bookshelf.json new file mode 100644 index 00000000..f86ffd00 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/birch_bookshelf.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:birch_bookshelf" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books0.json b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books0.json new file mode 100644 index 00000000..690e777d --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books0.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:books0" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books1.json b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books1.json new file mode 100644 index 00000000..f0bf298d --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books1.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:books1" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books10.json b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books10.json new file mode 100644 index 00000000..d0c3b676 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books10.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:books10" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books11.json b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books11.json new file mode 100644 index 00000000..f0564d0e --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books11.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:books11" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books2.json b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books2.json new file mode 100644 index 00000000..c6fbbb2d --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books2.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:books2" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books3.json b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books3.json new file mode 100644 index 00000000..fe640e1a --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books3.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:books3" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books4.json b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books4.json new file mode 100644 index 00000000..8f5f64c3 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books4.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:books4" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books5.json b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books5.json new file mode 100644 index 00000000..8cbd4b8b --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books5.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:books5" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books6.json b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books6.json new file mode 100644 index 00000000..23b29036 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books6.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:books6" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books7.json b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books7.json new file mode 100644 index 00000000..e9cba50e --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books7.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:books7" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books8.json b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books8.json new file mode 100644 index 00000000..981fdc32 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books8.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:books8" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books9.json b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books9.json new file mode 100644 index 00000000..46bbd413 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/books9.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:books9" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/dark_oak_bookshelf.json b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/dark_oak_bookshelf.json new file mode 100644 index 00000000..bfb7e91e --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/dark_oak_bookshelf.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:dark_oak_bookshelf" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/jungle_bookshelf.json b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/jungle_bookshelf.json new file mode 100644 index 00000000..9a9bd237 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/jungle_bookshelf.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:jungle_bookshelf" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/oak_bookshelf.json b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/oak_bookshelf.json new file mode 100644 index 00000000..d13b08c1 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/oak_bookshelf.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:oak_bookshelf" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/spruce_bookshelf.json b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/spruce_bookshelf.json new file mode 100644 index 00000000..66cf20b1 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/bookshelf_parts/spruce_bookshelf.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "ebwizardry:spruce_bookshelf" + }, + "variants": { + "facing": { + "north": {}, + "east": { "y": 90 }, + "south": { "y": 180 }, + "west": { "y": 270 } + } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/dark_oak_bookshelf.json b/src/main/resources/assets/ebwizardry/blockstates/dark_oak_bookshelf.json new file mode 100644 index 00000000..8a838825 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/dark_oak_bookshelf.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "ebwizardry:smart_model/dark_oak_bookshelf#facing=north" }, + "facing=east": { "model": "ebwizardry:smart_model/dark_oak_bookshelf#facing=east" }, + "facing=south": { "model": "ebwizardry:smart_model/dark_oak_bookshelf#facing=south" }, + "facing=west": { "model": "ebwizardry:smart_model/dark_oak_bookshelf#facing=west" } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/jungle_bookshelf.json b/src/main/resources/assets/ebwizardry/blockstates/jungle_bookshelf.json new file mode 100644 index 00000000..105b170f --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/jungle_bookshelf.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "ebwizardry:smart_model/jungle_bookshelf#facing=north" }, + "facing=east": { "model": "ebwizardry:smart_model/jungle_bookshelf#facing=east" }, + "facing=south": { "model": "ebwizardry:smart_model/jungle_bookshelf#facing=south" }, + "facing=west": { "model": "ebwizardry:smart_model/jungle_bookshelf#facing=west" } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/oak_bookshelf.json b/src/main/resources/assets/ebwizardry/blockstates/oak_bookshelf.json new file mode 100644 index 00000000..dca53b64 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/oak_bookshelf.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "ebwizardry:smart_model/oak_bookshelf#facing=north" }, + "facing=east": { "model": "ebwizardry:smart_model/oak_bookshelf#facing=east" }, + "facing=south": { "model": "ebwizardry:smart_model/oak_bookshelf#facing=south" }, + "facing=west": { "model": "ebwizardry:smart_model/oak_bookshelf#facing=west" } + } +} diff --git a/src/main/resources/assets/ebwizardry/blockstates/spruce_bookshelf.json b/src/main/resources/assets/ebwizardry/blockstates/spruce_bookshelf.json new file mode 100644 index 00000000..3e52fe5b --- /dev/null +++ b/src/main/resources/assets/ebwizardry/blockstates/spruce_bookshelf.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "ebwizardry:smart_model/spruce_bookshelf#facing=north" }, + "facing=east": { "model": "ebwizardry:smart_model/spruce_bookshelf#facing=east" }, + "facing=south": { "model": "ebwizardry:smart_model/spruce_bookshelf#facing=south" }, + "facing=west": { "model": "ebwizardry:smart_model/spruce_bookshelf#facing=west" } + } +} diff --git a/src/main/resources/assets/ebwizardry/lang/en_gb.lang b/src/main/resources/assets/ebwizardry/lang/en_gb.lang index 05ac7ba8..8927fb28 100644 --- a/src/main/resources/assets/ebwizardry/lang/en_gb.lang +++ b/src/main/resources/assets/ebwizardry/lang/en_gb.lang @@ -1,4 +1,4 @@ -#PARSE_ESCAPES +# PARSE_ESCAPES tile.ebwizardry\:arcane_workbench.name=Arcane Workbench tile.ebwizardry\:crystal_ore.name=Crystal Ore tile.ebwizardry\:petrified_stone.name=Petrified Stone @@ -30,8 +30,15 @@ tile.ebwizardry\:oak_gilded_wood.name=Gilded Oak Wood tile.ebwizardry\:spruce_gilded_wood.name=Gilded Spruce Wood tile.ebwizardry\:birch_gilded_wood.name=Gilded Birch Wood tile.ebwizardry\:jungle_gilded_wood.name=Gilded Jungle Wood -tile.ebwizardry\:dark_oak_gilded_wood.name=Gilded Dark Oak Wood tile.ebwizardry\:acacia_gilded_wood.name=Gilded Acacia Wood +tile.ebwizardry\:dark_oak_gilded_wood.name=Gilded Dark Oak Wood + +tile.ebwizardry\:oak_bookshelf.name=Oak Bookshelf +tile.ebwizardry\:spruce_bookshelf.name=Spruce Bookshelf +tile.ebwizardry\:birch_bookshelf.name=Birch Bookshelf +tile.ebwizardry\:jungle_bookshelf.name=Jungle Bookshelf +tile.ebwizardry\:acacia_bookshelf.name=Acacia Bookshelf +tile.ebwizardry\:dark_oak_bookshelf.name=Dark Oak Bookshelf item.ebwizardry\:crystal_magic.name=Magic Crystal item.ebwizardry\:crystal_fire.name=Fiery Crystal @@ -510,6 +517,8 @@ container.ebwizardry\:arcane_workbench.apply=Apply container.ebwizardry\:arcane_workbench.mana=Mana\: container.ebwizardry\:arcane_workbench.upgrades=Applied Upgrades\: +container.ebwizardry\:bookshelf=Bookshelf + tier.novice=Novice tier.apprentice=Apprentice tier.advanced=Advanced diff --git a/src/main/resources/assets/ebwizardry/lang/en_us.lang b/src/main/resources/assets/ebwizardry/lang/en_us.lang index 22826952..9a06a999 100644 --- a/src/main/resources/assets/ebwizardry/lang/en_us.lang +++ b/src/main/resources/assets/ebwizardry/lang/en_us.lang @@ -1,4 +1,4 @@ -#PARSE_ESCAPES +# PARSE_ESCAPES tile.ebwizardry\:arcane_workbench.name=Arcane Workbench tile.ebwizardry\:crystal_ore.name=Crystal Ore tile.ebwizardry\:petrified_stone.name=Petrified Stone @@ -30,8 +30,15 @@ tile.ebwizardry\:oak_gilded_wood.name=Gilded Oak Wood tile.ebwizardry\:spruce_gilded_wood.name=Gilded Spruce Wood tile.ebwizardry\:birch_gilded_wood.name=Gilded Birch Wood tile.ebwizardry\:jungle_gilded_wood.name=Gilded Jungle Wood -tile.ebwizardry\:dark_oak_gilded_wood.name=Gilded Dark Oak Wood tile.ebwizardry\:acacia_gilded_wood.name=Gilded Acacia Wood +tile.ebwizardry\:dark_oak_gilded_wood.name=Gilded Dark Oak Wood + +tile.ebwizardry\:oak_bookshelf.name=Oak Bookshelf +tile.ebwizardry\:spruce_bookshelf.name=Spruce Bookshelf +tile.ebwizardry\:birch_bookshelf.name=Birch Bookshelf +tile.ebwizardry\:jungle_bookshelf.name=Jungle Bookshelf +tile.ebwizardry\:acacia_bookshelf.name=Acacia Bookshelf +tile.ebwizardry\:dark_oak_bookshelf.name=Dark Oak Bookshelf item.ebwizardry\:crystal_magic.name=Magic Crystal item.ebwizardry\:crystal_fire.name=Fiery Crystal @@ -510,6 +517,8 @@ container.ebwizardry\:arcane_workbench.apply=Apply container.ebwizardry\:arcane_workbench.mana=Mana\: container.ebwizardry\:arcane_workbench.upgrades=Applied Upgrades\: +container.ebwizardry\:bookshelf=Bookshelf + tier.novice=Novice tier.apprentice=Apprentice tier.advanced=Advanced diff --git a/src/main/resources/assets/ebwizardry/models/block/acacia_bookshelf.json b/src/main/resources/assets/ebwizardry/models/block/acacia_bookshelf.json new file mode 100644 index 00000000..1908bdc0 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/acacia_bookshelf.json @@ -0,0 +1,9 @@ +{ + "parent": "ebwizardry:block/bookshelf", + "textures": { + "particle": "ebwizardry:blocks/acacia_bookshelf_side", + "side": "ebwizardry:blocks/acacia_bookshelf_side", + "inside": "ebwizardry:blocks/acacia_bookshelf_inside", + "top": "ebwizardry:blocks/acacia_bookshelf_top" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/block/birch_bookshelf.json b/src/main/resources/assets/ebwizardry/models/block/birch_bookshelf.json new file mode 100644 index 00000000..988c9506 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/birch_bookshelf.json @@ -0,0 +1,9 @@ +{ + "parent": "ebwizardry:block/bookshelf", + "textures": { + "particle": "ebwizardry:blocks/birch_bookshelf_side", + "side": "ebwizardry:blocks/birch_bookshelf_side", + "inside": "ebwizardry:blocks/birch_bookshelf_inside", + "top": "ebwizardry:blocks/birch_bookshelf_top" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/block/books0.json b/src/main/resources/assets/ebwizardry/models/block/books0.json new file mode 100644 index 00000000..e8a196f5 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/books0.json @@ -0,0 +1,33 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "books": "ebwizardry:blocks/books" + }, + "elements": [ + { + "name": "book0", + "from": [13, 9, 2], + "to": [15, 14, 6], + "faces": { + "north": {"uv": [0, 0, 2, 5], "texture": "#books"}, + "east": {"uv": [6, 0, 2, 5], "texture": "#books"}, + "south": {"uv": [6, 0, 8, 5], "texture": "#books"}, + "west": {"uv": [2, 0, 6, 5], "texture": "#books"}, + "up": {"uv": [8, 0, 10, 4], "texture": "#books"} + } + }, + { + "name": "book0", + "from": [1, 9, 10], + "to": [3, 14, 14], + "faces": { + "north": {"uv": [6, 0, 8, 5], "texture": "#books"}, + "east": {"uv": [2, 0, 6, 5], "texture": "#books"}, + "south": {"uv": [0, 0, 2, 5], "texture": "#books"}, + "west": {"uv": [6, 0, 2, 5], "texture": "#books"}, + "up": {"uv": [8, 0, 10, 4], "rotation": 180, "texture": "#books"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/block/books1.json b/src/main/resources/assets/ebwizardry/models/block/books1.json new file mode 100644 index 00000000..bd5dedf6 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/books1.json @@ -0,0 +1,33 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "books": "ebwizardry:blocks/books" + }, + "elements": [ + { + "name": "book1", + "from": [11, 9, 2], + "to": [13, 14, 6], + "faces": { + "north": {"uv": [0, 5, 2, 10], "texture": "#books"}, + "east": {"uv": [6, 5, 2, 10], "texture": "#books"}, + "south": {"uv": [6, 5, 8, 10], "texture": "#books"}, + "west": {"uv": [2, 5, 6, 10], "texture": "#books"}, + "up": {"uv": [8, 5, 10, 9], "texture": "#books"} + } + }, + { + "name": "book1", + "from": [3, 9, 10], + "to": [5, 14, 14], + "faces": { + "north": {"uv": [6, 5, 8, 10], "texture": "#books"}, + "east": {"uv": [2, 5, 6, 10], "texture": "#books"}, + "south": {"uv": [0, 5, 2, 10], "texture": "#books"}, + "west": {"uv": [6, 5, 2, 10], "texture": "#books"}, + "up": {"uv": [8, 5, 10, 9], "rotation": 180, "texture": "#books"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/block/books10.json b/src/main/resources/assets/ebwizardry/models/block/books10.json new file mode 100644 index 00000000..dc7871f7 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/books10.json @@ -0,0 +1,33 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "books": "ebwizardry:blocks/books" + }, + "elements": [ + { + "name": "book10", + "from": [4, 1, 2], + "to": [6, 6, 6], + "faces": { + "north": {"uv": [0, 10, 2, 15], "texture": "#books"}, + "east": {"uv": [6, 10, 2, 15], "texture": "#books"}, + "south": {"uv": [6, 10, 8, 15], "texture": "#books"}, + "west": {"uv": [2, 10, 6, 15], "texture": "#books"}, + "up": {"uv": [8, 10, 10, 14], "texture": "#books"} + } + }, + { + "name": "book10", + "from": [10, 1, 10], + "to": [12, 6, 14], + "faces": { + "north": {"uv": [6, 10, 8, 15], "texture": "#books"}, + "east": {"uv": [2, 10, 6, 15], "texture": "#books"}, + "south": {"uv": [0, 10, 2, 15], "texture": "#books"}, + "west": {"uv": [6, 10, 2, 15], "texture": "#books"}, + "up": {"uv": [8, 10, 10, 14], "rotation": 180, "texture": "#books"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/block/books11.json b/src/main/resources/assets/ebwizardry/models/block/books11.json new file mode 100644 index 00000000..1597ac01 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/books11.json @@ -0,0 +1,33 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "books": "ebwizardry:blocks/books" + }, + "elements": [ + { + "name": "book11", + "from": [1, 1, 2], + "to": [3, 6, 6], + "faces": { + "north": {"uv": [0, 0, 2, 5], "texture": "#books"}, + "east": {"uv": [6, 0, 2, 5], "texture": "#books"}, + "south": {"uv": [6, 0, 8, 5], "texture": "#books"}, + "west": {"uv": [2, 0, 6, 5], "texture": "#books"}, + "up": {"uv": [8, 0, 10, 4], "texture": "#books"} + } + }, + { + "name": "book11", + "from": [13, 1, 10], + "to": [15, 6, 14], + "faces": { + "north": {"uv": [6, 0, 8, 5], "texture": "#books"}, + "east": {"uv": [2, 0, 6, 5], "texture": "#books"}, + "south": {"uv": [0, 0, 2, 5], "texture": "#books"}, + "west": {"uv": [6, 0, 2, 5], "texture": "#books"}, + "up": {"uv": [8, 0, 10, 4], "rotation": 180, "texture": "#books"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/block/books2.json b/src/main/resources/assets/ebwizardry/models/block/books2.json new file mode 100644 index 00000000..39171d25 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/books2.json @@ -0,0 +1,33 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "books": "ebwizardry:blocks/books" + }, + "elements": [ + { + "name": "book2", + "from": [8, 9, 2], + "to": [10, 14, 6], + "faces": { + "north": {"uv": [0, 10, 2, 15], "texture": "#books"}, + "east": {"uv": [6, 10, 2, 15], "texture": "#books"}, + "south": {"uv": [6, 10, 8, 15], "texture": "#books"}, + "west": {"uv": [2, 10, 6, 15], "texture": "#books"}, + "up": {"uv": [8, 10, 10, 14], "texture": "#books"} + } + }, + { + "name": "book2", + "from": [6, 9, 10], + "to": [8, 14, 14], + "faces": { + "north": {"uv": [6, 10, 8, 15], "texture": "#books"}, + "east": {"uv": [2, 10, 6, 15], "texture": "#books"}, + "south": {"uv": [0, 10, 2, 15], "texture": "#books"}, + "west": {"uv": [6, 10, 2, 15], "texture": "#books"}, + "up": {"uv": [8, 10, 10, 14], "rotation": 180, "texture": "#books"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/block/books3.json b/src/main/resources/assets/ebwizardry/models/block/books3.json new file mode 100644 index 00000000..e9b1be97 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/books3.json @@ -0,0 +1,33 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "books": "ebwizardry:blocks/books" + }, + "elements": [ + { + "name": "book3", + "from": [5, 9, 2], + "to": [7, 14, 6], + "faces": { + "north": {"uv": [0, 0, 2, 5], "texture": "#books"}, + "east": {"uv": [6, 0, 2, 5], "texture": "#books"}, + "south": {"uv": [6, 0, 8, 5], "texture": "#books"}, + "west": {"uv": [2, 0, 6, 5], "texture": "#books"}, + "up": {"uv": [8, 0, 10, 4], "texture": "#books"} + } + }, + { + "name": "book3", + "from": [9, 9, 10], + "to": [11, 14, 14], + "faces": { + "north": {"uv": [6, 0, 8, 5], "texture": "#books"}, + "east": {"uv": [2, 0, 6, 5], "texture": "#books"}, + "south": {"uv": [0, 0, 2, 5], "texture": "#books"}, + "west": {"uv": [6, 0, 2, 5], "texture": "#books"}, + "up": {"uv": [8, 0, 10, 4], "rotation": 180, "texture": "#books"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/block/books4.json b/src/main/resources/assets/ebwizardry/models/block/books4.json new file mode 100644 index 00000000..41187df9 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/books4.json @@ -0,0 +1,33 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "books": "ebwizardry:blocks/books" + }, + "elements": [ + { + "name": "book4", + "from": [3, 9, 2], + "to": [5, 14, 6], + "faces": { + "north": {"uv": [0, 5, 2, 10], "texture": "#books"}, + "east": {"uv": [6, 5, 2, 10], "texture": "#books"}, + "south": {"uv": [6, 5, 8, 10], "texture": "#books"}, + "west": {"uv": [2, 5, 6, 10], "texture": "#books"}, + "up": {"uv": [8, 5, 10, 9], "texture": "#books"} + } + }, + { + "name": "book4", + "from": [11, 9, 10], + "to": [13, 14, 14], + "faces": { + "north": {"uv": [6, 5, 8, 10], "texture": "#books"}, + "east": {"uv": [2, 5, 6, 10], "texture": "#books"}, + "south": {"uv": [0, 5, 2, 10], "texture": "#books"}, + "west": {"uv": [6, 5, 2, 10], "texture": "#books"}, + "up": {"uv": [8, 5, 10, 9], "rotation": 180, "texture": "#books"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/block/books5.json b/src/main/resources/assets/ebwizardry/models/block/books5.json new file mode 100644 index 00000000..62ea95d2 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/books5.json @@ -0,0 +1,33 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "books": "ebwizardry:blocks/books" + }, + "elements": [ + { + "name": "book5", + "from": [1, 9, 2], + "to": [3, 14, 6], + "faces": { + "north": {"uv": [0, 5, 2, 10], "texture": "#books"}, + "east": {"uv": [6, 5, 2, 10], "texture": "#books"}, + "south": {"uv": [6, 5, 8, 10], "texture": "#books"}, + "west": {"uv": [2, 5, 6, 10], "texture": "#books"}, + "up": {"uv": [8, 5, 10, 9], "texture": "#books"} + } + }, + { + "name": "book5", + "from": [13, 9, 10], + "to": [15, 14, 14], + "faces": { + "north": {"uv": [6, 5, 8, 10], "texture": "#books"}, + "east": {"uv": [2, 5, 6, 10], "texture": "#books"}, + "south": {"uv": [0, 5, 2, 10], "texture": "#books"}, + "west": {"uv": [6, 5, 2, 10], "texture": "#books"}, + "up": {"uv": [8, 5, 10, 9], "rotation": 180, "texture": "#books"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/block/books6.json b/src/main/resources/assets/ebwizardry/models/block/books6.json new file mode 100644 index 00000000..255f5174 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/books6.json @@ -0,0 +1,33 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "books": "ebwizardry:blocks/books" + }, + "elements": [ + { + "name": "book6", + "from": [13, 1, 2], + "to": [15, 6, 6], + "faces": { + "north": {"uv": [0, 10, 2, 15], "texture": "#books"}, + "east": {"uv": [6, 10, 2, 15], "texture": "#books"}, + "south": {"uv": [6, 10, 8, 15], "texture": "#books"}, + "west": {"uv": [2, 10, 6, 15], "texture": "#books"}, + "up": {"uv": [8, 10, 10, 14], "texture": "#books"} + } + }, + { + "name": "book6", + "from": [1, 1, 10], + "to": [3, 6, 14], + "faces": { + "north": {"uv": [6, 10, 8, 15], "texture": "#books"}, + "east": {"uv": [2, 10, 6, 15], "texture": "#books"}, + "south": {"uv": [0, 10, 2, 15], "texture": "#books"}, + "west": {"uv": [6, 10, 2, 15], "texture": "#books"}, + "up": {"uv": [8, 10, 10, 14], "rotation": 180, "texture": "#books"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/block/books7.json b/src/main/resources/assets/ebwizardry/models/block/books7.json new file mode 100644 index 00000000..6a3fb74f --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/books7.json @@ -0,0 +1,33 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "books": "ebwizardry:blocks/books" + }, + "elements": [ + { + "name": "book7", + "from": [11, 1, 2], + "to": [13, 6, 6], + "faces": { + "north": {"uv": [0, 5, 2, 10], "texture": "#books"}, + "east": {"uv": [6, 5, 2, 10], "texture": "#books"}, + "south": {"uv": [6, 5, 8, 10], "texture": "#books"}, + "west": {"uv": [2, 5, 6, 10], "texture": "#books"}, + "up": {"uv": [8, 5, 10, 9], "texture": "#books"} + } + }, + { + "name": "book7", + "from": [3, 1, 10], + "to": [5, 6, 14], + "faces": { + "north": {"uv": [6, 5, 8, 10], "texture": "#books"}, + "east": {"uv": [2, 5, 6, 10], "texture": "#books"}, + "south": {"uv": [0, 5, 2, 10], "texture": "#books"}, + "west": {"uv": [6, 5, 2, 10], "texture": "#books"}, + "up": {"uv": [8, 5, 10, 9], "rotation": 180, "texture": "#books"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/block/books8.json b/src/main/resources/assets/ebwizardry/models/block/books8.json new file mode 100644 index 00000000..0e3c5797 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/books8.json @@ -0,0 +1,33 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "books": "ebwizardry:blocks/books" + }, + "elements": [ + { + "name": "book8", + "from": [9, 1, 2], + "to": [11, 6, 6], + "faces": { + "north": {"uv": [0, 5, 2, 10], "texture": "#books"}, + "east": {"uv": [6, 5, 2, 10], "texture": "#books"}, + "south": {"uv": [6, 5, 8, 10], "texture": "#books"}, + "west": {"uv": [2, 5, 6, 10], "texture": "#books"}, + "up": {"uv": [8, 5, 10, 9], "texture": "#books"} + } + }, + { + "name": "book8", + "from": [5, 1, 10], + "to": [7, 6, 14], + "faces": { + "north": {"uv": [6, 5, 8, 10], "texture": "#books"}, + "east": {"uv": [2, 5, 6, 10], "texture": "#books"}, + "south": {"uv": [0, 5, 2, 10], "texture": "#books"}, + "west": {"uv": [6, 5, 2, 10], "texture": "#books"}, + "up": {"uv": [8, 5, 10, 9], "rotation": 180, "texture": "#books"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/block/books9.json b/src/main/resources/assets/ebwizardry/models/block/books9.json new file mode 100644 index 00000000..2b098b7a --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/books9.json @@ -0,0 +1,33 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "textures": { + "books": "ebwizardry:blocks/books" + }, + "elements": [ + { + "name": "book9", + "from": [6, 1, 2], + "to": [8, 6, 6], + "faces": { + "north": {"uv": [0, 0, 2, 5], "texture": "#books"}, + "east": {"uv": [6, 0, 2, 5], "texture": "#books"}, + "south": {"uv": [6, 0, 8, 5], "texture": "#books"}, + "west": {"uv": [2, 0, 6, 5], "texture": "#books"}, + "up": {"uv": [8, 0, 10, 4], "texture": "#books"} + } + }, + { + "name": "book9", + "from": [8, 1, 10], + "to": [10, 6, 14], + "faces": { + "north": {"uv": [6, 0, 8, 5], "texture": "#books"}, + "east": {"uv": [2, 0, 6, 5], "texture": "#books"}, + "south": {"uv": [0, 0, 2, 5], "texture": "#books"}, + "west": {"uv": [6, 0, 2, 5], "texture": "#books"}, + "up": {"uv": [8, 0, 10, 4], "rotation": 180, "texture": "#books"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/ebwizardry/models/block/bookshelf.json b/src/main/resources/assets/ebwizardry/models/block/bookshelf.json index 9e1fb88f..cccd9182 100644 --- a/src/main/resources/assets/ebwizardry/models/block/bookshelf.json +++ b/src/main/resources/assets/ebwizardry/models/block/bookshelf.json @@ -1,13 +1,6 @@ { "credit": "Made with Blockbench", "parent": "block/block", - "textures": { - "books": "ebwizardry:blocks/books", - "particle": "ebwizardry:blocks/spruce_bookshelf_side", - "side": "ebwizardry:blocks/spruce_bookshelf_side", - "inside": "ebwizardry:blocks/spruce_bookshelf_inside", - "top": "ebwizardry:blocks/spruce_bookshelf_top" - }, "elements": [ { "name": "backboard", @@ -27,7 +20,7 @@ "east": {"uv": [0, 15, 16, 16], "texture": "#side", "cullface": "east"}, "south": {"uv": [0, 15, 16, 16], "texture": "#side", "cullface": "south"}, "west": {"uv": [0, 15, 16, 16], "texture": "#side", "cullface": "west"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#inside", "cullface": "up"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#inside"}, "down": {"uv": [0, 0, 16, 16], "texture": "#top", "cullface": "down"} } }, @@ -50,7 +43,7 @@ "north": {"uv": [0, 1, 1, 15], "texture": "#side", "cullface": "north"}, "east": {"uv": [0, 1, 16, 15], "texture": "#side", "cullface": "east"}, "south": {"uv": [15, 1, 16, 15], "texture": "#side", "cullface": "south"}, - "west": {"uv": [0, 1, 16, 15], "texture": "#inside", "cullface": "west"} + "west": {"uv": [0, 1, 16, 15], "texture": "#inside"} } }, { @@ -256,294 +249,6 @@ "west": {"uv": [14, 14, 15, 15], "texture": "#side"}, "up": {"uv": [14, 14, 15, 15], "rotation": 180, "texture": "#side"} } - }, - { - "name": "book1", - "from": [13, 9, 2], - "to": [15, 14, 6], - "faces": { - "north": {"uv": [0, 0, 2, 5], "texture": "#books"}, - "east": {"uv": [6, 0, 2, 5], "texture": "#books"}, - "south": {"uv": [6, 0, 8, 5], "texture": "#books"}, - "west": {"uv": [2, 0, 6, 5], "texture": "#books"}, - "up": {"uv": [8, 0, 10, 4], "texture": "#books"} - } - }, - { - "name": "book1", - "from": [1, 9, 10], - "to": [3, 14, 14], - "faces": { - "north": {"uv": [6, 0, 8, 5], "texture": "#books"}, - "east": {"uv": [2, 0, 6, 5], "texture": "#books"}, - "south": {"uv": [0, 0, 2, 5], "texture": "#books"}, - "west": {"uv": [6, 0, 2, 5], "texture": "#books"}, - "up": {"uv": [8, 0, 10, 4], "rotation": 180, "texture": "#books"} - } - }, - { - "name": "book2", - "from": [11, 9, 2], - "to": [13, 14, 6], - "faces": { - "north": {"uv": [0, 5, 2, 10], "texture": "#books"}, - "east": {"uv": [6, 5, 2, 10], "texture": "#books"}, - "south": {"uv": [6, 5, 8, 10], "texture": "#books"}, - "west": {"uv": [2, 5, 6, 10], "texture": "#books"}, - "up": {"uv": [8, 5, 10, 9], "texture": "#books"} - } - }, - { - "name": "book2", - "from": [3, 9, 10], - "to": [5, 14, 14], - "faces": { - "north": {"uv": [6, 5, 8, 10], "texture": "#books"}, - "east": {"uv": [2, 5, 6, 10], "texture": "#books"}, - "south": {"uv": [0, 5, 2, 10], "texture": "#books"}, - "west": {"uv": [6, 5, 2, 10], "texture": "#books"}, - "up": {"uv": [8, 5, 10, 9], "rotation": 180, "texture": "#books"} - } - }, - { - "name": "book3", - "from": [8, 9, 2], - "to": [10, 14, 6], - "faces": { - "north": {"uv": [0, 10, 2, 15], "texture": "#books"}, - "east": {"uv": [6, 10, 2, 15], "texture": "#books"}, - "south": {"uv": [6, 10, 8, 15], "texture": "#books"}, - "west": {"uv": [2, 10, 6, 15], "texture": "#books"}, - "up": {"uv": [8, 10, 10, 14], "texture": "#books"} - } - }, - { - "name": "book3", - "from": [6, 9, 10], - "to": [8, 14, 14], - "faces": { - "north": {"uv": [6, 10, 8, 15], "texture": "#books"}, - "east": {"uv": [2, 10, 6, 15], "texture": "#books"}, - "south": {"uv": [0, 10, 2, 15], "texture": "#books"}, - "west": {"uv": [6, 10, 2, 15], "texture": "#books"}, - "up": {"uv": [8, 10, 10, 14], "rotation": 180, "texture": "#books"} - } - }, - { - "name": "book4", - "from": [5, 9, 2], - "to": [7, 14, 6], - "faces": { - "north": {"uv": [0, 0, 2, 5], "texture": "#books"}, - "east": {"uv": [6, 0, 2, 5], "texture": "#books"}, - "south": {"uv": [6, 0, 8, 5], "texture": "#books"}, - "west": {"uv": [2, 0, 6, 5], "texture": "#books"}, - "up": {"uv": [8, 0, 10, 4], "texture": "#books"} - } - }, - { - "name": "book4", - "from": [9, 9, 10], - "to": [11, 14, 14], - "faces": { - "north": {"uv": [6, 0, 8, 5], "texture": "#books"}, - "east": {"uv": [2, 0, 6, 5], "texture": "#books"}, - "south": {"uv": [0, 0, 2, 5], "texture": "#books"}, - "west": {"uv": [6, 0, 2, 5], "texture": "#books"}, - "up": {"uv": [8, 0, 10, 4], "rotation": 180, "texture": "#books"} - } - }, - { - "name": "book5", - "from": [3, 9, 2], - "to": [5, 14, 6], - "faces": { - "north": {"uv": [0, 5, 2, 10], "texture": "#books"}, - "east": {"uv": [6, 5, 2, 10], "texture": "#books"}, - "south": {"uv": [6, 5, 8, 10], "texture": "#books"}, - "west": {"uv": [2, 5, 6, 10], "texture": "#books"}, - "up": {"uv": [8, 5, 10, 9], "texture": "#books"} - } - }, - { - "name": "book5", - "from": [11, 9, 10], - "to": [13, 14, 14], - "faces": { - "north": {"uv": [6, 5, 8, 10], "texture": "#books"}, - "east": {"uv": [2, 5, 6, 10], "texture": "#books"}, - "south": {"uv": [0, 5, 2, 10], "texture": "#books"}, - "west": {"uv": [6, 5, 2, 10], "texture": "#books"}, - "up": {"uv": [8, 5, 10, 9], "rotation": 180, "texture": "#books"} - } - }, - { - "name": "book6", - "from": [1, 9, 2], - "to": [3, 14, 6], - "faces": { - "north": {"uv": [0, 5, 2, 10], "texture": "#books"}, - "east": {"uv": [6, 5, 2, 10], "texture": "#books"}, - "south": {"uv": [6, 5, 8, 10], "texture": "#books"}, - "west": {"uv": [2, 5, 6, 10], "texture": "#books"}, - "up": {"uv": [8, 5, 10, 9], "texture": "#books"} - } - }, - { - "name": "book6", - "from": [13, 9, 10], - "to": [15, 14, 14], - "faces": { - "north": {"uv": [6, 5, 8, 10], "texture": "#books"}, - "east": {"uv": [2, 5, 6, 10], "texture": "#books"}, - "south": {"uv": [0, 5, 2, 10], "texture": "#books"}, - "west": {"uv": [6, 5, 2, 10], "texture": "#books"}, - "up": {"uv": [8, 5, 10, 9], "rotation": 180, "texture": "#books"} - } - }, - { - "name": "book7", - "from": [13, 1, 2], - "to": [15, 6, 6], - "faces": { - "north": {"uv": [0, 10, 2, 15], "texture": "#books"}, - "east": {"uv": [6, 10, 2, 15], "texture": "#books"}, - "south": {"uv": [6, 10, 8, 15], "texture": "#books"}, - "west": {"uv": [2, 10, 6, 15], "texture": "#books"}, - "up": {"uv": [8, 10, 10, 14], "texture": "#books"} - } - }, - { - "name": "book7", - "from": [1, 1, 10], - "to": [3, 6, 14], - "faces": { - "north": {"uv": [6, 10, 8, 15], "texture": "#books"}, - "east": {"uv": [2, 10, 6, 15], "texture": "#books"}, - "south": {"uv": [0, 10, 2, 15], "texture": "#books"}, - "west": {"uv": [6, 10, 2, 15], "texture": "#books"}, - "up": {"uv": [8, 10, 10, 14], "rotation": 180, "texture": "#books"} - } - }, - { - "name": "book8", - "from": [11, 1, 2], - "to": [13, 6, 6], - "faces": { - "north": {"uv": [0, 5, 2, 10], "texture": "#books"}, - "east": {"uv": [6, 5, 2, 10], "texture": "#books"}, - "south": {"uv": [6, 5, 8, 10], "texture": "#books"}, - "west": {"uv": [2, 5, 6, 10], "texture": "#books"}, - "up": {"uv": [8, 5, 10, 9], "texture": "#books"} - } - }, - { - "name": "book8", - "from": [3, 1, 10], - "to": [5, 6, 14], - "faces": { - "north": {"uv": [6, 5, 8, 10], "texture": "#books"}, - "east": {"uv": [2, 5, 6, 10], "texture": "#books"}, - "south": {"uv": [0, 5, 2, 10], "texture": "#books"}, - "west": {"uv": [6, 5, 2, 10], "texture": "#books"}, - "up": {"uv": [8, 5, 10, 9], "rotation": 180, "texture": "#books"} - } - }, - { - "name": "book9", - "from": [9, 1, 2], - "to": [11, 6, 6], - "faces": { - "north": {"uv": [0, 5, 2, 10], "texture": "#books"}, - "east": {"uv": [6, 5, 2, 10], "texture": "#books"}, - "south": {"uv": [6, 5, 8, 10], "texture": "#books"}, - "west": {"uv": [2, 5, 6, 10], "texture": "#books"}, - "up": {"uv": [8, 5, 10, 9], "texture": "#books"} - } - }, - { - "name": "book9", - "from": [5, 1, 10], - "to": [7, 6, 14], - "faces": { - "north": {"uv": [6, 5, 8, 10], "texture": "#books"}, - "east": {"uv": [2, 5, 6, 10], "texture": "#books"}, - "south": {"uv": [0, 5, 2, 10], "texture": "#books"}, - "west": {"uv": [6, 5, 2, 10], "texture": "#books"}, - "up": {"uv": [8, 5, 10, 9], "rotation": 180, "texture": "#books"} - } - }, - { - "name": "book10", - "from": [6, 1, 2], - "to": [8, 6, 6], - "faces": { - "north": {"uv": [0, 0, 2, 5], "texture": "#books"}, - "east": {"uv": [6, 0, 2, 5], "texture": "#books"}, - "south": {"uv": [6, 0, 8, 5], "texture": "#books"}, - "west": {"uv": [2, 0, 6, 5], "texture": "#books"}, - "up": {"uv": [8, 0, 10, 4], "texture": "#books"} - } - }, - { - "name": "book10", - "from": [8, 1, 10], - "to": [10, 6, 14], - "faces": { - "north": {"uv": [6, 0, 8, 5], "texture": "#books"}, - "east": {"uv": [2, 0, 6, 5], "texture": "#books"}, - "south": {"uv": [0, 0, 2, 5], "texture": "#books"}, - "west": {"uv": [6, 0, 2, 5], "texture": "#books"}, - "up": {"uv": [8, 0, 10, 4], "rotation": 180, "texture": "#books"} - } - }, - { - "name": "book11", - "from": [4, 1, 2], - "to": [6, 6, 6], - "faces": { - "north": {"uv": [0, 10, 2, 15], "texture": "#books"}, - "east": {"uv": [6, 10, 2, 15], "texture": "#books"}, - "south": {"uv": [6, 10, 8, 15], "texture": "#books"}, - "west": {"uv": [2, 10, 6, 15], "texture": "#books"}, - "up": {"uv": [8, 10, 10, 14], "texture": "#books"} - } - }, - { - "name": "book11", - "from": [10, 1, 10], - "to": [12, 6, 14], - "faces": { - "north": {"uv": [6, 10, 8, 15], "texture": "#books"}, - "east": {"uv": [2, 10, 6, 15], "texture": "#books"}, - "south": {"uv": [0, 10, 2, 15], "texture": "#books"}, - "west": {"uv": [6, 10, 2, 15], "texture": "#books"}, - "up": {"uv": [8, 10, 10, 14], "rotation": 180, "texture": "#books"} - } - }, - { - "name": "book12", - "from": [1, 1, 2], - "to": [3, 6, 6], - "faces": { - "north": {"uv": [0, 0, 2, 5], "texture": "#books"}, - "east": {"uv": [6, 0, 2, 5], "texture": "#books"}, - "south": {"uv": [6, 0, 8, 5], "texture": "#books"}, - "west": {"uv": [2, 0, 6, 5], "texture": "#books"}, - "up": {"uv": [8, 0, 10, 4], "texture": "#books"} - } - }, - { - "name": "book12", - "from": [13, 1, 10], - "to": [15, 6, 14], - "faces": { - "north": {"uv": [6, 0, 8, 5], "texture": "#books"}, - "east": {"uv": [2, 0, 6, 5], "texture": "#books"}, - "south": {"uv": [0, 0, 2, 5], "texture": "#books"}, - "west": {"uv": [6, 0, 2, 5], "texture": "#books"}, - "up": {"uv": [8, 0, 10, 4], "rotation": 180, "texture": "#books"} - } } ], "display": { @@ -570,7 +275,7 @@ "scale": [0.25, 0.25, 0.25] }, "gui": { - "rotation": [30, 135, 0], + "rotation": [30, 225, 0], "scale": [0.625, 0.625, 0.625] }, "fixed": { diff --git a/src/main/resources/assets/ebwizardry/models/block/dark_oak_bookshelf.json b/src/main/resources/assets/ebwizardry/models/block/dark_oak_bookshelf.json new file mode 100644 index 00000000..eccb39de --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/dark_oak_bookshelf.json @@ -0,0 +1,9 @@ +{ + "parent": "ebwizardry:block/bookshelf", + "textures": { + "particle": "ebwizardry:blocks/dark_oak_bookshelf_side", + "side": "ebwizardry:blocks/dark_oak_bookshelf_side", + "inside": "ebwizardry:blocks/dark_oak_bookshelf_inside", + "top": "ebwizardry:blocks/dark_oak_bookshelf_top" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/block/jungle_bookshelf.json b/src/main/resources/assets/ebwizardry/models/block/jungle_bookshelf.json new file mode 100644 index 00000000..53f5efa7 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/jungle_bookshelf.json @@ -0,0 +1,9 @@ +{ + "parent": "ebwizardry:block/bookshelf", + "textures": { + "particle": "ebwizardry:blocks/jungle_bookshelf_side", + "side": "ebwizardry:blocks/jungle_bookshelf_side", + "inside": "ebwizardry:blocks/jungle_bookshelf_inside", + "top": "ebwizardry:blocks/jungle_bookshelf_top" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/block/oak_bookshelf.json b/src/main/resources/assets/ebwizardry/models/block/oak_bookshelf.json new file mode 100644 index 00000000..36cc798d --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/oak_bookshelf.json @@ -0,0 +1,9 @@ +{ + "parent": "ebwizardry:block/bookshelf", + "textures": { + "particle": "ebwizardry:blocks/oak_bookshelf_side", + "side": "ebwizardry:blocks/oak_bookshelf_side", + "inside": "ebwizardry:blocks/oak_bookshelf_inside", + "top": "ebwizardry:blocks/oak_bookshelf_top" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/block/spruce_bookshelf.json b/src/main/resources/assets/ebwizardry/models/block/spruce_bookshelf.json new file mode 100644 index 00000000..d75b4d4e --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/block/spruce_bookshelf.json @@ -0,0 +1,9 @@ +{ + "parent": "ebwizardry:block/bookshelf", + "textures": { + "particle": "ebwizardry:blocks/spruce_bookshelf_side", + "side": "ebwizardry:blocks/spruce_bookshelf_side", + "inside": "ebwizardry:blocks/spruce_bookshelf_inside", + "top": "ebwizardry:blocks/spruce_bookshelf_top" + } +} diff --git a/src/main/resources/assets/ebwizardry/models/item/acacia_bookshelf.json b/src/main/resources/assets/ebwizardry/models/item/acacia_bookshelf.json new file mode 100644 index 00000000..0adc3e0c --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/acacia_bookshelf.json @@ -0,0 +1,3 @@ +{ + "parent": "ebwizardry:block/acacia_bookshelf" +} diff --git a/src/main/resources/assets/ebwizardry/models/item/birch_bookshelf.json b/src/main/resources/assets/ebwizardry/models/item/birch_bookshelf.json new file mode 100644 index 00000000..a41498fd --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/birch_bookshelf.json @@ -0,0 +1,3 @@ +{ + "parent": "ebwizardry:block/birch_bookshelf" +} diff --git a/src/main/resources/assets/ebwizardry/models/item/dark_oak_bookshelf.json b/src/main/resources/assets/ebwizardry/models/item/dark_oak_bookshelf.json new file mode 100644 index 00000000..9818d2d5 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/dark_oak_bookshelf.json @@ -0,0 +1,3 @@ +{ + "parent": "ebwizardry:block/dark_oak_bookshelf" +} diff --git a/src/main/resources/assets/ebwizardry/models/item/jungle_bookshelf.json b/src/main/resources/assets/ebwizardry/models/item/jungle_bookshelf.json new file mode 100644 index 00000000..e65f05c7 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/jungle_bookshelf.json @@ -0,0 +1,3 @@ +{ + "parent": "ebwizardry:block/jungle_bookshelf" +} diff --git a/src/main/resources/assets/ebwizardry/models/item/oak_bookshelf.json b/src/main/resources/assets/ebwizardry/models/item/oak_bookshelf.json new file mode 100644 index 00000000..cbeffa68 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/oak_bookshelf.json @@ -0,0 +1,3 @@ +{ + "parent": "ebwizardry:block/oak_bookshelf" +} diff --git a/src/main/resources/assets/ebwizardry/models/item/spruce_bookshelf.json b/src/main/resources/assets/ebwizardry/models/item/spruce_bookshelf.json new file mode 100644 index 00000000..d29cc438 --- /dev/null +++ b/src/main/resources/assets/ebwizardry/models/item/spruce_bookshelf.json @@ -0,0 +1,3 @@ +{ + "parent": "ebwizardry:block/spruce_bookshelf" +} diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/acacia_bookshelf_inside.png b/src/main/resources/assets/ebwizardry/textures/blocks/acacia_bookshelf_inside.png new file mode 100644 index 0000000000000000000000000000000000000000..fa0d343d46e1c3b0992d6dc677e541f8f7e4c19c GIT binary patch literal 5356 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 R^~^wH51y`mF6*2UngH^fdP@KR literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/acacia_bookshelf_top.png b/src/main/resources/assets/ebwizardry/textures/blocks/acacia_bookshelf_top.png new file mode 100644 index 0000000000000000000000000000000000000000..1021d20ec72cded86f9743413ffdd70b989c3d9d GIT binary patch literal 5625 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 bEn#3VJtV<9rMs{WG$7#V>gTe~DWM4fGeNzS literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/birch_bookshelf_side.png b/src/main/resources/assets/ebwizardry/textures/blocks/birch_bookshelf_side.png new file mode 100644 index 0000000000000000000000000000000000000000..393ec084337f6baa45ae8e229b4f1391035a3526 GIT binary patch literal 5657 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/dark_oak_bookshelf_side.png b/src/main/resources/assets/ebwizardry/textures/blocks/dark_oak_bookshelf_side.png new file mode 100644 index 0000000000000000000000000000000000000000..e7bc8f32056377a468877bcc21648471739c3005 GIT binary patch literal 1616 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-ZdHXulmsP~D-;yvr)B1( zDwI?fq$;FVWTr7NRNPt{mO1H*8qeSJnnf%s0;dZjRu?tP*!LfmE3dYBxw2+iPNL$3 z3zJz^{ry}XUjH!hlV9Y=gRaj_|?R3MeuhMs( znSYS{wC88)`pE~TpLW{#w(*bEgl|qV+nSsohoxj_UZ_r-`pv0rd)n@QpKnboGyL&d z?9{aP)it{q*GtJ~+gKMq(cL#~>vz3H@)6Pe`>!Tu=*t|pIa$4Mdwpq#QO={Z6B#vk zH(Xd_{?PRE>$Wp*qLqJ02~S(<&^`6ri{ppa+uPemuH(CG{zQMmJlm=V@e{%>FFf8* z>3m}DmuS0_;_t7hmv5j)!_ULS~SjDlaCrm@gxmw+Os!(axWHBv+i$%%&r($jd1SYUG2<~J^ zVA_yz<>u^+Rh$jG6=ZmJ)ZB6k&Ykm$i&bNth{&S$4HAi`{%5@sUU<*lN$_RCFRrqW zCrly?CnyKaQebmgk-z*@$%l*g<~OcpY%;nlv*F;9&k>9t(ig6OU?iNu?8q3)>9g-0 z>jR|-1%oyofeU>-6O`Z1oT}cW%*^0rFt_(9PlQK{c27$7grs>BSugZj&ReFzt#8Kl z@Qls!9(J>fDh;V?73%izb}UqJThn3jQAowB=vXgL@wwfBfs@VeRed~HEnoA+lT|op z!hnj{4?g)C zy<3yDWzB)^0{ckS$1YP2{;dC!s;D5`cIv+IqUi1-y#taF*?PRXa~&H|a)H8T!p?>Vr@VyA}bFGqPS1s1oBpO~JK7rO<}u!$b@79;kmDD+tC zkqeVnFTKG%d+{Xi0N?rR1$rK)tWoGG-w~&BwY)(t*mK&$Q1;EvYYyyrG+kAW{ng2^ z2j7eNyH|hxH2>(seb@A!pYVN@u%f)Pd7gKT__3Lf__iek9!_&ubiiZJkq6dx^Mk&| zGx4WwnUsEC{7%3m{?f(Q);d4*wLT-`^(bH1uU73xlF$0vGkipsZ=G3xiaWG@aZzji z>y4HZUVc3Di?ho*bUv5fuHrM3KF^%~E{`eiq;K!yq#Kc%ViOkY#4vwQ)_o=ZOy-Nw z%{_*#n;%bij+^vhT66!-im(&WL3SPg<}|<3LqUnN{*^>>4P38B|NPT`%- zy@CJv+$tLm`=z(JzUCe4-`?Kc`~Jd;`)ap@L&KA6tk;DuWNqe__~iDN`&sa(fCse+ zmJAFGY)RhkE({(FP7Fp`oC|I;FfecyctjR6Fz6|RFk{71`!WUw2KEw9Usv`g%xvPi z>ie5}JQ)}mBuiW)N}Tg^b5rw57@Uhz6H8K46v{J8G8EiBeFMT9`NSC*7%q9bIEGl9 zK00Y5*C7Lm7X2s7mxjE!!l!g2^vm8ak}|R`1tLf8x_@YW^&qJ|Dr@4kHjAxCZZt3+ z%=x+VciklGZS(t|yen~z hbjmp$jA$Rv}-+kK4 zq@h7ZVd1a)`+NT#^uJ+QB(=!@p7fuXB2Oc+i)Z5H%FXibTyM4%^DnWIWSVp|=Xvs% z?l?#B6Q>tVU#i}`PTX~+-m!0IPIyl|lKNo74xY$)Y-fUeDm6E4(%JoU&)HyoY_!n_2}2v_uA)Q7SuZaV|lsr5&swNOD0TJ25-2X z{>{06DN?>4R{qoH9-sKv>Pq31jZJs1EjBHy z>}l}!eRJ@ga-z!=7e~3b9-DX<7bG$E^vb@Uv$IgP_#u<{+z`$gu3Zs&EJ-X9o?Hyi z_*RzQQMr*)F3ni%Xmx|{$4hSh&6zW_WfCi%dz_GKGdecSUh0eN!fREIhO;YtQdFrzAr~034V$R@pJZi%|$5^SPV&#QF=B)BOkGn^`jT{D??!-iFF3WDaicCtE(9x(gHBDZLf(aDS! z2B)>^(ha_wBoi!`pP2tZsYqjW=<-!@&2GN4_I}-aXb=Cs@+&eq1&+=9ibp0mEz4Nk zEmg~7cub^tQp&|b(}i-uKAKN?7E8`DE=%Wlvgc%)`SzF3wr@D9o4b=kG&<(uBX5n3 zOD2`yeA{Pr@2}jq9m{RQ*Lf^`wJI#$x!3gSoe5cI&8~0xDHfH}8D$q3z2V+5{(#4= zvv`*5O0WoIHf?cc{a&_6)>uKUkFnwf#|G7jeKR{NOg-J#C8q`Dw`dgvSzB0_A8A;y zTIbe}BkvmLO!`{SZq6j|$$Y|MzPsiVc0c~cx7D^^e6B3VSEDzMreascr_9}C_EGV< zz~!nE)g`M8x&JwwO>o@NBRR!>_I#0(+xWZh72Y+!ezrX*sMo`DZvXD5Qj_FAb>!WA zevkLVbk8^WKka9}Jg1Q>bx_)1`@?p%&m0`T4o6Jibh2w^`LYWSmS?b?{Mz5_XrTVE zRPT6Sy63J<({!?B&CCsNFIeHMF2%j)^`kFJ4(+b-AFr(fCn z*tJP-jdR#t$tC)>K{E@rD-=(C;Fz!Md}dzf0pn9e-ZN)EF}$3+I>pxS-<;jCub5`W zs^9!AU8VYD<&(vG`{m{t@7+~%@}2uXInAg&s@3L+B>)ntSuwKXEdWWtZm3%ck=C-v`cr8QWgD z^;_Y-AD;T}_GCKbZ~Aqqqwk&5cC*j7>hpMC?Ny0&iF~?3PV=&gjPKkvuI?eaEDk57AVcI^6`d6}O1**|~3eKE!6_r?4z3)PFiq&#Q8TK0NE{Pi2V z_f&DjF)rBN@#mP0$lg-LoVuvIFekJ4x~?x0f2aCSRCk?k?<%!#fzV%m2fl~9ZLS-d zF)%Q&C3(BMFnBOHF&JraF1X3Sz`$AH5n0T@pr;JNj1^1m%NQ6K*h@TpUD=;7vx#fz z3W$H6z`(#DS>hT|;+&tGo0?a`;9QiNSdyBeP@Y+mq2TW68xY>eC(gjYaL&`kF~s8Z z)L?7ALk2vxxk^e?8W}ell{_u5WsnZyKOnh7Ts*3o0T&2`gHS~s7~3Un>lX)B;~@YBQBe>*1%F&vnc#wMrf`(Hv> z>7X@pG?S--aMqKsrYDZQI^vrwJFY(2C(^lkD&LZ;lUA?i^ZHgC{_~fz)4b?oGgtmA zQgDniz8amdK+L@~;MFdbpp&1DFVZ|2w}NlUq5b@)+dK|b8)TibZWiEtd!hVt!j&4E bbNXs;msH<#Pq1NNU|{fc^>bP0l+XkK2wu^- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/jungle_bookshelf_inside.png b/src/main/resources/assets/ebwizardry/textures/blocks/jungle_bookshelf_inside.png new file mode 100644 index 0000000000000000000000000000000000000000..871a563acd98eb94f09580f3483f841632785fd0 GIT binary patch literal 1306 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-B&tFpN`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsG*f9y#r`22b1ltzB_Vs)}t-4Q3R-cOT*Q64`d5~8~_^|_7@`c;)`8S4{&B7ed>+d8HFO1_sD zPG|hI?HWzxfA69sH}QhVJ0t-4UI_SH_PtFn9f z`h@8{KFy-dGRC<*nF@z$Ew3(X)_?lhbcYtlt&-v+Y@fs0*dFK~lRvmrcuUfvg|IJqg@-ssHl2gf^SHM5E9{19;B(M;)* zirw-exx;YTjL9lTJF_`|&PejoOxKyU(DL!i9!^Vf&8V1-kGwTDE}67C;OeVYq4CbW zrdRJQ$#j-8zwgwoyLHd!zJObI^LF1qEcboO^S*%Bw_>-ytA4Rj{ngJU+cw;rDj)FJ z)mLq$q2Zh>3cL>&H61TZYL@KiOlIJ3X3*~BNsCT-o-#rD%r=!1T*4BW%zlp@d06hA zOPcFnCjX@8%Kmm~#+E(JGQ1`C70S=Q72G=QdAFbX!ijB%SI$=Y{lTd-QYo&^N=Ef@ zTJ?=fn;YkETQ8F7vpL+z?CVsss%}f?iDLCSvmec?Pd$C{(*4^-Go0>kbj?amuaH$T za%Z1eeErhq#^but^Bx9#keemz;xSvPM!r(^;NB&h9;LOEUHrJgQl@9KvE96R+rC_F zXkk`Cp!KZpu#E4{>wL`Ooj1zx2fPon@sTYTqvS{rTJ_9*=|Gf48&mpOQJ*(*5H< zle(NK)-AmM`|O>)`(*cW&RWhK<)c3T4xinchw9Qx|14YIA?i(0|NtRfk$L91B0G22s2hJwJ&2}U|=ut^mS!_!Ym;y zZCKi(Aj`nOAX(xXQR1ARo12tX-4NAmmN&Y*p{`oHa0dMj0v9i#$kz{PS3LDh4c6r3jc^Xt@F7S!oa}5 N;OXk;vd$@?2>>NjQt$u( literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/jungle_bookshelf_side.png b/src/main/resources/assets/ebwizardry/textures/blocks/jungle_bookshelf_side.png new file mode 100644 index 0000000000000000000000000000000000000000..0acc2705cb5766d3b78065cf3463c745809cad47 GIT binary patch literal 1564 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-rdNeTlmsP~D-;yvr)B1( zDwI?fq$;FVWTr7NRNPt{7CC8&70;jVn$I|G<5=S`o_vb(lOF zEc9vC{cArKFiwAEt~_sU=@Z^}ZCk(VJ+jq9xj#cqn63{*MTScGs`gr+x#c=B{sy{t1J?_kV^(gY|rzbIM-Tf{+mlyivGvfMeUE$UbxjNe0tB}Nq3{J?3?njr7}7_ zd(YE?s+h2LzcPE}a}85Y+;C@|opX4mrjYY7w>B=-tPuCvn#_wHo|4loPFuJpfk!~O zXqw)-m+Ge9ChYWRxFC7kG2tmQckhP6meV2vI|2f3*s`Rzgx8gW!vQ89PLT_JM6HEt&U=wrg1xL5-b#8k8HS6as2X(Q`449 zwhA~!6nfcgaa3~BN!Iz+Z_Ze)5xMbL)ay0d54z2svtwT3xytL>S)U&DZogOgzPaCS zrNTiL>6j0SEfPUbG*;{|Q<6{aFkIHMfODSkJ--^qmR`LcknGDFz1GwCtl9M%ZrxSW_^wV{GySuE z$l|3^{7Zki)URM${e3t0tEWfG&MuIUZhEj!+hNg+-Dy@64DU>RJ?rI(6I`bmGIv|F z?n(-{5R!EJ#f5hZ=Y(p^lE3Kd$nmeGXqESO-lyw!?G0YL?fwoFGM~OWzc@9@M<*#q8G+qXv_3UBORVJUK5!0fN>9OgE;_p=ti-N5D^Sf5^b z)5nTu_ARx_s~(5eyT{LU%4be}u4o^xXE{6Cg5COhZAt6bTXqR?4^|5A+y234?%WQg zE$wF}2Vc9kHg}=klsuzDvp;yfY)!I0torAo?xxGywf+h!Yjwq)Io0o^vv}Rl+qFOY z;R`vR$jMTzDm%|kY>QtmeCE9JE#7p4GWNyA>+;@e2Y-$&4gTd^`sC4z_|>zep1x&X zab>80WEX-SLg{Pup~?ht-vw@B_s3hzw!w>!@6cAs~5 z)i;kf$-31|udVy6Y)TK6|Fzij+iXv&Z|!=k{ZkIFd&6D*YTmx>Z(<{E-wb-`9k%cM zE|4`>eQTGr*;xK6Ed6b<$Ub~~o4xgl^>xhARYtzse^&@IFfgzsdAqwX{0G4WdzVjU zU|`@Z@Q5sCV9-+rVaAH3_GJtV4D2PIzOL*~m?eazG&sKOoWsDtAX(xXQR1ARo12Jq135}WiYW|xZ-k!f-0t9yKxDg;y|N9%a9$WC? z0|yQytkXSvpvhNomy@2Jna|<-&KhDVt|z1lCEM}@xpyhe$URY$6W1iIpmpN-fddB` zI$FPHEc_~0t?=tchS8iozos-EJ?h+$c)oAB%JD-dSNlu;nJgj^v2X7Wj()MA%LlKg z%deQjSKz9sXV_EHAouFT#>UeIVqcCl`7&=xEa1ME?8$z@OknngfXfG~Z9e{==k}6; ZA>rR*jd*ok5e5bZ22WQ%mvv4FO#o#6)ye<> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/jungle_bookshelf_top.png b/src/main/resources/assets/ebwizardry/textures/blocks/jungle_bookshelf_top.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2cb6875ff0c4af041c11586a5c0b37771ad577 GIT binary patch literal 1561 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-W>kellmsP~D-;yvr)B1( zDwI?fq$;FVWTr7NRNPt{7CC8&70;jRn$I|M{4fZMh7>+3cK>6;!e zeNH;O-M?S@??FWw8Ohhp-RCrA)MjaL&Ry_q;<33?CBJ`N@a1pZz_><+8sf{c*gs__+8t>!q0jyZB$I zx8Aw9Z_DPrH($nGT6jA)<$2!;{<3v*C+toRUmJfr?C`d&J9nkXOnY-}(YK{Na?hTg zyH;`f;g=n2xaPj8bDP7c8aTmS)N@*)Sf9>>!sNqKh4b&YMekr(G*L}%t%u;*)&w2_ zWv`2|F_-=C9dUlPin&G4gPnJ^OhiRXuX4=8h67WX6{{uANv!|#Vu`<6ZnVBenke78 z2Jb2>CfD%3nIg$jA`f#XX0adq{j;Vd)>LFm^Rot4wW+(=Pt4c7KgpYap{ZKbmdy<} zuRmoFVQgfTxEA1Gd2O1kw!YImNf$PbDGYnXL)vt5)`m2QEZ*8|v4ZKyG3$B9LpBL(y z&)0a7(8R0vL%@kg)9cEO!dw^IV*<%OoQ}da>U-uIC@$5BOrM-vcJuj!WIxvxFOs@+ z*ZmOk(pl+sRkSoF_N(cYh~URLHd^^k0(2(a~ZFqxeXUW-+gybdK*G+>114P3ZE|nE( zl^zN<1^1V5c+?M_1$SxJeUu;)rGd$WXw^%J^;~}%&m7bm}jTvME z&i(U>ownj^jiFNi^@P)#uTNNRJ9nl1vy`r#Ers0c+a4EeVV7C3K!5tt#ET8PJj?jp ziUYEquTZ~xdW-L`BA$mr$8`T}wrdutYWRFd?!&$|SLW*tqUlGv&OYoAeSWIfYjfC} zNQdWcAzkWR{!^aqENI?8S@QIr23PZ4c4@Cwv%gGnPQQ3==kf_h7Ega?H1EyFW3R9L z*ZBN!vYu<*=YPDa`wnkbPg$jtdg-0da-%ARRcvp%H;XKKR=(0jy=dR$uIlcumpiv| zUwT(IyVO0|RG)M`SSrgPt-7Ggd6MFJoX}U@!6Xb!C6TEFmnVSg65h!N9;ES>hT|;+&tG zo0?a`;9QiNSdyBeP@Y+mq2TW68xY>eC(gjYaM#ntF~s8Z(%_9;hZRKjh@5<&U|}K3 zHP?E2-`@_ueM?IKt7 zw9ky!*>t>oeSjc3hW$~JbHdw@t7ckLh5hkzQUM)sy&|>-LyIQTpBw! zD186y9w4B*X5!Oc7e24MFJ^9@a;;BmL6BwWYA%bPJ6F}jN1Uh)w*KOGY8%f)?>gNx zPL6zQZm!gN5VYLI)Mz34_>E_o%{ksQyNesK-`Ffe$!`njxgN@xNAi3-@l literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/oak_bookshelf_inside.png b/src/main/resources/assets/ebwizardry/textures/blocks/oak_bookshelf_inside.png new file mode 100644 index 0000000000000000000000000000000000000000..d8626b0a202d42613e108d799ec0a0709306d936 GIT binary patch literal 1301 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-gsMU!N`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsJ7K7Cq^W8c*B(tz9~doJUeEXLyH}O?dj8J=y>Km(pJ)PZgKt z7$kVUm~3$6-_PBb<98fUQCzP0>&f1OPbYa#y4aDn|5MGT!p}S7&RqO)&Hs7Bg42t( z{m%ZfdjG3wivq2{JN+6LYRPgPHxy7cDT_uTkt zA2r)ft4=Z9zy9M(wmT+r=h!~Jvb3<7J42wx$-1kMv2OL@3vnvF?@OYa>h@eV3{9A9 za{AhXm+h@(`;GIumq)BPP;u*ah1G5yR$WEm3x4hK^6~vT%MX8P{Ud#8^U?BO`W}}{ zUKl3S3w%ni-8}#6>iK#T{qn?T?X@?pf2|*{6oI?v6ySBwAaHUOg(dD!_VE>d3IMpW2fINmMcoGI^s_0 zEIlem`F7-qyc25Jd5hx$>%)YL+RJrqt}a`-uAt@7sfhx%Jc&L2|5jYko?Io*c{JzI zOYIw~%9j(4DjfG|GvsyIp}+i9$%nwYxaQTYj&t++A`;AQPhj{n`%`$qP0m|Mix%Az zp5YwJ^gtRxZJfWnokO^i7cIvSqNQL1a|?pU}cZ0@QmUMbVeZ`b;HKHL4+xcFH@Gq+R?hhm$E zk*jp~Pu-kC?`S=zqhjG( zeh7K#tbC$%HS9^@SJNvI!DoA=omTE#c6R%PByZjFmZUVvBdXu6?%i?M=^&B@YW$Z9K7W*#&*W@*T@( zTs*}8InDPwTV1rh5DVMpt*L)Lq=%c8XIGg$ygDoD{%qgeiqlgsqXIb~Q+EBgwomN#++l9WnT0Qy7Jo|;v&7znCm7gYDdVXBXKh{-$ zH=FuqMcc<;3Jz#m&q-P({41dC4?jyR+uQo>8*5cB%>A=dwewTE&!X)XTP}9mVZ0t zdzh~3Jp1NdyR~+1H~+7F{X?GXk@F3G98o1bSHB;cWH%+tdBR(Z8!ErV#lkKwYcBb2 z$-uzCmgMd3!tfsi7wla=nSp_Uv%n*=n1Ml08H5=tmfDvwFfg!}c>21sKVg;-me8?X zFVD`vz#v)T8d2h$pPQSSSHj?2l$uzQnxasiS(2gP?&%v4-pD7;z`zji>Eak-aXR@7 zkKw=b4vYzj2?+@|O5dnO&bqtiisTFl4HlgfGID-mi%e>N{$oFvrW9(tD~cz!X^%{W z>HhzJm|M@cPbGAS4R$ISV_Ek$-p4mCN_KNu50QH3=9mO Lu6{1-oD!M?$=BW8O z@Nm}pjP#!8SL3G5?J27_obu|`jd!w@l1Z_`GREsVTb{9$Nt#tk3dI@k{<-Ju^-YSI zd-gd+KEC}*KJP&4ud|*{9x%JM?@pFZ_E@1EE&g!(Uhdr1;Q#aQPg}S=y_hF89h}P=yuiNK>hZgjO8G4}Zgf;x{rUCtVvzUx zp45LX3uV3ht=7Beb1qj><$9FiJ|WkFTQw;m=SjwLpWas*+@c;OF_w!`^mIaaq(lvb z#9tP~+OI5Rc@`@&gZq%&kNg=uq}E!!=Ks9-3v}K=t{f@Jjb$Z zhdy(Gph!iBA|s=;hYjndi8o!8EP@y{oU8m-@J5`dzNa{8t_Oom3gfe5^-8@9-&C3< zE3$CtAM{|6R#8f@d@g8zQ8P)S`s2B3`I;}UCZBh7I=?|6>4kPypHS=XIPbMLTR`Q6L&v_o5hO0QlINWMBNE01HV+F8^4PTjuIM!NH_h+UihS%1aF zMaP;$5#F@FTV8UempF( zs^5D3%J_@!dHj&gV^jEHeqv_dJN^@Ui>lpo&nGXQ?6_iiV)-i3l=!@J!ew7K1+NW> zs#k~)US()`ttb9jpy90FdAFkL!tU|p7S~ls{XR3LY1Q&a-&d+U-n;j0vt{e+f*;)~*i2L*MgHgjR-rjhUx) zf0c1~rT(i5zvdY=E37BlUHE#a#B}+p=BLvimMhs^ob{Yzx4@d{xw3NB=R|)^-}&wC zCU3*{Ti+D>B(IGunQgoKcv1P(%3h7ndd&NR`JBy7&#rZG@vuB7XC=2MXWOxtXP$XY zo}{i+!_m{V)8ThurRkH~i{@`!qaPaaS(N)*$fJ!}o7cVAx!kLN@%+^~dH zm4{ZcLXUfndT>_1^xAosP37(6mHm_7m3r<_*<87O+m|(bM%h0jTVj<=?pS@O+_Pu< zZh?J%yQY_Z(KvgY`)g`q-G1iS@0^C)=cTS$b)t4+1^X+#+cm3xhc3IIvh%ij=`*eO z*EWlBtE}Clw}yWUyVv4x`eM(*tp$96fA0<8VcVZWto8`4IOL$gEM)kX$x#zdv$PHir_vE3sHxH&% ztZTMNQ3#yl(m2sE%;bc2gUiQ<6|B!~85#_$6`t++|Av#7A?KQ1hSw4<$<6N19-UO_ ze&RHD=B`fvPEQtd*z8f;G_rGDc5Av*$QPZubb5KcdgiAhv0d z;j;zS_tT#_h%d~`KhpT?b&-_S=BHN{&N%c&T6xLgukjn$WKPWd|0vOn?_SWoRmWQ9 T`zkRoFfe$!`njxgN@xNAoL&Wg literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/oak_bookshelf_top.png b/src/main/resources/assets/ebwizardry/textures/blocks/oak_bookshelf_top.png new file mode 100644 index 0000000000000000000000000000000000000000..fad076fed5c7e4f197ea4b204e2e18513735f0aa GIT binary patch literal 1573 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-)>ef?lmsP~D-;yvr)B1( zDwI?fq$;FVWTr7NRNPt{mVIfh2G5`Qp=X3VD)iX}R;96T{*x(JCHKnm{@UM}njJGt zUiwXVRsY}Y7khg_LCP9_J*(vfGcp#blr+t9mnsiSyK}wymbL!ll05=EnOmyt*tQ?j zKF0bvwRd`|dg2{B$*$79C)Vp7K5IGiR-WLfwks- zc3t#)cZq_){gQ8wMjpTSAkU@pz0xnoDIYs-Uu)c^w6Q+@v(cAtKEFd4)mF~hdgyLx zOH~}_^kcCmF%N2GY7frc>a!%l+oST!W4Y_+kE=h~;v7F^e?ZljA8CI&Go={s#=kIc zyK^zFZ*y(WW#gsI+ttsXlbsiTtnxKurB&IrUsrF5MXfF_J!zqHbFJ%JZ%NxTr){Gi zYqwv1yh-az!gu3GJRY4)vbh40$098@H5@zEX6|=qN8h#rMi=E!o2ZFOv$zut8hSKb z%Zq&NcXqO$oz1skrvsnV;-Z9y56$?>TbX6@WjJ0XN<3cJyWira`sAqBoJZFj64ZV$ zNzZ-3i!+9klYE$!?}P=s<@ivyPkwGVFWXy=;sZ>RPu*pDaekWoqf5;hy`5rjeG>zwbGDq!yl#BP@_m)7Z(Q}`wdMDIKUnN9 zQetqBO}vIfu}wrZD(v+$m>^nC$V~ht_lvp7w)lmQO8UN}FhUCAmQU@>9ntmp4zZ z`t{!G*78!@i+U@>Z=G*D$8f*llH^O(PmF(p!rB$qe`T%w%b1z<(zq^0EA%D{n>Ds#|yqBrx zTefXp_}i*VdbM$amC%FdrC(Q8*)H-g-+kt}QQ0-gy%+v%t+~rR?_SY+l`r}Zedk|B z<-c@_o1XesGjspSpY6JHSMF^JIQ(mW=im7sUwvr&$iH!oq>UY!PC{xWt~$(696Qz;b;H= literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ebwizardry/textures/blocks/spruce_bookshelf_inside.png b/src/main/resources/assets/ebwizardry/textures/blocks/spruce_bookshelf_inside.png index fcd2326266f4325a620579ab07e106f0ee7fff77..2a0669290866706e510899e5ac9a1e7465213847 100644 GIT binary patch delta 1060 zcmeyxc!hI8f};Gi%$!t(lFEWqh1817GzNx>TUV#YmVMUXX?wr5 zE0SrFfc@!%3Fl_Yp852gRoFapa^1@-=E+&jtQ-s3PinsX|L5*Y{g_9K)bkBnWtt8@ z-F!aig2%fZr)oBR{=75p&f1R(%QrhK1YN1xvuwi?>nBYgH$5q>f2ld)_S{8#*7v>L zxLC(^(lw^-qSu{H9cRkZT((JM<(jE~Kkk#gU8K0YVt?zdW8bgZ-))$E>~Qv!gvQ0k zFCQ*7OxZHoLjK`)GoH7hpJt@r4*K$PZk{u%*~xWl_|6;XTzRawL)1S|HaYFK$-|SU z+Lta+eWG;h=d$K8;Pq=J*>EzqI zrvm4u%0F2;*L%*B7j5gmPpi7$e^*p~!_y6BrMFMzB;GOGW17x7rQ>#t)HylT#VRc> zM=i4~Ql!0}o?+^lYiq7|r*eMjQ!e4XZ-fH7Lju>aBr^5rh|Y-ot8qs)>l)jMMWV+Y z>lLS77Mpka+0K}!Ev?e(hh8RXB>VgfU0BZc)sCs_=F-dI8@%0?9PD!Jn<$sZC?#|h8@X@w~j6cjD_a9y=yd`PDLOZ4z$QXN}IAUgXj#sSE`kPmMqyF){Z+oWqExxw(cb@H+8^PzVoc7F3{2Nr~&?{~_bIGv-6+z7=$7XZM zy*$EZEFgTIL5`g^k4W~bJ@C=rrMw3zcsIAJ_cep` z7VDk8Zl#)9b1?qOm*tH4*LtV%3w-;3a>C|i@lr*%9Pdj_>Sq)BC;!*?eWT#q-Z_`T zqyKomy*Ew%#)pW@yP55CviyHu$c|Q#3!eCN@5B5*v#Mh+Z|*Y<{umi2=lMH_<)T2^ z>Sbk%R(HH?tUv6(O!%@PXOaUluioFMf8Je_PJV+s5`mJ2kTYr+3u}?Nbqd zDwrkybmD!rZI}5jb${ZR3dK92^hejqln47&`X}tx=nvSXk##?K$&aH=_2Dn$wbon^ z4e!5xj)8%JEy>&6h2cL4F4((#G6MqxXMsm#F$061G6RE@o-$*_Qu{In1_t&LPhVH| SC(PpFR@@1-A;%_0&j$ec%Lm5* delta 41 xcmcb@`HOLavH$~HlDE4HgCv6y1IOO>?+%lBS>!pHWO>o0&pZ$AGu(M!?%ujAcK!8^jvaUN&aq_8 zVf^u-nSp_cfrCMTp#hC?q1Rb^{|Sq}qsDEC9hLLWRvw)5`RAL<$_%BvhXcNRzHD;T z=KQlg34Qu~J6RZ57z7v`K%s!0kq~_L4YNd>;<8Mm<&!OI+VcC^>z_|zmu~zu>+`u@ z2RZ(Kjp+=p<-<5<*Tk70cT@O|+bF0lH>UJDJll|bHixC@f2#5XZ(O!BGJJdWayz5# zrrUGGp6&S@_+&TVfnRJ>KCH+s_Imzf+A5qHK^_rcXlGzyxUq2gZw4DBkO3R!F7IdG zE_h;&*fX0vmQNKQ#OE@u$#>wC&Of6$H(7Z?HAW~Rg{uMsA0r3D24^#-nV0{_Y)e+2 zV0rfZM!^@p=?t%>0}dUNF7|qUgX4)DmbieM!qMQ&z{K!oLa)O!6Z`hJHg`E#bTKcC+9Kkfn1) z1QV47Y%6bYv_K-|!Ds*fD<2C8P7LCbZcI3y&S1uLQP>=u+Zbp9ei+1uE!6v?Azt7D OGT+nH&t;ucLK6U+T`oTW literal 0 HcmV?d00001