From 8a40cf9e1581c7d056634f628e762bf1381d4211 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 24 Nov 2015 19:59:33 +0100 Subject: [PATCH] Booklet Stand --- .../blocks/BlockBookletStand.java | 119 ++++++++++++++++++ .../actuallyadditions/blocks/InitBlocks.java | 5 + .../render/model/ModelBookletStand.java | 115 +++++++++++++++++ .../booklet/GuiBookletStand.java | 64 ++++++++++ .../inventory/GuiHandler.java | 4 + .../network/PacketBookletStandButton.java | 104 +++++++++++++++ .../network/PacketHandler.java | 1 + .../actuallyadditions/proxy/ClientProxy.java | 2 + .../tile/TileEntityBase.java | 1 + .../tile/TileEntityBookletStand.java | 64 ++++++++++ .../actuallyadditions/util/AssetUtil.java | 1 + .../blocks/models/modelBookletStand.png | Bin 0 -> 575 bytes 12 files changed, 480 insertions(+) create mode 100644 src/main/java/ellpeck/actuallyadditions/blocks/BlockBookletStand.java create mode 100644 src/main/java/ellpeck/actuallyadditions/blocks/render/model/ModelBookletStand.java create mode 100644 src/main/java/ellpeck/actuallyadditions/booklet/GuiBookletStand.java create mode 100644 src/main/java/ellpeck/actuallyadditions/network/PacketBookletStandButton.java create mode 100644 src/main/java/ellpeck/actuallyadditions/tile/TileEntityBookletStand.java create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/models/modelBookletStand.png diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockBookletStand.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockBookletStand.java new file mode 100644 index 000000000..d30df1495 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockBookletStand.java @@ -0,0 +1,119 @@ +/* + * This file ("BlockBookletStand.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015 Ellpeck + */ + +package ellpeck.actuallyadditions.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.ActuallyAdditions; +import ellpeck.actuallyadditions.inventory.GuiHandler; +import ellpeck.actuallyadditions.items.InitItems; +import ellpeck.actuallyadditions.tile.TileEntityBookletStand; +import ellpeck.actuallyadditions.util.AssetUtil; +import ellpeck.actuallyadditions.util.IActAddItemOrBlock; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +public class BlockBookletStand extends BlockContainerBase implements IActAddItemOrBlock{ + + public BlockBookletStand(){ + super(Material.rock); + this.setHarvestLevel("pickaxe", 0); + this.setHardness(1.5F); + this.setResistance(10.0F); + this.setStepSound(soundTypeStone); + + float f = 1/16F; + this.setBlockBounds(f, 0F, f, 1F-f, 1F-2*f, 1F-f); + } + + @Override + public boolean renderAsNormalBlock(){ + return false; + } + + @Override + public int getRenderType(){ + return AssetUtil.bookletStandRenderId; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int metadata){ + return this.blockIcon; + } + + @Override + public boolean isOpaqueCube(){ + return false; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int f6, float f7, float f8, float f9){ + player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.BOOK_STAND.ordinal(), world, x, y, z); + return true; + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack){ + int rotation = MathHelper.floor_double((double)(player.rotationYaw*4.0F/360.0F)+0.5D) & 3; + + if(rotation == 0){ + world.setBlockMetadataWithNotify(x, y, z, 2, 2); + } + if(rotation == 1){ + world.setBlockMetadataWithNotify(x, y, z, 1, 2); + } + if(rotation == 2){ + world.setBlockMetadataWithNotify(x, y, z, 0, 2); + } + if(rotation == 3){ + world.setBlockMetadataWithNotify(x, y, z, 3, 2); + } + + TileEntityBookletStand tile = (TileEntityBookletStand)world.getTileEntity(x, y, z); + if(tile != null){ + //Assign a UUID + if(tile.assignedPlayerUUID == null){ + tile.assignedPlayerUUID = player.getUniqueID(); + world.markBlockForUpdate(x, y, z); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconReg){ + this.blockIcon = InitItems.itemLexicon.getIcon(new ItemStack(InitItems.itemLexicon), 0); + } + + @Override + public String getName(){ + return "blockBookStand"; + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.rare; + } + + @Override + public TileEntity createNewTileEntity(World world, int i){ + return new TileEntityBookletStand(); + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/InitBlocks.java b/src/main/java/ellpeck/actuallyadditions/blocks/InitBlocks.java index 25a60ad5a..191fa55f3 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/InitBlocks.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/InitBlocks.java @@ -104,9 +104,14 @@ public class InitBlocks{ public static Block blockCrystal; public static Block blockAtomicReconstructor; + public static Block blockBookletStand; + public static void init(){ ModUtil.LOGGER.info("Initializing Blocks..."); + blockBookletStand = new BlockBookletStand(); + BlockUtil.register(blockBookletStand); + blockAtomicReconstructor = new BlockAtomicReconstructor(); BlockUtil.register(blockAtomicReconstructor); diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/render/model/ModelBookletStand.java b/src/main/java/ellpeck/actuallyadditions/blocks/render/model/ModelBookletStand.java new file mode 100644 index 000000000..7b91ea7d6 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/blocks/render/model/ModelBookletStand.java @@ -0,0 +1,115 @@ +/* + * This file ("ModelBookletStand.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015 Ellpeck + */ + +package ellpeck.actuallyadditions.blocks.render.model; + +import net.minecraft.client.model.ModelRenderer; + +public class ModelBookletStand extends ModelBaseAA{ + + ModelRenderer body1; + ModelRenderer bottom1; + ModelRenderer bottom2; + ModelRenderer body2; + ModelRenderer body3; + ModelRenderer book1; + ModelRenderer book2; + ModelRenderer book3; + ModelRenderer book4; + + public ModelBookletStand(){ + textureWidth = 64; + textureHeight = 64; + + body1 = new ModelRenderer(this, 0, 0); + body1.addBox(0F, 0F, 0F, 14, 8, 1); + body1.setRotationPoint(-7F, 17F, 1F); + body1.setTextureSize(64, 64); + body1.mirror = true; + setRotation(body1, -0.7853982F, 0F, 0F); + bottom1 = new ModelRenderer(this, 25, 6); + bottom1.addBox(0F, 0F, 0F, 1, 1, 8); + bottom1.setRotationPoint(-5F, 23F, -5F); + bottom1.setTextureSize(64, 64); + bottom1.mirror = true; + setRotation(bottom1, 0F, 0F, 0F); + bottom2 = new ModelRenderer(this, 25, 6); + bottom2.addBox(0F, 0F, 0F, 1, 1, 8); + bottom2.setRotationPoint(4F, 23F, -5F); + bottom2.setTextureSize(64, 64); + bottom2.mirror = true; + setRotation(bottom2, 0F, 0F, 0F); + body2 = new ModelRenderer(this, 0, 10); + body2.addBox(0F, 0F, 0F, 14, 1, 2); + body2.setRotationPoint(-7F, 20.91F, -5F); + body2.setTextureSize(64, 64); + body2.mirror = true; + setRotation(body2, -0.7853982F, 0F, 0F); + body3 = new ModelRenderer(this, 0, 14); + body3.addBox(0F, 0F, 0F, 10, 3, 1); + body3.setRotationPoint(-5F, 20F, -1F); + body3.setTextureSize(64, 64); + body3.mirror = true; + setRotation(body3, 0F, 0F, 0F); + book1 = new ModelRenderer(this, 36, 0); + book1.addBox(0F, 0F, 0F, 8, 10, 0); + book1.setRotationPoint(0F, 15F, 3.1F); + book1.setTextureSize(64, 64); + book1.mirror = true; + setRotation(book1, -0.837758F, 0.0872665F, 0F); + book2 = new ModelRenderer(this, 36, 0); + book2.addBox(0F, 0F, 0F, 8, 10, 0); + book2.setRotationPoint(-8F, 15F, 3.1F); + book2.setTextureSize(64, 64); + book2.mirror = true; + setRotation(book2, -0.837758F, 0F, 0F); + book3 = new ModelRenderer(this, 0, 19); + book3.addBox(0F, 0F, 0F, 7, 8, 1); + book3.setRotationPoint(7F, 16F, 1.2F); + book3.setTextureSize(64, 64); + book3.mirror = true; + setRotation(book3, 0.837758F, -3.054326F, 0F); + book4 = new ModelRenderer(this, 0, 19); + book4.addBox(0F, 0F, 0F, 7, 8, 1); + book4.setRotationPoint(-7F, 15.3F, 1.2F); + book4.setTextureSize(64, 64); + book4.mirror = true; + setRotation(book4, -0.837758F, 0F, 0F); + } + + @Override + public void render(float f){ + body1.render(f); + bottom1.render(f); + bottom2.render(f); + body2.render(f); + body3.render(f); + book1.render(f); + book2.render(f); + book3.render(f); + book4.render(f); + } + + @Override + public String getName(){ + return "modelBookletStand"; + } + + @Override + public boolean doesRotate(){ + return true; + } + + private void setRotation(ModelRenderer model, float x, float y, float z){ + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/booklet/GuiBookletStand.java b/src/main/java/ellpeck/actuallyadditions/booklet/GuiBookletStand.java new file mode 100644 index 000000000..7563a09c9 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/booklet/GuiBookletStand.java @@ -0,0 +1,64 @@ +/* + * This file ("GuiBookStand.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015 Ellpeck + */ + +package ellpeck.actuallyadditions.booklet; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.network.PacketBookletStandButton; +import ellpeck.actuallyadditions.network.PacketHandler; +import ellpeck.actuallyadditions.tile.TileEntityBase; +import ellpeck.actuallyadditions.tile.TileEntityBookletStand; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; + +@SideOnly(Side.CLIENT) +public class GuiBookletStand extends GuiBooklet{ + + private GuiButton buttonSetPage; + + private TileEntityBookletStand theStand; + + public GuiBookletStand(TileEntityBase theStand){ + super(null, false, false); + this.theStand = (TileEntityBookletStand)theStand; + } + + @SuppressWarnings("unchecked") + @Override + public void initGui(){ + super.initGui(); + + this.buttonSetPage = new GuiButton(-100, this.guiLeft+this.xSize+10, this.guiTop+10, 100, 20, "Set Page"){ + @Override + public void drawButton(Minecraft mc, int x, int y){ + boolean unicodeBefore = mc.fontRenderer.getUnicodeFlag(); + mc.fontRenderer.setUnicodeFlag(false); + super.drawButton(mc, x, y); + mc.fontRenderer.setUnicodeFlag(unicodeBefore); + } + }; + this.buttonList.add(this.buttonSetPage); + + this.buttonSetPage.visible = Minecraft.getMinecraft().thePlayer.getUniqueID().equals(this.theStand.assignedPlayerUUID); + + //Open the pages the book was assigned + BookletUtils.openIndexEntry(this, this.theStand.assignedEntry, this.theStand.assignedPageInIndex, true); + BookletUtils.openChapter(this, this.theStand.assignedChapter, this.theStand.assignedPage); + } + + @Override + public void actionPerformed(GuiButton button){ + if(button == this.buttonSetPage){ + PacketHandler.theNetwork.sendToServer(new PacketBookletStandButton(this.theStand.xCoord, this.theStand.yCoord, this.theStand.zCoord, this.theStand.getWorldObj(), Minecraft.getMinecraft().thePlayer, this.currentIndexEntry, this.currentChapter, this.currentPage, this.pageOpenInIndex)); + } + super.actionPerformed(button); + } +} \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java index 134959037..055e576b0 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java @@ -14,6 +14,7 @@ import cpw.mods.fml.common.network.IGuiHandler; import cpw.mods.fml.common.network.NetworkRegistry; import ellpeck.actuallyadditions.ActuallyAdditions; import ellpeck.actuallyadditions.booklet.GuiBooklet; +import ellpeck.actuallyadditions.booklet.GuiBookletStand; import ellpeck.actuallyadditions.inventory.gui.*; import ellpeck.actuallyadditions.tile.TileEntityBase; import ellpeck.actuallyadditions.util.ModUtil; @@ -144,6 +145,8 @@ public class GuiHandler implements IGuiHandler{ return new GuiSmileyCloud(tile, x, y, z, world); case BOOK: return new GuiBooklet(null, true, true); + case BOOK_STAND: + return new GuiBookletStand(tile); case DIRECTIONAL_BREAKER: return new GuiDirectionalBreaker(entityPlayer.inventory, tile); case RANGED_COLLECTOR: @@ -178,6 +181,7 @@ public class GuiHandler implements IGuiHandler{ XP_SOLIDIFIER, CLOUD, BOOK(false), + BOOK_STAND, DIRECTIONAL_BREAKER, RANGED_COLLECTOR; diff --git a/src/main/java/ellpeck/actuallyadditions/network/PacketBookletStandButton.java b/src/main/java/ellpeck/actuallyadditions/network/PacketBookletStandButton.java new file mode 100644 index 000000000..42cd8a991 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/network/PacketBookletStandButton.java @@ -0,0 +1,104 @@ +/* + * This file ("PacketBookletStand.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015 Ellpeck + */ + +package ellpeck.actuallyadditions.network; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import ellpeck.actuallyadditions.booklet.InitBooklet; +import ellpeck.actuallyadditions.booklet.chapter.BookletChapter; +import ellpeck.actuallyadditions.booklet.entry.BookletEntry; +import ellpeck.actuallyadditions.booklet.page.BookletPage; +import ellpeck.actuallyadditions.tile.TileEntityBookletStand; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; + +public class PacketBookletStandButton implements IMessage{ + + private int tileX; + private int tileY; + private int tileZ; + private int worldID; + private int playerID; + + private int entryID; + private int chapterID; + private int pageID; + private int pageInIndex; + + @SuppressWarnings("unused") + public PacketBookletStandButton(){ + + } + + public PacketBookletStandButton(int x, int y, int z, World world, EntityPlayer player, BookletEntry entry, BookletChapter chapter, BookletPage page, int pageInIndex){ + this.tileX = x; + this.tileY = y; + this.tileZ = z; + this.worldID = world.provider.dimensionId; + this.playerID = player.getEntityId(); + + this.entryID = entry == null ? -1 : InitBooklet.entries.indexOf(entry); + this.chapterID = entry == null || chapter == null ? -1 : entry.chapters.indexOf(chapter); + this.pageID = page == null ? -1 : page.getID(); + this.pageInIndex = pageInIndex; + } + + @Override + public void fromBytes(ByteBuf buf){ + this.tileX = buf.readInt(); + this.tileY = buf.readInt(); + this.tileZ = buf.readInt(); + this.worldID = buf.readInt(); + this.playerID = buf.readInt(); + + this.chapterID = buf.readInt(); + this.pageID = buf.readInt(); + this.entryID = buf.readInt(); + this.pageInIndex = buf.readInt(); + } + + @Override + public void toBytes(ByteBuf buf){ + buf.writeInt(this.tileX); + buf.writeInt(this.tileY); + buf.writeInt(this.tileZ); + buf.writeInt(this.worldID); + buf.writeInt(this.playerID); + + buf.writeInt(this.chapterID); + buf.writeInt(this.pageID); + buf.writeInt(this.entryID); + buf.writeInt(this.pageInIndex); + } + + public static class Handler implements IMessageHandler{ + + @Override + public IMessage onMessage(PacketBookletStandButton message, MessageContext ctx){ + World world = DimensionManager.getWorld(message.worldID); + TileEntity tile = world.getTileEntity(message.tileX, message.tileY, message.tileZ); + EntityPlayer player = (EntityPlayer)world.getEntityByID(message.playerID); + + if(tile instanceof TileEntityBookletStand){ + if(player.getUniqueID().equals(((TileEntityBookletStand)tile).assignedPlayerUUID)){ + ((TileEntityBookletStand)tile).setEntry(message.entryID, message.chapterID, message.pageID, message.pageInIndex); + world.markBlockForUpdate(message.tileX, message.tileY, message.tileZ); + } + } + + return null; + } + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/network/PacketHandler.java b/src/main/java/ellpeck/actuallyadditions/network/PacketHandler.java index f16ba376d..e7243005f 100644 --- a/src/main/java/ellpeck/actuallyadditions/network/PacketHandler.java +++ b/src/main/java/ellpeck/actuallyadditions/network/PacketHandler.java @@ -29,5 +29,6 @@ public class PacketHandler{ theNetwork.registerMessage(PacketGuiNumber.Handler.class, PacketGuiNumber.class, 1, Side.SERVER); theNetwork.registerMessage(PacketGuiString.Handler.class, PacketGuiString.class, 2, Side.SERVER); theNetwork.registerMessage(PacketAtomicReconstructor.Handler.class, PacketAtomicReconstructor.class, 3, Side.CLIENT); + theNetwork.registerMessage(PacketBookletStandButton.Handler.class, PacketBookletStandButton.class, 4, Side.SERVER); } } diff --git a/src/main/java/ellpeck/actuallyadditions/proxy/ClientProxy.java b/src/main/java/ellpeck/actuallyadditions/proxy/ClientProxy.java index 8d792a35f..ce5ba2810 100644 --- a/src/main/java/ellpeck/actuallyadditions/proxy/ClientProxy.java +++ b/src/main/java/ellpeck/actuallyadditions/proxy/ClientProxy.java @@ -74,6 +74,7 @@ public class ClientProxy implements IProxy{ AssetUtil.phantomBoosterRenderId = RenderingRegistry.getNextAvailableRenderId(); AssetUtil.smileyCloudRenderId = RenderingRegistry.getNextAvailableRenderId(); AssetUtil.laserRelayRenderId = RenderingRegistry.getNextAvailableRenderId(); + AssetUtil.bookletStandRenderId = RenderingRegistry.getNextAvailableRenderId(); registerRenderer(TileEntityCompost.class, new RenderTileEntity(new ModelCompost()), AssetUtil.compostRenderId); registerRenderer(TileEntityFishingNet.class, new RenderTileEntity(new ModelFishingNet()), AssetUtil.fishingNetRenderId); @@ -82,6 +83,7 @@ public class ClientProxy implements IProxy{ registerRenderer(TileEntityPhantomBooster.class, new RenderTileEntity(new ModelPhantomBooster()), AssetUtil.phantomBoosterRenderId); registerRenderer(TileEntitySmileyCloud.class, new RenderSmileyCloud(new ModelSmileyCloud()), AssetUtil.smileyCloudRenderId); registerRenderer(TileEntityLaserRelay.class, new RenderLaserRelay(new ModelLaserRelay()), AssetUtil.laserRelayRenderId); + registerRenderer(TileEntityBookletStand.class, new RenderTileEntity(new ModelBookletStand()), AssetUtil.bookletStandRenderId); VillagerRegistry.instance().registerVillagerSkin(ConfigIntValues.JAM_VILLAGER_ID.getValue(), new ResourceLocation(ModUtil.MOD_ID_LOWER, "textures/entity/villager/jamVillager.png")); } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java index 43e839808..b53a80db4 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java @@ -67,6 +67,7 @@ public abstract class TileEntityBase extends TileEntity{ GameRegistry.registerTileEntity(TileEntityRangedCollector.class, ModUtil.MOD_ID_LOWER+":tileEntityRangedCollector"); GameRegistry.registerTileEntity(TileEntityLaserRelay.class, ModUtil.MOD_ID_LOWER+":tileEntityLaserRelay"); GameRegistry.registerTileEntity(TileEntityAtomicReconstructor.class, ModUtil.MOD_ID_LOWER+":tileEntityAtomicReconstructor"); + GameRegistry.registerTileEntity(TileEntityBookletStand.class, ModUtil.MOD_ID_LOWER+":tileEntityBookletStand"); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBookletStand.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBookletStand.java new file mode 100644 index 000000000..8654ee170 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBookletStand.java @@ -0,0 +1,64 @@ +/* + * This file ("TileEntityBookletStand.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015 Ellpeck + */ + +package ellpeck.actuallyadditions.tile; + +import ellpeck.actuallyadditions.booklet.InitBooklet; +import ellpeck.actuallyadditions.booklet.chapter.BookletChapter; +import ellpeck.actuallyadditions.booklet.entry.BookletEntry; +import ellpeck.actuallyadditions.booklet.page.BookletPage; +import net.minecraft.nbt.NBTTagCompound; + +import java.util.UUID; + +public class TileEntityBookletStand extends TileEntityBase{ + + public BookletChapter assignedChapter; + public BookletPage assignedPage; + public BookletEntry assignedEntry; + public int assignedPageInIndex; + + public UUID assignedPlayerUUID; + + @Override + public boolean canUpdate(){ + return false; + } + + @Override + public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ + compound.setInteger("Entry", this.assignedEntry == null ? -1 : InitBooklet.entries.indexOf(this.assignedEntry)); + compound.setInteger("Chapter", this.assignedEntry == null || this.assignedChapter == null ? -1 : this.assignedEntry.chapters.indexOf(this.assignedChapter)); + compound.setInteger("Page", this.assignedPage == null ? -1 : this.assignedPage.getID()); + compound.setInteger("PageInIndex", this.assignedPageInIndex); + + if(this.assignedPlayerUUID != null){ + compound.setLong("PlayerLeastSignificant", this.assignedPlayerUUID.getLeastSignificantBits()); + compound.setLong("PlayerMostSignificant", this.assignedPlayerUUID.getMostSignificantBits()); + } + } + + @Override + public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ + this.setEntry(compound.getInteger("Entry"), compound.getInteger("Chapter"), compound.getInteger("Page"), compound.getInteger("PageInIndex")); + + long mostSigBits = compound.getLong("PlayerMostSignificant"); + if(mostSigBits > 0){ + this.assignedPlayerUUID = new UUID(mostSigBits, compound.getLong("PlayerLeastSignificant")); + } + } + + public void setEntry(int entry, int chapter, int page, int pageInIndex){ + this.assignedEntry = entry == -1 ? null : InitBooklet.entries.get(entry); + this.assignedChapter = chapter == -1 || entry == -1 || this.assignedEntry.chapters.size() <= chapter ? null : this.assignedEntry.chapters.get(chapter); + this.assignedPage = chapter == -1 || this.assignedChapter == null || this.assignedChapter.pages.length <= page-1 ? null : this.assignedChapter.pages[page-1]; + this.assignedPageInIndex = pageInIndex; + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/util/AssetUtil.java b/src/main/java/ellpeck/actuallyadditions/util/AssetUtil.java index 0423a355e..61317a86c 100644 --- a/src/main/java/ellpeck/actuallyadditions/util/AssetUtil.java +++ b/src/main/java/ellpeck/actuallyadditions/util/AssetUtil.java @@ -36,6 +36,7 @@ public class AssetUtil{ public static int phantomBoosterRenderId; public static int smileyCloudRenderId; public static int laserRelayRenderId; + public static int bookletStandRenderId; /** * Thanks to xdjackiexd for this, as I couldn't be bothered diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/models/modelBookletStand.png b/src/main/resources/assets/actuallyadditions/textures/blocks/models/modelBookletStand.png new file mode 100644 index 0000000000000000000000000000000000000000..822ab5dfa050ad360b0876641c8626c42ba5f36d GIT binary patch literal 575 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enkiEpy*OmP~w}g-)(}qu;uYf`lC9V-A!TD(= z<%vb93~dIoxCe|nPd1MQjX>Eakt5%+fT*}x+PJgvn`7_1(+2+CwM z3ahW1^Rj_YBi-85TJhTpR@Z4}*0b+gsJ)+EnH;_8>-L*^AOHTe%2_$b$07_Mos z?`eB!eAi==*<$tp-t{M{y)LD#;$t|O?Rk9yx0TXW_6DXrRZeTepLX;9hv~lEUbc05 z!S+YP_y0-L<(ANom%l9DyieNW(EIt3pSNv1!8d#AF71b&!gKtV zKa@K8d7EeNms^G2#`PBb= z+e7gMb%|>Ntn_~#-