the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
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}