the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 224 lines 7.1 kB view raw
1#include "stdafx.h" 2#include "net.minecraft.world.entity.h" 3#include "net.minecraft.world.entity.player.h" 4#include "net.minecraft.world.entity.projectile.h" 5#include "net.minecraft.world.level.h" 6#include "net.minecraft.world.damagesource.h" 7#include "net.minecraft.world.food.h" 8#include "net.minecraft.network.packet.h" 9 10DamageSource *DamageSource::inFire = (new DamageSource(ChatPacket::e_ChatDeathInFire, ChatPacket::e_ChatDeathInFirePlayer))->setIsFire(); 11DamageSource *DamageSource::onFire = (new DamageSource(ChatPacket::e_ChatDeathOnFire, ChatPacket::e_ChatDeathOnFirePlayer))->bypassArmor()->setIsFire(); 12DamageSource *DamageSource::lava = (new DamageSource(ChatPacket::e_ChatDeathLava, ChatPacket::e_ChatDeathLavaPlayer))->setIsFire(); 13DamageSource *DamageSource::inWall = (new DamageSource(ChatPacket::e_ChatDeathInWall))->bypassArmor(); 14DamageSource *DamageSource::drown = (new DamageSource(ChatPacket::e_ChatDeathDrown, ChatPacket::e_ChatDeathDrownPlayer))->bypassArmor(); 15DamageSource *DamageSource::starve = (new DamageSource(ChatPacket::e_ChatDeathStarve))->bypassArmor(); 16DamageSource *DamageSource::cactus = new DamageSource(ChatPacket::e_ChatDeathCactus, ChatPacket::e_ChatDeathCactusPlayer); 17DamageSource *DamageSource::fall = (new DamageSource(ChatPacket::e_ChatDeathFall))->bypassArmor(); 18DamageSource *DamageSource::outOfWorld = (new DamageSource(ChatPacket::e_ChatDeathOutOfWorld))->bypassArmor()->bypassInvul(); 19DamageSource *DamageSource::genericSource = (new DamageSource(ChatPacket::e_ChatDeathGeneric))->bypassArmor(); 20DamageSource *DamageSource::magic = (new DamageSource(ChatPacket::e_ChatDeathMagic))->bypassArmor()->setMagic(); 21DamageSource *DamageSource::dragonbreath = (new DamageSource(ChatPacket::e_ChatDeathDragonBreath))->bypassArmor(); 22DamageSource *DamageSource::wither = (new DamageSource(ChatPacket::e_ChatDeathWither))->bypassArmor(); 23DamageSource *DamageSource::anvil = (new DamageSource(ChatPacket::e_ChatDeathAnvil)); 24DamageSource *DamageSource::fallingBlock = (new DamageSource(ChatPacket::e_ChatDeathFallingBlock)); 25 26DamageSource *DamageSource::mobAttack(shared_ptr<LivingEntity> mob) 27{ 28 return new EntityDamageSource(ChatPacket::e_ChatDeathMob, ChatPacket::e_ChatDeathMob, mob); 29} 30 31DamageSource *DamageSource::playerAttack(shared_ptr<Player> player) 32{ 33 return new EntityDamageSource(ChatPacket::e_ChatDeathPlayer, ChatPacket::e_ChatDeathPlayerItem, player); 34} 35 36DamageSource *DamageSource::arrow(shared_ptr<Arrow> arrow, shared_ptr<Entity> owner) 37{ 38 return (new IndirectEntityDamageSource(ChatPacket::e_ChatDeathArrow, ChatPacket::e_ChatDeathArrowItem, arrow, owner))->setProjectile(); 39} 40 41DamageSource *DamageSource::fireball(shared_ptr<Fireball> fireball, shared_ptr<Entity> owner) 42{ 43 if (owner == NULL) 44 { 45 return (new IndirectEntityDamageSource(ChatPacket::e_ChatDeathOnFire, ChatPacket::e_ChatDeathOnFire, fireball, fireball))->setIsFire()->setProjectile(); 46 } 47 return (new IndirectEntityDamageSource(ChatPacket::e_ChatDeathFireball, ChatPacket::e_ChatDeathArrowItem, fireball, owner))->setIsFire()->setProjectile(); 48} 49 50DamageSource *DamageSource::thrown(shared_ptr<Entity> entity, shared_ptr<Entity> owner) 51{ 52 return (new IndirectEntityDamageSource(ChatPacket::e_ChatDeathThrown, ChatPacket::e_ChatDeathThrownItem, entity, owner))->setProjectile(); 53} 54 55DamageSource *DamageSource::indirectMagic(shared_ptr<Entity> entity, shared_ptr<Entity> owner) 56{ 57 return (new IndirectEntityDamageSource(ChatPacket::e_ChatDeathIndirectMagic, ChatPacket::e_ChatDeathIndirectMagicItem, entity, owner) )->bypassArmor()->setMagic();; 58} 59 60DamageSource *DamageSource::thorns(shared_ptr<Entity> source) 61{ 62 return (new EntityDamageSource(ChatPacket::e_ChatDeathThorns, ChatPacket::e_ChatDeathThorns, source))->setMagic(); 63} 64 65DamageSource *DamageSource::explosion(Explosion *explosion) 66{ 67 if ( (explosion != NULL) && (explosion->getSourceMob() != NULL) ) 68 { 69 return (new EntityDamageSource(ChatPacket::e_ChatDeathExplosionPlayer, ChatPacket::e_ChatDeathExplosionPlayer, explosion->getSourceMob()))->setScalesWithDifficulty()->setExplosion(); 70 } 71 else 72 { 73 return (new DamageSource(ChatPacket::e_ChatDeathExplosion))->setScalesWithDifficulty()->setExplosion(); 74 } 75} 76 77bool DamageSource::isProjectile() 78{ 79 return _isProjectile; 80} 81 82DamageSource *DamageSource::setProjectile() 83{ 84 _isProjectile = true; 85 return this; 86} 87 88bool DamageSource::isExplosion() 89{ 90 return _isExplosion; 91} 92 93DamageSource *DamageSource::setExplosion() 94{ 95 _isExplosion = true; 96 return this; 97} 98 99bool DamageSource::isBypassArmor() 100{ 101 return _bypassArmor; 102} 103 104float DamageSource::getFoodExhaustion() 105{ 106 return exhaustion; 107} 108 109bool DamageSource::isBypassInvul() 110{ 111 return _bypassInvul; 112} 113 114 115//DamageSource::DamageSource(const wstring &msgId) 116DamageSource::DamageSource(ChatPacket::EChatPacketMessage msgId, ChatPacket::EChatPacketMessage msgWithItemId) 117{ 118 // 4J added initialisors 119 _bypassArmor = false; 120 _bypassInvul = false; 121 // food exhastion caused by being damaged by this source 122 exhaustion = FoodConstants::EXHAUSTION_ATTACK; 123 isFireSource = false; 124 _isProjectile = false; 125 _isMagic = false; 126 _isExplosion = false; 127 128 //this->msgId = msgId; 129 m_msgId = msgId; 130 m_msgWithItemId = msgWithItemId; 131} 132 133shared_ptr<Entity> DamageSource::getDirectEntity() 134{ 135 return getEntity(); 136} 137 138shared_ptr<Entity> DamageSource::getEntity() 139{ 140 return shared_ptr<Entity>(); 141} 142 143DamageSource *DamageSource::bypassArmor() 144{ 145 _bypassArmor = true; 146 // these kinds of damages don't cause the player to grow more hungry 147 exhaustion = 0; 148 return this; 149} 150 151DamageSource *DamageSource::bypassInvul() 152{ 153 _bypassInvul = true; 154 return this; 155} 156 157DamageSource *DamageSource::setIsFire() 158{ 159 isFireSource = true; 160 return this; 161} 162 163DamageSource *DamageSource::setScalesWithDifficulty() 164{ 165 _scalesWithDifficulty = true; 166 return this; 167} 168 169bool DamageSource::scalesWithDifficulty() 170{ 171 return _scalesWithDifficulty; 172} 173 174bool DamageSource::isMagic() 175{ 176 return _isMagic; 177} 178 179DamageSource *DamageSource::setMagic() 180{ 181 _isMagic = true; 182 return this; 183} 184 185//wstring DamageSource::getLocalizedDeathMessage(shared_ptr<Player> player) 186//{ 187// return L"death." + msgId + player->name; 188// //return I18n.get(L"death." + msgId, player.name); 189//} 190 191shared_ptr<ChatPacket> DamageSource::getDeathMessagePacket(shared_ptr<LivingEntity> player) 192{ 193 shared_ptr<LivingEntity> source = player->getKillCredit(); 194 if(source != NULL) 195 { 196 return shared_ptr<ChatPacket>( new ChatPacket(player->getNetworkName(), m_msgWithItemId != ChatPacket::e_ChatCustom ? m_msgWithItemId : m_msgId, source->GetType(), source->getNetworkName() ) ); 197 } 198 else 199 { 200 return shared_ptr<ChatPacket>( new ChatPacket(player->getNetworkName(), m_msgId ) ); 201 } 202} 203 204bool DamageSource::isFire() 205{ 206 return isFireSource; 207} 208 209ChatPacket::EChatPacketMessage DamageSource::getMsgId() 210{ 211 return m_msgId; 212} 213 214// 4J: Very limited check for equality (used to detect fall damage, etc) 215bool DamageSource::equals(DamageSource *source) 216{ 217 return m_msgId == source->m_msgId && m_msgWithItemId == source->m_msgWithItemId; 218} 219 220// 4J: Copy function 221DamageSource *DamageSource::copy() 222{ 223 return new DamageSource(*this); 224}