the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 193 lines 4.0 kB view raw
1#include "stdafx.h" 2#include "com.mojang.nbt.h" 3#include "net.minecraft.world.level.tile.h" 4#include "net.minecraft.world.phys.h" 5#include "net.minecraft.world.level.h" 6#include "net.minecraft.world.item.h" 7#include "net.minecraft.world.entity.h" 8#include "net.minecraft.world.entity.ai.attributes.h" 9#include "net.minecraft.world.entity.monster.h" 10#include "SharedConstants.h" 11#include "Squid.h" 12#include "..\Minecraft.Client\Textures.h" 13 14void Squid::_init() 15{ 16 xBodyRot = xBodyRotO = 0.0f; 17 zBodyRot = zBodyRotO = 0.0f; 18 19 tentacleMovement = oldTentacleMovement = 0.0f; 20 tentacleAngle = oldTentacleAngle = 0.0f; 21 22 speed = 0.0f; 23 tentacleSpeed = 0.0f; 24 rotateSpeed = 0.0f; 25 26 tx = ty = tz = 0.0f; 27} 28 29Squid::Squid(Level *level) : WaterAnimal( level ) 30{ 31 // 4J Stu - This function call had to be moved here from the Entity ctor to ensure that 32 // the derived version of the function is called 33 this->defineSynchedData(); 34 registerAttributes(); 35 setHealth(getMaxHealth()); 36 37 _init(); 38 this->setSize(0.95f, 0.95f); 39 tentacleSpeed = 1 / (random->nextFloat() + 1) * 0.2f; 40} 41 42void Squid::registerAttributes() 43{ 44 WaterAnimal::registerAttributes(); 45 46 getAttribute(SharedMonsterAttributes::MAX_HEALTH)->setBaseValue(10); 47} 48 49int Squid::getAmbientSound() 50{ 51 return -1; 52} 53 54int Squid::getHurtSound() 55{ 56 return -1; 57} 58 59int Squid::getDeathSound() 60{ 61 return -1; 62} 63 64float Squid::getSoundVolume() 65{ 66 return 0.4f; 67} 68 69int Squid::getDeathLoot() 70{ 71 return 0; 72} 73 74bool Squid::makeStepSound() 75{ 76 return false; 77} 78 79void Squid::dropDeathLoot(bool wasKilledByPlayer, int playerBonusLevel) 80{ 81 int count = random->nextInt(3 + playerBonusLevel) + 1; 82 for (int i = 0; i < count; i++) 83 { 84 spawnAtLocation(shared_ptr<ItemInstance>( new ItemInstance(Item::dye_powder, 1, DyePowderItem::BLACK) ), 0.0f); 85 } 86} 87 88bool Squid::isInWater() 89{ 90 return level->checkAndHandleWater(bb->grow(0, -0.6f, 0), Material::water, shared_from_this() ); 91} 92 93void Squid::aiStep() 94{ 95 WaterAnimal::aiStep(); 96 97 xBodyRotO = xBodyRot; 98 zBodyRotO = zBodyRot; 99 100 oldTentacleMovement = tentacleMovement; 101 oldTentacleAngle = tentacleAngle; 102 103 tentacleMovement += tentacleSpeed; 104 if (tentacleMovement > (float) PI * 2.0f) 105 { 106 tentacleMovement -= (float) PI * 2.0f; 107 if (random->nextInt(10) == 0) tentacleSpeed = 1 / (random->nextFloat() + 1) * 0.2f; 108 } 109 110 if (isInWater()) 111 { 112 if (tentacleMovement < PI) 113 { 114 float tentacleScale = tentacleMovement / PI; 115 tentacleAngle = Mth::sin(tentacleScale * tentacleScale * PI) * PI * 0.25f; 116 117 if (tentacleScale > .75) 118 { 119 speed = 1.0f; 120 rotateSpeed = 1.0f; 121 } 122 else 123 { 124 rotateSpeed = rotateSpeed * 0.8f; 125 } 126 } 127 else 128 { 129 tentacleAngle = 0.0f; 130 speed = speed * 0.9f; 131 rotateSpeed = rotateSpeed * 0.99f; 132 } 133 134 if (!level->isClientSide) 135 { 136 xd = tx * speed; 137 yd = ty * speed; 138 zd = tz * speed; 139 } 140 141 double horizontalMovement = sqrt(xd * xd + zd * zd); 142 143 yBodyRot += ((-(float) atan2(xd, zd) * 180 / PI) - yBodyRot) * 0.1f; 144 yRot = yBodyRot; 145 zBodyRot = zBodyRot + (float) PI * rotateSpeed * 1.5f; 146 xBodyRot += ((-(float) atan2(horizontalMovement, yd) * 180 / PI) - xBodyRot) * 0.1f; 147 } 148 else 149 { 150 tentacleAngle = Mth::abs(Mth::sin(tentacleMovement)) * PI * 0.25f; 151 152 if (!level->isClientSide) 153 { 154 // unable to move, apply gravity 155 xd = 0.0f; 156 yd -= 0.08; 157 yd *= 0.98f; 158 zd = 0.0f; 159 } 160 161 // fall over 162 xBodyRot += (-90 - xBodyRot) * 0.02f; 163 } 164} 165 166void Squid::travel(float xa, float ya) 167{ 168 move(xd, yd, zd); 169} 170 171void Squid::serverAiStep() 172{ 173 noActionTime++; 174 175 // ridiculous simple movement ai 176 if (noActionTime > SharedConstants::TICKS_PER_SECOND * 5) 177 { 178 tx = ty = tz = 0; 179 } 180 else if (random->nextInt(50) == 0 || !wasInWater || (tx == 0 && ty == 0 && tz == 0)) 181 { 182 float angle = random->nextFloat() * PI * 2.0f; 183 tx = Mth::cos(angle) * 0.2f; 184 ty = -0.1f + random->nextFloat() * 0.2f; 185 tz = Mth::sin(angle) * 0.2f; 186 } 187 checkDespawn(); // 4J - 1.7.0 fix 188} 189 190bool Squid::canSpawn() 191{ 192 return y > 45 && y < level->seaLevel && WaterAnimal::canSpawn(); 193}