From be3bf0aebd7356a3f668df81329168a3db98d4b1 Mon Sep 17 00:00:00 2001 From: Tranqlmao <110073921+Tranqlmao@users.noreply.github.com> Date: Tue, 7 Jul 2026 19:47:42 -0400 Subject: [PATCH] TU43 Release 4 + Banners, Banners, Banners! --- Minecraft.Client/BannerModel.cpp | 28 ++++ Minecraft.Client/BannerModel.h | 15 ++ Minecraft.Client/BannerRenderer.cpp | 147 +++++++++++++++++ Minecraft.Client/BannerRenderer.h | 23 +++ Minecraft.Client/ClientConnection.cpp | 4 + .../Common/UI/IUIScene_CreativeMenu.cpp | 15 ++ .../res/1_2_2/mob/banner/banner_base.png | Bin 0 -> 1975 bytes .../Common/res/1_2_2/mob/banner/base.png | Bin 0 -> 618 bytes .../Common/res/1_2_2/mob/banner/border.png | Bin 0 -> 650 bytes .../Common/res/1_2_2/mob/banner/bricks.png | Bin 0 -> 744 bytes .../Common/res/1_2_2/mob/banner/circle.png | Bin 0 -> 686 bytes .../Common/res/1_2_2/mob/banner/creeper.png | Bin 0 -> 729 bytes .../Common/res/1_2_2/mob/banner/cross.png | Bin 0 -> 760 bytes .../res/1_2_2/mob/banner/curly_border.png | Bin 0 -> 748 bytes .../res/1_2_2/mob/banner/diagonal_left.png | Bin 0 -> 773 bytes .../res/1_2_2/mob/banner/diagonal_right.png | Bin 0 -> 767 bytes .../res/1_2_2/mob/banner/diagonal_up_left.png | Bin 0 -> 785 bytes .../1_2_2/mob/banner/diagonal_up_right.png | Bin 0 -> 786 bytes .../Common/res/1_2_2/mob/banner/flower.png | Bin 0 -> 780 bytes .../Common/res/1_2_2/mob/banner/gradient.png | Bin 0 -> 1877 bytes .../res/1_2_2/mob/banner/gradient_up.png | Bin 0 -> 1919 bytes .../res/1_2_2/mob/banner/half_horizontal.png | Bin 0 -> 649 bytes .../mob/banner/half_horizontal_bottom.png | Bin 0 -> 663 bytes .../res/1_2_2/mob/banner/half_vertical.png | Bin 0 -> 634 bytes .../1_2_2/mob/banner/half_vertical_right.png | Bin 0 -> 648 bytes .../Common/res/1_2_2/mob/banner/mojang.png | Bin 0 -> 816 bytes .../Common/res/1_2_2/mob/banner/rhombus.png | Bin 0 -> 717 bytes .../Common/res/1_2_2/mob/banner/skull.png | Bin 0 -> 895 bytes .../res/1_2_2/mob/banner/small_stripes.png | Bin 0 -> 629 bytes .../1_2_2/mob/banner/square_bottom_left.png | Bin 0 -> 656 bytes .../1_2_2/mob/banner/square_bottom_right.png | Bin 0 -> 650 bytes .../res/1_2_2/mob/banner/square_top_left.png | Bin 0 -> 659 bytes .../res/1_2_2/mob/banner/square_top_right.png | Bin 0 -> 651 bytes .../res/1_2_2/mob/banner/straight_cross.png | Bin 0 -> 650 bytes .../res/1_2_2/mob/banner/stripe_bottom.png | Bin 0 -> 644 bytes .../res/1_2_2/mob/banner/stripe_center.png | Bin 0 -> 633 bytes .../res/1_2_2/mob/banner/stripe_downleft.png | Bin 0 -> 771 bytes .../res/1_2_2/mob/banner/stripe_downright.png | Bin 0 -> 779 bytes .../res/1_2_2/mob/banner/stripe_left.png | Bin 0 -> 636 bytes .../res/1_2_2/mob/banner/stripe_middle.png | Bin 0 -> 638 bytes .../res/1_2_2/mob/banner/stripe_right.png | Bin 0 -> 633 bytes .../res/1_2_2/mob/banner/stripe_top.png | Bin 0 -> 646 bytes .../res/1_2_2/mob/banner/triangle_bottom.png | Bin 0 -> 1076 bytes .../res/1_2_2/mob/banner/triangle_top.png | Bin 0 -> 735 bytes .../res/1_2_2/mob/banner/triangles_bottom.png | Bin 0 -> 667 bytes .../res/1_2_2/mob/banner/triangles_top.png | Bin 0 -> 665 bytes .../res/mob/banner/banner_base.png | Bin 0 -> 1975 bytes .../res/TitleUpdate/res/mob/banner/base.png | Bin 0 -> 618 bytes .../res/TitleUpdate/res/mob/banner/border.png | Bin 0 -> 650 bytes .../res/TitleUpdate/res/mob/banner/bricks.png | Bin 0 -> 744 bytes .../res/TitleUpdate/res/mob/banner/circle.png | Bin 0 -> 686 bytes .../TitleUpdate/res/mob/banner/creeper.png | Bin 0 -> 729 bytes .../res/TitleUpdate/res/mob/banner/cross.png | Bin 0 -> 760 bytes .../res/mob/banner/curly_border.png | Bin 0 -> 748 bytes .../res/mob/banner/diagonal_left.png | Bin 0 -> 773 bytes .../res/mob/banner/diagonal_right.png | Bin 0 -> 767 bytes .../res/mob/banner/diagonal_up_left.png | Bin 0 -> 785 bytes .../res/mob/banner/diagonal_up_right.png | Bin 0 -> 786 bytes .../res/TitleUpdate/res/mob/banner/flower.png | Bin 0 -> 780 bytes .../TitleUpdate/res/mob/banner/gradient.png | Bin 0 -> 1877 bytes .../res/mob/banner/gradient_up.png | Bin 0 -> 1919 bytes .../res/mob/banner/half_horizontal.png | Bin 0 -> 649 bytes .../res/mob/banner/half_horizontal_bottom.png | Bin 0 -> 663 bytes .../res/mob/banner/half_vertical.png | Bin 0 -> 634 bytes .../res/mob/banner/half_vertical_right.png | Bin 0 -> 648 bytes .../res/TitleUpdate/res/mob/banner/mojang.png | Bin 0 -> 816 bytes .../TitleUpdate/res/mob/banner/rhombus.png | Bin 0 -> 717 bytes .../res/TitleUpdate/res/mob/banner/skull.png | Bin 0 -> 895 bytes .../res/mob/banner/small_stripes.png | Bin 0 -> 629 bytes .../res/mob/banner/square_bottom_left.png | Bin 0 -> 656 bytes .../res/mob/banner/square_bottom_right.png | Bin 0 -> 650 bytes .../res/mob/banner/square_top_left.png | Bin 0 -> 659 bytes .../res/mob/banner/square_top_right.png | Bin 0 -> 651 bytes .../res/mob/banner/straight_cross.png | Bin 0 -> 650 bytes .../res/mob/banner/stripe_bottom.png | Bin 0 -> 644 bytes .../res/mob/banner/stripe_center.png | Bin 0 -> 633 bytes .../res/mob/banner/stripe_downleft.png | Bin 0 -> 771 bytes .../res/mob/banner/stripe_downright.png | Bin 0 -> 779 bytes .../res/mob/banner/stripe_left.png | Bin 0 -> 636 bytes .../res/mob/banner/stripe_middle.png | Bin 0 -> 638 bytes .../res/mob/banner/stripe_right.png | Bin 0 -> 633 bytes .../TitleUpdate/res/mob/banner/stripe_top.png | Bin 0 -> 646 bytes .../res/mob/banner/triangle_bottom.png | Bin 0 -> 1076 bytes .../res/mob/banner/triangle_top.png | Bin 0 -> 735 bytes .../res/mob/banner/triangles_bottom.png | Bin 0 -> 667 bytes .../res/mob/banner/triangles_top.png | Bin 0 -> 665 bytes Minecraft.Client/ItemInHandRenderer.cpp | 21 +++ Minecraft.Client/ItemRenderer.cpp | 17 ++ Minecraft.Client/Lighting.cpp | 7 +- Minecraft.Client/Lighting.h | 1 + Minecraft.Client/PlayerRenderer.cpp | 7 + Minecraft.Client/Textures.cpp | 1 + Minecraft.Client/Textures.h | 1 + .../TileEntityRenderDispatcher.cpp | 3 + .../Windows64Media/loc/stringsGeneric.xml | 68 ++++++++ Minecraft.Client/cmake/sources/Common.cmake | 4 + Minecraft.Server/cmake/sources/Common.cmake | 2 + Minecraft.World/BannerItem.cpp | 81 +++++++++ Minecraft.World/BannerItem.h | 15 ++ Minecraft.World/BannerTile.cpp | 155 ++++++++++++++++++ Minecraft.World/BannerTile.h | 44 +++++ Minecraft.World/BannerTileEntity.cpp | 70 ++++++++ Minecraft.World/BannerTileEntity.h | 38 +++++ Minecraft.World/Class.h | 2 + Minecraft.World/GrassPathTile.cpp | 8 +- Minecraft.World/GrassPathTile.h | 1 + Minecraft.World/Tile.cpp | 7 + Minecraft.World/Tile.h | 9 +- Minecraft.World/TileEntity.cpp | 1 + Minecraft.World/TileEntityDataPacket.h | 1 + Minecraft.World/cmake/sources/Common.cmake | 6 + Minecraft.World/net.minecraft.world.item.h | 1 + .../net.minecraft.world.level.tile.entity.h | 1 + .../net.minecraft.world.level.tile.h | 1 + 114 files changed, 798 insertions(+), 7 deletions(-) create mode 100644 Minecraft.Client/BannerModel.cpp create mode 100644 Minecraft.Client/BannerModel.h create mode 100644 Minecraft.Client/BannerRenderer.cpp create mode 100644 Minecraft.Client/BannerRenderer.h create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/banner_base.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/base.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/border.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/bricks.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/circle.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/creeper.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/cross.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/curly_border.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/diagonal_left.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/diagonal_right.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/diagonal_up_left.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/diagonal_up_right.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/flower.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/gradient.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/gradient_up.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/half_horizontal.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/half_horizontal_bottom.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/half_vertical.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/half_vertical_right.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/mojang.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/rhombus.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/skull.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/small_stripes.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/square_bottom_left.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/square_bottom_right.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/square_top_left.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/square_top_right.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/straight_cross.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/stripe_bottom.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/stripe_center.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/stripe_downleft.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/stripe_downright.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/stripe_left.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/stripe_middle.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/stripe_right.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/stripe_top.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/triangle_bottom.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/triangle_top.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/triangles_bottom.png create mode 100644 Minecraft.Client/Common/res/1_2_2/mob/banner/triangles_top.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/banner_base.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/base.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/border.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/bricks.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/circle.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/creeper.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/cross.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/curly_border.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/diagonal_left.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/diagonal_right.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/diagonal_up_left.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/diagonal_up_right.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/flower.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/gradient.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/gradient_up.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/half_horizontal.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/half_horizontal_bottom.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/half_vertical.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/half_vertical_right.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/mojang.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/rhombus.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/skull.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/small_stripes.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/square_bottom_left.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/square_bottom_right.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/square_top_left.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/square_top_right.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/straight_cross.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/stripe_bottom.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/stripe_center.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/stripe_downleft.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/stripe_downright.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/stripe_left.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/stripe_middle.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/stripe_right.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/stripe_top.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/triangle_bottom.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/triangle_top.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/triangles_bottom.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/triangles_top.png create mode 100644 Minecraft.World/BannerItem.cpp create mode 100644 Minecraft.World/BannerItem.h create mode 100644 Minecraft.World/BannerTile.cpp create mode 100644 Minecraft.World/BannerTile.h create mode 100644 Minecraft.World/BannerTileEntity.cpp create mode 100644 Minecraft.World/BannerTileEntity.h diff --git a/Minecraft.Client/BannerModel.cpp b/Minecraft.Client/BannerModel.cpp new file mode 100644 index 00000000..314d36ce --- /dev/null +++ b/Minecraft.Client/BannerModel.cpp @@ -0,0 +1,28 @@ +#include "stdafx.h" +#include "BannerModel.h" +#include "ModelPart.h" + +BannerModel::BannerModel() +{ + texWidth = 64; + texHeight = 64; + + bannerSlate = new ModelPart(this, 0, 0); + bannerSlate->addBox(-10.0f, 0.0f, -2.0f, 20, 40, 1, 0.0f); + + bannerStand = new ModelPart(this, 44, 0); + bannerStand->addBox(-1.0f, -30.0f, -1.0f, 2, 42, 2, 0.0f); + + bannerTop = new ModelPart(this, 0, 42); + bannerTop->addBox(-10.0f, -32.0f, -1.0f, 20, 2, 2, 0.0f); + + bannerStand->compile(1.0f / 16.0f); + bannerTop->compile(1.0f / 16.0f); +} + +void BannerModel::renderBanner(bool useCompiled) +{ + bannerSlate->render(1.0f / 16.0f, false); + bannerStand->render(1.0f / 16.0f, useCompiled); + bannerTop->render(1.0f / 16.0f, useCompiled); +} diff --git a/Minecraft.Client/BannerModel.h b/Minecraft.Client/BannerModel.h new file mode 100644 index 00000000..1cac53b2 --- /dev/null +++ b/Minecraft.Client/BannerModel.h @@ -0,0 +1,15 @@ +#pragma once +#include "Model.h" + +class ModelPart; + +class BannerModel : public Model +{ +public: + ModelPart *bannerSlate; + ModelPart *bannerStand; + ModelPart *bannerTop; + + BannerModel(); + void renderBanner(bool useCompiled); +}; diff --git a/Minecraft.Client/BannerRenderer.cpp b/Minecraft.Client/BannerRenderer.cpp new file mode 100644 index 00000000..248d4a92 --- /dev/null +++ b/Minecraft.Client/BannerRenderer.cpp @@ -0,0 +1,147 @@ +#include "stdafx.h" +#include "BannerRenderer.h" +#include "BannerModel.h" +#include "ModelPart.h" +#include "TileEntityRenderDispatcher.h" +#include "../Minecraft.World/net.minecraft.world.level.tile.entity.h" +#include "../Minecraft.World/net.minecraft.world.level.tile.h" +#include "../Minecraft.World/net.minecraft.world.level.h" +#include "../Minecraft.World/DyePowderItem.h" +#include "../Minecraft.World/Entity.h" +#include "../Minecraft.World/Level.h" +#include "Lighting.h" +#include + +BannerRenderer *BannerRenderer::instance = nullptr; +ResourceLocation BannerRenderer::BANNER_LOCATION = ResourceLocation(TN_MOB_BANNER_BANNER_BASE); + +BannerRenderer::BannerRenderer() +{ + bannerModel = new BannerModel(); +} + +void BannerRenderer::init(TileEntityRenderDispatcher *dispatcher) +{ + TileEntityRenderer::init(dispatcher); + instance = this; +} + +static void applyBannerColor(int baseColor, float alpha, float brightness = 1.0f) +{ + if (baseColor >= 0 && baseColor < 16) + { + int rgb = DyePowderItem::COLOR_RGB[baseColor]; + float r = ((rgb >> 16) & 0xFF) / 255.0f * brightness; + float g = ((rgb >> 8) & 0xFF) / 255.0f * brightness; + float b = ( rgb & 0xFF) / 255.0f * brightness; + glColor4f(r, g, b, alpha); + } + else + { + glColor4f(brightness, brightness, brightness, alpha); + } +} + +void BannerRenderer::renderModelColoured(int baseColor, float alpha, bool useCompiled, float brightness) +{ + bindTexture(&BANNER_LOCATION); + + applyBannerColor(baseColor, alpha, brightness); + bannerModel->bannerSlate->render(1.0f / 16.0f, false); + + glColor4f(brightness, brightness, brightness, alpha); + bannerModel->bannerStand->render(1.0f / 16.0f, useCompiled); + bannerModel->bannerTop->render(1.0f / 16.0f, useCompiled); +} + +void BannerRenderer::render(shared_ptr _banner, double x, double y, double z, float a, bool setColor, float alpha, bool useCompiled) +{ + shared_ptr banner = dynamic_pointer_cast(_banner); + if (!banner) return; + + Tile *tile = banner->getTile(); + if (tile != Tile::standing_banner && tile != Tile::wall_banner) return; + const float f = 0.6666667f; + + glDisable(GL_LIGHTING); + glPushMatrix(); + + if (tile == Tile::standing_banner) + { + glTranslatef((float)x + 0.5f, (float)y + 0.75f * f, (float)z + 0.5f); + float rot = banner->getData() * 360.0f / 16.0f; + glRotatef(-rot, 0.0f, 1.0f, 0.0f); + bannerModel->bannerStand->visible = true; + } + else + { + glTranslatef((float)x + 0.5f, (float)y - 0.25f * f, (float)z + 0.5f); + int face = banner->getData(); + float rot = 0.0f; + if (face == 2) rot = 180.0f; + if (face == 4) rot = 90.0f; + if (face == 5) rot = -90.0f; + glRotatef(-rot, 0.0f, 1.0f, 0.0f); + glTranslatef(0.0f, -0.3125f, -0.4375f); + bannerModel->bannerStand->visible = false; + } + + bannerModel->bannerSlate->y = -32.0f; + + float f3 = (float)(banner->x * 7 + banner->y * 9 + banner->z * 13) + + (float)banner->level->getGameTime() + a; + bannerModel->bannerSlate->xRot = (-0.0125f + 0.01f * cosf(f3 * 3.14159265f * 0.02f)) * 3.14159265f; + + glScalef(f, -f, -f); + renderModelColoured(banner->getBaseColor(), alpha, useCompiled); + + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + glPopMatrix(); + glEnable(GL_LIGHTING); +} + +void BannerRenderer::renderBannerForGui(float x, float y, float scaleX, float scaleY, float alpha, int baseColor) +{ + glPushMatrix(); + glEnable(GL_COLOR_MATERIAL); + + glTranslatef(x, y, 0.0f); + glScalef(16.0f * scaleX, 16.0f * scaleY, 1.0f); + + glTranslatef(0.5f, 0.72f, 0.0f); + + glRotatef(-25.0f, 1.0f, 0.0f, 0.0f); + glRotatef(199.0f, 0.0f, 1.0f, 0.0f); + glScalef(-1.0f, 1.0f, 1.0f); + + const float s = 0.33f; + glScalef(s, s, s); + + bannerModel->bannerSlate->y = -32.0f; + bannerModel->bannerSlate->xRot = 0.0f; + bannerModel->bannerStand->visible = true; + + Lighting::setAmbient(0.6f); + renderModelColoured(baseColor, alpha, false); + Lighting::setAmbient(0.4f); + + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + glDisable(GL_COLOR_MATERIAL); + glPopMatrix(); +} + +void BannerRenderer::renderBannerForHand(float alpha, int baseColor) +{ + glDisable(GL_LIGHTING); + glPushMatrix(); + + bannerModel->bannerSlate->y = -32.0f; + bannerModel->bannerSlate->xRot = 0.0f; + bannerModel->bannerStand->visible = true; + + renderModelColoured(baseColor, alpha, false); + + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + glPopMatrix(); + glEnable(GL_LIGHTING); +} diff --git a/Minecraft.Client/BannerRenderer.h b/Minecraft.Client/BannerRenderer.h new file mode 100644 index 00000000..b511dd4d --- /dev/null +++ b/Minecraft.Client/BannerRenderer.h @@ -0,0 +1,23 @@ +#pragma once +#include "TileEntityRenderer.h" +class BannerModel; + +class BannerRenderer : public TileEntityRenderer +{ +public: + static BannerRenderer *instance; + +private: + static ResourceLocation BANNER_LOCATION; + BannerModel *bannerModel; + + void renderModelColoured(int baseColor, float alpha, bool useCompiled, float brightness = 1.0f); + +public: + BannerRenderer(); + virtual void init(TileEntityRenderDispatcher *dispatcher) override; + virtual void render(shared_ptr banner, double x, double y, double z, float a, bool setColor, float alpha = 1.0f, bool useCompiled = true); + + void renderBannerForGui(float x, float y, float scaleX, float scaleY, float alpha, int baseColor); + void renderBannerForHand(float alpha, int baseColor); +}; diff --git a/Minecraft.Client/ClientConnection.cpp b/Minecraft.Client/ClientConnection.cpp index 8fb1ceb7..7afec5c7 100644 --- a/Minecraft.Client/ClientConnection.cpp +++ b/Minecraft.Client/ClientConnection.cpp @@ -3482,6 +3482,10 @@ void ClientConnection::handleTileEntityData(shared_ptr pac { dynamic_pointer_cast(te)->load(packet->tag); } + else if (packet->type == TileEntityDataPacket::TYPE_BANNER && dynamic_pointer_cast(te) != nullptr) + { + dynamic_pointer_cast(te)->load(packet->tag); + } } } } diff --git a/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp b/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp index d3e41d58..09201999 100644 --- a/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp +++ b/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp @@ -311,6 +311,20 @@ void IUIScene_CreativeMenu::staticCtor() ITEM(Tile::bookshelf_Id) ITEM(Item::flower_pot_Id) ITEM(Tile::hay_block_Id) + ITEM_AUX(Tile::standing_banner_Id, 1) // Red + ITEM_AUX(Tile::standing_banner_Id, 14) // Orange + ITEM_AUX(Tile::standing_banner_Id, 11) // Yellow + ITEM_AUX(Tile::standing_banner_Id, 10) // Green + ITEM_AUX(Tile::standing_banner_Id, 12) // Light Blue + ITEM_AUX(Tile::standing_banner_Id, 6) // Cyan + ITEM_AUX(Tile::standing_banner_Id, 4) // Blue + ITEM_AUX(Tile::standing_banner_Id, 5) // Purple + ITEM_AUX(Tile::standing_banner_Id, 13) // Magenta + ITEM_AUX(Tile::standing_banner_Id, 9) // Pink + ITEM_AUX(Tile::standing_banner_Id, 15) // White + ITEM_AUX(Tile::standing_banner_Id, 8) // Dark Grey + ITEM_AUX(Tile::standing_banner_Id, 7) // Light Grey + ITEM_AUX(Tile::standing_banner_Id, 0) // Black ITEM_AUX(Tile::wool_Id,14) // Red ITEM_AUX(Tile::wool_Id,1) // Orange ITEM_AUX(Tile::wool_Id,4) // Yellow @@ -379,6 +393,7 @@ void IUIScene_CreativeMenu::staticCtor() ITEM_AUX(Tile::stained_glass_pane_Id,13) // Green ITEM_AUX(Tile::stained_glass_pane_Id,12) // Brown + #ifndef _CONTENT_PACKAGE DEF(eCreativeInventory_ArtToolsDecorations) if(app.DebugSettingsOn()) diff --git a/Minecraft.Client/Common/res/1_2_2/mob/banner/banner_base.png b/Minecraft.Client/Common/res/1_2_2/mob/banner/banner_base.png new file mode 100644 index 0000000000000000000000000000000000000000..6b50b8a827f7fd1f63fce42bd89d8933fecd8e01 GIT binary patch literal 1975 zcmV;o2T1sdP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2j2?{ z4=5m7z8r7>00%coL_t(|+U;6RZyZGso!y=Fu4QA#226wqSYShNtZ+igfrBLu+>y9& z!OU;8^5mQvn80bpD*3IWM*tyb$_!7yhBZTvWEoleJHA-s(YXS3gK{kK(E0aXep{gWomKj&=9_u71=|I&4|Pir@_+`w`*ZJ{o5 zMF?vuzzSzl0g@piJ^kJ1zj#m33lXt^_#>@CDnu&a@H}Gp+JzNBCdrIeh@1%-qor{2 zn=GL%C1?d|m(Wx{$D?LrtbhM}YdcN>(!4nf@;(nrQ)v3TWg(#i$R{+%v%v7>nJIL1 z7El)eU04B)M&rUPXe*E*&1W6b8W=`niSCAIkp_h8bh@L(0C{iCh)hAo6q8fdLpRtrcGnRkO6LGsHZ7tprDZr$Z$4RzDx=$KXI!#&l`gmUewnLX%8fEG1;Qm@g;r5nMuoVj%@^*{l83 z0!Jz;E7|eA&yyr+rEnRpXCHY0gqGG21Bz7^G<-m1s=nFr0ih2B<(fZ~ zBImJ&q991x+TMv%KnU?I!F_R=OIzz(sUU4tA!Yk;N2kL`f{u=Rqf#^(nYyx=nblX1>2oKGw7^3pLXv^dEaXv^TwH}hqI|E{9w8iXOLGinTZXe41!FI?mwS~WdZhqbFn!5{={g4UYAxBpE-W0xH=br%Cp=`W{P_DxfLdJfMHVMlqE6FFm`mT5;Ye$dZi~71ZL4DuI%mY zxuZ8$rl&1PTZ~SZi`EhgSpb)@a)(&w19G=V3&ilKT}Ljm^e(exnEQZwjR7FFz!+9A zJ@wK+yAhEC3@89s9B(5aTKn`G%<#i(qd$}bhNXM#@9+1O#?vEKvg4}(a-HG>LFopu z8>K0j;*9g`4$taX>jbGBo)F`4IgEo7T@)10adrnvMSpIX%EMDkn&bfqd_!eUOiY*? ztvU+Ct_IVEg@wzlJ6{s%v={Y2T_nw=0N&u_rG=*Ouf?11CtIiI@t!?7JDAA!=0@v6 z-%#ix%`Ytud@tL24CeaZeE(}jwsAP(mD%a!kBw(TDKgC?fKL#MSsku$^^NO0@56Dd zZ`p3QI~Uv`CK6P>zWr(M;hzV|qsJTW0ko>=+R~Eq%LhOIa_Z~H$%iW+_1m&Pixgny z?YCY}-g{#_`R>Qx99YS^l~mG5srI5W_W38v z$@Tf!iQOkHD5xQb{G1R8mPLl~htmC6yGQ{{gD7@c^cFh|&N6002ov JPDHLkV1m`bv5)`& literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/1_2_2/mob/banner/base.png b/Minecraft.Client/Common/res/1_2_2/mob/banner/base.png new file mode 100644 index 0000000000000000000000000000000000000000..9baba14f4bb30ed14afcd0ee19b1020293f79171 GIT binary patch literal 618 zcmV-w0+s!VP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4P@1-0n6B>(^c{7FPXRCwC$ zTER*KF%Zpf_y-;o^#hb*1*w9d;6#&m!_cpRL#%xXC`wizof*b*(K_|=0_&kf(TTcKT z{d|AO;`P=O@H{%n@-ZD`@p|hCxH{g-vHx^^kjDM}ANtMdjt&8ER+0cXYYCt(MF2(} z&Q9*S)eN{j+tnffqd&Pns&q*LFzsatfU_h(b`8L&OA^3cz=i-q0)$9zgK`8g1Uvzl z5t0PhkdR1)IpT2Irp6K>5Cpixk0n4R1ep8V(;(LbX#%7|fVsciY0$3$a;dO90sY?g zF9JY{^bD|hf!reKkH=C3upVFwBvNH@O91l%IRdPXDsd2?LI5j3zCt8Z5-SlPQxPHo zHWQTG1uOwFiIBeulFJ0^2#~uN@oNAsO63TUz8dp0pz#{8Zm6dGJnORrG(HRX#l;Jr z^LsqLjC!eUNfz1VGyfj`7r%ZRM9kak@s$uzCx7Xvchq)%k=?rY*tVq*SjpAc*V{#! zKK81_0!F;x14Mj-$11GVZ9AUP@fPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N(+uF#u(@$^ZZY97#k$RCwC$ zT0u$!K@gm8_yZ4$`T!*uL82fic#$YXJ*YWFyu?!uqTYOl&&bnaYN3|4oi&o(L)Pko zCiF7tovxXl>FJ%6=9sNGQU>SU_4IPzN&7o%g)EI(OW^wr=RtxT0mDJ3kmu29AzrUV zz;rsTB{?)@ll`TmA8&Vsc)d0Oc(jcCMnDrb+25z(Q6cY>K_OoM_XJ!VZWOWqc)6EG z{oQZ+)$x`N0dQ85061$2pe{uKMjg(MZ@T3SxIWp|A^@X5zC9>)NdhqKWeI?@BtUiz zz^F?Sz+J$G073$UNN$621TX|V0hkez1lW*}NQF7#aN4HE5+M)-xWkVnKqds3``gnX z*92(-q(XqXzualiuK{wYusi|%-sTSiK#KGXuz7*pBIu9DQUtIbU<)KtWpPUY^8z^n ztd1&i5THT;D?q+NBvTU05g=0$A^|oNl-va@0Wyh@{}LpZ304u%*jZrJugFxb0r*f_ zn}9Z4lB(JT8kqrYBcPE*ux%)({51_%5NPDn*yrn6nmqK%!~#aV-~uA<;IRs8b=!_- zbUcSm*yf?dw!`Q_Xot>NyUgva-C84D1>4b_;Kkly-*MZXx+gX#v_l8Ip0gVW1OkCT kAP@)y0)apv5D3)67qc1SLAI?zfB*mh07*qoM6N<$f*iRL+yDRo literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/1_2_2/mob/banner/bricks.png b/Minecraft.Client/Common/res/1_2_2/mob/banner/bricks.png new file mode 100644 index 0000000000000000000000000000000000000000..c5da811a8f5489d1436634ce9918054241d37c43 GIT binary patch literal 744 zcmVP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2NDk$IeL=AmjD0)dPzhIW#r3Q`3@!HZO(>Ot+P;-#K?5cTF~_!<41{>JKy%rc#3sU#_6 znt3pk3ES+>OEUX1*{b?Oow+UGvb$NmJ$99o$U z-C;QBIC~wPJClA80l0y*4BH(j(65gNXVMQMK#4iL3{RYWP6p1TA3XmvUH6So&wF*e z<<|c5^+7f2@6Y)+r#s;UWV-HK2|%z(2*`ZhFXR9O%LyPqm;h}#0KsC^5$yP`+suI5 zv)yn4H0b~$0HZ&?KWhA>1mvs(I02aUNeIxS1Nagk0*cK681-lZwCMo;7T`+&O9F(f zy$JCgAmxN&>H$6iiqHXa_ZPhz)K(9WIiR?`z)A?vqyzfB?F9lrN>T!H*8x5PNEZ~N z11Raq?Qu~$fa(FfKvIkj-~|yXiA4z^jpqUgn)|2{7o!7`5uh~(Pz6XAEDXd@t5 zK_vHc0V04a!6*VW>Hq}H35XIx8f$`52n7?M@m#=1Kr!D3wB-OClos`UfP4!SbvEdm z0WnEX6`CpktNJ(r!FvIjT%@6$zQ?1Rk?*_KXUqDfHhCZVFMj1~5Nn&chI`i%Oa0HyEi*I+Oh3Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2NDP}EedSSM*simAMvy273T`9{Q5R}f5jSy_g{V7^;W2Ww=xcdHO{K^DOeaiI z^`HnnOlrEm{+a6T$+AC}L52nj& z4}gJweLMuy<+TU!(me_GIp_q_<+TTJb-WeE{`2)g)@$z<$~UJwb^st)lK>E`1i-Q> z0BCgt+rMk(J>d3i*A@V@e*gX`FPj8_Zf_ONX zUI-O^Ism;I)ButVfoUo_D})3-3jomCay7^~!88CA~RcJF#skeK?y)+f+pVr5`dXRNS_3m%LK~+m^&EJa{vxX%>gidG^Tq%l{sLg zly~{xtWN@{vKA;zF4}ON-{bLNEXVGR*(ATbrk}(A;#a>0G3Mp*coG0*Hcdr!ptACl z{FXgO-WwYNNsh+8-!HPkQ!7s_;6xifK*TqA+=Z28c^}v4xDKE2%|(m653L8I9|j}+ zGPjq0E46T$WJP0!2kU@!#pV4hYp^k+9|ow)F~2UC%jI&pTrQW(<#M@PE>|`E0Cawo Ur|{sZ)&Kwi07*qoM6N<$f{Yv(^#A|> literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/1_2_2/mob/banner/creeper.png b/Minecraft.Client/Common/res/1_2_2/mob/banner/creeper.png new file mode 100644 index 0000000000000000000000000000000000000000..8bb880fee29328d551c1e63953d12b9255e3d86d GIT binary patch literal 729 zcmV;~0w(>5P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2NDSyHASD1i~s-vYe_^wRCwC$ zn$1eXKoH0C8oq%CMSTFJSV5{FD0q=7R6VFYRlL+w52D_D3?CzpR{gI`m`pb0W4F>| z<`08xStmQc?8oeGlH^azHMfE;hnvaU;~+WQ+i(`5Wk)P01P=)608A$XXRot!XR_RT z02Jug$AdFj?md8)>4~$?#l)E`_a4C2@s=C=&({aZY`mW<-<?AJ2!K>oW2@>%_E`#m4~gCbK=Aa&5j0PYgNJ|t=m-G5>~R3W zL!b+jAkY2zZjk1L=*wW!AnI64pOpYsk_R;H#&rR-@L2%Bhrr7A0_zHZ=75!?!m?}n z8ryU@MDY2)0P3mE=J@WfQwRf090R%$sQ0g2XsnVm;cTBIDnA7 zKyGr8hTrLXJbDZXSa(nJK=na>N zH`Hf%unbr>oY$wa1nV>MLjlUN&#%d3GMP*!lgVTPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4Q13;}Kd9{>OXib+I4RCwC$ zTER*KF%Zpf_y-;o^#hb*1*w9d;62x}SeW#3_Fr$0+^B!JP`*3g%SQlcteOC^4%a=S%vmgdQ~)ezB>?m~GkmZux=)Y9R1%@o1fXR&C2swp zs0r}jU_1fhCq&uY421*`O@b*3Kr=y+0I6P%QUOGXP)Y*un;>x}nA!&tRRTos1yU3s zGzY*%X_Nq|eI!-23Pg{9lm*b51d~EBZ!mY9*2gjzHe|?y4dmqz qufbq27z_r3!C){L3Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N(P1O?65F$XRs)s*chkGeJuy-~KoO zXg4OHj*;_5PE#i*fJU919p7||8E}2FZHoXJ{qgNV(QZV5hN046ZJj9sXxf`4fSd&Z zX4e23b&~{O7vLd4Awh(g+y>PM$RQEpAs`8$8DWwD9ug}b0^~eKoSf#Vaib8(Wf61& z#Nme%P&)*2N`!ds&rgF`6HF6eDg==Gn>!84H9##D&S@K58UZ;ZLjB(69|DLJb2ULp z0P+GeA%I0s9*<4!0;mV@0*M&{ctHduF;j^U2;gn15<3A_LI4#YSs^l06HF0cq9DQv z;F+Kb0l8g{aspHmp&YKq(hDt}d@$>YSeTVl=g@DS{*yrn6m^}1~#DbJap$CZc1`kzO-sb&qMyKCNC+Wta zh4-V;BY_?`!}TJ!=Xx8Ba2dFvDWMNbho#}XKiZPmlt2$0lPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4ShEk8B_i2wismq|oHRCwC$ zn$1eXKoH0C8oq%CMSTFJSV5{FD0q=7R6VFYRlL+w52D_D3?CzpRy%F9!oqH1TOc!1i7pZ)LIn ze0`A2#{0j@H>W%C003t@1E6f#(||yiKMDZLQ2~Hn2WRJZ!+ZqXp6!MKP&Mgsg}?zo z@6Yd#@^X{_VAux*P&egufgptd0thw-ga!b;9t=R!4Np@D(kehh073$QLp&=)16oOiqXyvH`Kl1Gz2njL8UTP2 z4FG8b(7ZquKwHjNflxFF^6ha{0PsA39+0R3XxsTR2-2}Q1%P=$bO2}>PKi|jgmV5b z2nK)wz!M;TLgWk}wDUy}_>q_dKxGo_69AeCssQMU^AZGU4xj*35}`f-;BSJ|GQqAn z&moinaNY~_34k;Qz>Ctx0J`ctg;2H%IE{e50#KO*`=)%zud+T0pz&USPcGcxI)0Cb z55ux_uViKQ;x+yp{4f0SWe{SXz8+TrP-Ima${nSRFRQocIrLsB1XNy)eZOBMi>FbZ zSU@G*-~&YX1`khRX_?-Kdvv%Cbwb^^X`%N)?}1@G=nSnFb9-8^Qx6x3HdHcrFn5?Y zoZgRR4puU(2OZ>Psa})GWHOmdCX>lzGMP*!lgUj#=B&vO+(E$}00000NkvXXu0mjf D52rjM literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/1_2_2/mob/banner/diagonal_right.png b/Minecraft.Client/Common/res/1_2_2/mob/banner/diagonal_right.png new file mode 100644 index 0000000000000000000000000000000000000000..64765204b56a80df3f54912db1f77866b835a3b8 GIT binary patch literal 767 zcmVPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4Sh9)RX!p8x;?kx4{BRCwC$ zn$JqZKoG|B8oq%CMSTFJSV5{FD0q=7R6SUGs(7iV9z?zQ7(PZHt#%eCOed2jP4-{i z`Cup;(oMeK?re59$+Cs!mIYPXirH)izXe@)x3l+QCp$jaGSNonA~8#X0OkQgasWny zj)}MNr3qec1R!Pzf97)lX!QH@$pkO|djPMaGZSCafeBu23?N1b#C#6m=5)v8{>$xA zHtruTmG92?(g6TwtpkV&0y96Sk3R|k%Si!%RtK|_hi={j?l1Q30EhvCV7>qVT7U9* zl9!VN0NvgRfRGSM%!?_20IZGyn*;z_-5G!o5LTEMp8_-mASD1uQULHV=nQ~Q2o>hV z6yN}$MJ|NUEzcdxb76;RGYV0Hh6o6w0HO-5wK@PxK3d9HiTAQv0aZGRq zzy*Xg%+~_oGzDS=KvTf_TEI1gHO-ff0ZymF3cwMB2Ig}B{oZZ?06<9wfYbx%yub^9 zHV_(`FC7H=@;E5~xF0|_NW1}P0-=R@aa)`MziLG`R49hp!FcI9yCMi#koDLw^a+5iQcFbaA9tk-#9%V%N(o} xSPvTHWvO13N~Kb%R4SE9rBbO>DwV38egOfe$qPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^xA z2_!3~HmAe@00NOoL_t(|+U=UbO2a@9hVvS}fd@r>0Hs(#svszMkt$R@s6AD@)Kd?l z-h2!nqmNeoBU8q4w@H)PP3q1ML)nmS@_)Ot+1(_|el*hzZDkIfch|F*`%bpMvzA9? z;R4g?bfyhKD{yZv2rv%_$pIJ+I(a;gPVA(7Yfy z0KAM{;-~=1La1xr05|~94v^d-iVmO%f`)n5mY54b^g*y`0DLCcC;%S>E%UxHfCGp= z5o!v6d=u2zOt1)orui}eqOJv+2H+Y4@S?PF00cqXe3_>}D|$d|04jsvs%hTkzh`|M zK;^Z799(4JIDL;t7o)Q4Tvrs;OULAO=)d@tk3r--e?6`Oz!zn1R2tlzGS$-;3v)hd2j{3- P00000NkvXXu0mjf69qdS literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/1_2_2/mob/banner/diagonal_up_right.png b/Minecraft.Client/Common/res/1_2_2/mob/banner/diagonal_up_right.png new file mode 100644 index 0000000000000000000000000000000000000000..325f42253b494c16e42c1de0e4b6cf420f68b170 GIT binary patch literal 786 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 P00000NkvXXu0mjf@%@g? literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/1_2_2/mob/banner/gradient_up.png b/Minecraft.Client/Common/res/1_2_2/mob/banner/gradient_up.png new file mode 100644 index 0000000000000000000000000000000000000000..292f1082d72c31a279a1d2118b8fe00aeaab2b2f GIT binary patch literal 1919 zcmV-_2Y~pAP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^xA z2`3agec3ty00#d_L_t(|+U;7&ZX8t)_`a(4t4>yRrB?N;;nlm-xx=fO z;*3Vc6lpY?>U71-DfzjNKX|iv_xAPT-uDm6@x32@&zie8ZRXDxJnbp5#<5Ak{Et8V z(SEHfD=Q<{9vHxHc6PQnIXNlM)`$S`}^hOpMCOv zdGFf#MtR(M+8-O=x%<`SEMQ?_p<;G89F`~XpNk_?6a=rSKvZbT3-DO6 zc~l{*Q1~7f5*fX^d2Q^xk0%zu;^N}7L9bVPGZ*FB<3b|~;k^*F3NpN7yF4V1`9~VcbYdYE8 zFYo#DuYNUt^3TrY1pv(`V|+0+G(SIoL1S1jtcB;)Y1n&q6)OFV052s|x@elQGDt1q z83!@^sOdVNj+k;+YRW6-&#`K0aiRPVAw1pL%@e@#@^YwsFmrq^U1bK$EAW9}Mf79E z2ntbM3P%ldIuEbYz1%{SO7lNG59a3^zzh~dqQKJ9 zQc?>{U?>ES1`()5W5p9?%&kfN-CZf7T)z)NP_;yY2_jD*IFb=Y0VPLoH(gqdhBtz0 zggH@msmR~!%@ylwtHs{G2PFoSbIi@;TYy_ZUACt{sG9Q_pQ;mdF3mm_bE0(oc~qTc zCa5oREqScb+kqkx-sZep@JfMSWY#Y9RJfa@ zyoO6CC}wAZG)K1tcM&ca_ouQv3N%W6>HDeTNlRuAnbbb=05Hu&C>IpRKv1<4p?WIz zN4`p|a5Lsu(`k1Dx1PFOpfv_WAQ+iF&%59IqFr!~DbyMkk-6+q-V9y(tn zl^DQ<(hsS*qobqH|FB5p51JX$Qnab!%~nTwj|jA+y0m(B_M&UF>IX0iu+yUpBtY`I z7bjROn1i6SM)3Bzf?AYjM@>)-q2nd`XsUHVl?pSf)2?pa(iaw;*3w3`y1n>9^cJHTESq>81couHiW62_u{@5^cHtFA;=%}2dF zWrPtSwI|@#RTpV;a{opFcojXkXi~z6c9^0>D{=t{L94&1Y>lN5++(zcN!6fsiBn8@yW2BG4ZpyOrev$F z|5saMbv~IYVmuVOroFQi^&5D<7FIm3-ycL)aP8_wSnMN*XW z$xJ13e0dq6Dg5i!J8zZW<841a`!JE?{??O;l9Z--InQfv-x_<5hP^Mpxj#0>#}U{G z`gLo&oz+d6Wkrnm{d%3@3dg2-Q}aa6a(r+wxZn<1ncx?9J}Msk_FwVv(N=jP+F!#* zh^uSs#ol)RG&~K*#(F=S6j;pdn>UI#UR^G}{_d9&th81qVsoB_qv3`3fPnO13iE#Y z;d{l}>PyAl&%ZsN<^FVvAux}HK74d`!m}wX{)UY4C5C2S03XfDxMznsF*gMgWoer? zUl05FME7Xkjyme7qmDZ2sH2WL>ZqfRI_jvSjyh^b{{yjUbN+h%7S8|x002ovPDHLk FV1kl_jphIV literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/1_2_2/mob/banner/half_horizontal.png b/Minecraft.Client/Common/res/1_2_2/mob/banner/half_horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..b855754bd370c91928d964bba594eb1550dfb37a GIT binary patch literal 649 zcmV;40(Sk0P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2NDS~2{)}np#T5^8%ab#RCwC$ zn!!rLKoExaHGBgPiuwRbv4T`VQ1BvEsCuyWRPj9+H_K zhO!}@WWL?m%x)6GQhCdQ%a*OA>*02IpAN$D!B(`|$~z)`-v}NM%mJ892GQQ;m(g^) z_W&5^_vceI-R?br*V$RLuWS-cw|fuZ=5#0K{>$xAn2!%v+IQ!Bb^st)lK>E`1i-c_ z0O)lDyLcEDBjEmG-xdJ${^IeZXqyCpVQ&@yf+Ya6a{zkXBmh1IWC|c90L0{D&>R4! zfChjOVG@8$2@|C-dmKT_(%3`_H~_WykpRr30Be7_8swbtXJuKIcfmFRP%8yO`#ZS* zWhDSI1!}Jax(a}EK;u%_0dx$&c(hvr04SzMfUFD5O@exPYzhGP1LOvY831xagj-^@ z3Zbq8kZtS|I{+&HxC5kjhc=2* zUcMf01wfT;a-%v>dGqW1R$WJ)n@WLJUXA^HT!rj;R1_9)q75G);u}2f!pgQhk85-s zhfnzCqD7vE-hwxu*%k$aRU{gjv3{baIeqAn?%jI&p jTrQW(<#M@Pu4eiLVVBBF>8}lH00000NkvXXu0mjff*}&? literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/1_2_2/mob/banner/half_horizontal_bottom.png b/Minecraft.Client/Common/res/1_2_2/mob/banner/half_horizontal_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..9dfa27e5886cb1698a7632e262fa0530f31bfba6 GIT binary patch literal 663 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 literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/1_2_2/mob/banner/skull.png b/Minecraft.Client/Common/res/1_2_2/mob/banner/skull.png new file mode 100644 index 0000000000000000000000000000000000000000..4c0e0b77d88901f0e2271b4d3984386f173da6a5 GIT binary patch literal 895 zcmV-_1AzRAP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^x2 z4Kop^1bWi|00RF>L_t(|+U;7+iW5N)p4adVJSe*N7#3HMRaj8)BCD|KVSi35Ue?nd z7WL+1_!xPS5J*l5gg_1nAvv^uEj3hXdXm}ho@FOp9~9Y|?R-=9^>j`DB+LH8+;c17 z-ND1`=4?NEzW2ad2uwq44M-j$BqzYd$-cGkmv5{|f9D0DM1TK0wI=Rr((h&g3CMf`tcy-L?iSmrGl?d;|#Kyn6x0 z<8j_Q(tL|x0B2z}C2|xO-|t&PfcQibczyW@5Wu-60D7CR2B{_l2|(~I zY`6X2EjhOe5Ih73old86plDk~fC!ug0r(JzvKF8~s{}3EZ4w|7r?UpsHWe-lx@s~t zaNex|GB|wlze5%_o}3oPhmQ*aK$Kbp-~n>bb>HMYIZK}aJ}-z;17wh!3L9^`sRl&g zbQVFmJdW}fsQT)v(mo<*K>*qh;2R{#%mes_2yKZ4PlTFwE`X%Dk6mIFAQb^<2T1M^ zC37<55+M3&@V*PcXM)KHz{flnAj(9jN#_D`B9y!U$sLc&8i0e+i=d5V96nD=yM-oqmr;HzVKG)@9px>6*L`eHWkdHHb0KkH@13P-ayEm5K7; zxAB(UhqrYNfhb2~e}25puFntii3Lcc;RlHL4Ib^na-X-OH9D??6Wp|D;qB0SFyf(P zI4{lZId4!8mw^ZBGTc}uECc85$(O>qjCd$P>AQFp3WY+UP$(1%g+ifFC=`k?`~~H2 VA}HBu#8vPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4P>8Vc6fQUCw~2T4RhRCwC$ znoUXrK@f%K8s5N#q8>mAMvy273T`9{Q5R}f5jSy_g{V7^;W6fD(bw{ZN~MPglYq{v z2Suo%(=+w;&s29$QT%9HmgN+}FZ@4tZBFOi_2T8eQ|#}oC2OLU1hHxe2p$mR01OA6 zWY441WZrK*00#Q;c9+citq1TlJWBRH86@+5>j7LGZltmQc)3@M`nxm!)$x`N00b)u z0Kr-S^rZlx)e-FYrd#!Z>yvFQ0BHU3?Lp;B0zkKy1%O})Kz0s5t4jjlTfhzh3<&^{ zd=1J0;1KWt&?6)P*dZa23bVx#v`vjAhCl#tiysR>W(Y9%x2r+U3DN+hh5&Paxz(Vb z1LRU+c>w+1<{SV(k?sLDFOZuA{qk4}0QUpz28qDLn$m|FafXxIY-vSnZOd{k@g5)y6IskG9BYqCRL8%-7>7y~<1DebM|4LPt|IYd> zfF^5!naRZ)uJe05-i&^(Y|a+d%WM8V{4aj}YY=1J9*-{tK%M>OL4Bb1;TP3gcOP3e zHw2b)H1_#=R!kmxRbqikyx{{xe1pebSnJzzT%+SU>O|dKwAgZJJs9g@Ft%Ri_O{+e zEnFx2pgF^heZc;~ZF%}0Y|dB@1N45b-cTqM3WY+UP$(1%g+ifFsF}V1ONtTK^{X;X P00000NkvXXu0mjfQ$h(W literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/1_2_2/mob/banner/square_bottom_left.png b/Minecraft.Client/Common/res/1_2_2/mob/banner/square_bottom_left.png new file mode 100644 index 0000000000000000000000000000000000000000..c3edbce5db7f923733d5d27bd61b9793e5aee505 GIT binary patch literal 656 zcmV;B0&o3^P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4N7B(Vhxa{vGWB1uF+RCwC$ znoUXrK@f%K8s5N#q8>mAMvy273T`9{Q5VLnB5vX;3sH9-!(-%V(bw{ZN~J^QFN^7_ z2ZdA^Yo@;bndAJg}y$?It@xfNGI-0k{7KG#h!5o0mpcCwE zd>Ksp$pc`b-=9yxw4XeH*U?$9ujwF|_LB#2bGj48{>$xAHtruT_;=@fb^st*lK_yc z1VG;u0JJ)ioji2&9&mrLZwmlgfAV;e`z8UP+nWV|WC_6R9Dr6g34m__IRr2y0L0{L z&>R2`0Sy2>!XyAWButdTY;hzlOJfs5zyYYmj|5<52(b2-t3l2QrU9550<8Vbtp@cR zV6GH451`-MT>=0orh9;_3rY(|R7GtQiIuo_bQ09dFAvb^ulYa0f{55G4Xq)mb|5x=%0F~DQdUDZ*-}yZrZ$>|MZOqoi}d0~Md+VBA)zQN-z ztn}q|T%+T6#6)Z^TI6+TJs9IK85x(gy^LF{g;z;FXv}b9ov?mzc|Cm%HfD^&1hpTF q>vFkVE|<&Ya=BbCm&@gH)zdEw*y(0HJI5;k0000Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4PZ7b!XlMF0Q-97#k$RCwC$ znoUXrK@f%e8s5N#q8>mAMvy273T`9{Q5VLnB5vX;3sH9-!(-%V(bw{ZO4%WSo{W>J zdQgNKIz3Zg|4eoFgz&5Bf7oO)nJ%M{&}Dlwy!Kn+aBm}8j;3p3GeYoyU=F~b*NXNs zJddXR#sgrWpYIRRwBL9D&x4a_ALCv$?Kd94)$vvw`%l*gVc6ZD@o!Fd>;OQpCIKK= z34p#S0BCgtJGyHZJ>d3i*A@V@{^Jv_!4iPkIRLG05&+)0vZ5%gh>E$NSH{4+2ROVrp6|QfCEsA9|^$B5Mb^vSA(1rOam}A1ep7qTMgf8fz=76pZx>7 z*HI_x=AuQGL+im<4}+2QGPjrYX0`A<$p=jtZma{=4=&5o*I-k|dKjSgQ}w!BE|<&Y ka=BbCm&@gHxmCW(TFzW&i*H07*qoM6N<$f}Fz*kpKVy literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/1_2_2/mob/banner/square_top_left.png b/Minecraft.Client/Common/res/1_2_2/mob/banner/square_top_left.png new file mode 100644 index 0000000000000000000000000000000000000000..e090efd5b0c00a483b630b8e4b236d5adb9bf8b9 GIT binary patch literal 659 zcmV;E0&M+>P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4Pb74-rM>i_@(B}qgj`)po(1`y41#FA^#t6U?u5PndV7?O`iC?6-T9s! z0^qDk0^qD9fVwFHFzax3{Ln2|!2QL(Ednt6n09g=WNz7CrL;|FaDzOt_g#cE7bcM)7K_o_inTikzkddItw}2$TOdzCh zg3LvNF#^ow0}?OMV*lNdi)GftkZa3!d|PJa$ICs%@1l zvdd?>AO07=`Zb6>FR#ZNAs{Ao2C5yEgI{Df){kskwFMfv8vFgc$|f(pGO&OVE%*Qt z-{7$dD|Ok9IXa%hCTuflk?k;h5Za+L(k^3rX*X$xV~_)_5_GH`)&rOAscT}Zgm&nl t)~oC~91e%W;cz${4u`|xa5x-k_yfoh>1I&;X>b4l002ovPDHLkV1hs{6TAQb literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/1_2_2/mob/banner/square_top_right.png b/Minecraft.Client/Common/res/1_2_2/mob/banner/square_top_right.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8aeabf21f3001f1d3791a497cec5c3ac4e2bab GIT binary patch literal 651 zcmV;60(AX}P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4Pd7CKS?*8l(l9Z5t%RCwC$ znoml@U=YP~4R7E=Q4gRLD@YXt1vgTKstdKNikrIXLe!nd@EAQ>^+jHoP7@kUtTk^Q z3}r$($^5=QneR)IHXe^BWmGoaH*7|y?bYPzww3H|t)x~(lez(v72^FA0+I&= zIRO1$E49bLacbUgJOC#8_HvV&_Ztu3p?{Ft>!_ES_Ztu3Y=12s`}gNN$)LMEnk^qpb1wda409qZ%4zJo-54b$q)B=FkA71Zez9ay2dszTTmH=eu0JOR!06qom z5WtWCkY5K-x7G0&To`~qwwWQ|0iZ`n0fR-0Be7{ z8swZH4M1uLu=Zc*YH%6nfQ6RA0bmILbUW)a002e02iUqmZW8p%V<`aK53m~~G63v` z2)D$f3LyfpK6Z%%fC>Qa0Qnsvi4Bn=05Us51Yj#c$)|t?AX5nWH$ifhU=aYBwLsAv zfET5502cmgY?*sNl{w&FDeLl|Ri6b=Wi2o@xp>2IevikC(a$?K&*sJDF@GKY7r*{7 zh%s+pkJkdA$jaQPPt@N0ytqZzvFGLufm&XTy+5BMqq|O4SRjZue1M2=@VEwyC>1Gw=diekV002ovPDHLkV1gcP3?cvk literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/1_2_2/mob/banner/straight_cross.png b/Minecraft.Client/Common/res/1_2_2/mob/banner/straight_cross.png new file mode 100644 index 0000000000000000000000000000000000000000..7a4c2326a5e2bdf8521c6559245712a27a16491e GIT binary patch literal 650 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 BMw0*l literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/1_2_2/mob/banner/stripe_downright.png b/Minecraft.Client/Common/res/1_2_2/mob/banner/stripe_downright.png new file mode 100644 index 0000000000000000000000000000000000000000..37b43795f04e4252f438ba3dbdb77251371f5bac GIT binary patch literal 779 zcmV+m1N8ifP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2NDPt1i3b}jQ{`wok>JNRCwC$ zn$1cBF%ZZ1HGBgPiuwRbv4T`VQ1BvEsCrO)s(7iV9z?zQ7(PZHt#*R5%+99Wk4&=B z%pV3xStpraGWpugvZWTkn$PD8D8^vW7F1@@Wq&h!d+cS0dmF}DYrzx?1PZ_g0fGkz z$pILTdd6NS=f-&189)pWc<>Ye2Kx2!V2qdlJ%E?-iLuYw$QUm-maVcbA*^Z-w)g6I z%jEv^^+7fn?ib28r#tBYfM7)ctgAFMgo<|L%O3@R<)i>WuS2lYyM8_bZqIhx1Bd}a zjrt1!p!cWuM|n9(05I&u0CWkVX1%2pKmg8jz+VLby)Fu%3kVJBE3E=F1t28=NKycB z859K&5<@SksmvBx23x-}L{0R`Y0LQB7;(;x>RngX!{ zfZnF3L7Wpr0r-I6;I9&ZcnZW0fTn=RS->|0M?cm%Kzu8#06akufM_%vY?lB4lw<(d zMgZLxcmv=Pgis1uCqaHZP6`0t2ha-=uK?NvBe;x~uEi+;+!rJVfR^Ew*gJqGK?!f7 z6aWQ)H$eP`CprAX! zCJ;ParL6_v{VWg@0NWe@FG@QBPzQq0Me5pBptBLsB><^O@J}fp^2=Qx1>kZPC`>Ng z;CK8U4=cm6?OB^u`NiLOJ@~)ymoI~m^Yrz&2!K^qr=dJh+W0EJtLmZ8+EPH|)!6s@ zMK*gHjsZ=UA{Q!trMs1S&0A>IH002ov JPDHLkV1iklJFNf! literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/1_2_2/mob/banner/stripe_left.png b/Minecraft.Client/Common/res/1_2_2/mob/banner/stripe_left.png new file mode 100644 index 0000000000000000000000000000000000000000..5659ac7629315da95e3130db2230cb6227ba5c79 GIT binary patch literal 636 zcmV-?0)zdDP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2NDS?7~cl_3IG5C4oO5oRCwC$ zT0u$!K@gm8_yZ4$`T!*uL82fic#$YXJs5L}c!{SRM7{Y8pOL4<)Icq5J8N{4i>WSX zq}NH$bj|c^PtT?_!?XsI$z+Ou|5cW4FBNd!UQf^cR@&cL%hDLrAF#lH8wvWWgC94X z2MKZn40^3BPs7tJUSD|v=;-_FT^6seJOPh`qbzUZUKX#fJOLMn8#(qLF89)~yZc4I zI^NPD0M1Gh0B0=$)TIc(ti##SO}knF*C*Rr1Yq_@w+EFjNdT6;ECFzq1jz0Im~}}4 z_!h7sfRF$olCMEI0vH0G0IUc}0&GY~q{5tWIBip7i4X_^+~LO(AQJ-2{q1RxdxA6p zQX#A|Dyx;>we1pd-tkrEhp3(6fHes8G7TXT92caE0 zW9>4xw{{nr;X2rXmINJphyB29d+MIplF$wv^m@r|AP@)y0)apv5C{YUfj}Uz7(M|_ Wwr+rwX5@GP0000Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2NDc8B#u@!wEzGD5J^NqRCwC$ zn$JqZKoG|B8oq%CMSTFJSV5{FD0q=7R6VFYRlL+w52D_D3?HM97X2b$m`pcRnhK`h zd@z&=+fC-Te=@t9Ec;RZ&uvEM-SzC{zLV|mtQFQoc}uJ!1P=&u0EUB3Vb7z}!o0uo z02t`U+g)MaUwHse!=u99CxgPgzw!Vs4mXOi|9H8VjrzM4|LS;42LOVV1b|>I0Qyn@ z(CP?weA6v^!1c+t767#V`1YXmB>|w@%K|{K1Ry&Hpw%S-@GW460EPsBNWKQ;0B{I+ z0O%2t0PK*ENQK$r2->E`3k`wkbegxp{tQ6g5~Wsy9>79FpsfJV+IBU_IYAnL)DU3q z-*`3H#!1l50dlFZJb-?0a|QsQNcRAn7svqMr018%QUJIgU^hslw#6*~<^^&9tdCvd z0H6YZJ3xMiNM=hc1wdv;hyZLRDESt!0Avy&e-b2@3DyCSI~ehE01is!07xH=`5w?@ z4rrCiF8`hNSpZGe0+q?d8?N(vJl>3cs%*;U)yr%CKKw6!{c8|o-X4!H1wfts=0Sa+ z_TlH%TX!E@HZ=s6ay0h&dX`NddSzmPO1$9%M0|tCU0Cbea$KY1I_gB-T(sD7XgwI~ zVKBB{=JvMUMlDHq)$07*qoM6N<$f_FR-k^lez literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/1_2_2/mob/banner/stripe_right.png b/Minecraft.Client/Common/res/1_2_2/mob/banner/stripe_right.png new file mode 100644 index 0000000000000000000000000000000000000000..56b01da22ff321a05b9b9e8136779c58e0b21cf4 GIT binary patch literal 633 zcmV-<0*3vGP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4PfD9HwZ{r~_13rR#lRCwC$ zT0u$!K@i+;_yZ4$`T!*uL82fic#$YXJs5L}c!{SRM7{Y8pOL3UYowOm&a6>49!zyX z6MC8SOxH}$_VjE~d}8`jnM@|rI{bmX8JxCPi^qPe*xg!5(gX`1@K?b9e%WUQa2_Pc z5isbrk~|ELlX!jU3815|&o@cDzVrm#4-S&NjC)DEzVrl~?XRWSzdPS4hTZLoesQ>= zLjatWBmmA@0;o$7fLVvLqpNng0xpj>wFtoMkFNJhU6KGSdszbDED4a^12F571n@0j zLjWNGLL^^W1djKv<PbbCrwo@h+FyaLtAmST5R$;Af+wqK!=dcOeJha$$m^}#X&>3r& zxxKa9Xol-x2bvRf>>c(4x9zEWVsk<}bkOTLyMaI;5C{YUfj}S-2m}IwKr_4pyv}Zb TbKnI)00000NkvXXu0mjf>`({! literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/1_2_2/mob/banner/stripe_top.png b/Minecraft.Client/Common/res/1_2_2/mob/banner/stripe_top.png new file mode 100644 index 0000000000000000000000000000000000000000..af628ad447129847e4a071a24e4e15ffab962fcf GIT binary patch literal 646 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 JPDHLkV1m`bv5)`& literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/base.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/base.png new file mode 100644 index 0000000000000000000000000000000000000000..9baba14f4bb30ed14afcd0ee19b1020293f79171 GIT binary patch literal 618 zcmV-w0+s!VP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4P@1-0n6B>(^c{7FPXRCwC$ zTER*KF%Zpf_y-;o^#hb*1*w9d;6#&m!_cpRL#%xXC`wizof*b*(K_|=0_&kf(TTcKT z{d|AO;`P=O@H{%n@-ZD`@p|hCxH{g-vHx^^kjDM}ANtMdjt&8ER+0cXYYCt(MF2(} z&Q9*S)eN{j+tnffqd&Pns&q*LFzsatfU_h(b`8L&OA^3cz=i-q0)$9zgK`8g1Uvzl z5t0PhkdR1)IpT2Irp6K>5Cpixk0n4R1ep8V(;(LbX#%7|fVsciY0$3$a;dO90sY?g zF9JY{^bD|hf!reKkH=C3upVFwBvNH@O91l%IRdPXDsd2?LI5j3zCt8Z5-SlPQxPHo zHWQTG1uOwFiIBeulFJ0^2#~uN@oNAsO63TUz8dp0pz#{8Zm6dGJnORrG(HRX#l;Jr z^LsqLjC!eUNfz1VGyfj`7r%ZRM9kak@s$uzCx7Xvchq)%k=?rY*tVq*SjpAc*V{#! zKK81_0!F;x14Mj-$11GVZ9AUP@fPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N(+uF#u(@$^ZZY97#k$RCwC$ zT0u$!K@gm8_yZ4$`T!*uL82fic#$YXJ*YWFyu?!uqTYOl&&bnaYN3|4oi&o(L)Pko zCiF7tovxXl>FJ%6=9sNGQU>SU_4IPzN&7o%g)EI(OW^wr=RtxT0mDJ3kmu29AzrUV zz;rsTB{?)@ll`TmA8&Vsc)d0Oc(jcCMnDrb+25z(Q6cY>K_OoM_XJ!VZWOWqc)6EG z{oQZ+)$x`N0dQ85061$2pe{uKMjg(MZ@T3SxIWp|A^@X5zC9>)NdhqKWeI?@BtUiz zz^F?Sz+J$G073$UNN$621TX|V0hkez1lW*}NQF7#aN4HE5+M)-xWkVnKqds3``gnX z*92(-q(XqXzualiuK{wYusi|%-sTSiK#KGXuz7*pBIu9DQUtIbU<)KtWpPUY^8z^n ztd1&i5THT;D?q+NBvTU05g=0$A^|oNl-va@0Wyh@{}LpZ304u%*jZrJugFxb0r*f_ zn}9Z4lB(JT8kqrYBcPE*ux%)({51_%5NPDn*yrn6nmqK%!~#aV-~uA<;IRs8b=!_- zbUcSm*yf?dw!`Q_Xot>NyUgva-C84D1>4b_;Kkly-*MZXx+gX#v_l8Ip0gVW1OkCT kAP@)y0)apv5D3)67qc1SLAI?zfB*mh07*qoM6N<$f*iRL+yDRo literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/bricks.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/bricks.png new file mode 100644 index 0000000000000000000000000000000000000000..c5da811a8f5489d1436634ce9918054241d37c43 GIT binary patch literal 744 zcmVP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2NDk$IeL=AmjD0)dPzhIW#r3Q`3@!HZO(>Ot+P;-#K?5cTF~_!<41{>JKy%rc#3sU#_6 znt3pk3ES+>OEUX1*{b?Oow+UGvb$NmJ$99o$U z-C;QBIC~wPJClA80l0y*4BH(j(65gNXVMQMK#4iL3{RYWP6p1TA3XmvUH6So&wF*e z<<|c5^+7f2@6Y)+r#s;UWV-HK2|%z(2*`ZhFXR9O%LyPqm;h}#0KsC^5$yP`+suI5 zv)yn4H0b~$0HZ&?KWhA>1mvs(I02aUNeIxS1Nagk0*cK681-lZwCMo;7T`+&O9F(f zy$JCgAmxN&>H$6iiqHXa_ZPhz)K(9WIiR?`z)A?vqyzfB?F9lrN>T!H*8x5PNEZ~N z11Raq?Qu~$fa(FfKvIkj-~|yXiA4z^jpqUgn)|2{7o!7`5uh~(Pz6XAEDXd@t5 zK_vHc0V04a!6*VW>Hq}H35XIx8f$`52n7?M@m#=1Kr!D3wB-OClos`UfP4!SbvEdm z0WnEX6`CpktNJ(r!FvIjT%@6$zQ?1Rk?*_KXUqDfHhCZVFMj1~5Nn&chI`i%Oa0HyEi*I+Oh3Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2NDP}EedSSM*simAMvy273T`9{Q5R}f5jSy_g{V7^;W2Ww=xcdHO{K^DOeaiI z^`HnnOlrEm{+a6T$+AC}L52nj& z4}gJweLMuy<+TU!(me_GIp_q_<+TTJb-WeE{`2)g)@$z<$~UJwb^st)lK>E`1i-Q> z0BCgt+rMk(J>d3i*A@V@e*gX`FPj8_Zf_ONX zUI-O^Ism;I)ButVfoUo_D})3-3jomCay7^~!88CA~RcJF#skeK?y)+f+pVr5`dXRNS_3m%LK~+m^&EJa{vxX%>gidG^Tq%l{sLg zly~{xtWN@{vKA;zF4}ON-{bLNEXVGR*(ATbrk}(A;#a>0G3Mp*coG0*Hcdr!ptACl z{FXgO-WwYNNsh+8-!HPkQ!7s_;6xifK*TqA+=Z28c^}v4xDKE2%|(m653L8I9|j}+ zGPjq0E46T$WJP0!2kU@!#pV4hYp^k+9|ow)F~2UC%jI&pTrQW(<#M@PE>|`E0Cawo Ur|{sZ)&Kwi07*qoM6N<$f{Yv(^#A|> literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/creeper.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/creeper.png new file mode 100644 index 0000000000000000000000000000000000000000..8bb880fee29328d551c1e63953d12b9255e3d86d GIT binary patch literal 729 zcmV;~0w(>5P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2NDSyHASD1i~s-vYe_^wRCwC$ zn$1eXKoH0C8oq%CMSTFJSV5{FD0q=7R6VFYRlL+w52D_D3?CzpR{gI`m`pb0W4F>| z<`08xStmQc?8oeGlH^azHMfE;hnvaU;~+WQ+i(`5Wk)P01P=)608A$XXRot!XR_RT z02Jug$AdFj?md8)>4~$?#l)E`_a4C2@s=C=&({aZY`mW<-<?AJ2!K>oW2@>%_E`#m4~gCbK=Aa&5j0PYgNJ|t=m-G5>~R3W zL!b+jAkY2zZjk1L=*wW!AnI64pOpYsk_R;H#&rR-@L2%Bhrr7A0_zHZ=75!?!m?}n z8ryU@MDY2)0P3mE=J@WfQwRf090R%$sQ0g2XsnVm;cTBIDnA7 zKyGr8hTrLXJbDZXSa(nJK=na>N zH`Hf%unbr>oY$wa1nV>MLjlUN&#%d3GMP*!lgVTPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4Q13;}Kd9{>OXib+I4RCwC$ zTER*KF%Zpf_y-;o^#hb*1*w9d;62x}SeW#3_Fr$0+^B!JP`*3g%SQlcteOC^4%a=S%vmgdQ~)ezB>?m~GkmZux=)Y9R1%@o1fXR&C2swp zs0r}jU_1fhCq&uY421*`O@b*3Kr=y+0I6P%QUOGXP)Y*un;>x}nA!&tRRTos1yU3s zGzY*%X_Nq|eI!-23Pg{9lm*b51d~EBZ!mY9*2gjzHe|?y4dmqz qufbq27z_r3!C){L3Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N(P1O?65F$XRs)s*chkGeJuy-~KoO zXg4OHj*;_5PE#i*fJU919p7||8E}2FZHoXJ{qgNV(QZV5hN046ZJj9sXxf`4fSd&Z zX4e23b&~{O7vLd4Awh(g+y>PM$RQEpAs`8$8DWwD9ug}b0^~eKoSf#Vaib8(Wf61& z#Nme%P&)*2N`!ds&rgF`6HF6eDg==Gn>!84H9##D&S@K58UZ;ZLjB(69|DLJb2ULp z0P+GeA%I0s9*<4!0;mV@0*M&{ctHduF;j^U2;gn15<3A_LI4#YSs^l06HF0cq9DQv z;F+Kb0l8g{aspHmp&YKq(hDt}d@$>YSeTVl=g@DS{*yrn6m^}1~#DbJap$CZc1`kzO-sb&qMyKCNC+Wta zh4-V;BY_?`!}TJ!=Xx8Ba2dFvDWMNbho#}XKiZPmlt2$0lPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4ShEk8B_i2wismq|oHRCwC$ zn$1eXKoH0C8oq%CMSTFJSV5{FD0q=7R6VFYRlL+w52D_D3?CzpRy%F9!oqH1TOc!1i7pZ)LIn ze0`A2#{0j@H>W%C003t@1E6f#(||yiKMDZLQ2~Hn2WRJZ!+ZqXp6!MKP&Mgsg}?zo z@6Yd#@^X{_VAux*P&egufgptd0thw-ga!b;9t=R!4Np@D(kehh073$QLp&=)16oOiqXyvH`Kl1Gz2njL8UTP2 z4FG8b(7ZquKwHjNflxFF^6ha{0PsA39+0R3XxsTR2-2}Q1%P=$bO2}>PKi|jgmV5b z2nK)wz!M;TLgWk}wDUy}_>q_dKxGo_69AeCssQMU^AZGU4xj*35}`f-;BSJ|GQqAn z&moinaNY~_34k;Qz>Ctx0J`ctg;2H%IE{e50#KO*`=)%zud+T0pz&USPcGcxI)0Cb z55ux_uViKQ;x+yp{4f0SWe{SXz8+TrP-Ima${nSRFRQocIrLsB1XNy)eZOBMi>FbZ zSU@G*-~&YX1`khRX_?-Kdvv%Cbwb^^X`%N)?}1@G=nSnFb9-8^Qx6x3HdHcrFn5?Y zoZgRR4puU(2OZ>Psa})GWHOmdCX>lzGMP*!lgUj#=B&vO+(E$}00000NkvXXu0mjf D52rjM literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/diagonal_right.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/diagonal_right.png new file mode 100644 index 0000000000000000000000000000000000000000..64765204b56a80df3f54912db1f77866b835a3b8 GIT binary patch literal 767 zcmVPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4Sh9)RX!p8x;?kx4{BRCwC$ zn$JqZKoG|B8oq%CMSTFJSV5{FD0q=7R6SUGs(7iV9z?zQ7(PZHt#%eCOed2jP4-{i z`Cup;(oMeK?re59$+Cs!mIYPXirH)izXe@)x3l+QCp$jaGSNonA~8#X0OkQgasWny zj)}MNr3qec1R!Pzf97)lX!QH@$pkO|djPMaGZSCafeBu23?N1b#C#6m=5)v8{>$xA zHtruTmG92?(g6TwtpkV&0y96Sk3R|k%Si!%RtK|_hi={j?l1Q30EhvCV7>qVT7U9* zl9!VN0NvgRfRGSM%!?_20IZGyn*;z_-5G!o5LTEMp8_-mASD1uQULHV=nQ~Q2o>hV z6yN}$MJ|NUEzcdxb76;RGYV0Hh6o6w0HO-5wK@PxK3d9HiTAQv0aZGRq zzy*Xg%+~_oGzDS=KvTf_TEI1gHO-ff0ZymF3cwMB2Ig}B{oZZ?06<9wfYbx%yub^9 zHV_(`FC7H=@;E5~xF0|_NW1}P0-=R@aa)`MziLG`R49hp!FcI9yCMi#koDLw^a+5iQcFbaA9tk-#9%V%N(o} xSPvTHWvO13N~Kb%R4SE9rBbO>DwV38egOfe$qPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^xA z2_!3~HmAe@00NOoL_t(|+U=UbO2a@9hVvS}fd@r>0Hs(#svszMkt$R@s6AD@)Kd?l z-h2!nqmNeoBU8q4w@H)PP3q1ML)nmS@_)Ot+1(_|el*hzZDkIfch|F*`%bpMvzA9? z;R4g?bfyhKD{yZv2rv%_$pIJ+I(a;gPVA(7Yfy z0KAM{;-~=1La1xr05|~94v^d-iVmO%f`)n5mY54b^g*y`0DLCcC;%S>E%UxHfCGp= z5o!v6d=u2zOt1)orui}eqOJv+2H+Y4@S?PF00cqXe3_>}D|$d|04jsvs%hTkzh`|M zK;^Z799(4JIDL;t7o)Q4Tvrs;OULAO=)d@tk3r--e?6`Oz!zn1R2tlzGS$-;3v)hd2j{3- P00000NkvXXu0mjf69qdS literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/diagonal_up_right.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/diagonal_up_right.png new file mode 100644 index 0000000000000000000000000000000000000000..325f42253b494c16e42c1de0e4b6cf420f68b170 GIT binary patch literal 786 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 P00000NkvXXu0mjf@%@g? literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/gradient_up.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/gradient_up.png new file mode 100644 index 0000000000000000000000000000000000000000..292f1082d72c31a279a1d2118b8fe00aeaab2b2f GIT binary patch literal 1919 zcmV-_2Y~pAP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^xA z2`3agec3ty00#d_L_t(|+U;7&ZX8t)_`a(4t4>yRrB?N;;nlm-xx=fO z;*3Vc6lpY?>U71-DfzjNKX|iv_xAPT-uDm6@x32@&zie8ZRXDxJnbp5#<5Ak{Et8V z(SEHfD=Q<{9vHxHc6PQnIXNlM)`$S`}^hOpMCOv zdGFf#MtR(M+8-O=x%<`SEMQ?_p<;G89F`~XpNk_?6a=rSKvZbT3-DO6 zc~l{*Q1~7f5*fX^d2Q^xk0%zu;^N}7L9bVPGZ*FB<3b|~;k^*F3NpN7yF4V1`9~VcbYdYE8 zFYo#DuYNUt^3TrY1pv(`V|+0+G(SIoL1S1jtcB;)Y1n&q6)OFV052s|x@elQGDt1q z83!@^sOdVNj+k;+YRW6-&#`K0aiRPVAw1pL%@e@#@^YwsFmrq^U1bK$EAW9}Mf79E z2ntbM3P%ldIuEbYz1%{SO7lNG59a3^zzh~dqQKJ9 zQc?>{U?>ES1`()5W5p9?%&kfN-CZf7T)z)NP_;yY2_jD*IFb=Y0VPLoH(gqdhBtz0 zggH@msmR~!%@ylwtHs{G2PFoSbIi@;TYy_ZUACt{sG9Q_pQ;mdF3mm_bE0(oc~qTc zCa5oREqScb+kqkx-sZep@JfMSWY#Y9RJfa@ zyoO6CC}wAZG)K1tcM&ca_ouQv3N%W6>HDeTNlRuAnbbb=05Hu&C>IpRKv1<4p?WIz zN4`p|a5Lsu(`k1Dx1PFOpfv_WAQ+iF&%59IqFr!~DbyMkk-6+q-V9y(tn zl^DQ<(hsS*qobqH|FB5p51JX$Qnab!%~nTwj|jA+y0m(B_M&UF>IX0iu+yUpBtY`I z7bjROn1i6SM)3Bzf?AYjM@>)-q2nd`XsUHVl?pSf)2?pa(iaw;*3w3`y1n>9^cJHTESq>81couHiW62_u{@5^cHtFA;=%}2dF zWrPtSwI|@#RTpV;a{opFcojXkXi~z6c9^0>D{=t{L94&1Y>lN5++(zcN!6fsiBn8@yW2BG4ZpyOrev$F z|5saMbv~IYVmuVOroFQi^&5D<7FIm3-ycL)aP8_wSnMN*XW z$xJ13e0dq6Dg5i!J8zZW<841a`!JE?{??O;l9Z--InQfv-x_<5hP^Mpxj#0>#}U{G z`gLo&oz+d6Wkrnm{d%3@3dg2-Q}aa6a(r+wxZn<1ncx?9J}Msk_FwVv(N=jP+F!#* zh^uSs#ol)RG&~K*#(F=S6j;pdn>UI#UR^G}{_d9&th81qVsoB_qv3`3fPnO13iE#Y z;d{l}>PyAl&%ZsN<^FVvAux}HK74d`!m}wX{)UY4C5C2S03XfDxMznsF*gMgWoer? zUl05FME7Xkjyme7qmDZ2sH2WL>ZqfRI_jvSjyh^b{{yjUbN+h%7S8|x002ovPDHLk FV1kl_jphIV literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/half_horizontal.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/half_horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..b855754bd370c91928d964bba594eb1550dfb37a GIT binary patch literal 649 zcmV;40(Sk0P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2NDS~2{)}np#T5^8%ab#RCwC$ zn!!rLKoExaHGBgPiuwRbv4T`VQ1BvEsCuyWRPj9+H_K zhO!}@WWL?m%x)6GQhCdQ%a*OA>*02IpAN$D!B(`|$~z)`-v}NM%mJ892GQQ;m(g^) z_W&5^_vceI-R?br*V$RLuWS-cw|fuZ=5#0K{>$xAn2!%v+IQ!Bb^st)lK>E`1i-c_ z0O)lDyLcEDBjEmG-xdJ${^IeZXqyCpVQ&@yf+Ya6a{zkXBmh1IWC|c90L0{D&>R4! zfChjOVG@8$2@|C-dmKT_(%3`_H~_WykpRr30Be7_8swbtXJuKIcfmFRP%8yO`#ZS* zWhDSI1!}Jax(a}EK;u%_0dx$&c(hvr04SzMfUFD5O@exPYzhGP1LOvY831xagj-^@ z3Zbq8kZtS|I{+&HxC5kjhc=2* zUcMf01wfT;a-%v>dGqW1R$WJ)n@WLJUXA^HT!rj;R1_9)q75G);u}2f!pgQhk85-s zhfnzCqD7vE-hwxu*%k$aRU{gjv3{baIeqAn?%jI&p jTrQW(<#M@Pu4eiLVVBBF>8}lH00000NkvXXu0mjff*}&? literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/half_horizontal_bottom.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/half_horizontal_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..9dfa27e5886cb1698a7632e262fa0530f31bfba6 GIT binary patch literal 663 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 literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/skull.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/skull.png new file mode 100644 index 0000000000000000000000000000000000000000..4c0e0b77d88901f0e2271b4d3984386f173da6a5 GIT binary patch literal 895 zcmV-_1AzRAP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^x2 z4Kop^1bWi|00RF>L_t(|+U;7+iW5N)p4adVJSe*N7#3HMRaj8)BCD|KVSi35Ue?nd z7WL+1_!xPS5J*l5gg_1nAvv^uEj3hXdXm}ho@FOp9~9Y|?R-=9^>j`DB+LH8+;c17 z-ND1`=4?NEzW2ad2uwq44M-j$BqzYd$-cGkmv5{|f9D0DM1TK0wI=Rr((h&g3CMf`tcy-L?iSmrGl?d;|#Kyn6x0 z<8j_Q(tL|x0B2z}C2|xO-|t&PfcQibczyW@5Wu-60D7CR2B{_l2|(~I zY`6X2EjhOe5Ih73old86plDk~fC!ug0r(JzvKF8~s{}3EZ4w|7r?UpsHWe-lx@s~t zaNex|GB|wlze5%_o}3oPhmQ*aK$Kbp-~n>bb>HMYIZK}aJ}-z;17wh!3L9^`sRl&g zbQVFmJdW}fsQT)v(mo<*K>*qh;2R{#%mes_2yKZ4PlTFwE`X%Dk6mIFAQb^<2T1M^ zC37<55+M3&@V*PcXM)KHz{flnAj(9jN#_D`B9y!U$sLc&8i0e+i=d5V96nD=yM-oqmr;HzVKG)@9px>6*L`eHWkdHHb0KkH@13P-ayEm5K7; zxAB(UhqrYNfhb2~e}25puFntii3Lcc;RlHL4Ib^na-X-OH9D??6Wp|D;qB0SFyf(P zI4{lZId4!8mw^ZBGTc}uECc85$(O>qjCd$P>AQFp3WY+UP$(1%g+ifFC=`k?`~~H2 VA}HBu#8vPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4P>8Vc6fQUCw~2T4RhRCwC$ znoUXrK@f%K8s5N#q8>mAMvy273T`9{Q5R}f5jSy_g{V7^;W6fD(bw{ZN~MPglYq{v z2Suo%(=+w;&s29$QT%9HmgN+}FZ@4tZBFOi_2T8eQ|#}oC2OLU1hHxe2p$mR01OA6 zWY441WZrK*00#Q;c9+citq1TlJWBRH86@+5>j7LGZltmQc)3@M`nxm!)$x`N00b)u z0Kr-S^rZlx)e-FYrd#!Z>yvFQ0BHU3?Lp;B0zkKy1%O})Kz0s5t4jjlTfhzh3<&^{ zd=1J0;1KWt&?6)P*dZa23bVx#v`vjAhCl#tiysR>W(Y9%x2r+U3DN+hh5&Paxz(Vb z1LRU+c>w+1<{SV(k?sLDFOZuA{qk4}0QUpz28qDLn$m|FafXxIY-vSnZOd{k@g5)y6IskG9BYqCRL8%-7>7y~<1DebM|4LPt|IYd> zfF^5!naRZ)uJe05-i&^(Y|a+d%WM8V{4aj}YY=1J9*-{tK%M>OL4Bb1;TP3gcOP3e zHw2b)H1_#=R!kmxRbqikyx{{xe1pebSnJzzT%+SU>O|dKwAgZJJs9g@Ft%Ri_O{+e zEnFx2pgF^heZc;~ZF%}0Y|dB@1N45b-cTqM3WY+UP$(1%g+ifFsF}V1ONtTK^{X;X P00000NkvXXu0mjfQ$h(W literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/square_bottom_left.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/square_bottom_left.png new file mode 100644 index 0000000000000000000000000000000000000000..c3edbce5db7f923733d5d27bd61b9793e5aee505 GIT binary patch literal 656 zcmV;B0&o3^P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4N7B(Vhxa{vGWB1uF+RCwC$ znoUXrK@f%K8s5N#q8>mAMvy273T`9{Q5VLnB5vX;3sH9-!(-%V(bw{ZN~J^QFN^7_ z2ZdA^Yo@;bndAJg}y$?It@xfNGI-0k{7KG#h!5o0mpcCwE zd>Ksp$pc`b-=9yxw4XeH*U?$9ujwF|_LB#2bGj48{>$xAHtruT_;=@fb^st*lK_yc z1VG;u0JJ)ioji2&9&mrLZwmlgfAV;e`z8UP+nWV|WC_6R9Dr6g34m__IRr2y0L0{L z&>R2`0Sy2>!XyAWButdTY;hzlOJfs5zyYYmj|5<52(b2-t3l2QrU9550<8Vbtp@cR zV6GH451`-MT>=0orh9;_3rY(|R7GtQiIuo_bQ09dFAvb^ulYa0f{55G4Xq)mb|5x=%0F~DQdUDZ*-}yZrZ$>|MZOqoi}d0~Md+VBA)zQN-z ztn}q|T%+T6#6)Z^TI6+TJs9IK85x(gy^LF{g;z;FXv}b9ov?mzc|Cm%HfD^&1hpTF q>vFkVE|<&Ya=BbCm&@gH)zdEw*y(0HJI5;k0000Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4PZ7b!XlMF0Q-97#k$RCwC$ znoUXrK@f%e8s5N#q8>mAMvy273T`9{Q5VLnB5vX;3sH9-!(-%V(bw{ZO4%WSo{W>J zdQgNKIz3Zg|4eoFgz&5Bf7oO)nJ%M{&}Dlwy!Kn+aBm}8j;3p3GeYoyU=F~b*NXNs zJddXR#sgrWpYIRRwBL9D&x4a_ALCv$?Kd94)$vvw`%l*gVc6ZD@o!Fd>;OQpCIKK= z34p#S0BCgtJGyHZJ>d3i*A@V@{^Jv_!4iPkIRLG05&+)0vZ5%gh>E$NSH{4+2ROVrp6|QfCEsA9|^$B5Mb^vSA(1rOam}A1ep7qTMgf8fz=76pZx>7 z*HI_x=AuQGL+im<4}+2QGPjrYX0`A<$p=jtZma{=4=&5o*I-k|dKjSgQ}w!BE|<&Y ka=BbCm&@gHxmCW(TFzW&i*H07*qoM6N<$f}Fz*kpKVy literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/square_top_left.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/square_top_left.png new file mode 100644 index 0000000000000000000000000000000000000000..e090efd5b0c00a483b630b8e4b236d5adb9bf8b9 GIT binary patch literal 659 zcmV;E0&M+>P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4Pb74-rM>i_@(B}qgj`)po(1`y41#FA^#t6U?u5PndV7?O`iC?6-T9s! z0^qDk0^qD9fVwFHFzax3{Ln2|!2QL(Ednt6n09g=WNz7CrL;|FaDzOt_g#cE7bcM)7K_o_inTikzkddItw}2$TOdzCh zg3LvNF#^ow0}?OMV*lNdi)GftkZa3!d|PJa$ICs%@1l zvdd?>AO07=`Zb6>FR#ZNAs{Ao2C5yEgI{Df){kskwFMfv8vFgc$|f(pGO&OVE%*Qt z-{7$dD|Ok9IXa%hCTuflk?k;h5Za+L(k^3rX*X$xV~_)_5_GH`)&rOAscT}Zgm&nl t)~oC~91e%W;cz${4u`|xa5x-k_yfoh>1I&;X>b4l002ovPDHLkV1hs{6TAQb literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/square_top_right.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/square_top_right.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8aeabf21f3001f1d3791a497cec5c3ac4e2bab GIT binary patch literal 651 zcmV;60(AX}P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4Pd7CKS?*8l(l9Z5t%RCwC$ znoml@U=YP~4R7E=Q4gRLD@YXt1vgTKstdKNikrIXLe!nd@EAQ>^+jHoP7@kUtTk^Q z3}r$($^5=QneR)IHXe^BWmGoaH*7|y?bYPzww3H|t)x~(lez(v72^FA0+I&= zIRO1$E49bLacbUgJOC#8_HvV&_Ztu3p?{Ft>!_ES_Ztu3Y=12s`}gNN$)LMEnk^qpb1wda409qZ%4zJo-54b$q)B=FkA71Zez9ay2dszTTmH=eu0JOR!06qom z5WtWCkY5K-x7G0&To`~qwwWQ|0iZ`n0fR-0Be7{ z8swZH4M1uLu=Zc*YH%6nfQ6RA0bmILbUW)a002e02iUqmZW8p%V<`aK53m~~G63v` z2)D$f3LyfpK6Z%%fC>Qa0Qnsvi4Bn=05Us51Yj#c$)|t?AX5nWH$ifhU=aYBwLsAv zfET5502cmgY?*sNl{w&FDeLl|Ri6b=Wi2o@xp>2IevikC(a$?K&*sJDF@GKY7r*{7 zh%s+pkJkdA$jaQPPt@N0ytqZzvFGLufm&XTy+5BMqq|O4SRjZue1M2=@VEwyC>1Gw=diekV002ovPDHLkV1gcP3?cvk literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/straight_cross.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/straight_cross.png new file mode 100644 index 0000000000000000000000000000000000000000..7a4c2326a5e2bdf8521c6559245712a27a16491e GIT binary patch literal 650 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 BMw0*l literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/stripe_downright.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/stripe_downright.png new file mode 100644 index 0000000000000000000000000000000000000000..37b43795f04e4252f438ba3dbdb77251371f5bac GIT binary patch literal 779 zcmV+m1N8ifP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2NDPt1i3b}jQ{`wok>JNRCwC$ zn$1cBF%ZZ1HGBgPiuwRbv4T`VQ1BvEsCrO)s(7iV9z?zQ7(PZHt#*R5%+99Wk4&=B z%pV3xStpraGWpugvZWTkn$PD8D8^vW7F1@@Wq&h!d+cS0dmF}DYrzx?1PZ_g0fGkz z$pILTdd6NS=f-&189)pWc<>Ye2Kx2!V2qdlJ%E?-iLuYw$QUm-maVcbA*^Z-w)g6I z%jEv^^+7fn?ib28r#tBYfM7)ctgAFMgo<|L%O3@R<)i>WuS2lYyM8_bZqIhx1Bd}a zjrt1!p!cWuM|n9(05I&u0CWkVX1%2pKmg8jz+VLby)Fu%3kVJBE3E=F1t28=NKycB z859K&5<@SksmvBx23x-}L{0R`Y0LQB7;(;x>RngX!{ zfZnF3L7Wpr0r-I6;I9&ZcnZW0fTn=RS->|0M?cm%Kzu8#06akufM_%vY?lB4lw<(d zMgZLxcmv=Pgis1uCqaHZP6`0t2ha-=uK?NvBe;x~uEi+;+!rJVfR^Ew*gJqGK?!f7 z6aWQ)H$eP`CprAX! zCJ;ParL6_v{VWg@0NWe@FG@QBPzQq0Me5pBptBLsB><^O@J}fp^2=Qx1>kZPC`>Ng z;CK8U4=cm6?OB^u`NiLOJ@~)ymoI~m^Yrz&2!K^qr=dJh+W0EJtLmZ8+EPH|)!6s@ zMK*gHjsZ=UA{Q!trMs1S&0A>IH002ov JPDHLkV1iklJFNf! literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/stripe_left.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/stripe_left.png new file mode 100644 index 0000000000000000000000000000000000000000..5659ac7629315da95e3130db2230cb6227ba5c79 GIT binary patch literal 636 zcmV-?0)zdDP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2NDS?7~cl_3IG5C4oO5oRCwC$ zT0u$!K@gm8_yZ4$`T!*uL82fic#$YXJs5L}c!{SRM7{Y8pOL4<)Icq5J8N{4i>WSX zq}NH$bj|c^PtT?_!?XsI$z+Ou|5cW4FBNd!UQf^cR@&cL%hDLrAF#lH8wvWWgC94X z2MKZn40^3BPs7tJUSD|v=;-_FT^6seJOPh`qbzUZUKX#fJOLMn8#(qLF89)~yZc4I zI^NPD0M1Gh0B0=$)TIc(ti##SO}knF*C*Rr1Yq_@w+EFjNdT6;ECFzq1jz0Im~}}4 z_!h7sfRF$olCMEI0vH0G0IUc}0&GY~q{5tWIBip7i4X_^+~LO(AQJ-2{q1RxdxA6p zQX#A|Dyx;>we1pd-tkrEhp3(6fHes8G7TXT92caE0 zW9>4xw{{nr;X2rXmINJphyB29d+MIplF$wv^m@r|AP@)y0)apv5C{YUfj}Uz7(M|_ Wwr+rwX5@GP0000Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2NDc8B#u@!wEzGD5J^NqRCwC$ zn$JqZKoG|B8oq%CMSTFJSV5{FD0q=7R6VFYRlL+w52D_D3?HM97X2b$m`pcRnhK`h zd@z&=+fC-Te=@t9Ec;RZ&uvEM-SzC{zLV|mtQFQoc}uJ!1P=&u0EUB3Vb7z}!o0uo z02t`U+g)MaUwHse!=u99CxgPgzw!Vs4mXOi|9H8VjrzM4|LS;42LOVV1b|>I0Qyn@ z(CP?weA6v^!1c+t767#V`1YXmB>|w@%K|{K1Ry&Hpw%S-@GW460EPsBNWKQ;0B{I+ z0O%2t0PK*ENQK$r2->E`3k`wkbegxp{tQ6g5~Wsy9>79FpsfJV+IBU_IYAnL)DU3q z-*`3H#!1l50dlFZJb-?0a|QsQNcRAn7svqMr018%QUJIgU^hslw#6*~<^^&9tdCvd z0H6YZJ3xMiNM=hc1wdv;hyZLRDESt!0Avy&e-b2@3DyCSI~ehE01is!07xH=`5w?@ z4rrCiF8`hNSpZGe0+q?d8?N(vJl>3cs%*;U)yr%CKKw6!{c8|o-X4!H1wfts=0Sa+ z_TlH%TX!E@HZ=s6ay0h&dX`NddSzmPO1$9%M0|tCU0Cbea$KY1I_gB-T(sD7XgwI~ zVKBB{=JvMUMlDHq)$07*qoM6N<$f_FR-k^lez literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/stripe_right.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/stripe_right.png new file mode 100644 index 0000000000000000000000000000000000000000..56b01da22ff321a05b9b9e8136779c58e0b21cf4 GIT binary patch literal 633 zcmV-<0*3vGP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2N4PfD9HwZ{r~_13rR#lRCwC$ zT0u$!K@i+;_yZ4$`T!*uL82fic#$YXJs5L}c!{SRM7{Y8pOL3UYowOm&a6>49!zyX z6MC8SOxH}$_VjE~d}8`jnM@|rI{bmX8JxCPi^qPe*xg!5(gX`1@K?b9e%WUQa2_Pc z5isbrk~|ELlX!jU3815|&o@cDzVrm#4-S&NjC)DEzVrl~?XRWSzdPS4hTZLoesQ>= zLjatWBmmA@0;o$7fLVvLqpNng0xpj>wFtoMkFNJhU6KGSdszbDED4a^12F571n@0j zLjWNGLL^^W1djKv<PbbCrwo@h+FyaLtAmST5R$;Af+wqK!=dcOeJha$$m^}#X&>3r& zxxKa9Xol-x2bvRf>>c(4x9zEWVsk<}bkOTLyMaI;5C{YUfj}S-2m}IwKr_4pyv}Zb TbKnI)00000NkvXXu0mjf>`({! literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/stripe_top.png b/Minecraft.Client/Common/res/TitleUpdate/res/mob/banner/stripe_top.png new file mode 100644 index 0000000000000000000000000000000000000000..af628ad447129847e4a071a24e4e15ffab962fcf GIT binary patch literal 646 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 mob, shared_ptr(item->getItem()) != nullptr && BannerRenderer::instance != nullptr) + { + int baseColor = item->getAuxValue() & 15; + BannerRenderer::instance->renderBannerForHand(1.0f, baseColor); + glPopMatrix(); + return; + } + Tile *tile = Tile::tiles[item->id]; if ((item->getIconType() == Icon::TYPE_TERRAIN && tile != nullptr && TileRenderer::canRender(tile->getRenderShape())) && item->id != AirTile::barrier_Id) { @@ -709,6 +719,17 @@ void ItemInHandRenderer::render(float a) glPopMatrix(); return; } + else if (dynamic_cast(item->getItem()) != nullptr && BannerRenderer::instance != nullptr) + { + int baseColor = item->getAuxValue() & 15; + glRotatef(50.0f, 0.0f, 1.0f, 0.0f); + glTranslatef(0.0f, 0.05f, 0.0f); + const float bs = 0.6f; + glScalef(bs, -bs, -bs); + BannerRenderer::instance->renderBannerForHand(1.0f, baseColor); + glPopMatrix(); + return; + } else { renderItem(player, item, 0, false); diff --git a/Minecraft.Client/ItemRenderer.cpp b/Minecraft.Client/ItemRenderer.cpp index ae6e730d..36bda853 100644 --- a/Minecraft.Client/ItemRenderer.cpp +++ b/Minecraft.Client/ItemRenderer.cpp @@ -3,7 +3,9 @@ #include "TileRenderer.h" #include "EntityRenderDispatcher.h" #include "SkullTileRenderer.h" +#include "BannerRenderer.h" #include "../Minecraft.World/SkullItem.h" +#include "../Minecraft.World/BannerItem.h" #include "../Minecraft.World/Facing.h" #include "../Minecraft.World/JavaMath.h" #include "../Minecraft.World/net.minecraft.world.entity.item.h" @@ -94,6 +96,14 @@ void ItemRenderer::render(shared_ptr _itemEntity, double x, double y, do glScalef(0.5f, 0.5f, 0.5f); SkullTileRenderer::instance->renderSkull(-0.5f, -0.25f, -0.5f, Facing::UP, 0.0f, item->getAuxValue(), extra); } + else if (dynamic_cast(item->getItem()) != nullptr && BannerRenderer::instance != nullptr) + { + int baseColor = item->getAuxValue() & 15; + glRotatef(spin, 0.0f, 1.0f, 0.0f); + const float s = 0.18f; + glScalef(s, -s, -s); + BannerRenderer::instance->renderBannerForHand(1.0f, baseColor); + } else if ((item->getIconType() == Icon::TYPE_TERRAIN && tile != nullptr && TileRenderer::canRender(tile->getRenderShape())) && item->id != Tile::barrier_Id) { glRotatef(spin, 0, 1, 0); @@ -403,6 +413,13 @@ void ItemRenderer::renderGuiItem(Font *font, Textures *textures, shared_ptr(item->getItem()) != nullptr && BannerRenderer::instance != nullptr) + { + int baseColor = item->getAuxValue() & 15; + BannerRenderer::instance->renderBannerForGui(x, y, fScaleX, fScaleY, fAlpha, baseColor); + return; + } + if ((item->getIconType() == Icon::TYPE_TERRAIN && TileRenderer::canRender(Tile::tiles[itemId]->getRenderShape())) && itemId != Tile::barrier_Id) { PIXBeginNamedEvent(0,"3D gui item render %d\n",itemId); diff --git a/Minecraft.Client/Lighting.cpp b/Minecraft.Client/Lighting.cpp index 24fecbb9..d95896dc 100644 --- a/Minecraft.Client/Lighting.cpp +++ b/Minecraft.Client/Lighting.cpp @@ -55,7 +55,12 @@ FloatBuffer *Lighting::getBuffer(float a, float b, float c, float d) return lb; } -void Lighting::turnOnGui() +void Lighting::setAmbient(float a) +{ + glLightModel(GL_LIGHT_MODEL_AMBIENT, getBuffer(a, a, a, 1.0f)); +} + +void Lighting::turnOnGui() { glPushMatrix(); glRotatef(-30, 0, 1, 0); diff --git a/Minecraft.Client/Lighting.h b/Minecraft.Client/Lighting.h index c06fd539..972ab238 100644 --- a/Minecraft.Client/Lighting.h +++ b/Minecraft.Client/Lighting.h @@ -10,6 +10,7 @@ public: static void turnOff(); static void turnOn(); static void turnOnGui(); + static void setAmbient(float a); private: static FloatBuffer *getBuffer(double a, double b, double c, double d); static FloatBuffer *getBuffer(float a, float b, float c, float d); diff --git a/Minecraft.Client/PlayerRenderer.cpp b/Minecraft.Client/PlayerRenderer.cpp index d9f94edf..d5ad2eb4 100644 --- a/Minecraft.Client/PlayerRenderer.cpp +++ b/Minecraft.Client/PlayerRenderer.cpp @@ -627,6 +627,13 @@ void PlayerRenderer::additionalRendering(shared_ptr _mob, float a) glRotatef(45, 0, 1, 0); glScalef(-s, -s, s); } + else if (dynamic_cast(Item::items[item->id]) != nullptr) + { + glTranslatef(0 / 16.0f, 2 / 16.0f, -4 / 16.0f); + glRotatef(90.0f, 0.0f, 1.0f, 0.0f); + glRotatef(90.0f, 0.0f, 0.0f, 1.0f); + glScalef(0.22f, 0.22f, 0.22f); + } else { float s = 6 / 16.0f; diff --git a/Minecraft.Client/Textures.cpp b/Minecraft.Client/Textures.cpp index 06918fde..31fb714d 100644 --- a/Minecraft.Client/Textures.cpp +++ b/Minecraft.Client/Textures.cpp @@ -195,6 +195,7 @@ const wchar_t *Textures::preLoaded[TN_COUNT] = L"mob/guardian_elder", L"mob/guardian_beam", L"mob/bear/polarbear", + L"mob/banner/banner_base", #ifdef _LARGE_WORLDS L"misc/additionalmapicons", diff --git a/Minecraft.Client/Textures.h b/Minecraft.Client/Textures.h index 74e2aea5..6b2fb973 100644 --- a/Minecraft.Client/Textures.h +++ b/Minecraft.Client/Textures.h @@ -181,6 +181,7 @@ typedef enum _TEXTURE_NAME TN_MOB_GUARDIAN_ELDER, TN_MOB_GUARDIAN_BEAM, TN_MOB_POLARBEAR, + TN_MOB_BANNER_BANNER_BASE, #ifdef _LARGE_WORLDS TN_MISC_ADDITIONALMAPICONS, diff --git a/Minecraft.Client/TileEntityRenderDispatcher.cpp b/Minecraft.Client/TileEntityRenderDispatcher.cpp index ecef1720..6b182a11 100644 --- a/Minecraft.Client/TileEntityRenderDispatcher.cpp +++ b/Minecraft.Client/TileEntityRenderDispatcher.cpp @@ -14,6 +14,8 @@ #include "SkullTileRenderer.h" #include "EnderChestRenderer.h" #include "BeaconRenderer.h" +#include "BannerRenderer.h" +#include "BannerModel.h" TileEntityRenderDispatcher *TileEntityRenderDispatcher::instance = nullptr; double TileEntityRenderDispatcher::xOff = 0; @@ -47,6 +49,7 @@ TileEntityRenderDispatcher::TileEntityRenderDispatcher() renderers[eTYPE_SKULLTILEENTITY] = new SkullTileRenderer(); renderers[eTYPE_FURNACETILEENTITY] = nullptr; renderers[eTYPE_BEACONTILEENTITY] = new BeaconRenderer(); + renderers[eTYPE_BANNERTILEENTITY] = new BannerRenderer(); glDisable(GL_LIGHTING); for(auto& renderer : renderers) diff --git a/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml b/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml index 7121162b..62ae7dd7 100644 --- a/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml +++ b/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml @@ -9694,4 +9694,72 @@ All Ender Chests in a world are linked. Items placed into an Ender Chest are acc Remove Favorite + + + Banner + + + + Black Banner + + + + Red Banner + + + + Green Banner + + + + Brown Banner + + + + Blue Banner + + + + Purple Banner + + + + Cyan Banner + + + + Light Gray Banner + + + + Gray Banner + + + + Pink Banner + + + + Lime Banner + + + + Yellow Banner + + + + Light Blue Banner + + + + Magenta Banner + + + + Orange Banner + + + + White Banner + diff --git a/Minecraft.Client/cmake/sources/Common.cmake b/Minecraft.Client/cmake/sources/Common.cmake index 98119931..4017f32e 100644 --- a/Minecraft.Client/cmake/sources/Common.cmake +++ b/Minecraft.Client/cmake/sources/Common.cmake @@ -971,6 +971,10 @@ source_group("net/minecraft/client/renderer/texture/custom" FILES ${_MINECRAFT_C set(_MINECRAFT_CLIENT_COMMON_NET_MINECRAFT_CLIENT_RENDERER_TILEENTITY "${CMAKE_CURRENT_SOURCE_DIR}/BeaconRenderer.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/BeaconRenderer.h" + "${CMAKE_CURRENT_SOURCE_DIR}/BannerModel.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/BannerModel.h" + "${CMAKE_CURRENT_SOURCE_DIR}/BannerRenderer.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/BannerRenderer.h" "${CMAKE_CURRENT_SOURCE_DIR}/ChestRenderer.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/ChestRenderer.h" "${CMAKE_CURRENT_SOURCE_DIR}/EnchantTableRenderer.cpp" diff --git a/Minecraft.Server/cmake/sources/Common.cmake b/Minecraft.Server/cmake/sources/Common.cmake index b6497ca4..52b0e9a9 100644 --- a/Minecraft.Server/cmake/sources/Common.cmake +++ b/Minecraft.Server/cmake/sources/Common.cmake @@ -415,6 +415,8 @@ set(_MINECRAFT_SERVER_COMMON_ROOT "${_MS_SRC}/../Minecraft.Client/RabbitRenderer.cpp" "${_MS_SRC}/../Minecraft.Client/PolarBearModel.cpp" "${_MS_SRC}/../Minecraft.Client/PolarBearRenderer.cpp" + "${_MS_SRC}/../Minecraft.Client/BannerModel.cpp" + "${_MS_SRC}/../Minecraft.Client/BannerRenderer.cpp" "${_MS_SRC}/../Minecraft.Client/Rect2i.cpp" "${_MS_SRC}/../Minecraft.Client/RedDustParticle.cpp" "${_MS_SRC}/../Minecraft.Client/RemotePlayer.cpp" diff --git a/Minecraft.World/BannerItem.cpp b/Minecraft.World/BannerItem.cpp new file mode 100644 index 00000000..34eaecb2 --- /dev/null +++ b/Minecraft.World/BannerItem.cpp @@ -0,0 +1,81 @@ +#include "stdafx.h" +#include "net.minecraft.world.entity.player.h" +#include "net.minecraft.world.level.h" +#include "net.minecraft.world.level.tile.h" +#include "net.minecraft.world.level.tile.entity.h" +#include "ItemInstance.h" +#include "BannerItem.h" +#include "BannerTileEntity.h" +#include "Mth.h" + +const unsigned int BannerItem::COLOR_DESCS[16] = +{ + IDS_TILE_BANNER_BLACK, + IDS_TILE_BANNER_RED, + IDS_TILE_BANNER_GREEN, + IDS_TILE_BANNER_BROWN, + IDS_TILE_BANNER_BLUE, + IDS_TILE_BANNER_PURPLE, + IDS_TILE_BANNER_CYAN, + IDS_TILE_BANNER_SILVER, + IDS_TILE_BANNER_GRAY, + IDS_TILE_BANNER_PINK, + IDS_TILE_BANNER_LIME, + IDS_TILE_BANNER_YELLOW, + IDS_TILE_BANNER_LIGHT_BLUE, + IDS_TILE_BANNER_MAGENTA, + IDS_TILE_BANNER_ORANGE, + IDS_TILE_BANNER_WHITE, +}; + +BannerItem::BannerItem(int id) : Item(id) +{ + maxStackSize = 16; + setStackedByData(true); + setMaxDamage(0); +} + +unsigned int BannerItem::getDescriptionId(shared_ptr instance) +{ + int color = instance->getAuxValue() & 15; + return COLOR_DESCS[color]; +} + +bool BannerItem::useOn(shared_ptr instance, shared_ptr player, Level *level, + int x, int y, int z, int face, float clickX, float clickY, float clickZ, bool bTestUseOnOnly) +{ + if (face == 0) return false; + if (!level->getMaterial(x, y, z)->isSolid()) return false; + + if (face == 1) y++; + if (face == 2) z--; + if (face == 3) z++; + if (face == 4) x--; + if (face == 5) x++; + + if (!player->mayUseItemAt(x, y, z, face, instance)) return false; + + if (!bTestUseOnOnly) + { + if (face == 1) + { + int rot = Mth::floor(((player->yRot + 180.0f) * 16.0f) / 360.0f + 0.5f) & 15; + level->setTileAndData(x, y, z, Tile::standing_banner_Id, rot, Tile::UPDATE_CLIENTS); + } + else + { + level->setTileAndData(x, y, z, Tile::wall_banner_Id, face, Tile::UPDATE_CLIENTS); + } + + shared_ptr bte = dynamic_pointer_cast(level->getTileEntity(x, y, z)); + if (bte != nullptr) + { + int color = instance->getAuxValue() & 15; + bte->setBaseColor(color); + bte->setChanged(); + } + + instance->count--; + } + return true; +} diff --git a/Minecraft.World/BannerItem.h b/Minecraft.World/BannerItem.h new file mode 100644 index 00000000..829268c4 --- /dev/null +++ b/Minecraft.World/BannerItem.h @@ -0,0 +1,15 @@ +#pragma once +#include "Item.h" + +class IconRegister; + +class BannerItem : public Item +{ +private: + static const unsigned int COLOR_DESCS[16]; + +public: + BannerItem(int id); + virtual unsigned int getDescriptionId(shared_ptr instance) override; + virtual bool useOn(shared_ptr instance, shared_ptr player, Level *level, int x, int y, int z, int face, float clickX, float clickY, float clickZ, bool bTestUseOnOnly = false) override; +}; diff --git a/Minecraft.World/BannerTile.cpp b/Minecraft.World/BannerTile.cpp new file mode 100644 index 00000000..2a0dfc93 --- /dev/null +++ b/Minecraft.World/BannerTile.cpp @@ -0,0 +1,155 @@ +#include "stdafx.h" +#include "net.minecraft.world.level.h" +#include "net.minecraft.world.item.h" +#include "net.minecraft.world.entity.player.h" +#include "Material.h" +#include "ItemInstance.h" +#include "Random.h" +#include "BannerTileEntity.h" +#include "BannerTile.h" + +BannerTile::BannerTile(int id, bool onGround) : BaseEntityTile(id, Material::wood, isSolidRender()) +{ + this->onGround = onGround; + this->m_dropColor = 15; + updateDefaultShape(); +} + +Icon *BannerTile::getTexture(int face, int data) +{ + return Tile::wood->getTexture(face); +} + +void BannerTile::updateDefaultShape() +{ + if (onGround) + { + float r = 4 / 16.0f; + float h = 16 / 16.0f; + this->setShape(0.5f - r, 0, 0.5f - r, 0.5f + r, h, 0.5f + r); + } + else + { + this->setShape(0, 0, 0, 1, 1, 1); + } +} + +AABB *BannerTile::getAABB(Level *level, int x, int y, int z) +{ + return nullptr; +} + +AABB *BannerTile::getTileAABB(Level *level, int x, int y, int z) +{ + updateShape(level, x, y, z); + return BaseEntityTile::getTileAABB(level, x, y, z); +} + +void BannerTile::updateShape(LevelSource *level, int x, int y, int z, int forceData, shared_ptr forceEntity) +{ + if (onGround) return; + + int face = level->getData(x, y, z); + + float h0 = 0 / 16.0f; + float h1 = 16 / 16.0f; + float d0 = 2 / 16.0f; + float w0 = 2 / 16.0f; + float w1 = 14 / 16.0f; + + setShape(0, 0, 0, 1, 1, 1); + if (face == 2) setShape(w0, h0, 1 - d0, w1, h1, 1); + if (face == 3) setShape(w0, h0, 0, w1, h1, d0); + if (face == 4) setShape(1 - d0, h0, w0, 1, h1, w1); + if (face == 5) setShape(0, h0, w0, d0, h1, w1); +} + +int BannerTile::getRenderShape() +{ + return Tile::SHAPE_INVISIBLE; +} + +bool BannerTile::isCubeShaped() +{ + return false; +} + +bool BannerTile::isPathfindable(LevelSource *level, int x, int y, int z) +{ + return true; +} + +bool BannerTile::isSolidRender(bool isServerLevel) +{ + return false; +} + +shared_ptr BannerTile::newTileEntity(Level *level) +{ + return std::make_shared(); +} + +int BannerTile::getResource(int data, Random *random, int playerBonusLevel) +{ + return Tile::standing_banner_Id; +} + +void BannerTile::neighborChanged(Level *level, int x, int y, int z, int type) +{ + bool remove = false; + + if (onGround) + { + if (!level->getMaterial(x, y - 1, z)->isSolid()) remove = true; + } + else + { + int face = level->getData(x, y, z); + remove = true; + if (face == 2 && level->getMaterial(x, y, z + 1)->isSolid()) remove = false; + if (face == 3 && level->getMaterial(x, y, z - 1)->isSolid()) remove = false; + if (face == 4 && level->getMaterial(x + 1, y, z)->isSolid()) remove = false; + if (face == 5 && level->getMaterial(x - 1, y, z)->isSolid()) remove = false; + } + if (remove) + { + spawnResources(level, x, y, z, level->getData(x, y, z), 0); + level->removeTile(x, y, z); + level->removeTileEntity(x, y, z); + } + + BaseEntityTile::neighborChanged(level, x, y, z, type); +} + +int BannerTile::cloneTileId(Level *level, int x, int y, int z) +{ + return Tile::standing_banner_Id; +} + +void BannerTile::registerIcons(IconRegister *iconRegister) +{ +} + +void BannerTile::playerWillDestroy(Level *level, int x, int y, int z, int data, shared_ptr player) +{ + shared_ptr bte = dynamic_pointer_cast(level->getTileEntity(x, y, z)); + m_dropColor = (bte != nullptr) ? (bte->getBaseColor() & 15) : 15; + + BaseEntityTile::playerWillDestroy(level, x, y, z, data, player); +} + +void BannerTile::spawnResources(Level *level, int x, int y, int z, int data, float odds, int playerBonusLevel) +{ + if (level->isClientSide) return; + + int color = m_dropColor; + shared_ptr bte = dynamic_pointer_cast(level->getTileEntity(x, y, z)); + if (bte != nullptr) color = bte->getBaseColor() & 15; + + int count = getResourceCountForLootBonus(playerBonusLevel, level->random); + for (int i = 0; i < count; i++) + { + if (level->random->nextFloat() > odds) continue; + popResource(level, x, y, z, std::make_shared(Tile::standing_banner_Id, 1, color)); + } +} diff --git a/Minecraft.World/BannerTile.h b/Minecraft.World/BannerTile.h new file mode 100644 index 00000000..6b02bd9c --- /dev/null +++ b/Minecraft.World/BannerTile.h @@ -0,0 +1,44 @@ +#pragma once + +#include "BaseEntityTile.h" +#include "TileEntity.h" + +#include "stdafx.h" +#include "Material.h" + +class Player; + +class BannerTile : public BaseEntityTile +{ + friend class Tile; +private: + bool onGround; + int m_dropColor; + +protected: + BannerTile(int id, bool onGround); + +public: + Icon *getTexture(int face, int data); + virtual void updateDefaultShape(); + AABB *getAABB(Level *level, int x, int y, int z); + AABB *getTileAABB(Level *level, int x, int y, int z); + void updateShape(LevelSource *level, int x, int y, int z, int forceData = -1, shared_ptr forceEntity = shared_ptr()); + int getRenderShape(); + bool isCubeShaped(); + virtual bool isPathfindable(LevelSource *level, int x, int y, int z); + bool isSolidRender(bool isServerLevel = false); + +protected: + shared_ptr newTileEntity(Level *level); + +public: + int getResource(int data, Random *random, int playerBonusLevel); + void neighborChanged(Level *level, int x, int y, int z, int type); + int cloneTileId(Level *level, int x, int y, int z); + void registerIcons(IconRegister *iconRegister); + + virtual void playerWillDestroy(Level *level, int x, int y, int z, int data, shared_ptr player) override; + virtual void spawnResources(Level *level, int x, int y, int z, int data, float odds, int playerBonusLevel) override; + using BaseEntityTile::spawnResources; +}; diff --git a/Minecraft.World/BannerTileEntity.cpp b/Minecraft.World/BannerTileEntity.cpp new file mode 100644 index 00000000..abaa3992 --- /dev/null +++ b/Minecraft.World/BannerTileEntity.cpp @@ -0,0 +1,70 @@ +#include "stdafx.h" +#include "com.mojang.nbt.h" +#include "net.minecraft.network.packet.h" +#include "BannerTileEntity.h" +#include "TileEntityDataPacket.h" + +BannerTileEntity::BannerTileEntity() : TileEntity() +{ + baseColor = 15; +} + +void BannerTileEntity::save(CompoundTag *tag) +{ + TileEntity::save(tag); + tag->putInt(L"Base", baseColor); + + if (!patterns.empty()) + { + ListTag *list = new ListTag(); + for (const BannerPattern &bp : patterns) + { + CompoundTag *entry = new CompoundTag(); + entry->putString(L"Pattern", bp.pattern); + entry->putInt(L"Color", bp.color); + list->add(entry); + } + tag->put(L"Patterns", list); + } +} + +void BannerTileEntity::load(CompoundTag *tag) +{ + TileEntity::load(tag); + baseColor = tag->getInt(L"Base"); + patterns.clear(); + + if (tag->contains(L"Patterns")) + { + ListTag *list = static_cast *>( + static_cast(tag->getList(L"Patterns"))); + if (list) + { + for (int i = 0; i < list->size(); i++) + { + CompoundTag *entry = list->get(i); + BannerPattern bp; + bp.pattern = entry->getString(L"Pattern"); + bp.color = entry->getInt(L"Color"); + patterns.push_back(bp); + if (patterns.size() >= 6) break; + } + } + } +} + +shared_ptr BannerTileEntity::getUpdatePacket() +{ + CompoundTag *tag = new CompoundTag(); + save(tag); + return std::make_shared(x, y, z, TileEntityDataPacket::TYPE_BANNER, tag); +} + +shared_ptr BannerTileEntity::clone() +{ + shared_ptr result = std::make_shared(); + TileEntity::clone(result); + result->baseColor = baseColor; + result->patterns = patterns; + return result; +} diff --git a/Minecraft.World/BannerTileEntity.h b/Minecraft.World/BannerTileEntity.h new file mode 100644 index 00000000..792759b6 --- /dev/null +++ b/Minecraft.World/BannerTileEntity.h @@ -0,0 +1,38 @@ +#pragma once +using namespace std; + +#include "TileEntity.h" +#include + +struct BannerPattern +{ + wstring pattern; + int color; +}; + +class BannerTileEntity : public TileEntity +{ +public: + eINSTANCEOF GetType() { return eTYPE_BANNERTILEENTITY; } + static TileEntity *create() { return new BannerTileEntity(); } + +private: + int baseColor; + vector patterns; + +public: + BannerTileEntity(); + virtual ~BannerTileEntity() {} + + int getBaseColor() const { return baseColor; } + void setBaseColor(int color) { baseColor = color; } + + const vector &getPatterns() const { return patterns; } + void addPattern(const wstring &pattern, int color) { patterns.push_back({ pattern, color }); } + void clearPatterns() { patterns.clear(); } + + virtual void save(CompoundTag *tag); + virtual void load(CompoundTag *tag); + virtual shared_ptr getUpdatePacket(); + virtual shared_ptr clone(); +}; diff --git a/Minecraft.World/Class.h b/Minecraft.World/Class.h index 83bb538e..e7128086 100644 --- a/Minecraft.World/Class.h +++ b/Minecraft.World/Class.h @@ -319,6 +319,7 @@ enum eINSTANCEOF eTYPE_COMPARATORTILEENTITY = eTYPE_TILEENTITY | 0x0F, eTYPE_DAYLIGHTDETECTORTILEENTITY = eTYPE_TILEENTITY | 0x10, eTYPE_HOPPERTILEENTITY = eTYPE_TILEENTITY | 0x11, + eTYPE_BANNERTILEENTITY = eTYPE_TILEENTITY | 0x12, eTYPE_DISPENSERTILEENTITY = eTYPE_TILEENTITY | BIT_DISPENSERTILEENTITY, eTYPE_DROPPERTILEENTITY = eTYPE_DISPENSERTILEENTITY | 0x1, @@ -546,6 +547,7 @@ public: classes->push_back( SUBCLASS(eTYPE_COMPARATORTILEENTITY )->addParent( eTYPE_TILEENTITY ) ); classes->push_back( SUBCLASS(eTYPE_DAYLIGHTDETECTORTILEENTITY )->addParent( eTYPE_TILEENTITY ) ); classes->push_back( SUBCLASS(eTYPE_HOPPERTILEENTITY )->addParent( eTYPE_TILEENTITY ) ); + classes->push_back( SUBCLASS(eTYPE_BANNERTILEENTITY )->addParent( eTYPE_TILEENTITY ) ); classes->push_back( SUBCLASS(eTYPE_DISPENSERTILEENTITY )->addParent( eTYPE_TILEENTITY ) ); classes->push_back( SUBCLASS(eTYPE_DROPPERTILEENTITY )->addParent( eTYPE_DISPENSERTILEENTITY ) ); diff --git a/Minecraft.World/GrassPathTile.cpp b/Minecraft.World/GrassPathTile.cpp index a39d1616..153208ef 100644 --- a/Minecraft.World/GrassPathTile.cpp +++ b/Minecraft.World/GrassPathTile.cpp @@ -5,7 +5,7 @@ #include "Facing.h" #include "GrassPathTile.h" -GrassPathTile::GrassPathTile(int id) : Tile(id, Material::dirt), iconTop(nullptr) +GrassPathTile::GrassPathTile(int id) : Tile(id, Material::dirt), iconTop(nullptr), iconBottom(nullptr) { } @@ -26,13 +26,15 @@ bool GrassPathTile::isCubeShaped() void GrassPathTile::registerIcons(IconRegister *iconRegister) { - iconTop = iconRegister->registerIcon(L"grass_path_top"); - icon = iconRegister->registerIcon(L"grass_path_side"); + iconTop = iconRegister->registerIcon(L"grass_path_top"); + iconBottom = iconRegister->registerIcon(L"dirt"); + icon = iconRegister->registerIcon(L"grass_path_side"); } Icon *GrassPathTile::getTexture(int face, int data) { if (face == Facing::UP) return iconTop; + if (face == Facing::DOWN) return iconBottom; return icon; } diff --git a/Minecraft.World/GrassPathTile.h b/Minecraft.World/GrassPathTile.h index cb748f50..cbabc8da 100644 --- a/Minecraft.World/GrassPathTile.h +++ b/Minecraft.World/GrassPathTile.h @@ -4,6 +4,7 @@ class GrassPathTile : public Tile { Icon *iconTop; + Icon *iconBottom; public: GrassPathTile(int id); diff --git a/Minecraft.World/Tile.cpp b/Minecraft.World/Tile.cpp index a929a380..0a8db3a9 100644 --- a/Minecraft.World/Tile.cpp +++ b/Minecraft.World/Tile.cpp @@ -277,6 +277,8 @@ BoneBlockTile* Tile::bone_block = nullptr; Tile* Tile::barrier = nullptr; TallGrass2* Tile::double_plant = nullptr; +BannerTile* Tile::standing_banner = nullptr; +BannerTile* Tile::wall_banner = nullptr; DWORD Tile::tlsIdxShape = TlsAlloc(); @@ -619,6 +621,11 @@ void Tile::staticCtor() Tile::double_plant = static_cast((new TallGrass2(175))->setDestroyTime(0.0f)->setSoundType(Tile::SOUND_GRASS)->setIconName(L"tallgrass2_tall_grass_upper")->setDescriptionId(IDS_DESC_DOUBLE_TALL_GRASS)->setUseDescriptionId(IDS_DESC_TALL_GRASS)->disableMipmap()->sendTileData(0xFF)); + Tile::standing_banner = static_cast((new BannerTile(176, true))->setDestroyTime(1.0f)->setSoundType(Tile::SOUND_WOOD)->setIconName(L"planks_oak")->setNotCollectStatistics()->sendTileData()->setUseDescriptionId(IDS_DESC_SIGN)); + Tile::wall_banner = static_cast((new BannerTile(177, false))->setDestroyTime(1.0f)->setSoundType(Tile::SOUND_WOOD)->setIconName(L"planks_oak")->setNotCollectStatistics()->sendTileData()->setUseDescriptionId(IDS_DESC_SIGN)); + + Item::items[standing_banner_Id] = (new BannerItem(standing_banner_Id - 256))->setIconName(L"sign")->setDescriptionId(IDS_TILE_BANNER)->setUseDescriptionId(IDS_DESC_SIGN); + // Special cases for certain items since they can have different icons Item::items[wool_Id] = ( new WoolTileItem(Tile::wool_Id- 256) )->setIconName(L"cloth")->setDescriptionId(IDS_TILE_CLOTH)->setUseDescriptionId(IDS_DESC_WOOL); Item::items[stained_hardened_clay_Id]= ( new WoolTileItem(Tile::stained_hardened_clay_Id - 256))->setIconName(L"clayHardenedStained")->setDescriptionId(IDS_TILE_STAINED_CLAY)->setUseDescriptionId(IDS_DESC_STAINED_CLAY); diff --git a/Minecraft.World/Tile.h b/Minecraft.World/Tile.h index 5e57055a..5e2a63d8 100644 --- a/Minecraft.World/Tile.h +++ b/Minecraft.World/Tile.h @@ -49,6 +49,7 @@ class GrassPathTile; class BeetrootTile; class MagmaTile; class BoneBlockTile; +class BannerTile; class ChunkRebuildData; @@ -415,8 +416,8 @@ public: static const int coal_block_Id = 173; static const int packed_ice_Id = 174; static const int double_plant_Id = 175; - //176 standing_banner - //177 wall_banner + static const int standing_banner_Id = 176; + static const int wall_banner_Id = 177; static const int daylight_detector_inverted_Id = 178; static const int red_sandstone_Id = 179; static const int red_sandstone_stairs_Id = 180; @@ -679,7 +680,9 @@ public: static Tile* prismarine; static TallGrass2* double_plant; - + + static BannerTile* standing_banner; + static BannerTile* wall_banner; static void staticCtor(); diff --git a/Minecraft.World/TileEntity.cpp b/Minecraft.World/TileEntity.cpp index 1fff44bb..4efc6731 100644 --- a/Minecraft.World/TileEntity.cpp +++ b/Minecraft.World/TileEntity.cpp @@ -32,6 +32,7 @@ void TileEntity::staticCtor() TileEntity::setId(DaylightDetectorTileEntity::create, eTYPE_DAYLIGHTDETECTORTILEENTITY, L"DLDetector"); TileEntity::setId(HopperTileEntity::create, eTYPE_HOPPERTILEENTITY, L"Hopper"); TileEntity::setId(ComparatorTileEntity::create, eTYPE_COMPARATORTILEENTITY, L"Comparator"); + TileEntity::setId(BannerTileEntity::create, eTYPE_BANNERTILEENTITY, L"Banner"); } void TileEntity::setId(tileEntityCreateFn createFn, eINSTANCEOF clas, wstring id) diff --git a/Minecraft.World/TileEntityDataPacket.h b/Minecraft.World/TileEntityDataPacket.h index 6fe3bf89..b6f6f043 100644 --- a/Minecraft.World/TileEntityDataPacket.h +++ b/Minecraft.World/TileEntityDataPacket.h @@ -12,6 +12,7 @@ public: static const int TYPE_ADV_COMMAND = 2; static const int TYPE_BEACON = 3; static const int TYPE_SKULL = 4; + static const int TYPE_BANNER = 5; int x, y, z; int type; diff --git a/Minecraft.World/cmake/sources/Common.cmake b/Minecraft.World/cmake/sources/Common.cmake index 3c240fed..361c68e3 100644 --- a/Minecraft.World/cmake/sources/Common.cmake +++ b/Minecraft.World/cmake/sources/Common.cmake @@ -2055,6 +2055,12 @@ set(_MINECRAFT_WORLD_COMMON_NET_MINECRAFT_WORLD_LEVEL_TILE "${CMAKE_CURRENT_SOURCE_DIR}/MagmaTile.h" "${CMAKE_CURRENT_SOURCE_DIR}/BoneBlockTile.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/BoneBlockTile.h" + "${CMAKE_CURRENT_SOURCE_DIR}/BannerTile.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/BannerTile.h" + "${CMAKE_CURRENT_SOURCE_DIR}/BannerTileEntity.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/BannerTileEntity.h" + "${CMAKE_CURRENT_SOURCE_DIR}/BannerItem.cpp" + "${CMAKE_CURRENT_SOURCE_DIR}/BannerItem.h" "${CMAKE_CURRENT_SOURCE_DIR}/RedSandStoneTile.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/SeaLanternTile.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/PrismarineTile.cpp" diff --git a/Minecraft.World/net.minecraft.world.item.h b/Minecraft.World/net.minecraft.world.item.h index bd3b6c0a..7055638b 100644 --- a/Minecraft.World/net.minecraft.world.item.h +++ b/Minecraft.World/net.minecraft.world.item.h @@ -44,6 +44,7 @@ // 1.8.2 #include "AuxDataTileItem.h" +#include "BannerItem.h" #include "ColoredTileItem.h" #include "UseAnim.h" diff --git a/Minecraft.World/net.minecraft.world.level.tile.entity.h b/Minecraft.World/net.minecraft.world.level.tile.entity.h index 1d6e7f76..13e66943 100644 --- a/Minecraft.World/net.minecraft.world.level.tile.entity.h +++ b/Minecraft.World/net.minecraft.world.level.tile.entity.h @@ -21,3 +21,4 @@ #include "SkullTileEntity.h" #include "EnderChestTileEntity.h" #include "ItemFrame.h" +#include "BannerTileEntity.h" diff --git a/Minecraft.World/net.minecraft.world.level.tile.h b/Minecraft.World/net.minecraft.world.level.tile.h index de065ea7..a4e7787c 100644 --- a/Minecraft.World/net.minecraft.world.level.tile.h +++ b/Minecraft.World/net.minecraft.world.level.tile.h @@ -149,5 +149,6 @@ #include "BeetrootTile.h" #include "MagmaTile.h" #include "BoneBlockTile.h" +#include "BannerTile.h"