1
0

Merge branch 'fixes&features' of git://github.com/tonibm19/MCServer

This commit is contained in:
madmaxoft 2013-12-25 19:50:18 +01:00
commit 77aaa5c367
3 changed files with 65 additions and 9 deletions

View File

@ -18,5 +18,6 @@ mborland
SamJBarney SamJBarney
worktycho worktycho
Sxw1212 Sxw1212
tonibm19
Please add yourself to this list if you contribute to MCServer. Please add yourself to this list if you contribute to MCServer.

View File

@ -16,19 +16,68 @@ public:
virtual void OnPlacedByPlayer(cWorld * a_World, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, int a_CursorX, int a_CursorY, int a_CursorZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) override virtual void OnPlacedByPlayer(cWorld * a_World, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, int a_CursorX, int a_CursorY, int a_CursorZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) override
{ {
if // Check whether the pumpkin is a part of a golem or a snowman
(
a_World->GetBlock(a_BlockX, a_BlockY - 1, a_BlockZ) == E_BLOCK_SNOW_BLOCK && if (a_BlockY < 2)
a_World->GetBlock(a_BlockX, a_BlockY - 2, a_BlockZ) == E_BLOCK_SNOW_BLOCK
)
{ {
a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, E_BLOCK_AIR, 0); // The pumpkin is too low for a golem / snowman
a_World->SetBlock(a_BlockX, a_BlockY - 1, a_BlockZ, E_BLOCK_AIR, 0); return;
a_World->SetBlock(a_BlockX, a_BlockY - 2, a_BlockZ, E_BLOCK_AIR, 0); }
BLOCKTYPE BlockY1 = a_World->GetBlock(a_BlockX, a_BlockY - 1, a_BlockZ);
BLOCKTYPE BlockY2 = a_World->GetBlock(a_BlockX, a_BlockY - 2, a_BlockZ);
// Check for a snow golem:
if ((BlockY1 == E_BLOCK_SNOW_BLOCK) && (BlockY2 == E_BLOCK_SNOW_BLOCK))
{
a_World->FastSetBlock(a_BlockX, a_BlockY, a_BlockZ, E_BLOCK_AIR, 0);
a_World->FastSetBlock(a_BlockX, a_BlockY - 1, a_BlockZ, E_BLOCK_AIR, 0);
a_World->FastSetBlock(a_BlockX, a_BlockY - 2, a_BlockZ, E_BLOCK_AIR, 0);
a_World->SpawnMob(a_BlockX + 0.5, a_BlockY - 2, a_BlockZ + 0.5, cMonster::mtSnowGolem); a_World->SpawnMob(a_BlockX + 0.5, a_BlockY - 2, a_BlockZ + 0.5, cMonster::mtSnowGolem);
return;
}
// Check for an iron golem. First check only the body and legs, since those are the same for both orientations:
if ((BlockY1 != E_BLOCK_IRON_BLOCK) || (BlockY2 != E_BLOCK_IRON_BLOCK))
{
// One of the blocks is not an iron, no chance of a golem here
return;
}
// Now check both orientations for hands:
if (
(a_World->GetBlock(a_BlockX + 1, a_BlockY - 1, a_BlockZ) == E_BLOCK_IRON_BLOCK) &&
(a_World->GetBlock(a_BlockX - 1, a_BlockY - 1, a_BlockZ) == E_BLOCK_IRON_BLOCK)
)
{
// Remove the iron blocks:
a_World->FastSetBlock(a_BlockX, a_BlockY, a_BlockZ, E_BLOCK_AIR, 0);
a_World->FastSetBlock(a_BlockX, a_BlockY - 1, a_BlockZ, E_BLOCK_AIR, 0);
a_World->FastSetBlock(a_BlockX + 1, a_BlockY - 1, a_BlockZ, E_BLOCK_AIR, 0);
a_World->FastSetBlock(a_BlockX - 1, a_BlockY - 1, a_BlockZ, E_BLOCK_AIR, 0);
a_World->FastSetBlock(a_BlockX, a_BlockY - 2, a_BlockZ, E_BLOCK_AIR, 0);
// Spawn the golem:
a_World->SpawnMob(a_BlockX + 0.5, a_BlockY - 2, a_BlockZ + 0.5, cMonster::mtIronGolem);
}
else if (
(a_World->GetBlock(a_BlockX, a_BlockY - 1, a_BlockZ + 1) == E_BLOCK_IRON_BLOCK) &&
(a_World->GetBlock(a_BlockX, a_BlockY - 1, a_BlockZ - 1) == E_BLOCK_IRON_BLOCK)
)
{
// Remove the iron blocks:
a_World->FastSetBlock(a_BlockX, a_BlockY, a_BlockZ, E_BLOCK_AIR, 0);
a_World->FastSetBlock(a_BlockX, a_BlockY - 1, a_BlockZ, E_BLOCK_AIR, 0);
a_World->FastSetBlock(a_BlockX, a_BlockY - 1, a_BlockZ + 1, E_BLOCK_AIR, 0);
a_World->FastSetBlock(a_BlockX, a_BlockY - 1, a_BlockZ - 1, E_BLOCK_AIR, 0);
a_World->FastSetBlock(a_BlockX, a_BlockY - 2, a_BlockZ, E_BLOCK_AIR, 0);
// Spawn the golem:
a_World->SpawnMob(a_BlockX + 0.5, a_BlockY - 2, a_BlockZ + 0.5, cMonster::mtIronGolem);
} }
} }
virtual bool GetPlacementBlockTypeMeta( virtual bool GetPlacementBlockTypeMeta(
cWorld * a_World, cPlayer * a_Player, cWorld * a_World, cPlayer * a_Player,
int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace,

View File

@ -40,8 +40,10 @@ static const struct
{cMonster::mtCow, "cow"}, {cMonster::mtCow, "cow"},
{cMonster::mtCreeper, "creeper"}, {cMonster::mtCreeper, "creeper"},
{cMonster::mtEnderman, "enderman"}, {cMonster::mtEnderman, "enderman"},
{cMonster::mtEnderDragon, "enderdragon"},
{cMonster::mtGhast, "ghast"}, {cMonster::mtGhast, "ghast"},
{cMonster::mtHorse, "horse"}, {cMonster::mtHorse, "horse"},
{cMonster::mtIronGolem, "irongolem"},
{cMonster::mtMagmaCube, "magmacube"}, {cMonster::mtMagmaCube, "magmacube"},
{cMonster::mtMooshroom, "mooshroom"}, {cMonster::mtMooshroom, "mooshroom"},
{cMonster::mtOcelot, "ocelot"}, {cMonster::mtOcelot, "ocelot"},
@ -49,11 +51,13 @@ static const struct
{cMonster::mtSheep, "sheep"}, {cMonster::mtSheep, "sheep"},
{cMonster::mtSilverfish, "silverfish"}, {cMonster::mtSilverfish, "silverfish"},
{cMonster::mtSkeleton, "skeleton"}, {cMonster::mtSkeleton, "skeleton"},
{cMonster::mtSnowGolem, "snowgolem"},
{cMonster::mtSlime, "slime"}, {cMonster::mtSlime, "slime"},
{cMonster::mtSpider, "spider"}, {cMonster::mtSpider, "spider"},
{cMonster::mtSquid, "squid"}, {cMonster::mtSquid, "squid"},
{cMonster::mtVillager, "villager"}, {cMonster::mtVillager, "villager"},
{cMonster::mtWitch, "witch"}, {cMonster::mtWitch, "witch"},
{cMonster::mtWither, "wither"},
{cMonster::mtWolf, "wolf"}, {cMonster::mtWolf, "wolf"},
{cMonster::mtZombie, "zombie"}, {cMonster::mtZombie, "zombie"},
{cMonster::mtZombiePigman, "zombiepigman"}, {cMonster::mtZombiePigman, "zombiepigman"},
@ -743,6 +747,7 @@ cMonster * cMonster::NewMonsterFromType(cMonster::eType a_MobType)
case mtEnderDragon: toReturn = new cEnderDragon(); break; case mtEnderDragon: toReturn = new cEnderDragon(); break;
case mtEnderman: toReturn = new cEnderman(); break; case mtEnderman: toReturn = new cEnderman(); break;
case mtGhast: toReturn = new cGhast(); break; case mtGhast: toReturn = new cGhast(); break;
case mtIronGolem: toReturn = new cIronGolem(); break;
case mtMooshroom: toReturn = new cMooshroom(); break; case mtMooshroom: toReturn = new cMooshroom(); break;
case mtOcelot: toReturn = new cOcelot(); break; case mtOcelot: toReturn = new cOcelot(); break;
case mtPig: toReturn = new cPig(); break; case mtPig: toReturn = new cPig(); break;
@ -752,6 +757,7 @@ cMonster * cMonster::NewMonsterFromType(cMonster::eType a_MobType)
case mtSpider: toReturn = new cSpider(); break; case mtSpider: toReturn = new cSpider(); break;
case mtSquid: toReturn = new cSquid(); break; case mtSquid: toReturn = new cSquid(); break;
case mtWitch: toReturn = new cWitch(); break; case mtWitch: toReturn = new cWitch(); break;
case mtWither: toReturn = new cWither(); break;
case mtWolf: toReturn = new cWolf(); break; case mtWolf: toReturn = new cWolf(); break;
case mtZombie: toReturn = new cZombie(false); break; // TODO: Infected zombie parameter case mtZombie: toReturn = new cZombie(false); break; // TODO: Infected zombie parameter
case mtZombiePigman: toReturn = new cZombiePigman(); break; case mtZombiePigman: toReturn = new cZombiePigman(); break;