From 60565f7a5ec2e337bf1f639aeda956ef4ccc36f8 Mon Sep 17 00:00:00 2001 From: ChristianFalegnami Date: Sun, 15 Mar 2026 23:40:01 +0100 Subject: [PATCH] ArmorStand Entity + Item --- Minecraft.Client/ArmorStandModel.cpp | 115 +++++ Minecraft.Client/ArmorStandModel.h | 32 ++ Minecraft.Client/ArmorStandRenderer.cpp | 111 +++++ Minecraft.Client/ArmorStandRenderer.h | 24 ++ Minecraft.Client/Common/Audio/SoundNames.cpp | 8 + .../Common/Media/MediaWindows64.arc | Bin 57351282 -> 57351524 bytes .../Common/UI/IUIScene_CreativeMenu.cpp | 6 +- .../Common/res/1_2_2/item/armor_stand.png | Bin 0 -> 809 bytes .../res/TitleUpdate/res/item/armor_stand.png | Bin 0 -> 809 bytes Minecraft.Client/EntityRenderDispatcher.cpp | 5 +- Minecraft.Client/EntityTracker.cpp | 1 + Minecraft.Client/LivingEntityRenderer.cpp | 1 + Minecraft.Client/Minecraft.Client.vcxproj | 4 + .../Minecraft.Client.vcxproj.filters | 12 + Minecraft.Client/PreStitchedTextureMap.cpp | 2 +- Minecraft.Client/Textures.cpp | 4 + Minecraft.Client/Textures.h | 2 + Minecraft.Client/TrackedEntity.cpp | 5 + .../Minecraft/mob/rabbit/bunnymurder1.ogg | Bin 0 -> 7018 bytes .../Sound/Minecraft/mob/rabbit/hop1.ogg | Bin 0 -> 5938 bytes .../Sound/Minecraft/mob/rabbit/hop2.ogg | Bin 0 -> 6993 bytes .../Sound/Minecraft/mob/rabbit/hop3.ogg | Bin 0 -> 6597 bytes .../Sound/Minecraft/mob/rabbit/hop4.ogg | Bin 0 -> 5811 bytes .../Sound/Minecraft/mob/rabbit/hurt1.ogg | Bin 0 -> 6750 bytes .../Sound/Minecraft/mob/rabbit/hurt2.ogg | Bin 0 -> 5988 bytes .../Sound/Minecraft/mob/rabbit/hurt3.ogg | Bin 0 -> 6389 bytes .../Sound/Minecraft/mob/rabbit/hurt4.ogg | Bin 0 -> 6650 bytes .../Sound/Minecraft/mob/rabbit/idle1.ogg | Bin 0 -> 5806 bytes .../Sound/Minecraft/mob/rabbit/idle2.ogg | Bin 0 -> 6988 bytes .../Sound/Minecraft/mob/rabbit/idle3.ogg | Bin 0 -> 5840 bytes .../Sound/Minecraft/mob/rabbit/idle4.ogg | Bin 0 -> 8691 bytes .../Windows64Media/loc/stringsGeneric.xml | 13 + Minecraft.Client/Windows64Media/strings.h | 254 ++++++------ Minecraft.World/ArmorStand.cpp | 392 ++++++++++++++++++ Minecraft.World/ArmorStand.h | 128 ++++++ Minecraft.World/ArmorStandItem.cpp | 57 +++ Minecraft.World/ArmorStandItem.h | 14 + Minecraft.World/Class.h | 6 +- Minecraft.World/EntityIO.cpp | 7 +- Minecraft.World/Item.cpp | 6 + Minecraft.World/Item.h | 15 +- Minecraft.World/Minecraft.World.vcxproj | 4 + .../Minecraft.World.vcxproj.filters | 16 + Minecraft.World/Mob.h | 4 +- Minecraft.World/Rabbit.cpp | 7 +- Minecraft.World/Rabbit.h | 1 + Minecraft.World/SoundTypes.h | 6 + Minecraft.World/net.minecraft.world.entity.h | 5 +- .../net.minecraft.world.entity.item.h | 1 + 49 files changed, 1127 insertions(+), 141 deletions(-) create mode 100644 Minecraft.Client/ArmorStandModel.cpp create mode 100644 Minecraft.Client/ArmorStandModel.h create mode 100644 Minecraft.Client/ArmorStandRenderer.cpp create mode 100644 Minecraft.Client/ArmorStandRenderer.h create mode 100644 Minecraft.Client/Common/res/1_2_2/item/armor_stand.png create mode 100644 Minecraft.Client/Common/res/TitleUpdate/res/item/armor_stand.png create mode 100644 Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/bunnymurder1.ogg create mode 100644 Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/hop1.ogg create mode 100644 Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/hop2.ogg create mode 100644 Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/hop3.ogg create mode 100644 Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/hop4.ogg create mode 100644 Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/hurt1.ogg create mode 100644 Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/hurt2.ogg create mode 100644 Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/hurt3.ogg create mode 100644 Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/hurt4.ogg create mode 100644 Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/idle1.ogg create mode 100644 Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/idle2.ogg create mode 100644 Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/idle3.ogg create mode 100644 Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/idle4.ogg create mode 100644 Minecraft.World/ArmorStand.cpp create mode 100644 Minecraft.World/ArmorStand.h create mode 100644 Minecraft.World/ArmorStandItem.cpp create mode 100644 Minecraft.World/ArmorStandItem.h diff --git a/Minecraft.Client/ArmorStandModel.cpp b/Minecraft.Client/ArmorStandModel.cpp new file mode 100644 index 00000000..51263a95 --- /dev/null +++ b/Minecraft.Client/ArmorStandModel.cpp @@ -0,0 +1,115 @@ +#include "stdafx.h" +#include "ModelPart.h" +#include "ArmorStandModel.h" +#include "../Minecraft.World/ArmorStand.h" + +ArmorStandModel::ArmorStandModel() : HumanoidModel() +{ + texWidth = 64; + texHeight = 64; + + + head = new ModelPart(this, 0, 0); + head->addBox(-1.0F, -7.0F, -1.0F, 2, 7, 2, 0.0F); + head->setPos(0.0F, 1.0F, 0.0F); + head->compile(1.0f / 16.0f); + + hair = new ModelPart(this, 0, 0); + + body = new ModelPart(this, 0, 26); + body->addBox(-6.0F, 0.0F, -1.5F, 12, 3, 3, 0.0F); + body->setPos(0.0F, 0.0F, 0.0F); + body->compile(1.0f / 16.0f); + + arm0 = new ModelPart(this, 24, 0); // right + arm0->addBox(-2.0F, -2.0F, -1.0F, 2, 12, 2, 0.0F); + arm0->setPos(-5.0F, 2.0F, 0.0F); + arm0->compile(1.0f / 16.0f); + + arm1 = new ModelPart(this, 32, 16); // left + arm1->addBox(0.0F, -2.0F, -1.0F, 2, 12, 2, 0.0F); + arm1->setPos(5.0F, 2.0F, 0.0F); + arm1->compile(1.0f / 16.0f); + + leg0 = new ModelPart(this, 8, 0); // right + leg0->addBox(-1.0F, 0.0F, -1.0F, 2, 11, 2, 0.0F); + leg0->setPos(-1.9F, 12.0F, 0.0F); + leg0->compile(1.0f / 16.0f); + + leg1 = new ModelPart(this, 40, 16); // left + leg1->addBox(-1.0F, 0.0F, -1.0F, 2, 11, 2, 0.0F); + leg1->setPos(1.9F, 12.0F, 0.0F); + leg1->compile(1.0f / 16.0f); + + //sticks + rightBodyStick = new ModelPart(this, 16, 0); + rightBodyStick->addBox(-3.0F, 3.0F, -1.0F, 2, 7, 2, 0.0F); + rightBodyStick->setPos(0.0F, 0.0F, 0.0F); + rightBodyStick->compile(1.0f / 16.0f); + + leftBodyStick = new ModelPart(this, 48, 16); + leftBodyStick->addBox(1.0F, 3.0F, -1.0F, 2, 7, 2, 0.0F); + leftBodyStick->setPos(0.0F, 0.0F, 0.0F); + leftBodyStick->compile(1.0f / 16.0f); + + shoulderStick = new ModelPart(this, 0, 48); + shoulderStick->addBox(-4.0F, 10.0F, -1.0F, 8, 2, 2, 0.0F); + shoulderStick->setPos(0.0F, 0.0F, 0.0F); + shoulderStick->compile(1.0f / 16.0f); + + basePlate = new ModelPart(this, 0, 32); + basePlate->addBox(-6.0F, 11.0F, -6.0F, 12, 1, 12, 0.0F); + basePlate->setPos(0.0F, 12.0F, 0.0F); + basePlate->compile(1.0f / 16.0f); +} + +void ArmorStandModel::setupPose(float hX, float hY, float hZ, + float bX, float bY, float bZ, + float lAX, float lAY, float lAZ, + float rAX, float rAY, float rAZ, + float lLX, float lLY, float lLZ, + float rLX, float rLY, float rLZ) +{ + head->xRot = hX; head->yRot = hY; head->zRot = hZ; + + body->xRot = bX; body->yRot = bY; body->zRot = bZ; + rightBodyStick->xRot = bX; rightBodyStick->yRot = bY; rightBodyStick->zRot = bZ; + leftBodyStick->xRot = bX; leftBodyStick->yRot = bY; leftBodyStick->zRot = bZ; + shoulderStick->xRot = bX; shoulderStick->yRot = bY; shoulderStick->zRot = bZ; + + arm1->xRot = lAX; arm1->yRot = lAY; arm1->zRot = lAZ; // left + arm0->xRot = rAX; arm0->yRot = rAY; arm0->zRot = rAZ; // right + + leg1->xRot = lLX; leg1->yRot = lLY; leg1->zRot = lLZ; // left + leg0->xRot = rLX; leg0->yRot = rLY; leg0->zRot = rLZ; // right +} + +void ArmorStandModel::render(shared_ptr entity, float time, float r, float bob, float yRot, float xRot, float scale, bool usecompiled) +{ + shared_ptr stand = dynamic_pointer_cast(entity); + if (stand) { + + bool armsVisible = stand->showArms(); + arm0->visible = armsVisible; // right + arm1->visible = armsVisible; // left + + + // basePlate->visible = stand->showBasePlate(); + } + + + HumanoidModel::render(entity, time, r, bob, yRot, xRot, scale, usecompiled); + + + rightBodyStick->render(scale, usecompiled); + leftBodyStick->render(scale, usecompiled); + shoulderStick->render(scale, usecompiled); + + + basePlate->render(scale, usecompiled); +} + +void ArmorStandModel::setupAnim(float time, float r, float bob, float yRot, float xRot, float scale, shared_ptr entity, unsigned int uiBitmaskOverrideAnim) +{ + +} \ No newline at end of file diff --git a/Minecraft.Client/ArmorStandModel.h b/Minecraft.Client/ArmorStandModel.h new file mode 100644 index 00000000..85bc2ac6 --- /dev/null +++ b/Minecraft.Client/ArmorStandModel.h @@ -0,0 +1,32 @@ +#pragma once +#include "HumanoidModel.h" +#include "ModelPart.h" + +class ArmorStandModel : public HumanoidModel +{ +public: + + ModelPart *rightBodyStick; + ModelPart *leftBodyStick; + ModelPart *shoulderStick; + ModelPart *basePlate; + + bool showArms; + bool showBasePlate; + bool isSmall; + + ArmorStandModel(); + virtual void setupAnim(float time, float r, float bob, float yRot, float xRot, float scale, shared_ptr entity, unsigned int uiBitmaskOverrideAnim ) override; + + void setupPose(float hX, float hY, float hZ, + float bX, float bY, float bZ, + float lAX, float lAY, float lAZ, + float rAX, float rAY, float rAZ, + float lLX, float lLY, float lLZ, + float rLX, float rLY, float rLZ); + + virtual void render(shared_ptr entity, + float time, float r, float bob, + float yRot, float xRot, + float scale, bool usecompiled) override; +}; \ No newline at end of file diff --git a/Minecraft.Client/ArmorStandRenderer.cpp b/Minecraft.Client/ArmorStandRenderer.cpp new file mode 100644 index 00000000..d7fb0506 --- /dev/null +++ b/Minecraft.Client/ArmorStandRenderer.cpp @@ -0,0 +1,111 @@ +#include "stdafx.h" +#include "ArmorStandRenderer.h" +#include "Textures.h" +#include "HumanoidModel.h" +#include "ArmorStandModel.h" +#include "..\Minecraft.World\ArmorStand.h" + + + +class ArmorStandArmorModel : public HumanoidModel { +public: + ArmorStandArmorModel(float scale) : HumanoidModel(scale) {} + + + virtual void setupAnim(float time, float r, float bob, float yRot, float xRot, float scale, shared_ptr entity, unsigned int uiBitmaskOverrideAnim = 0) override { + + } +}; + + +static const float DEG_TO_RAD = 3.14159265f / 180.0f; + +ResourceLocation ArmorStandRenderer::LOC_ARMOR_STAND = ResourceLocation(TN_MOB_ARMORSTAND); + +ArmorStandRenderer::ArmorStandRenderer() + : HumanoidMobRenderer(new ArmorStandModel(), 0.0f, 1.0f) +{ + createArmorParts(); +} + + +ResourceLocation *ArmorStandRenderer::getTextureLocation(shared_ptr entity) +{ + return &LOC_ARMOR_STAND; +} + +void ArmorStandRenderer::createArmorParts() +{ + + armorParts1 = new ArmorStandArmorModel(1.0f); + armorParts2 = new ArmorStandArmorModel(0.5f); +} + +void ArmorStandRenderer::render(shared_ptr entity, double x, double y, double z, float rot, float a) +{ + HumanoidMobRenderer::render(entity, x, y, z, rot, a); +} + +void ArmorStandRenderer::renderModel(shared_ptr mob, float wp, float ws, float bob, + float headRotMinusBodyRot, float headRotx, float scale) +{ + + shared_ptr stand = dynamic_pointer_cast(mob); + if (!stand) return; + + ArmorStandModel *m = static_cast(model); + if (!m) return; + + + Rotations h = stand->getHeadPose(); + Rotations b = stand->getBodyPose(); + Rotations la = stand->getLeftArmPose(); + Rotations ra = stand->getRightArmPose(); + Rotations ll = stand->getLeftLegPose(); + Rotations rl = stand->getRightLegPose(); + + + m->setupPose( + h.x * DEG_TO_RAD, h.y * DEG_TO_RAD, h.z * DEG_TO_RAD, + b.x * DEG_TO_RAD, b.y * DEG_TO_RAD, b.z * DEG_TO_RAD, + la.x * DEG_TO_RAD, la.y * DEG_TO_RAD, la.z * DEG_TO_RAD, + ra.x * DEG_TO_RAD, ra.y * DEG_TO_RAD, ra.z * DEG_TO_RAD, + ll.x * DEG_TO_RAD, ll.y * DEG_TO_RAD, ll.z * DEG_TO_RAD, + rl.x * DEG_TO_RAD, rl.y * DEG_TO_RAD, rl.z * DEG_TO_RAD + ); + + + + HumanoidModel *a1 = static_cast(armorParts1); + if (a1) { + a1->head->xRot = h.x * DEG_TO_RAD; a1->head->yRot = h.y * DEG_TO_RAD; a1->head->zRot = h.z * DEG_TO_RAD; + if (a1->hair) { a1->hair->xRot = h.x * DEG_TO_RAD; a1->hair->yRot = h.y * DEG_TO_RAD; a1->hair->zRot = h.z * DEG_TO_RAD; } + + a1->body->xRot = b.x * DEG_TO_RAD; a1->body->yRot = b.y * DEG_TO_RAD; a1->body->zRot = b.z * DEG_TO_RAD; + + a1->arm0->xRot = ra.x * DEG_TO_RAD; a1->arm0->yRot = ra.y * DEG_TO_RAD; a1->arm0->zRot = ra.z * DEG_TO_RAD; // right + a1->arm1->xRot = la.x * DEG_TO_RAD; a1->arm1->yRot = la.y * DEG_TO_RAD; a1->arm1->zRot = la.z * DEG_TO_RAD; // left + + a1->leg0->xRot = rl.x * DEG_TO_RAD; a1->leg0->yRot = rl.y * DEG_TO_RAD; a1->leg0->zRot = rl.z * DEG_TO_RAD; // right + a1->leg1->xRot = ll.x * DEG_TO_RAD; a1->leg1->yRot = ll.y * DEG_TO_RAD; a1->leg1->zRot = ll.z * DEG_TO_RAD; // left + } + + HumanoidModel *a2 = static_cast(armorParts2); + if (a2) { + a2->head->xRot = h.x * DEG_TO_RAD; a2->head->yRot = h.y * DEG_TO_RAD; a2->head->zRot = h.z * DEG_TO_RAD; + if (a2->hair) { a2->hair->xRot = h.x * DEG_TO_RAD; a2->hair->yRot = h.y * DEG_TO_RAD; a2->hair->zRot = h.z * DEG_TO_RAD; } + + a2->body->xRot = b.x * DEG_TO_RAD; a2->body->yRot = b.y * DEG_TO_RAD; a2->body->zRot = b.z * DEG_TO_RAD; + + a2->arm0->xRot = ra.x * DEG_TO_RAD; a2->arm0->yRot = ra.y * DEG_TO_RAD; a2->arm0->zRot = ra.z * DEG_TO_RAD; + a2->arm1->xRot = la.x * DEG_TO_RAD; a2->arm1->yRot = la.y * DEG_TO_RAD; a2->arm1->zRot = la.z * DEG_TO_RAD; + + a2->leg0->xRot = rl.x * DEG_TO_RAD; a2->leg0->yRot = rl.y * DEG_TO_RAD; a2->leg0->zRot = rl.z * DEG_TO_RAD; + a2->leg1->xRot = ll.x * DEG_TO_RAD; a2->leg1->yRot = ll.y * DEG_TO_RAD; a2->leg1->zRot = ll.z * DEG_TO_RAD; + } + + + HumanoidMobRenderer::renderModel(mob, wp, ws, bob, headRotMinusBodyRot, headRotx, scale); +} + + diff --git a/Minecraft.Client/ArmorStandRenderer.h b/Minecraft.Client/ArmorStandRenderer.h new file mode 100644 index 00000000..320b98fa --- /dev/null +++ b/Minecraft.Client/ArmorStandRenderer.h @@ -0,0 +1,24 @@ +#pragma once +#include "HumanoidMobRenderer.h" +#include "ArmorStandModel.h" +#include "..\Minecraft.World\ArmorStand.h" + +class ArmorStandRenderer : public HumanoidMobRenderer +{ +private: + static ResourceLocation LOC_ARMOR_STAND; + +public: + ArmorStandRenderer(); + virtual ~ArmorStandRenderer() {} + virtual void render(shared_ptr entity, double x, double y, double z, float rot, float a) override; + virtual ResourceLocation *getTextureLocation(shared_ptr entity) override; + +protected: + + virtual void createArmorParts() override; + + + virtual void renderModel(shared_ptr mob, float wp, float ws, float bob, + float headRotMinusBodyRot, float headRotx, float scale) override; +}; \ No newline at end of file diff --git a/Minecraft.Client/Common/Audio/SoundNames.cpp b/Minecraft.Client/Common/Audio/SoundNames.cpp index ebb7e9ee..9659eb6b 100644 --- a/Minecraft.Client/Common/Audio/SoundNames.cpp +++ b/Minecraft.Client/Common/Audio/SoundNames.cpp @@ -223,6 +223,14 @@ const WCHAR *ConsoleSoundEngine::wchSoundNames[eSoundType_MAX]= // 4J-PB - Some sounds were updated, but we can't do that for the 360 or we have to do a new sound bank // instead, we'll add the sounds as new ones and change the code to reference them L"fire.new_ignite", + + L"mob.rabbit.idle", + L"mob.rabbit.hurt", + L"mob.rabbit.bunnymurder", + L"mob.rabbit.hop", + + + }; diff --git a/Minecraft.Client/Common/Media/MediaWindows64.arc b/Minecraft.Client/Common/Media/MediaWindows64.arc index 77eeb132ac3fcc982d2c479dd6627a017ab51180..58ff6badeebfc7438f3191fbfe2ba0a543544b47 100644 GIT binary patch delta 11627 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 > *lis } list->push_back(firework); -} +} \ No newline at end of file diff --git a/Minecraft.Client/Common/res/1_2_2/item/armor_stand.png b/Minecraft.Client/Common/res/1_2_2/item/armor_stand.png new file mode 100644 index 0000000000000000000000000000000000000000..a5dedc87adde71f911b8a82d84fab6787f46069e GIT binary patch literal 809 zcmV+^1J?YBP)Ei7 zSdWj7baZroe}A2wov^U5sHmu;qoZ?PIRF!Xw2)fHpl1L802U)i;s5{u0d!JMQvg8b z*k%9#0(wbAK~#9!?Nr;6+b{^_BHLLf-KO<@WBLC-vw)VaCQa9JANr8lBLRm=gb*?U zfEd>m1jxvc+aHWj0uS(pZtx~i(WFR z;U4kgd7B^Z5ied{zZaa>OVqMo@V1LLj}$hXEoIlRy+AImZ;h zix=!HkMBR)hPE~4*?_`}CnvEoJjkCSBGXF5>x!fjSUeJi0A9S$-a=Vb>urg`HM#35 zF0EK}O-#%cvnjfB;TVQ~82Y~J`=J|h4yEYl$uQ1ym-F%fpK{j?_W9- zzMW1d6CcTc7@!4!wiRtN*{ywT+gBA)W?Qqi;Qk0_01?qT&&h7*^LH7l^KrHXX@H5b n%LQy?cDr6Lm#Zirm*oEf)$~9ql=w`{00000NkvXXu0mjf=xuQ; literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/item/armor_stand.png b/Minecraft.Client/Common/res/TitleUpdate/res/item/armor_stand.png new file mode 100644 index 0000000000000000000000000000000000000000..a5dedc87adde71f911b8a82d84fab6787f46069e GIT binary patch literal 809 zcmV+^1J?YBP)Ei7 zSdWj7baZroe}A2wov^U5sHmu;qoZ?PIRF!Xw2)fHpl1L802U)i;s5{u0d!JMQvg8b z*k%9#0(wbAK~#9!?Nr;6+b{^_BHLLf-KO<@WBLC-vw)VaCQa9JANr8lBLRm=gb*?U zfEd>m1jxvc+aHWj0uS(pZtx~i(WFR z;U4kgd7B^Z5ied{zZaa>OVqMo@V1LLj}$hXEoIlRy+AImZ;h zix=!HkMBR)hPE~4*?_`}CnvEoJjkCSBGXF5>x!fjSUeJi0A9S$-a=Vb>urg`HM#35 zF0EK}O-#%cvnjfB;TVQ~82Y~J`=J|h4yEYl$uQ1ym-F%fpK{j?_W9- zzMW1d6CcTc7@!4!wiRtN*{ywT+gBA)W?Qqi;Qk0_01?qT&&h7*^LH7l^KrHXX@H5b n%LQy?cDr6Lm#Zirm*oEf)$~9ql=w`{00000NkvXXu0mjf=xuQ; literal 0 HcmV?d00001 diff --git a/Minecraft.Client/EntityRenderDispatcher.cpp b/Minecraft.Client/EntityRenderDispatcher.cpp index b848ca6f..bf680ac7 100644 --- a/Minecraft.Client/EntityRenderDispatcher.cpp +++ b/Minecraft.Client/EntityRenderDispatcher.cpp @@ -24,7 +24,6 @@ #include "PlayerRenderer.h" #include "GhastRenderer.h" #include "SquidRenderer.h" -#include "MobRenderer.h" #include "GiantMobRenderer.h" #include "EntityRenderer.h" #include "PaintingRenderer.h" @@ -83,6 +82,8 @@ #include "BatRenderer.h" #include "CaveSpiderRenderer.h" #include "RabbitRenderer.h" +#include "ArmorStandRenderer.h" +#include "MobRenderer.h" double EntityRenderDispatcher::xOff = 0.0; double EntityRenderDispatcher::yOff = 0.0; @@ -170,6 +171,8 @@ EntityRenderDispatcher::EntityRenderDispatcher() renderers[eTYPE_HORSE] = new HorseRenderer(new ModelHorse(), .75f); renderers[eTYPE_LIGHTNINGBOLT] = new LightningBoltRenderer(); + + renderers[eTYPE_ARMORSTAND] = new ArmorStandRenderer(); glDisable(GL_LIGHTING); for( auto& it : renderers ) diff --git a/Minecraft.Client/EntityTracker.cpp b/Minecraft.Client/EntityTracker.cpp index 087227e7..727b2002 100644 --- a/Minecraft.Client/EntityTracker.cpp +++ b/Minecraft.Client/EntityTracker.cpp @@ -67,6 +67,7 @@ void EntityTracker::addEntity(shared_ptr e) else if (e->instanceof(eTYPE_EXPERIENCEORB)) addEntity(e, 16 * 10, 20, true); else if (e->instanceof(eTYPE_ENDER_CRYSTAL)) addEntity(e, 16 * 16, INT_MAX, false); else if (e->instanceof(eTYPE_ITEM_FRAME)) addEntity(e, 16 * 10, INT_MAX, false); + else if (e->instanceof(eTYPE_ARMORSTAND)) addEntity(e, 16 * 4, 1, true); } void EntityTracker::addEntity(shared_ptr e, int range, int updateInterval) diff --git a/Minecraft.Client/LivingEntityRenderer.cpp b/Minecraft.Client/LivingEntityRenderer.cpp index 046b9b60..8ad8873f 100644 --- a/Minecraft.Client/LivingEntityRenderer.cpp +++ b/Minecraft.Client/LivingEntityRenderer.cpp @@ -48,6 +48,7 @@ void LivingEntityRenderer::render(shared_ptr _mob, double x, double y, d { return; } + app.DebugPrintf("LivingEntityRenderer::render called for type %d\n", _mob->GetType()); glPushMatrix(); glDisable(GL_CULL_FACE); diff --git a/Minecraft.Client/Minecraft.Client.vcxproj b/Minecraft.Client/Minecraft.Client.vcxproj index e24355eb..602a2e2d 100644 --- a/Minecraft.Client/Minecraft.Client.vcxproj +++ b/Minecraft.Client/Minecraft.Client.vcxproj @@ -5676,6 +5676,8 @@ xcopy /q /y /i /s /e $(ProjectDir)Durango\CU $(LayoutDir)Image\Loose\CUfalse false + + @@ -28417,6 +28419,8 @@ xcopy /q /y /i /s /e $(ProjectDir)Durango\CU $(LayoutDir)Image\Loose\CUfalse false + + diff --git a/Minecraft.Client/Minecraft.Client.vcxproj.filters b/Minecraft.Client/Minecraft.Client.vcxproj.filters index 9ea3d45b..ab76d9b4 100644 --- a/Minecraft.Client/Minecraft.Client.vcxproj.filters +++ b/Minecraft.Client/Minecraft.Client.vcxproj.filters @@ -3799,6 +3799,12 @@ net\minecraft\client\renderer\entity + + net\minecraft\client\model + + + net\minecraft\client\renderer\entity + @@ -5961,6 +5967,12 @@ net\minecraft\client\renderer\entity + + net\minecraft\client\model + + + net\minecraft\client\renderer\entity + diff --git a/Minecraft.Client/PreStitchedTextureMap.cpp b/Minecraft.Client/PreStitchedTextureMap.cpp index 54423a47..05b473ac 100644 --- a/Minecraft.Client/PreStitchedTextureMap.cpp +++ b/Minecraft.Client/PreStitchedTextureMap.cpp @@ -542,7 +542,7 @@ void PreStitchedTextureMap::loadUVs() //ADD_ICON(12, 5, L"unused") //ADD_ICON(12, 6, L"unused") ADD_ICON(12, 7, L"minecart_tnt") - //ADD_ICON(12, 8, L"unused") + ADD_ICON(12, 8, L"armorStand") ADD_ICON(12, 9, L"fireworks") ADD_ICON(12, 10, L"fireworks_charge") ADD_ICON(12, 11, L"fireworks_charge_overlay") diff --git a/Minecraft.Client/Textures.cpp b/Minecraft.Client/Textures.cpp index 13efd3e7..1f15e7d4 100644 --- a/Minecraft.Client/Textures.cpp +++ b/Minecraft.Client/Textures.cpp @@ -169,6 +169,10 @@ const wchar_t *Textures::preLoaded[TN_COUNT] = L"item/trapped", L"item/trapped_double", + + L"mob/armorstand/wood", + + //L"item/christmas", //L"item/christmas_double", diff --git a/Minecraft.Client/Textures.h b/Minecraft.Client/Textures.h index 73cf15cd..f28e3660 100644 --- a/Minecraft.Client/Textures.h +++ b/Minecraft.Client/Textures.h @@ -158,6 +158,8 @@ typedef enum _TEXTURE_NAME TN_TILE_TRAP_CHEST, TN_TILE_LARGE_TRAP_CHEST, + + TN_MOB_ARMORSTAND, //TN_TILE_XMAS_CHEST, //TN_TILE_LARGE_XMAS_CHEST, diff --git a/Minecraft.Client/TrackedEntity.cpp b/Minecraft.Client/TrackedEntity.cpp index 3aa33248..eba7a5b2 100644 --- a/Minecraft.Client/TrackedEntity.cpp +++ b/Minecraft.Client/TrackedEntity.cpp @@ -675,6 +675,11 @@ shared_ptr TrackedEntity::getAddEntityPacket() yHeadRotp = Mth::floor(e->getYHeadRot() * 256 / 360); return std::make_shared(dynamic_pointer_cast(e), yRotp, xRotp, xp, yp, zp, yHeadRotp); } + else if (e->instanceof(eTYPE_ARMORSTAND)) + { + yHeadRotp = Mth::floor(e->getYHeadRot() * 256 / 360); + return std::make_shared(dynamic_pointer_cast(e), yRotp, xRotp, xp, yp, zp, yHeadRotp); + } else if (e->instanceof(eTYPE_FISHINGHOOK)) { shared_ptr owner = dynamic_pointer_cast(e)->owner; diff --git a/Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/bunnymurder1.ogg b/Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/bunnymurder1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..59227e659876f4626518d257c3d121dfd094930f GIT binary patch literal 7018 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 ^;0il0xpQn0-T^R0Ur4zJN4G$MZR5^Bk^Jt#D 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 SR5ze63mDZZ0$LqhBL4$mxPB1; literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/hop4.ogg b/Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/hop4.ogg new file mode 100644 index 0000000000000000000000000000000000000000..6ef967cf5420078a8de1299811c1c18a6743e62f GIT binary patch literal 5811 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 Yheq1DzFSC{yr7b0_LR8}&w&H~1EBW@LI3~& literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/hurt1.ogg b/Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/hurt1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..bf5c6dbf4b70749df30e35fcf08c3fdc179f4fee GIT binary patch literal 6750 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 AcK`qY literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/hurt2.ogg b/Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/hurt2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..b26b6b0e6733580c9872e74557258bbc1c2326cf GIT binary patch literal 5988 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 BSpxt7 literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/hurt4.ogg b/Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/hurt4.ogg new file mode 100644 index 0000000000000000000000000000000000000000..080a9b8c6c1edbf64bbfb270e0baaa28bbcf7fb5 GIT binary patch literal 6650 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 literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/idle2.ogg b/Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/idle2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..113909de69d200c38dd053c70a2fa2ded2bb35f5 GIT binary patch literal 6988 zcmai2c|4Tg_kX5rNwOP^8bypP!zg1Zlx!ixScW0Sk{H{VEG1*jmSo?lOxbHN)=0%D zgse$fl6`4YMCJF4zMt>!`}^bf`rg-_`<#2vJ@0$&x#vFTJY(kWZUO88{#67&I%zS< z*@z%9$RWrTAAe^L5_14@wu1Qp0AF6n?y~`6#+3YbVM;PN=Vt*iZjGJ)D7<_B!pMPK z8xP-0ie~=qa4!#Mt6gxoAzWDrsjQ@|qym>QBYJ!I`n!@`y#o+TWC-hD(IdKNtRR3k z07#OcvgfEIp(q|v-3uZ!Fx_6y6%pO@yb&qk&qt5Ao8nB@o1fsfiN<^b%(Hw`P;3yYCAQ=FP?#jg9mEq(Ot>y$? z0057+xj?5M?B#9POB!rH#{pYb&=>#*IL{!y*dXbnL5iepiqvkMiz}1wuHLQ6yW$1_ zaKW5Q&rg7TSIz|hIEvKbsW$P{OY!ruNgPoz6?*^*0I-0|pw3um>ZhIUv&4?p5y$_d z+GV(k?23andL?(a_>~ z2K3;R-1tWHd>*OydH8^XBu~i)=anQqr{G{v286m|ySW#XMdHNFA#T zPR_YW2PxJ{kE9%98b}#524ixKnPVg-)NZrXu?WlKXLd_k8Z&bHJ3z{eu{e>(^Y1CU z^LC94?pK>9=BCp-1joSqCHOgBXHn%vos9*heWHc{BiE_7(P; zSNwnL7g!&!lsO+*6$X`62QBolWY^IQvTc2+-J59qM(BI6ZjzmBGF)x{PyM@f@P5NV zXaBnq1OrOyK`%(A@%*z*@IV1y0sUQnGpv?09*}%BAaC{!WyY^%E}%Dv!oC*7o1Y|_ zpKu*i#ao=fW37nR8AQ7}@_44}_(tgDe^fmC?iTp~Kt1IsBIO7oWkxMY(op--3t2#$ zjd>&EKgcA_sHI36rbv0DxCdvHWalhq7s!_FP62qBQkrOXFV$003Ms9|?57hMDk54Pz9r77D`{yzPsVg1=U|w4^n*N$UbIYpS{M3Qekvb=nnwV+d1<|dvw5ilhBBakv_Zh1 zt_;dW58#morhH+qQc)%XQYQR*W&-$Oe!byz)GL&#xh2*_z+~7GYb#_joGxXeVqzkI zwcyvo3SuoXOt9&$eJJ9XCHB1#7F+LX_XG43@}!E%m=Jb&!~{zxgWdP(#P^y1hQf|o zV(m^~hwD_$1MucpS6dMIitA_{)_R0&B7h&YFc}lXVl%K~!>-s2vSR=iZ;c-v#ajOe z9UBS7kC2_9OytpFGWH7DafCRTNygh8+tmt>1+`KIkwLA9Ae8mLbjFT-Cl8Z}cz(T6 zCbAwj9S_P*rn~Oy%;Z{-$@n@VA&Y1yYzpcOa-Gug?=#8cP;dOk%~vSmcmN)M5^p_9 z#Gj0@9SwD~#5!8Lj-9l!{Q=%X8hH|W4m(V?xDxG1c6DqZJKB2V=O5SI^xE!1F1M=u zIv3!mmN8t1c<8jRXVq`({Cet=JeRv@+eWS%>8?SPniVBsRFLvoSUxXK1V&Y1R1qd=yj1)|w6jjtNUZEaJ;s&8G zaWs&Tfanw=^zsrefKcG#2x_gB(d9~iQzHF^GB!lG^%^e0i-&adnNWrZP%AGG z%GeND2PJtU>O_q^KqyZ`1OtRpsC%c*Q5kLN%tdW~5%@lpnq&`V=DSa{OwpjS;5M(jyzEeu%X<;pn_3Q?Em zS=BQ7Ev%BtkLTYbvPz&9 zNn6Y?uW3AE&wl2s&;?YH0e9iSynsi6@e~o2h5#UoR`_VtM*;+oqwc)K7u1u zf=vRG@~i|y=5E~le;WvZ;pYZ02TxowlIQ+wM?t0?5%*z{TTuj)a+wjC$z>*@J>Z!~f)_HM#J!u6s_$|+Bm(|+b-^5TH&^ZdSJrxm zIhmQiLI4UYHyCP8R3!OgP(n6LS7PRg5pVtFktzo0Ir$ST60D6_14Kuy+c}Zh1}vvU zG0Mdh=~CQ|Bb9jB%J^No!B0pxR~gv&qaLjBlq`E z+F7FQfs#iJ2F(o=#l80Z9bmBM(B+A+foVhbsi{rJNKbr@63Z*Huv~(JxL^bYrXavn z190R>&hr=jZ>APLZvy+kzz7y7un7QaXDP9qw z8-)7{5c|maR=!B6#vKmdKSbmXmb8ldv?i`;d3_d9VMt-w**@;DA#dFi_A>HUym^Fk z@akUej~y(?O7b2zXhwRv(_X-#2=y~bZ|3#etLKDn9b~k;uQ4u2bnBE!D@)BjSouKi z@Q-?qy!Ia5(`5&xRg$vcRgW}g8#52L^nEKYdy0a2)VLgZK6cq{JNw0(C~RMY-p;|2 zXOQ)#Qe_HfzTT|0+J!rR_?!|P*zP4mR~rSz=5ChjFWHxSUui!yu665%_(m$psXD!y zLQu!Cnr>P3)lVI*(Qw#+ecEbH=Wf~`r>O}LmeK0>>68RyfEy`U60k&yHVwt9?_& zFNsikkEBoP$SHo~U+uS@H$^UA3(Ix=h9*c}@rs}65mFzqVUxm!v_~q^9dxc^?~DDm zUPz3G#pLS``{^jlImj+8BZ6uzU!0G61FiakH;mAfF`loFI^8|KAf8`ltSBm6l*SB-1ExRQ z>OXv-$ovN=1kZqr<7*B2@c|(lW3d2@kpEXx} zgURh!diO+&?_0uDgkOvh3(z?;_oZtVs7+Lse% zHO7yy^G{jlpO#Dp3M)qUi=}T57T!4hypi`{)}vOlZ}*yiLR+u}hXVQX`gXLg1|`@= zJpFX{)&7}*)Wa#xoB=l(MYp(%lrm^= zV{_R{);!2@L{y>fwAaGnEDnrvSkih&x%?iK36&9~no^qp>U^GkX8i5=G`EUIcNmaS zs9tvxwa4()1%|24T?ioiVZYVoINC<-Hr4==EJ8oNj9${3DcH!Y`)#eG1hdu21>H z;r3FBqUx|wapR}N^K*M**f~lb>{l@8?zglzPI(Lk;N6)oCRegUW>BJz(COooTbJ_G z29`(*C%=jau(fjE(k~1gPBsa6c~tIXivN9|=jcnbBgJX#lZsp{O;w9)hw3#R&d1I? zYSfnsO+xOMR?o0r!iyZQ8qQBaw^Hve`Be@r;9K7fZ%Mg#of0>?H*%sBhhcr+r~PuU z{#t^Uuwhehoo`4V?LE1{tHVvHNSE5Twz z&q~-Hpk!p_*wyBhW0UIR#Nd>^6`#1ZL_aBGM+N@s{#N;-H=W3P<}qR`u<*BAKDe`q zOB=u2CyEadc`Uou#Z$g+je6?FvNd~N?~4aY{Dv@S*`@06+_H{zTqGxpGvC0@pSRwz zd%1S92I?&0toCqm9rShd7PH{rx%Y8gky~knJ-s}mcY@QaP?;}&2ubh-97b8J3r^0^ zn(v17V^-p}4g+H(1=P1Zpj?;L+~CS>0Qmjn6)N@3J=!1R>JPILv3ZAcXUF^mP8JsE zSn5x`$gKa7{5Vj9)SeeG>r*+N{q>ghv(Blu-z`1n{)w?Ox84R_LFA1H_nx5_aW}`8 zEHvK@x_OL4-U)_9$ye!OE1)tq^i&)~b}4u5+q15WCVt#{6sT9Bfgm*3(f z4JSm8B=WlZ#l{{uT%m56jjp2Qt-ja7^VAQMfcoAog^%)EjTc?*Zh^OM$oh+TK37%S z`XoE0wPp~uFS*AyTekK*KpC0I_Q8e8Hr5kL!Z62PA{{gijdef%$R&13J6rg%Ku$LA z?WLs%{N?*+h1Rd1I&3}|E;La&9QNxW>kak*2iNY)T<+C#P3Ht01j2gazO~*stAR_` zRcI&9%!izCt;u@3#>;-0E`ITIP>0vI@cOS48;;_QmsWkwoUF{OjEzhfc0VS5QL$e2 zIAv#0{3#E%=81XzcO!NO;nl$3;??IKvZu3aNA>dZV*p%-6V5YT8PFcORo$ z;;e4?*P5jJ;tGM+n>=Z7Bs=|`mziK)=uuBg9X0y+-PXtAFJgcB9j!$EEWUM0<>A9z z{d1fAhE9|R=Lopu>ru|_+}Up{X{~$Tyy?ldWDEEHRmXN{Jxv}sC9M#+(L2k+dvSjz z0EzMVuT?7(223Sj2H-%%g^zE`8J14tGWU@Nz!pXGTV%^5uQ07%`%8tT1t#>l>?Q z;cNg}Q+DCJMdSp#x28X~Lq4F_E1F) zl!LVR;V%g`Jdi^G{dT@sh|4U+0?O>Nt<7yMWw6YR5`#iOTqZmVb<#XXJMzIog_iN3P^ z&aLx9;`y@Vk?u>FpzqqvT)rO=O=pA7Y8vd@tZfq0)aU0vC9U;van;|?P=?1j!A%Ho zdzI#H#xvOdYY_GYRg)bH3~dHn+4yvtV9c3+wS~o$y}WSZS(pWC!%Z<4bRU!`dDCj@0{yH(-L)(_BFNg zA1BOUOXTYFS>EO`K4N0SxS2aE)4D^QS=kM;kKYUn#c{6fFHfgLxbAU~Zh6-woC|+Q zVF%s|FU8`uc~0tx7J7(40FM{%9PLJH4@+vvyW#H1C2Fzui3veWPmQrX+92lQ19ceSuWrNuJdP?egEO;T;h{ zAvU}xn;)x(Z?~^e#zeP%8lCm5e3Htyn9y%Fcjac25mf8vX``J_f-*l%3%QP-Tut%y z?&lOw-n+42ngns!u>Z7{K=F;4fU~y<1Jxb!@i3D*@IQ@rSDPMA*nN5u_GWOVPc2xs zWo7Yux2|7}T&Nc5#Dsf9DAuuE>y3@$XbJKe)pKiPXaK`5EHk;Y{e43W|8?Q#khut+ zuRcU4f;f`H&`kXG`Ef?HM2(M-o1s3!eYPA)f2uuxzL(IW{%I*K+lg`1<;c2^RFCu6 z(K)dewoj!RHZro8GZB(SnQdPbT-i%98n*$^vW~y4P1=l?ON6^|85y_xk3c97ueWE> zd~R*aSbp!#9q(8^_)t~#Y;$&q*IA!LB;QZk@&~D_uTA}^$4y6K<=#Rhv`sYhceZD| zwo3vIj0L+BJ>Q014ZV6)z^Z$kD)W3Dzmj;zZ*47D<@{dqmV!dDd`IhcUcp^3|1(%Y)Mwp_UaDE0du$Yd5yF>0D#u-5uWil(!mp=bUmYY?+sfpQ_b*YpnTh>D(jDP8*%dxU8GB;YP=d*>r(awH$rX zj}^;q4;>?&w?yyF$o2QL;Wzxc_j+K&5I(J~ixiXGYW?#T&3$&9i~( dUV;LsGZ)JTA|INs0y0i*z7hdNqLg!c{|84fOUD2J literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/idle3.ogg b/Minecraft.Client/Windows64Media/Sound/Minecraft/mob/rabbit/idle3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f2e80c7ff3114ae43cc4f7d0e3c51c079a32749c GIT binary patch literal 5840 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 literal 0 HcmV?d00001 diff --git a/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml b/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml index becae532..b2b63217 100644 --- a/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml +++ b/Minecraft.Client/Windows64Media/loc/stringsGeneric.xml @@ -8931,4 +8931,17 @@ All Ender Chests in a world are linked. Items placed into an Ender Chest are acc Dark Oak Door + + Armor Stand + + + Can be equipped to display armor and other decorative items such as mob heads. + + + Rabbit + + + A harmless creature. May drop a rabbit hide or a rabbit's foot when killed. + + \ No newline at end of file diff --git a/Minecraft.Client/Windows64Media/strings.h b/Minecraft.Client/Windows64Media/strings.h index 5ec460af..9fffb0a2 100644 --- a/Minecraft.Client/Windows64Media/strings.h +++ b/Minecraft.Client/Windows64Media/strings.h @@ -1,7 +1,7 @@ #pragma once // Auto-generated by StringTable builder — do not edit manually. // Source language: en-US -// Total strings: 2315 +// Total strings: 2319 #define IDS_NULL 0 #define IDS_OK 1 @@ -2194,127 +2194,131 @@ #define IDS_ITEM_DOOR_JUNGLE 2188 #define IDS_ITEM_DOOR_ACACIA 2189 #define IDS_ITEM_DOOR_DARK 2190 -#define IDS_LANG_SYSTEM 2191 -#define IDS_LANG_ENGLISH 2192 -#define IDS_LANG_GERMAN 2193 -#define IDS_LANG_SPANISH 2194 -#define IDS_LANG_SPANISH_SPAIN 2195 -#define IDS_LANG_SPANISH_LATIN_AMERICA 2196 -#define IDS_LANG_FRENCH 2197 -#define IDS_LANG_ITALIAN 2198 -#define IDS_LANG_PORTUGUESE 2199 -#define IDS_LANG_PORTUGUESE_PORTUGAL 2200 -#define IDS_LANG_PORTUGUESE_BRAZIL 2201 -#define IDS_LANG_JAPANESE 2202 -#define IDS_LANG_KOREAN 2203 -#define IDS_LANG_CHINESE_TRADITIONAL 2204 -#define IDS_LANG_CHINESE_SIMPLIFIED 2205 -#define IDS_LANG_DANISH 2206 -#define IDS_LANG_FINISH 2207 -#define IDS_LANG_DUTCH 2208 -#define IDS_LANG_POLISH 2209 -#define IDS_LANG_RUSSIAN 2210 -#define IDS_LANG_SWEDISH 2211 -#define IDS_LANG_NORWEGIAN 2212 -#define IDS_LANG_GREEK 2213 -#define IDS_LANG_TURKISH 2214 -#define IDS_LEADERBOARD_KILLS_EASY 2215 -#define IDS_LEADERBOARD_KILLS_NORMAL 2216 -#define IDS_LEADERBOARD_KILLS_HARD 2217 -#define IDS_LEADERBOARD_MINING_BLOCKS_PEACEFUL 2218 -#define IDS_LEADERBOARD_MINING_BLOCKS_EASY 2219 -#define IDS_LEADERBOARD_MINING_BLOCKS_NORMAL 2220 -#define IDS_LEADERBOARD_MINING_BLOCKS_HARD 2221 -#define IDS_LEADERBOARD_FARMING_PEACEFUL 2222 -#define IDS_LEADERBOARD_FARMING_EASY 2223 -#define IDS_LEADERBOARD_FARMING_NORMAL 2224 -#define IDS_LEADERBOARD_FARMING_HARD 2225 -#define IDS_LEADERBOARD_TRAVELLING_PEACEFUL 2226 -#define IDS_LEADERBOARD_TRAVELLING_EASY 2227 -#define IDS_LEADERBOARD_TRAVELLING_NORMAL 2228 -#define IDS_LEADERBOARD_TRAVELLING_HARD 2229 -#define IDS_TIPS_GAMETIP_0 2230 -#define IDS_TIPS_GAMETIP_1 2231 -#define IDS_TIPS_GAMETIP_48 2232 -#define IDS_TIPS_GAMETIP_44 2233 -#define IDS_TIPS_GAMETIP_45 2234 -#define IDS_TIPS_TRIVIA_4 2235 -#define IDS_TIPS_TRIVIA_17 2236 -#define IDS_HOW_TO_PLAY_MULTIPLAYER 2237 -#define IDS_HOW_TO_PLAY_SOCIALMEDIA 2238 -#define IDS_HOW_TO_PLAY_CREATIVE 2239 -#define IDS_TUTORIAL_TASK_FLY 2240 -#define IDS_TOOLTIPS_SELECTDEVICE 2241 -#define IDS_TOOLTIPS_CHANGEDEVICE 2242 -#define IDS_TOOLTIPS_VIEW_GAMERCARD 2243 -#define IDS_TOOLTIPS_VIEW_GAMERPROFILE 2244 -#define IDS_TOOLTIPS_INVITE_PARTY 2245 -#define IDS_CONFIRM_START_CREATIVE 2246 -#define IDS_CONFIRM_START_SAVEDINCREATIVE 2247 -#define IDS_CONFIRM_START_SAVEDINCREATIVE_CONTINUE 2248 -#define IDS_CONFIRM_START_HOST_PRIVILEGES 2249 -#define IDS_CONNECTION_LOST_LIVE 2250 -#define IDS_CONNECTION_LOST_LIVE_NO_EXIT 2251 -#define IDS_AWARD_AVATAR1 2252 -#define IDS_AWARD_AVATAR2 2253 -#define IDS_AWARD_AVATAR3 2254 -#define IDS_AWARD_THEME 2255 -#define IDS_UNLOCK_ACHIEVEMENT_TEXT 2256 -#define IDS_UNLOCK_AVATAR_TEXT 2257 -#define IDS_UNLOCK_GAMERPIC_TEXT 2258 -#define IDS_UNLOCK_THEME_TEXT 2259 -#define IDS_UNLOCK_ACCEPT_INVITE 2260 -#define IDS_UNLOCK_GUEST_TEXT 2261 -#define IDS_LEADERBOARD_GAMERTAG 2262 -#define IDS_GROUPNAME_POTIONS_480 2263 -#define IDS_RETURNEDTOTITLESCREEN_TEXT 2264 -#define IDS_TRIALOVER_TEXT 2265 -#define IDS_FATAL_ERROR_TEXT 2266 -#define IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT 2267 -#define IDS_NO_MULTIPLAYER_PRIVILEGE_HOST_TEXT 2268 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_SINGLE_LOCAL 2269 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_ALL_LOCAL 2270 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_REMOTE 2271 -#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_CREATE 2272 -#define IDS_SAVE_ICON_MESSAGE 2273 -#define IDS_GAMEOPTION_HOST_PRIVILEGES 2274 -#define IDS_CHECKBOX_DISPLAY_SPLITSCREENGAMERTAGS 2275 -#define IDS_ACHIEVEMENTS 2276 -#define IDS_LABEL_GAMERTAGS 2277 -#define IDS_IN_GAME_GAMERTAGS 2278 -#define IDS_SOCIAL_DEFAULT_DESCRIPTION 2279 -#define IDS_TITLE_UPDATE_NAME 2280 -#define IDS_PLATFORM_NAME 2281 -#define IDS_BACK_BUTTON 2282 -#define IDS_HOST_OPTION_DISABLES_ACHIEVEMENTS 2283 -#define IDS_KICK_PLAYER_DESCRIPTION 2284 -#define IDS_USING_TRIAL_TEXUREPACK_WARNING 2285 -#define IDS_WORLD_SIZE_TITLE_SMALL 2286 -#define IDS_WORLD_SIZE_TITLE_MEDIUM 2287 -#define IDS_WORLD_SIZE_TITLE_LARGE 2288 -#define IDS_WORLD_SIZE_TITLE_CLASSIC 2289 -#define IDS_WORLD_SIZE 2290 -#define IDS_GAMEOPTION_WORLD_SIZE 2291 -#define IDS_DISABLE_SAVING 2292 -#define IDS_GAMEOPTION_DISABLE_SAVING 2293 -#define IDS_RICHPRESENCE_GAMESTATE 2294 -#define IDS_RICHPRESENCE_IDLE 2295 -#define IDS_RICHPRESENCE_MENUS 2296 -#define IDS_RICHPRESENCE_MULTIPLAYER 2297 -#define IDS_RICHPRESENCE_MULTIPLAYEROFFLINE 2298 -#define IDS_RICHPRESENCE_MULTIPLAYER_1P 2299 -#define IDS_RICHPRESENCE_MULTIPLAYER_1POFFLINE 2300 -#define IDS_RICHPRESENCESTATE_BLANK 2301 -#define IDS_RICHPRESENCESTATE_RIDING_PIG 2302 -#define IDS_RICHPRESENCESTATE_RIDING_MINECART 2303 -#define IDS_RICHPRESENCESTATE_BOATING 2304 -#define IDS_RICHPRESENCESTATE_FISHING 2305 -#define IDS_RICHPRESENCESTATE_CRAFTING 2306 -#define IDS_RICHPRESENCESTATE_FORGING 2307 -#define IDS_RICHPRESENCESTATE_NETHER 2308 -#define IDS_RICHPRESENCESTATE_CD 2309 -#define IDS_RICHPRESENCESTATE_MAP 2310 -#define IDS_RICHPRESENCESTATE_ENCHANTING 2311 -#define IDS_RICHPRESENCESTATE_BREWING 2312 -#define IDS_RICHPRESENCESTATE_ANVIL 2313 -#define IDS_RICHPRESENCESTATE_TRADING 2314 +#define IDS_ITEM_ARMOR_STAND 2191 +#define IDS_DESC_ARMOR_STAND 2192 +#define IDS_RABBIT 2193 +#define IDS_DESC_RABBIT 2194 +#define IDS_LANG_SYSTEM 2195 +#define IDS_LANG_ENGLISH 2196 +#define IDS_LANG_GERMAN 2197 +#define IDS_LANG_SPANISH 2198 +#define IDS_LANG_SPANISH_SPAIN 2199 +#define IDS_LANG_SPANISH_LATIN_AMERICA 2200 +#define IDS_LANG_FRENCH 2201 +#define IDS_LANG_ITALIAN 2202 +#define IDS_LANG_PORTUGUESE 2203 +#define IDS_LANG_PORTUGUESE_PORTUGAL 2204 +#define IDS_LANG_PORTUGUESE_BRAZIL 2205 +#define IDS_LANG_JAPANESE 2206 +#define IDS_LANG_KOREAN 2207 +#define IDS_LANG_CHINESE_TRADITIONAL 2208 +#define IDS_LANG_CHINESE_SIMPLIFIED 2209 +#define IDS_LANG_DANISH 2210 +#define IDS_LANG_FINISH 2211 +#define IDS_LANG_DUTCH 2212 +#define IDS_LANG_POLISH 2213 +#define IDS_LANG_RUSSIAN 2214 +#define IDS_LANG_SWEDISH 2215 +#define IDS_LANG_NORWEGIAN 2216 +#define IDS_LANG_GREEK 2217 +#define IDS_LANG_TURKISH 2218 +#define IDS_LEADERBOARD_KILLS_EASY 2219 +#define IDS_LEADERBOARD_KILLS_NORMAL 2220 +#define IDS_LEADERBOARD_KILLS_HARD 2221 +#define IDS_LEADERBOARD_MINING_BLOCKS_PEACEFUL 2222 +#define IDS_LEADERBOARD_MINING_BLOCKS_EASY 2223 +#define IDS_LEADERBOARD_MINING_BLOCKS_NORMAL 2224 +#define IDS_LEADERBOARD_MINING_BLOCKS_HARD 2225 +#define IDS_LEADERBOARD_FARMING_PEACEFUL 2226 +#define IDS_LEADERBOARD_FARMING_EASY 2227 +#define IDS_LEADERBOARD_FARMING_NORMAL 2228 +#define IDS_LEADERBOARD_FARMING_HARD 2229 +#define IDS_LEADERBOARD_TRAVELLING_PEACEFUL 2230 +#define IDS_LEADERBOARD_TRAVELLING_EASY 2231 +#define IDS_LEADERBOARD_TRAVELLING_NORMAL 2232 +#define IDS_LEADERBOARD_TRAVELLING_HARD 2233 +#define IDS_TIPS_GAMETIP_0 2234 +#define IDS_TIPS_GAMETIP_1 2235 +#define IDS_TIPS_GAMETIP_48 2236 +#define IDS_TIPS_GAMETIP_44 2237 +#define IDS_TIPS_GAMETIP_45 2238 +#define IDS_TIPS_TRIVIA_4 2239 +#define IDS_TIPS_TRIVIA_17 2240 +#define IDS_HOW_TO_PLAY_MULTIPLAYER 2241 +#define IDS_HOW_TO_PLAY_SOCIALMEDIA 2242 +#define IDS_HOW_TO_PLAY_CREATIVE 2243 +#define IDS_TUTORIAL_TASK_FLY 2244 +#define IDS_TOOLTIPS_SELECTDEVICE 2245 +#define IDS_TOOLTIPS_CHANGEDEVICE 2246 +#define IDS_TOOLTIPS_VIEW_GAMERCARD 2247 +#define IDS_TOOLTIPS_VIEW_GAMERPROFILE 2248 +#define IDS_TOOLTIPS_INVITE_PARTY 2249 +#define IDS_CONFIRM_START_CREATIVE 2250 +#define IDS_CONFIRM_START_SAVEDINCREATIVE 2251 +#define IDS_CONFIRM_START_SAVEDINCREATIVE_CONTINUE 2252 +#define IDS_CONFIRM_START_HOST_PRIVILEGES 2253 +#define IDS_CONNECTION_LOST_LIVE 2254 +#define IDS_CONNECTION_LOST_LIVE_NO_EXIT 2255 +#define IDS_AWARD_AVATAR1 2256 +#define IDS_AWARD_AVATAR2 2257 +#define IDS_AWARD_AVATAR3 2258 +#define IDS_AWARD_THEME 2259 +#define IDS_UNLOCK_ACHIEVEMENT_TEXT 2260 +#define IDS_UNLOCK_AVATAR_TEXT 2261 +#define IDS_UNLOCK_GAMERPIC_TEXT 2262 +#define IDS_UNLOCK_THEME_TEXT 2263 +#define IDS_UNLOCK_ACCEPT_INVITE 2264 +#define IDS_UNLOCK_GUEST_TEXT 2265 +#define IDS_LEADERBOARD_GAMERTAG 2266 +#define IDS_GROUPNAME_POTIONS_480 2267 +#define IDS_RETURNEDTOTITLESCREEN_TEXT 2268 +#define IDS_TRIALOVER_TEXT 2269 +#define IDS_FATAL_ERROR_TEXT 2270 +#define IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT 2271 +#define IDS_NO_MULTIPLAYER_PRIVILEGE_HOST_TEXT 2272 +#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_SINGLE_LOCAL 2273 +#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_ALL_LOCAL 2274 +#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_REMOTE 2275 +#define IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_CREATE 2276 +#define IDS_SAVE_ICON_MESSAGE 2277 +#define IDS_GAMEOPTION_HOST_PRIVILEGES 2278 +#define IDS_CHECKBOX_DISPLAY_SPLITSCREENGAMERTAGS 2279 +#define IDS_ACHIEVEMENTS 2280 +#define IDS_LABEL_GAMERTAGS 2281 +#define IDS_IN_GAME_GAMERTAGS 2282 +#define IDS_SOCIAL_DEFAULT_DESCRIPTION 2283 +#define IDS_TITLE_UPDATE_NAME 2284 +#define IDS_PLATFORM_NAME 2285 +#define IDS_BACK_BUTTON 2286 +#define IDS_HOST_OPTION_DISABLES_ACHIEVEMENTS 2287 +#define IDS_KICK_PLAYER_DESCRIPTION 2288 +#define IDS_USING_TRIAL_TEXUREPACK_WARNING 2289 +#define IDS_WORLD_SIZE_TITLE_SMALL 2290 +#define IDS_WORLD_SIZE_TITLE_MEDIUM 2291 +#define IDS_WORLD_SIZE_TITLE_LARGE 2292 +#define IDS_WORLD_SIZE_TITLE_CLASSIC 2293 +#define IDS_WORLD_SIZE 2294 +#define IDS_GAMEOPTION_WORLD_SIZE 2295 +#define IDS_DISABLE_SAVING 2296 +#define IDS_GAMEOPTION_DISABLE_SAVING 2297 +#define IDS_RICHPRESENCE_GAMESTATE 2298 +#define IDS_RICHPRESENCE_IDLE 2299 +#define IDS_RICHPRESENCE_MENUS 2300 +#define IDS_RICHPRESENCE_MULTIPLAYER 2301 +#define IDS_RICHPRESENCE_MULTIPLAYEROFFLINE 2302 +#define IDS_RICHPRESENCE_MULTIPLAYER_1P 2303 +#define IDS_RICHPRESENCE_MULTIPLAYER_1POFFLINE 2304 +#define IDS_RICHPRESENCESTATE_BLANK 2305 +#define IDS_RICHPRESENCESTATE_RIDING_PIG 2306 +#define IDS_RICHPRESENCESTATE_RIDING_MINECART 2307 +#define IDS_RICHPRESENCESTATE_BOATING 2308 +#define IDS_RICHPRESENCESTATE_FISHING 2309 +#define IDS_RICHPRESENCESTATE_CRAFTING 2310 +#define IDS_RICHPRESENCESTATE_FORGING 2311 +#define IDS_RICHPRESENCESTATE_NETHER 2312 +#define IDS_RICHPRESENCESTATE_CD 2313 +#define IDS_RICHPRESENCESTATE_MAP 2314 +#define IDS_RICHPRESENCESTATE_ENCHANTING 2315 +#define IDS_RICHPRESENCESTATE_BREWING 2316 +#define IDS_RICHPRESENCESTATE_ANVIL 2317 +#define IDS_RICHPRESENCESTATE_TRADING 2318 diff --git a/Minecraft.World/ArmorStand.cpp b/Minecraft.World/ArmorStand.cpp new file mode 100644 index 00000000..b3e1b11c --- /dev/null +++ b/Minecraft.World/ArmorStand.cpp @@ -0,0 +1,392 @@ +#include "stdafx.h" +#include "com.mojang.nbt.h" +#include "net.minecraft.world.entity.ai.attributes.h" +#include "net.minecraft.world.entity.ai.navigation.h" +#include "net.minecraft.world.entity.ai.goal.h" +#include "net.minecraft.world.level.tile.h" +#include "net.minecraft.world.level.h" +#include "net.minecraft.world.item.h" +#include "net.minecraft.world.entity.player.h" +#include "net.minecraft.world.damagesource.h" +#include "SynchedEntityData.h" +#include "SharedMonsterAttributes.h" +#include "ArmorStand.h" +#include "..\Minecraft.Client\Textures.h" +#include "MobCategory.h" + +const Rotations ArmorStand::DEFAULT_HEAD_POSE ( 0, 0, 0); +const Rotations ArmorStand::DEFAULT_BODY_POSE ( 0, 0, 0); +const Rotations ArmorStand::DEFAULT_LEFT_ARM_POSE (-10, 0,-10); +const Rotations ArmorStand::DEFAULT_RIGHT_ARM_POSE (-15, 0, 10); +const Rotations ArmorStand::DEFAULT_LEFT_LEG_POSE ( -1, 0, -1); +const Rotations ArmorStand::DEFAULT_RIGHT_LEG_POSE ( 1, 0, 1); + +ArmorStand::ArmorStand(Level *level) + : Mob(level) +{ + lastHit = 0; + disabledSlots = 0; + invisible = false; + + for (int i = 0; i < 5; i++) { + equipment[i] = nullptr; + } + + this->defineSynchedData(); + registerAttributes(); + setHealth(getMaxHealth()); + this->setSize(0.5f, 1.975f); +} + +void ArmorStand::registerAttributes() +{ + LivingEntity::registerAttributes(); + getAttribute(SharedMonsterAttributes::MAX_HEALTH)->setBaseValue(20.0); + getAttribute(SharedMonsterAttributes::MOVEMENT_SPEED)->setBaseValue(0.0); + getAttribute(SharedMonsterAttributes::KNOCKBACK_RESISTANCE)->setBaseValue(1.0); +} + +void ArmorStand::defineSynchedData() +{ + LivingEntity::defineSynchedData(); + entityData->define(DATA_CLIENT_FLAGS, static_cast(0)); + + entityData->define(DATA_HEAD_POSE_X, DEFAULT_HEAD_POSE.x); + entityData->define(DATA_HEAD_POSE_Y, DEFAULT_HEAD_POSE.y); + entityData->define(DATA_HEAD_POSE_Z, DEFAULT_HEAD_POSE.z); + + entityData->define(DATA_BODY_POSE_X, DEFAULT_BODY_POSE.x); + entityData->define(DATA_BODY_POSE_Y, DEFAULT_BODY_POSE.y); + entityData->define(DATA_BODY_POSE_Z, DEFAULT_BODY_POSE.z); + + entityData->define(DATA_LEFT_ARM_X, DEFAULT_LEFT_ARM_POSE.x); + entityData->define(DATA_LEFT_ARM_Y, DEFAULT_LEFT_ARM_POSE.y); + entityData->define(DATA_LEFT_ARM_Z, DEFAULT_LEFT_ARM_POSE.z); + + entityData->define(DATA_RIGHT_ARM_X, DEFAULT_RIGHT_ARM_POSE.x); + entityData->define(DATA_RIGHT_ARM_Y, DEFAULT_RIGHT_ARM_POSE.y); + entityData->define(DATA_RIGHT_ARM_Z, DEFAULT_RIGHT_ARM_POSE.z); + + entityData->define(DATA_LEFT_LEG_X, DEFAULT_LEFT_LEG_POSE.x); + entityData->define(DATA_LEFT_LEG_Y, DEFAULT_LEFT_LEG_POSE.y); + entityData->define(DATA_LEFT_LEG_Z, DEFAULT_LEFT_LEG_POSE.z); + + entityData->define(DATA_RIGHT_LEG_X, DEFAULT_RIGHT_LEG_POSE.x); + entityData->define(DATA_RIGHT_LEG_Y, DEFAULT_RIGHT_LEG_POSE.y); + entityData->define(DATA_RIGHT_LEG_Z, DEFAULT_RIGHT_LEG_POSE.z); +} + +void ArmorStand::tick() +{ + float lockedRot = this->yRot; + LivingEntity::tick(); + this->yRot = lockedRot; + this->yRotO = lockedRot; + this->yBodyRot = lockedRot; + this->yBodyRotO = lockedRot; + this->yHeadRot = lockedRot; + this->yHeadRotO = lockedRot; +} + +bool ArmorStand::interact(shared_ptr player) +{ + if (level->isClientSide) return true; + if (isMarker()) return false; + + float dX = this->x - player->x; + float dZ = this->z - player->z; + float distHoriz = sqrt(dX * dX + dZ * dZ); + float pitchRad = player->xRot * (3.14159265f / 180.0f); + float lookYDiff = -tan(pitchRad) * distHoriz; + float hitY = (player->y + 1.62f + lookYDiff) - this->y; + + int targetSlot = SLOT_WEAPON; + if (hitY >= 0.1f && hitY < 0.55f) { + targetSlot = SLOT_BOOTS; + } else if (hitY >= 0.55f && hitY < 0.9f) { + targetSlot = SLOT_LEGGINGS; + } else if (hitY >= 0.9f && hitY < 1.6f) { + targetSlot = SLOT_CHEST; + } else if (hitY >= 1.6f) { + targetSlot = SLOT_HELM; + } + + shared_ptr playerItem = player->getCarriedItem(); + + if (playerItem != nullptr) { + int correctSlot = getEquipmentSlotForItem(playerItem); + if (isSlotDisabled(correctSlot)) return false; + + shared_ptr standItem = getItemInSlot(correctSlot); + if (standItem != nullptr) { + bool added = player->inventory->add(standItem); + if (!added) spawnAtLocation(standItem, 0.0f); + } + shared_ptr toPlace = ItemInstance::clone(playerItem); + toPlace->count = 1; + setEquippedSlot(correctSlot, toPlace); + playerItem->remove(1); + return true; + } else { + shared_ptr standItem = getItemInSlot(targetSlot); + if (standItem != nullptr) { + bool added = player->inventory->add(standItem); + if (!added) spawnAtLocation(standItem, 0.0f); + setEquippedSlot(targetSlot, nullptr); + return true; + } + } + return false; +} + +bool ArmorStand::hurt(DamageSource *source, float damage) +{ + if (isInvulnerable()) return false; + if (level->isClientSide || removed) return false; + if (isMarker()) return false; + + if (dynamic_cast(source) != nullptr) + { + shared_ptr attacker = source->getEntity(); + if (attacker != nullptr && attacker->instanceof(eTYPE_PLAYER)) + { + shared_ptr player = dynamic_pointer_cast(attacker); + if (player->abilities.instabuild) + { + remove(); + return true; + } + } + } + + long long now = (long long)tickCount; + if (now - lastHit > 5) + { + level->broadcastEntityEvent(shared_from_this(), (byte)32); + lastHit = now; + } + else + { + remove(); + spawnAtLocation(Item::armor_stand_Id, 1); + for (int i = 0; i < 5; i++) { + if (equipment[i] != nullptr) { + spawnAtLocation(equipment[i], 0.0f); + } + } + } + return true; +} + +bool ArmorStand::isPickable() +{ + return !removed && !isMarker(); +} + +void ArmorStand::handleEntityEvent(byte eventId) +{ + if (eventId == 32) + lastHit = (long long)tickCount; + else + LivingEntity::handleEntityEvent(eventId); +} + +byte ArmorStand::setBit(byte oldBit, int offset, bool value) +{ + if (value) oldBit = (byte)(oldBit | offset); + else oldBit = (byte)(oldBit & ~offset); + return oldBit; +} + +bool ArmorStand::isSmall() const { return (entityData->getByte(DATA_CLIENT_FLAGS) & FLAG_SMALL) != 0; } +bool ArmorStand::showArms() const { return (entityData->getByte(DATA_CLIENT_FLAGS) & FLAG_SHOW_ARMS) != 0; } +bool ArmorStand::showBasePlate() const { return (entityData->getByte(DATA_CLIENT_FLAGS) & FLAG_NO_BASEPLATE) == 0; } +bool ArmorStand::isMarker() const { return (entityData->getByte(DATA_CLIENT_FLAGS) & FLAG_MARKER) != 0; } + +void ArmorStand::setSmall(bool v) { entityData->set(DATA_CLIENT_FLAGS, setBit(entityData->getByte(DATA_CLIENT_FLAGS), FLAG_SMALL, v)); } +void ArmorStand::setShowArms(bool v) { entityData->set(DATA_CLIENT_FLAGS, setBit(entityData->getByte(DATA_CLIENT_FLAGS), FLAG_SHOW_ARMS, v)); } +void ArmorStand::setNoBasePlate(bool v) { entityData->set(DATA_CLIENT_FLAGS, setBit(entityData->getByte(DATA_CLIENT_FLAGS), FLAG_NO_BASEPLATE, v)); } +void ArmorStand::setMarker(bool v) { entityData->set(DATA_CLIENT_FLAGS, setBit(entityData->getByte(DATA_CLIENT_FLAGS), FLAG_MARKER, v)); } + +Rotations ArmorStand::readRotation(int slotX) const +{ + return Rotations( + entityData->getFloat(slotX), + entityData->getFloat(slotX + 1), + entityData->getFloat(slotX + 2) + ); +} + +void ArmorStand::writeRotation(int slotX, const Rotations &r) +{ + entityData->set(slotX, r.x); + entityData->set(slotX + 1, r.y); + entityData->set(slotX + 2, r.z); +} + +Rotations ArmorStand::getHeadPose() const { return readRotation(DATA_HEAD_POSE_X); } +Rotations ArmorStand::getBodyPose() const { return readRotation(DATA_BODY_POSE_X); } +Rotations ArmorStand::getLeftArmPose() const { return readRotation(DATA_LEFT_ARM_X); } +Rotations ArmorStand::getRightArmPose() const { return readRotation(DATA_RIGHT_ARM_X); } +Rotations ArmorStand::getLeftLegPose() const { return readRotation(DATA_LEFT_LEG_X); } +Rotations ArmorStand::getRightLegPose() const { return readRotation(DATA_RIGHT_LEG_X); } + +void ArmorStand::setHeadPose (const Rotations &r) { writeRotation(DATA_HEAD_POSE_X, r); } +void ArmorStand::setBodyPose (const Rotations &r) { writeRotation(DATA_BODY_POSE_X, r); } +void ArmorStand::setLeftArmPose (const Rotations &r) { writeRotation(DATA_LEFT_ARM_X, r); } +void ArmorStand::setRightArmPose(const Rotations &r) { writeRotation(DATA_RIGHT_ARM_X, r); } +void ArmorStand::setLeftLegPose (const Rotations &r) { writeRotation(DATA_LEFT_LEG_X, r); } +void ArmorStand::setRightLegPose(const Rotations &r) { writeRotation(DATA_RIGHT_LEG_X, r); } + +void ArmorStand::readAdditionalSaveData(CompoundTag *tag) +{ + LivingEntity::readAdditionalSaveData(tag); + + invisible = tag->getBoolean(L"Invisible"); + disabledSlots = tag->getInt(L"DisabledSlots"); + setInvisible(invisible); + setSmall (tag->getBoolean(L"Small")); + setShowArms (tag->getBoolean(L"ShowArms")); + setNoBasePlate(tag->getBoolean(L"NoBasePlate")); + setMarker (tag->getBoolean(L"Marker")); + + if (tag->contains(L"Pose")) + { + CompoundTag *pose = tag->getCompound(L"Pose"); + auto loadRot = [&](const wchar_t *key, const Rotations &def) -> Rotations { + if (!pose->contains(key)) return def; + ListTag *list = (ListTag *)pose->getList(key); + if (!list || list->size() < 3) return def; + return Rotations(list->get(0)->data, list->get(1)->data, list->get(2)->data); + }; + setHeadPose (loadRot(L"Head", DEFAULT_HEAD_POSE)); + setBodyPose (loadRot(L"Body", DEFAULT_BODY_POSE)); + setLeftArmPose (loadRot(L"LeftArm", DEFAULT_LEFT_ARM_POSE)); + setRightArmPose(loadRot(L"RightArm", DEFAULT_RIGHT_ARM_POSE)); + setLeftLegPose (loadRot(L"LeftLeg", DEFAULT_LEFT_LEG_POSE)); + setRightLegPose(loadRot(L"RightLeg", DEFAULT_RIGHT_LEG_POSE)); + } + + if (tag->contains(L"ArmorStandEquipment")) + { + ListTag *eqList = (ListTag *)tag->getList(L"ArmorStandEquipment"); + if (eqList) { + for (int i = 0; i < 5 && i < eqList->size(); i++) { + CompoundTag *itemTag = eqList->get(i); + if (itemTag->contains(L"id")) { + equipment[i] = ItemInstance::fromTag(itemTag); + } else { + equipment[i] = nullptr; + } + } + } + } +} + +void ArmorStand::addAdditonalSaveData(CompoundTag *tag) +{ + LivingEntity::addAdditonalSaveData(tag); + + tag->putBoolean(L"Invisible", isInvisible()); + tag->putBoolean(L"Small", isSmall()); + tag->putBoolean(L"ShowArms", showArms()); + tag->putBoolean(L"NoBasePlate", !showBasePlate()); + tag->putInt (L"DisabledSlots", disabledSlots); + if (isMarker()) tag->putBoolean(L"Marker", true); + + auto saveRot = [](const Rotations &r) -> ListTag * { + ListTag *list = new ListTag(); + list->add(new FloatTag(L"", r.x)); + list->add(new FloatTag(L"", r.y)); + list->add(new FloatTag(L"", r.z)); + return list; + }; + + CompoundTag *pose = new CompoundTag(); + pose->put(L"Head", saveRot(getHeadPose())); + pose->put(L"Body", saveRot(getBodyPose())); + pose->put(L"LeftArm", saveRot(getLeftArmPose())); + pose->put(L"RightArm", saveRot(getRightArmPose())); + pose->put(L"LeftLeg", saveRot(getLeftLegPose())); + pose->put(L"RightLeg", saveRot(getRightLegPose())); + tag->put(L"Pose", pose); + + ListTag *eqList = new ListTag(); + for (int i = 0; i < 5; i++) { + CompoundTag *itemTag = new CompoundTag(); + if (equipment[i] != nullptr) { + equipment[i]->save(itemTag); + } + eqList->add(itemTag); + } + tag->put(L"ArmorStandEquipment", eqList); +} + +shared_ptr ArmorStand::getCarriedItem() +{ + return equipment[SLOT_WEAPON]; +} + +shared_ptr ArmorStand::getCarried(int slot) +{ + if (slot == SLOT_WEAPON) return getCarriedItem(); + else if (slot >= SLOT_BOOTS && slot <= SLOT_HELM) return getArmor(slot - 1); + return nullptr; +} + +shared_ptr ArmorStand::getArmor(int pos) +{ + if (pos >= 0 && pos < 4) { + return equipment[pos + 1]; + } + return nullptr; +} + +void ArmorStand::setEquippedSlot(int slot, shared_ptr item) +{ + if (slot >= 0 && slot < 5) { + equipment[slot] = item; + } +} + +ItemInstanceArray ArmorStand::getEquipmentSlots() +{ + return equipment; +} + +int ArmorStand::getEquipmentSlotForItem(shared_ptr item) const +{ + if (!item) return SLOT_WEAPON; + + int id = item->id; + + const int HELMET_IDS[] = {298, 302, 306, 310, 314}; + const int CHEST_IDS[] = {299, 303, 307, 311, 315}; + const int LEGS_IDS[] = {300, 304, 308, 312, 316}; + const int BOOTS_IDS[] = {301, 305, 309, 313, 317}; + const int HEAD_IDS[] = {397, 144, 145, 146, 86}; + + for (int helm : HELMET_IDS) if (id == helm) return SLOT_HELM; + for (int chest : CHEST_IDS) if (id == chest) return SLOT_CHEST; + for (int legs : LEGS_IDS) if (id == legs) return SLOT_LEGGINGS; + for (int boots : BOOTS_IDS) if (id == boots) return SLOT_BOOTS; + for (int head : HEAD_IDS) if (id == head) return SLOT_HELM; + + return SLOT_WEAPON; +} + +bool ArmorStand::isSlotDisabled(int slot) const +{ + if (slot == SLOT_WEAPON && !showArms()) return true; + return false; +} + +shared_ptr ArmorStand::getItemInSlot(int slot) +{ + if (slot == SLOT_WEAPON) { + return getCarriedItem(); + } else if (slot >= SLOT_BOOTS && slot <= SLOT_HELM) { + return getArmor(slot - 1); + } + return nullptr; +} \ No newline at end of file diff --git a/Minecraft.World/ArmorStand.h b/Minecraft.World/ArmorStand.h new file mode 100644 index 00000000..af1a8f3f --- /dev/null +++ b/Minecraft.World/ArmorStand.h @@ -0,0 +1,128 @@ +#pragma once +#include "Mob.h" +#include "SynchedEntityData.h" + +struct Rotations +{ + float x, y, z; + Rotations() : x(0), y(0), z(0) {} + Rotations(float x, float y, float z) : x(x), y(y), z(z) {} +}; + +class ArmorStand : public Mob +{ +public: + eINSTANCEOF GetType() { return eTYPE_ARMORSTAND; } + static Entity *create(Level *level) { return new ArmorStand(level); } + + static const Rotations DEFAULT_HEAD_POSE; + static const Rotations DEFAULT_BODY_POSE; + static const Rotations DEFAULT_LEFT_ARM_POSE; + static const Rotations DEFAULT_RIGHT_ARM_POSE; + static const Rotations DEFAULT_LEFT_LEG_POSE; + static const Rotations DEFAULT_RIGHT_LEG_POSE; + +private: + static const int DATA_CLIENT_FLAGS = 10; + static const int DATA_HEAD_POSE_X = 11; + static const int DATA_HEAD_POSE_Y = 12; + static const int DATA_HEAD_POSE_Z = 13; + static const int DATA_BODY_POSE_X = 14; + static const int DATA_BODY_POSE_Y = 15; + static const int DATA_BODY_POSE_Z = 16; + static const int DATA_LEFT_ARM_X = 17; + static const int DATA_LEFT_ARM_Y = 18; + static const int DATA_LEFT_ARM_Z = 19; + static const int DATA_RIGHT_ARM_X = 20; + static const int DATA_RIGHT_ARM_Y = 21; + static const int DATA_RIGHT_ARM_Z = 22; + static const int DATA_LEFT_LEG_X = 23; + static const int DATA_LEFT_LEG_Y = 24; + static const int DATA_LEFT_LEG_Z = 25; + static const int DATA_RIGHT_LEG_X = 26; + static const int DATA_RIGHT_LEG_Y = 27; + static const int DATA_RIGHT_LEG_Z = 28; + + static const int FLAG_SMALL = 1; + static const int FLAG_SHOW_ARMS = 4; + static const int FLAG_NO_BASEPLATE = 8; + static const int FLAG_MARKER = 16; + +public: + long long lastHit; + +private: + int disabledSlots; + bool invisible; + +public: + ArmorStand(Level *level); + virtual ~ArmorStand() {} + + bool isSmall() const; + bool showArms() const; + bool showBasePlate() const; + bool isMarker() const; + void setSmall(bool v); + void setShowArms(bool v); + void setNoBasePlate(bool v); + void setMarker(bool v); + + Rotations getHeadPose() const; + Rotations getBodyPose() const; + Rotations getLeftArmPose() const; + Rotations getRightArmPose() const; + Rotations getLeftLegPose() const; + Rotations getRightLegPose() const; + + void setHeadPose (const Rotations &r); + void setBodyPose (const Rotations &r); + void setLeftArmPose (const Rotations &r); + void setRightArmPose(const Rotations &r); + void setLeftLegPose (const Rotations &r); + void setRightLegPose(const Rotations &r); + + virtual bool useNewAi() override { return false; } + virtual void tick() override; + virtual bool hurt(DamageSource *source, float damage) override; + virtual bool interact(shared_ptr player) override; + + virtual bool isPickable() override; + virtual bool isPushable() override { return false; } + virtual void push(shared_ptr entity) override {} + virtual void push(double xa, double ya, double za) override {} + virtual bool isAttackable() override { return true; } + virtual bool isBaby() override { return isSmall(); } + virtual bool shouldShowName() override { return false; } + virtual wstring getAName() override { return L""; } + virtual wstring getDisplayName() override { return L""; } + virtual wstring getNetworkName() override { return L""; } + + virtual shared_ptr getCarriedItem() override; + virtual shared_ptr getCarried(int slot) override; + virtual shared_ptr getArmor(int pos) override; + virtual void setEquippedSlot(int slot, shared_ptr item) override; + virtual ItemInstanceArray getEquipmentSlots() override; + + virtual void readAdditionalSaveData(CompoundTag *tag) override; + virtual void addAdditonalSaveData(CompoundTag *tag) override; + virtual void handleEntityEvent(byte eventId) override; + +protected: + virtual void defineSynchedData() override; + virtual void registerAttributes() override; + + virtual int getHurtSound() override { return -1; } + virtual int getDeathSound() override { return -1; } + virtual float getSoundVolume() override { return 0.0f; } + virtual bool makeStepSound() override { return false; } + +private: + byte setBit(byte oldBit, int offset, bool value); + Rotations readRotation(int slotX) const; + void writeRotation(int slotX, const Rotations &r); + + int getEquipmentSlotForItem(shared_ptr item) const; + bool isSlotDisabled(int slot) const; + shared_ptr getItemInSlot(int slot); +}; \ No newline at end of file diff --git a/Minecraft.World/ArmorStandItem.cpp b/Minecraft.World/ArmorStandItem.cpp new file mode 100644 index 00000000..3f18d703 --- /dev/null +++ b/Minecraft.World/ArmorStandItem.cpp @@ -0,0 +1,57 @@ +#include "stdafx.h" +#include "net.minecraft.world.level.h" +#include "net.minecraft.world.level.tile.h" +#include "net.minecraft.world.entity.player.h" +#include "net.minecraft.world.entity.h" +#include "net.minecraft.world.item.h" +#include "Mth.h" +#include "ArmorStandItem.h" +#include "..\Minecraft.World\ArmorStand.h" + +bool ArmorStandItem::useOn(shared_ptr itemInstance, shared_ptr player, + Level *level, int x, int y, int z, int face, + float clickX, float clickY, float clickZ, + bool bTestUseOnOnly) +{ + + int px = x; + int py = y; + int pz = z; + + if (face == 0) py--; // bottom + if (face == 1) py++; // top + if (face == 2) pz--; // North + if (face == 3) pz++; // South + if (face == 4) px--; // West + if (face == 5) px++; // East + + + //if (face != 1) return false; + + + if (level->getTile(px, py, pz) != 0) return false; + if (level->getTile(px, py + 1, pz) != 0) return false; + + if (bTestUseOnOnly) return true; + if (level->isClientSide) return true; + + //rotation + float targetRot = player->yRot + 180.0f; + float snapped = (float)(Mth::floor((targetRot + 22.5f) / 45.0f) * 45.0f); + + shared_ptr stand = std::make_shared(level); + stand->moveTo(px + 0.5, py, pz + 0.5, snapped, 0.0f); + stand->yRot = snapped; + stand->yBodyRot = snapped; + stand->yHeadRot = snapped; + stand->yRotO = snapped; + stand->yBodyRotO = snapped; + stand->yHeadRotO = snapped; + + level->addEntity(stand); + + if (!player->abilities.instabuild) + itemInstance->count--; + + return true; +} \ No newline at end of file diff --git a/Minecraft.World/ArmorStandItem.h b/Minecraft.World/ArmorStandItem.h new file mode 100644 index 00000000..ebe30ee2 --- /dev/null +++ b/Minecraft.World/ArmorStandItem.h @@ -0,0 +1,14 @@ +#pragma once +#include "Item.h" + +class ArmorStandItem : public Item +{ +public: + ArmorStandItem(int id) : Item(id) {} + virtual ~ArmorStandItem() {} + + virtual bool useOn(shared_ptr itemInstance, shared_ptr player, + Level *level, int x, int y, int z, int face, + float clickX, float clickY, float clickZ, + bool bTestUseOnOnly = false) override; +}; \ No newline at end of file diff --git a/Minecraft.World/Class.h b/Minecraft.World/Class.h index 103c0f1b..a5cd626f 100644 --- a/Minecraft.World/Class.h +++ b/Minecraft.World/Class.h @@ -186,6 +186,8 @@ enum eINSTANCEOF eTYPE_REMOTEPLAYER = eTYPE_PLAYER | 0x2, eTYPE_LOCALPLAYER = eTYPE_PLAYER | 0x3, + eTYPE_ARMORSTAND = eTYPE_LIVINGENTITY | 0x10, + eTYPE_GLOBAL_ENTITY = eTYPE_ENTITY | BIT_GLOBAL_ENTITY, eTYPE_LIGHTNINGBOLT = eTYPE_GLOBAL_ENTITY | 0x1, @@ -200,9 +202,8 @@ enum eINSTANCEOF eTYPE_MINECART_CHEST = eTYPE_MINECART_CONTAINER | 0x2, eTYPE_MINECART_HOPPER = eTYPE_MINECART_CONTAINER | 0x5, - - eTYPE_FIREBALL = eTYPE_ENTITY | eTYPE_PROJECTILE | BIT_FIREBALL, //0x2, + eTYPE_FIREBALL = eTYPE_ENTITY | eTYPE_PROJECTILE | BIT_FIREBALL, //0x2, eTYPE_DRAGON_FIREBALL = eTYPE_FIREBALL | 0x1, eTYPE_WITHER_SKULL = eTYPE_FIREBALL | 0x2, @@ -442,6 +443,7 @@ public: classes->push_back( SUBCLASS(eTYPE_SERVERPLAYER )->addParent( eTYPE_PLAYER ) ); classes->push_back( SUBCLASS(eTYPE_REMOTEPLAYER )->addParent( eTYPE_PLAYER ) ); classes->push_back( SUBCLASS(eTYPE_LOCALPLAYER )->addParent( eTYPE_PLAYER ) ); + classes->push_back( SUBCLASS(eTYPE_ARMORSTAND )->addParent( eTYPE_MOB ) ); classes->push_back( SUBCLASS(eTYPE_MINECART )->addParent( eTYPE_ENTITY ) ); classes->push_back( SUBCLASS(eTYPE_MINECART_RIDEABLE )->addParent( eTYPE_MINECART ) ); classes->push_back( SUBCLASS(eTYPE_MINECART_SPAWNER )->addParent( eTYPE_MINECART ) ); diff --git a/Minecraft.World/EntityIO.cpp b/Minecraft.World/EntityIO.cpp index 876de250..22083829 100644 --- a/Minecraft.World/EntityIO.cpp +++ b/Minecraft.World/EntityIO.cpp @@ -16,6 +16,7 @@ #include "com.mojang.nbt.h" #include "EntityIO.h" + unordered_map *EntityIO::idCreateMap = new unordered_map; unordered_map *EntityIO::classIdMap = new unordered_map; unordered_map *EntityIO::numCreateMap = new unordered_map; @@ -72,6 +73,8 @@ void EntityIO::staticCtor() setId(MinecartHopper::create, eTYPE_MINECART_HOPPER, L"MinecartHopper", 46); setId(MinecartSpawner::create, eTYPE_MINECART_SPAWNER, L"MinecartSpawner", 47); + + setId(Mob::create, eTYPE_MOB, L"Mob", 48); setId(Monster::create, eTYPE_MONSTER, L"Monster", 49); @@ -106,7 +109,9 @@ void EntityIO::staticCtor() setId(EntityHorse::create, eTYPE_HORSE, L"EntityHorse", 100, eMinecraftColour_Mob_Horse_Colour1, eMinecraftColour_Mob_Horse_Colour2, IDS_HORSE); setId(Rabbit::create, eTYPE_RABBIT, L"Rabbit", 101, eMinecraftColour_Mob_Rabbit_Colour1, - eMinecraftColour_Mob_Rabbit_Colour2, IDS_HORSE);//change IDS_RABBIT later + eMinecraftColour_Mob_Rabbit_Colour2, IDS_RABBIT);//change IDS_RABBIT later + + setId(ArmorStand::create, eTYPE_ARMORSTAND, L"ArmorStand", 102), setId(Villager::create, eTYPE_VILLAGER, L"Villager", 120, eMinecraftColour_Mob_Villager_Colour1, eMinecraftColour_Mob_Villager_Colour2, IDS_VILLAGER); diff --git a/Minecraft.World/Item.cpp b/Minecraft.World/Item.cpp index f9db6d85..a40b1ff7 100644 --- a/Minecraft.World/Item.cpp +++ b/Minecraft.World/Item.cpp @@ -257,8 +257,10 @@ Item* Item::door_jungle = nullptr; Item* Item::door_acacia = nullptr; Item* Item::door_dark = nullptr; +//TU31 Item* Item::mutton_raw = nullptr; Item* Item::mutton_cooked = nullptr; +Item* Item::armor_stand = nullptr; void Item::staticCtor() { @@ -511,6 +513,9 @@ void Item::staticCtor() Item::door_jungle = (new DoorItem(173, Material::wood, L"doorJungle"))->setBaseItemTypeAndMaterial(eBaseItemType_door, eMaterial_wood)->setIconName(L"doorJungle")->setDescriptionId(IDS_ITEM_DOOR_JUNGLE)->setUseDescriptionId(IDS_DESC_DOOR_WOOD); Item::door_acacia = (new DoorItem(174, Material::wood, L"doorAcacia"))->setBaseItemTypeAndMaterial(eBaseItemType_door, eMaterial_wood)->setIconName(L"doorAcacia")->setDescriptionId(IDS_ITEM_DOOR_ACACIA)->setUseDescriptionId(IDS_DESC_DOOR_WOOD); Item::door_dark = (new DoorItem(175, Material::wood, L"doorDark"))->setBaseItemTypeAndMaterial(eBaseItemType_door, eMaterial_wood)->setIconName(L"doorDark")->setDescriptionId(IDS_ITEM_DOOR_DARK)->setUseDescriptionId(IDS_DESC_DOOR_WOOD); + + + Item::armor_stand = (new ArmorStandItem(160))->setBaseItemTypeAndMaterial(eBaseItemType_undefined, eMaterial_undefined)->setIconName(L"armorStand")->setDescriptionId(IDS_ITEM_ARMOR_STAND)->setUseDescriptionId(IDS_DESC_ARMOR_STAND); } @@ -1164,3 +1169,4 @@ const int Item::pumpkinPie_Id ; const int Item::enchantedBook_Id ; const int Item::netherQuartz_Id ; #endif + diff --git a/Minecraft.World/Item.h b/Minecraft.World/Item.h index 0be25176..2c0a318c 100644 --- a/Minecraft.World/Item.h +++ b/Minecraft.World/Item.h @@ -422,9 +422,12 @@ public: static Item* door_jungle; static Item* door_acacia; static Item* door_dark; - + //TU31 static Item* mutton_raw; static Item* mutton_cooked; + static Item* armor_stand; + + static const int shovel_iron_Id = 256; static const int pickAxe_iron_Id = 257; @@ -631,8 +634,7 @@ public: static const int lead_Id = 420; static const int nameTag_Id = 421; - static const int mutton_raw_Id = 423; - static const int mutton_cooked_Id = 424; + // TU25 static const int door_spruce_Id = 427; @@ -641,6 +643,11 @@ public: static const int door_acacia_Id = 430; static const int door_dark_Id = 431; + //TU31 + static const int mutton_raw_Id = 423; + static const int mutton_cooked_Id = 424; + static const int armor_stand_Id = 416; + public: const int id; @@ -781,4 +788,4 @@ public: virtual bool isValidRepairItem(shared_ptr source, shared_ptr repairItem); virtual void registerIcons(IconRegister *iconRegister); virtual attrAttrModMap *getDefaultAttributeModifiers(); -}; +}; \ No newline at end of file diff --git a/Minecraft.World/Minecraft.World.vcxproj b/Minecraft.World/Minecraft.World.vcxproj index 23738515..9ec32e83 100644 --- a/Minecraft.World/Minecraft.World.vcxproj +++ b/Minecraft.World/Minecraft.World.vcxproj @@ -2408,6 +2408,8 @@ + + @@ -3487,6 +3489,8 @@ + + diff --git a/Minecraft.World/Minecraft.World.vcxproj.filters b/Minecraft.World/Minecraft.World.vcxproj.filters index 6b674d21..9232a3e8 100644 --- a/Minecraft.World/Minecraft.World.vcxproj.filters +++ b/Minecraft.World/Minecraft.World.vcxproj.filters @@ -3203,6 +3203,7 @@ Header Files +<<<<<<< Updated upstream net\minecraft\world\level\tile @@ -3211,6 +3212,13 @@ net\minecraft\world\level\tile +======= + + net\minecraft\world\entity\item + + + net\minecraft\world\entity\item +>>>>>>> Stashed changes @@ -5647,6 +5655,7 @@ Source Files +<<<<<<< Updated upstream net\minecraft\world\level\tile @@ -5655,6 +5664,13 @@ net\minecraft\world\level\tile +======= + + net\minecraft\world\entity\item + + + net\minecraft\world\entity\item +>>>>>>> Stashed changes \ No newline at end of file diff --git a/Minecraft.World/Mob.h b/Minecraft.World/Mob.h index e070e369..f2080f93 100644 --- a/Minecraft.World/Mob.h +++ b/Minecraft.World/Mob.h @@ -59,7 +59,7 @@ protected: private: shared_ptr target; Sensing *sensing; - +protected: ItemInstanceArray equipment; protected: @@ -155,7 +155,7 @@ public: virtual float getHeadSizeScale(); virtual int getMaxSpawnClusterSize(); virtual int getMaxFallDistance(); - virtual shared_ptr getCarriedItem(); + virtual shared_ptr getCarriedItem() override; virtual shared_ptr getCarried(int slot); virtual shared_ptr getArmor(int pos); virtual void setEquippedSlot(int slot, shared_ptr item); diff --git a/Minecraft.World/Rabbit.cpp b/Minecraft.World/Rabbit.cpp index ca92a97b..586bd8cb 100644 --- a/Minecraft.World/Rabbit.cpp +++ b/Minecraft.World/Rabbit.cpp @@ -125,9 +125,10 @@ shared_ptr Rabbit::getBreedOffspring(shared_ptr target) { } -int Rabbit::getAmbientSound() { return eSoundType_MOB_BAT_IDLE; } -int Rabbit::getHurtSound() { return eSoundType_MOB_BAT_HURT; } -int Rabbit::getDeathSound() { return eSoundType_MOB_BAT_DEATH; } +int Rabbit::getAmbientSound() { return eSoundType_MOB_RABBIT_IDLE; } +int Rabbit::getHurtSound() { return eSoundType_MOB_RABBIT_HURT; } +int Rabbit::getDeathSound() { return eSoundType_MOB_RABBIT_DEATH; } +int Rabbit::getHopSound() { return eSoundType_MOB_RABBIT_HOP; } void Rabbit::readAdditionalSaveData(CompoundTag *tag) { Animal::readAdditionalSaveData(tag); diff --git a/Minecraft.World/Rabbit.h b/Minecraft.World/Rabbit.h index a094d13b..e4e424b9 100644 --- a/Minecraft.World/Rabbit.h +++ b/Minecraft.World/Rabbit.h @@ -44,6 +44,7 @@ protected: virtual int getAmbientSound() override; virtual int getHurtSound() override; virtual int getDeathSound() override; + virtual int getHopSound() ; virtual float getSoundVolume() override { return 0.6f; } virtual bool makeStepSound() override { return true; } diff --git a/Minecraft.World/SoundTypes.h b/Minecraft.World/SoundTypes.h index 81e81d79..2ec7d9ee 100644 --- a/Minecraft.World/SoundTypes.h +++ b/Minecraft.World/SoundTypes.h @@ -213,6 +213,12 @@ enum eSOUND_TYPE eSoundType_FIRE_NEWIGNITE, + eSoundType_MOB_RABBIT_IDLE, + eSoundType_MOB_RABBIT_HURT, + eSoundType_MOB_RABBIT_DEATH, + eSoundType_MOB_RABBIT_HOP, + + eSoundType_MAX }; diff --git a/Minecraft.World/net.minecraft.world.entity.h b/Minecraft.World/net.minecraft.world.entity.h index 2ba64218..de8c232a 100644 --- a/Minecraft.World/net.minecraft.world.entity.h +++ b/Minecraft.World/net.minecraft.world.entity.h @@ -31,4 +31,7 @@ #include "MobGroupData.h" #include "OwnableEntity.h" #include "EntitySelector.h" -#include "LivingEntity.h" \ No newline at end of file +#include "LivingEntity.h" + +//TU31 +#include "ArmorStand.h" \ No newline at end of file diff --git a/Minecraft.World/net.minecraft.world.entity.item.h b/Minecraft.World/net.minecraft.world.entity.item.h index 575f18b5..7fcf7b6b 100644 --- a/Minecraft.World/net.minecraft.world.entity.item.h +++ b/Minecraft.World/net.minecraft.world.entity.item.h @@ -12,3 +12,4 @@ #include "MinecartSpawner.h" #include "MinecartTNT.h" #include "PrimedTnt.h" +#include "ArmorStandItem.h"