1
0

Added all the items up to Beta 1.9.5. Added pistons and piston class.

git-svn-id: http://mc-server.googlecode.com/svn/trunk@63 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
admin@omencraft.com 2011-11-05 18:28:19 +00:00
parent cbc22b646d
commit f32b5aafe8
6 changed files with 372 additions and 18 deletions

View File

@ -91,6 +91,7 @@ MCServer : \
build/cLog.o\
build/cMonster.o\
build/cRedstone.o\
build/cPiston.o\
build/cPawn.o\
build/cPickup.o\
build/cPlayer.o\
@ -277,6 +278,7 @@ MCServer : \
build/cLog.o\
build/cMonster.o\
build/cRedstone.o\
build/cPiston.o\
build/cPawn.o\
build/cPickup.o\
build/cPlayer.o\
@ -466,6 +468,7 @@ clean :
build/cLog.o\
build/cMonster.o\
build/cRedstone.o\
build/cPiston.o\
build/cPawn.o\
build/cPickup.o\
build/cPlayer.o\
@ -729,6 +732,11 @@ build/cRedstone.o : source/cRedstone.cpp
$(CC) $(CC_OPTIONS) source/cRedstone.cpp -c $(INCLUDE) -o build/cRedstone.o
# Item # 23 -- cPiston --
build/cPiston.o : source/cPiston.cpp
$(CC) $(CC_OPTIONS) source/cPiston.cpp -c $(INCLUDE) -o build/cPiston.o
# Item # 25 -- cPawn --
build/cPawn.o : source/cPawn.cpp
$(CC) $(CC_OPTIONS) source/cPawn.cpp -c $(INCLUDE) -o build/cPawn.o

View File

@ -24,7 +24,22 @@ enum ENUM_BLOCK_ID
E_BLOCK_LEAVES = 18,
E_BLOCK_SPONGE = 19,
E_BLOCK_GLASS = 20,
E_BLOCK_LAPIS_ORE = 21,
E_BLOCK_LAPIS_BLOCK = 22,
E_BLOCK_DISPENSER = 23,
E_BLOCK_SANDSTONE = 24,
E_BLOCK_NOTE_BLOCK = 25,
E_BLOCK_BED = 26,
E_BLOCK_POWERED_RAIL = 27,
E_BLOCK_DETECTOR_RAIL = 28,
E_BLOCK_STICKY_PISTON = 29,
E_BLOCK_COBWEB = 30,
E_BLOCK_TALL_GRASS = 31,
E_BLOCK_DEAD_BRUSH = 32,
E_BLOCK_PISTON = 33,
E_BLOCK_PISTON_EXTENSION = 34,
E_BLOCK_WHITE_CLOTH = 35,
E_BLOCK_PISTON_MOVED_BLOCK = 36,
E_BLOCK_YELLOW_FLOWER = 37,
E_BLOCK_RED_ROSE = 38,
E_BLOCK_BROWN_MUSHROOM = 39,
@ -65,14 +80,16 @@ enum ENUM_BLOCK_ID
E_BLOCK_REDSTONE_ORE_GLOWING = 74,
E_BLOCK_REDSTONE_TORCH_ON = 75,
E_BLOCK_REDSTONE_TORCH_OFF = 76,
E_BLOCK_STONE_BUTTON = 77,
E_BLOCK_SNOW = 78,
E_BLOCK_ICE = 79,
E_BLOCK_SNOW_BLOCK = 80,
E_BLOCK_CACTUS = 81,
E_BLOCK_CLAY = 82,
E_BLOCK_REEDS = 83,
E_BLOCK_JUKEBOX = 84,
E_BLOCK_FENCE = 85,
E_BLOCK_PUMPKIN = 86,
E_BLOCK_BLOODSTONE = 87,
E_BLOCK_SOULSAND = 88,
E_BLOCK_GLOWSTONE = 89,
@ -83,6 +100,32 @@ enum ENUM_BLOCK_ID
E_BLOCK_REDSTONE_REPEATER_ON = 94,
E_BLOCK_LOCKED_CHEST = 95,
E_BLOCK_TRAPDOOR = 96,
E_BLOCK_SILVERFISH_EGG = 97,
E_BLOCK_STONE_BRICKS = 98,
E_BLOCK_HUGE_BROWN_MUSHROOM = 99,
E_BLOCK_HUGE_RED_MUSHROOM = 100,
E_BLOCK_IRON_BAR = 101,
E_BLOCK_GLASS_PLANE = 102,
E_BLOCK_MELON = 103,
E_BLOCK_PUMPKIN_STEM = 104,
E_BLOCK_MELON_STEM = 105,
E_BLOCK_VINES = 106,
E_BLOCK_FENCE_GATE = 107,
E_BLOCK_BRICK_STAIRS = 108,
E_BLOCK_STONE_BRICK_STAIRS = 109,
E_BLOCK_MYCELIUM = 110,
E_BLOCK_LILY_PAD = 111,
E_BLOCK_NETHER_BRICK = 112,
E_BLOCK_NETHER_BRICK_FENCE = 113,
E_BLOCK_NETHER_BRICK_STAIRS = 114,
E_BLOCK_NETHER_WART = 115,
E_BLOCK_ENCHANTMENT_TABLE = 116,
E_BLOCK_BREWING_STAND = 117,
E_BLOCK_CAULDRON = 118,
E_BLOCK_END_PORTAL = 119,
E_BLOCK_END_PORTAL_FRAME = 120,
E_BLOCK_END_STONE = 121,
E_BLOCK_ = 121,
};
//tolua_end
@ -90,9 +133,9 @@ enum ENUM_BLOCK_ID
enum ENUM_ITEM_ID
{
E_ITEM_EMPTY = -1,
E_ITEM_STONE = 1,
E_ITEM_GRASS = 2,
E_ITEM_DIRT = 3,
E_ITEM_STONE = 1,
E_ITEM_GRASS = 2,
E_ITEM_DIRT = 3,
E_ITEM_COBBLESTONE = 4,
E_ITEM_WOOD = 5,
E_ITEM_SAPLING = 6,
@ -108,9 +151,112 @@ enum ENUM_ITEM_ID
E_ITEM_COAL_ORE = 16,
E_ITEM_LOG = 17,
E_ITEM_LEAVES = 18,
E_ITEM_SPONGE = 19,
E_ITEM_GLASS = 20,
E_ITEM_LAPIS_ORE = 21,
E_ITEM_LAPIS_BLOCK = 22,
E_ITEM_DISPENSER = 23,
E_ITEM_SANDSTONE = 24,
E_ITEM_NOTE_ITEM = 25,
E_ITEM_POWERED_RAIL = 27,
E_ITEM_DETECTOR_RAIL = 28,
E_ITEM_STICKY_PISTON = 29,
E_ITEM_COBWEB = 30,
E_ITEM_TALL_GRASS = 31,
E_ITEM_DEAD_BRUSH = 32,
E_ITEM_PISTON = 33,
E_ITEM_PISTON_EXTENSION = 34,
E_ITEM_WHITE_CLOTH = 35,
E_ITEM_PISTON_MOVED_BLOCK = 36,
E_ITEM_YELLOW_FLOWER = 37,
E_ITEM_RED_ROSE = 38,
E_ITEM_BROWN_MUSHROOM = 39,
E_ITEM_RED_MUSHROOM = 40,
E_ITEM_GOLD_BLOCK = 41,
E_ITEM_IRON_BLOCK = 42,
E_ITEM_DOUBLE_STEP = 43,
E_ITEM_STEP = 44,
E_ITEM_BRICK = 45,
E_ITEM_TNT = 46,
E_ITEM_BOOKCASE = 47,
E_ITEM_MOSSY_COBBLESTONE = 48,
E_ITEM_OBSIDIAN = 49,
E_ITEM_TORCH = 50,
E_ITEM_FIRE = 51,
E_ITEM_MOB_SPAWNER = 52,
E_ITEM_WOODEN_STAIRS = 53,
E_ITEM_CHEST = 54,
E_ITEM_REDSTONE_WIRE = 55,
E_ITEM_DIAMOND_ORE = 56,
E_ITEM_DIAMOND_BLOCK = 57,
E_ITEM_WORKBENCH = 58,
E_ITEM_CROPS = 59,
E_ITEM_SOIL = 60,
E_ITEM_FURNACE = 61,
E_ITEM_BURNING_FURNACE = 62,
E_ITEM_SIGN_POST = 63,
E_ITEM_LADDER = 65,
E_ITEM_MINECART_TRACKS = 66,
E_ITEM_COBBLESTONE_STAIRS = 67,
E_ITEM_WALLSIGN = 68,
E_ITEM_LEVER = 69,
E_ITEM_STONE_PRESSURE_PLATE = 70,
E_ITEM_WOODEN_PRESSURE_PLATE = 72,
E_ITEM_REDSTONE_ORE = 73,
E_ITEM_REDSTONE_ORE_GLOWING = 74,
E_ITEM_REDSTONE_TORCH_ON = 75,
E_ITEM_REDSTONE_TORCH_OFF = 76,
E_ITEM_STONE_BUTTON = 77,
E_ITEM_SNOW = 78,
E_ITEM_ICE = 79,
E_ITEM_SNOW_BLOCK = 80,
E_ITEM_CACTUS = 81,
E_ITEM_REEDS = 83,
E_ITEM_JUKEBOX = 84,
E_ITEM_FENCE = 85,
E_ITEM_PUMPKIN = 86,
E_ITEM_BLOODSTONE = 87,
E_ITEM_SOULSAND = 88,
E_ITEM_GLOWSTONE = 89,
E_ITEM_PORT = 90,
E_ITEM_JACK_O_LANTERN = 91,
E_ITEM_REDSTONE_REPEATER_OFF = 93,
E_ITEM_REDSTONE_REPEATER_ON = 94,
E_ITEM_LOCKED_CHEST = 95,
E_ITEM_TRAPDOOR = 96,
E_ITEM_SILVERFISH_EGG = 97,
E_ITEM_STONE_BRICKS = 98,
E_ITEM_HUGE_BROWN_MUSHROOM = 99,
E_ITEM_HUGE_RED_MUSHROOM = 100,
E_ITEM_IRON_BAR = 101,
E_ITEM_GLASS_PLANE = 102,
E_ITEM_MELON = 103,
E_ITEM_PUMPKIN_STEM = 104,
E_ITEM_MELON_STEM = 105,
E_ITEM_VINES = 106,
E_ITEM_FENCE_GATE = 107,
E_ITEM_BRICK_STAIRS = 108,
E_ITEM_STONE_BRICK_STAIRS = 109,
E_ITEM_MYCELIUM = 110,
E_ITEM_LILY_PAD = 111,
E_ITEM_NETHER_BRICK = 112,
E_ITEM_NETHER_BRICK_FENCE = 113,
E_ITEM_NETHER_BRICK_STAIRS = 114,
E_ITEM_ENCHANTMENT_TABLE = 116,
E_ITEM_END_PORTAL = 119,
E_ITEM_END_PORTAL_FRAME = 120,
E_ITEM_END_STONE = 121,
E_ITEM_IRON_SHOVEL = 256,
E_ITEM_IRON_PICKAXE = 257,
E_ITEM_IRON_AXE = 258,
E_ITEM_FLINT_AND_STEEL = 259,
E_ITEM_APPLE = 260,
E_ITEM_BOW = 261,
@ -119,7 +265,21 @@ enum ENUM_ITEM_ID
E_ITEM_DIAMOND = 264,
E_ITEM_IRON = 265,
E_ITEM_GOLD = 266,
E_ITEM_IRON_SWORD = 267,
E_ITEM_WOODEN_SWORD = 268,
E_ITEM_WOODEN_SHOVEL = 269,
E_ITEM_WOODEN_PICKAXE = 270,
E_ITEM_WOODEN_AXE = 271,
E_ITEM_STONE_SWORD = 272,
E_ITEM_STONE_SHOVEL = 273,
E_ITEM_STONE_PICKAXE = 274,
E_ITEM_STONE_AXE = 275,
E_ITEM_DIAMOND_SWORD = 276,
E_ITEM_DIAMOND_SHOVEL = 277,
E_ITEM_DIAMOND_PICKAXE = 278,
E_ITEM_DIAMOND_AXE = 279,
E_ITEM_STICK = 280,
E_ITEM_BOWL = 281,
E_ITEM_MUSHROOM_SOUP = 282,
E_ITEM_GOLD_SWORD = 283,
E_ITEM_GOLD_SHOVEL = 284,
@ -127,19 +287,61 @@ enum ENUM_ITEM_ID
E_ITEM_GOLD_AXE = 286,
E_ITEM_STRING = 287,
E_ITEM_FEATHER = 288,
E_ITEM_GUNPOWDER = 289,
E_ITEM_WOODEN_HOE = 290,
E_ITEM_STONE_HOE = 291,
E_ITEM_IRON_HOE = 292,
E_ITEM_DIAMOND_HOE = 293,
E_ITEM_GOLD_HOE = 294,
E_ITEM_SEEDS = 295,
E_ITEM_WHEAT = 296,
E_ITEM_BREAD = 297,
E_ITEM_LEATHER_CAP = 298,
E_ITEM_LEATHER_TUNIC = 299,
E_ITEM_LEATHER_PANTS = 300,
E_ITEM_LEATHER_BOOTS = 301,
E_ITEM_CHAIN_HELMET = 302,
E_ITEM_CHAIN_CHESTPLATE = 303,
E_ITEM_CHAIN_LEGGINGS = 304,
E_ITEM_CHAIN_BOOTS = 305,
E_ITEM_IRON_HELMET = 306,
E_ITEM_IRON_CHESTPLATE = 307,
E_ITEM_IRON_LEGGINGS = 308,
E_ITEM_IRON_BOOTS = 309,
E_ITEM_DIAMOND_HELMET = 310,
E_ITEM_DIAMOND_CHESTPLATE = 311,
E_ITEM_DIAMOND_LEGGINGS = 312,
E_ITEM_DIAMOND_BOOTS = 313,
E_ITEM_GOLD_HELMET = 314,
E_ITEM_GOLD_CHESTPLATE = 315,
E_ITEM_GOLD_LEGGINGS = 316,
E_ITEM_GOLD_BOOTS = 317,
E_ITEM_FLINT = 318,
E_ITEM_RAW_MEAT = 319,
E_ITEM_COOKED_MEAT = 320,
E_ITEM_PAINTINGS = 321,
E_ITEM_GOLDEN_APPLE = 322,
E_ITEM_SIGN = 323,
E_ITEM_WOODEN_DOOR = 324,
E_ITEM_BUCKET = 325,
E_ITEM_WATER_BUCKET = 326,
E_ITEM_LAVA_BUCKET = 327,
E_ITEM_MINECART = 328,
E_ITEM_SADDLE = 329,
E_ITEM_IRON_DOOR = 330,
E_ITEM_REDSTONE_DUST = 331,
E_ITEM_SNOWBALL = 332,
E_ITEM_BOAT = 333,
E_ITEM_LEATHER = 334,
E_ITEM_MILK = 335,
E_ITEM_CLAY_BRICK = 336,
E_ITEM_CLAY = 337,
E_ITEM_SUGAR_CANE = 338,
E_ITEM_PAPER = 339,
E_ITEM_BOOK = 340,
E_ITEM_SLIMEBALL = 341,
E_ITEM_CHEST_MINECART = 342,
E_ITEM_FURNACE_MINECART = 343,
E_ITEM_EGG = 344,
E_ITEM_COMPASS = 345,
E_ITEM_FISHING_ROD = 346,
@ -147,8 +349,49 @@ enum ENUM_ITEM_ID
E_ITEM_GLOWSTONE_DUST = 348,
E_ITEM_RAW_FISH = 349,
E_ITEM_COOKED_FISH = 350,
E_ITEM_DYE = 351,
E_ITEM_BONE = 352,
E_ITEM_SUGAR = 353,
E_ITEM_CAKE = 354,
E_ITEM_BED = 355,
E_ITEM_REDSTONE_REPEATER = 356,
E_ITEM_COOKIE = 357,
E_ITEM_MAP = 358,
E_ITEM_SHEARS = 359,
E_ITEM_MELON_SLICES = 360,
E_ITEM_PUMPKIN_SEEDS = 361,
E_ITEM_MELON_SEEDS = 362,
E_ITEM_RAW_BEEF = 363,
E_ITEM_STEAK = 364,
E_ITEM_RAW_CHICKEN = 365,
E_ITEM_COOKED_CHICKEN = 366,
E_ITEM_ROTTEN_FLESH = 367,
E_ITEM_ENDER_PEARL = 368,
E_ITEM_BLAZE_ROD = 369,
E_ITEM_GHAST_TEAR = 370,
E_ITEM_GOLD_NUGGET = 371,
E_ITEM_NETHER_WART = 372,
E_ITEM_POTIONS = 373,
E_ITEM_GLASS_BOTTLE = 374,
E_ITEM_SPIDER_EYE = 375,
E_ITEM_FERMENTED_SPIDER_EYE = 376,
E_ITEM_BLAZE_POWDER = 377,
E_ITEM_MAGMA_CREAM = 378,
E_ITEM_BREWING_STAND = 379,
E_ITEM_CAULDRON = 380,
E_ITEM_EYE_OF_ENDER = 381,
E_ITEM_GLISTERING_MELON = 382,
E_ITEM_13_DISC = 2256,
E_ITEM_CAT_DISC = 2257,
E_ITEM_BLOCKS_DISC = 2258,
E_ITEM_CHIRP_DISC = 2259,
E_ITEM_FAR_DISC = 2260,
E_ITEM_MALL_DISC = 2261,
E_ITEM_MELLOHI_DISC = 2262,
E_ITEM_STAL_DISC = 2263,
E_ITEM_STRAD_DISC = 2264,
E_ITEM_WARD_DISC = 2265,
E_ITEM_11_DISC = 2266,
};
//tolua_end

View File

@ -18,9 +18,9 @@ extern bool g_BlockOneHitDig[];
inline bool IsValidBlock( int a_BlockID ) //tolua_export
{ //tolua_export
if( a_BlockID > -1 &&
a_BlockID <= 96 &&
a_BlockID != 29 &&
a_BlockID != 33 &&
a_BlockID <= 121 && //items to 109 are valid for 1.8.1.. 1.9.5 is up to 121
//a_BlockID != 29 && allow pistons
//a_BlockID != 33 && allow pistons
a_BlockID != 34 &&
a_BlockID != 36 )
{

View File

@ -17,6 +17,7 @@
#include "cLadder.h"
#include "cSign.h"
#include "cRedstone.h"
#include "cPiston.h"
#include "cBlockToPickup.h"
#include "cMonster.h"
#include "cChatColor.h"
@ -487,7 +488,6 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
break;
case E_BLOCK_DIG:
{
//LOG("TimeP: %f", m_Player->GetLastBlockActionTime() );
//LOG("TimeN: %f", cRoot::Get()->GetWorld()->GetTime() );
if ( cRoot::Get()->GetWorld()->GetTime() - m_Player->GetLastBlockActionTime() < 0.1 ) { //only allow block interactions every 0.1 seconds
@ -788,7 +788,14 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
MetaData = cRedstone::RepeaterRotationToMetaData( m_Player->GetRotation() );
PacketData->m_ItemType = E_BLOCK_REDSTONE_REPEATER_OFF;
break;
case E_BLOCK_PISTON:
case E_BLOCK_STICKY_PISTON:
MetaData = cPiston::RotationPitchToMetaData( m_Player->GetRotation(), m_Player->GetPitch() );
break;
case E_BLOCK_COBBLESTONE_STAIRS:
case E_BLOCK_BRICK_STAIRS:
case E_BLOCK_STONE_BRICK_STAIRS:
case E_BLOCK_NETHER_BRICK_STAIRS:
case E_BLOCK_WOODEN_STAIRS:
MetaData = cStairs::RotationToMetaData( m_Player->GetRotation() );
break;
@ -1045,9 +1052,10 @@ void cClientHandle::Tick(float a_Dt)
Send( cPacket_UpdateHealth( (short)m_Player->GetHealth() ) );
//quick bugfix to prevent players from spawning in ground
m_Player->TeleportTo( m_Player->GetPosX(), m_Player->GetPosY()+1, m_Player->GetPosZ() );
//m_Player->TeleportTo( m_Player->GetPosX(), m_Player->GetPosY()+1, m_Player->GetPosZ() );
World->UnlockEntities();
m_Player->TeleportTo( m_Player->GetPosX(), m_Player->GetPosY()+1, m_Player->GetPosZ() );
}
}

50
source/cPiston.cpp Normal file
View File

@ -0,0 +1,50 @@
#include "cPiston.h"
#include "cRoot.h"
#include "cWorld.h"
#include "BlockID.h"
cPiston::cPiston( cWorld* a_World )
:m_World ( a_World )
{
}
//Todo: All piston stuff below.
void cPiston::ExtendPiston( int pistx, int pisty, int pistz )
{
cWorld* World = cRoot::Get()->GetWorld();
char metadata = World->GetBlockMeta( pistx, pisty, pistz);
if ( ( (int)World->GetBlock( pistx, pisty, pistz ) == E_BLOCK_STICKY_PISTON ) || ( (int)World->GetBlock( pistx, pisty, pistz ) == E_BLOCK_PISTON ) ) {
//find direction piston is facing base on meta.
//verify piston is not already extended.
//check all 16 blocks in front of it for the first airblock
//if there's and air block move those found blocks by 1 and insert E_BLOCK_PISTON_EXTENSION in the spot infront of the piston facing right direction
}
}
void cPiston::RetractPiston( int pistx, int pisty, int pistz )
{
cWorld* World = cRoot::Get()->GetWorld();
char metadata = World->GetBlockMeta( pistx, pisty, pistz);
if ( (int)World->GetBlock( pistx, pisty, pistz ) == E_BLOCK_PISTON ) {
//find direction piston is facing base on meta.
//verify piston is extended.
//check block in front to see if it's an E_BLOCK_PISTON_EXTENSION
//delete that block
//set piston meta to unextended
}
if ( (int)World->GetBlock( pistx, pisty, pistz ) == E_BLOCK_STICKY_PISTON ) {
//find direction piston is facing base on meta.
//verify piston is extended.
//check block in front to see if it's an E_BLOCK_PISTON_EXTENSION
//delete that block
//move block one more in front of it to postion E_BLOCK_PISTON_EXTENSION was facing.
//set piston meta to unextended
}
}

45
source/cPiston.h Normal file
View File

@ -0,0 +1,45 @@
#pragma once
#include <cstdio>
class cWorld;
class cPiston
{
public:
cPiston( cWorld* a_World );
static char RotationPitchToMetaData( float a_Rotation, float a_Pitch )
{
//if pitch higher than this value set up
//else if pitch lower than this value set down,
//else just do rotation:
std::printf("pre:a_Rotation %f \n",a_Rotation);
std::printf("a_Pitch %f \n",a_Pitch);
if (a_Pitch >= 50.f ){
return 0x1;
} else if ( a_Pitch <= -50.f ) {
return 0x0;
} else {
a_Rotation += 90 + 45; // So its not aligned with axis
std::printf("a_Rotation %f \n",a_Rotation);
if( a_Rotation > 360.f ) a_Rotation -= 360.f;
if( a_Rotation >= 0.f && a_Rotation < 90.f )
return 0x4;
else if( a_Rotation >= 180 && a_Rotation < 270 )
return 0x5;
else if( a_Rotation >= 90 && a_Rotation < 180 )
return 0x2;
else
return 0x3;
}
}
void ExtendPiston( int, int, int );
void RetractPiston( int, int, int );
cWorld* m_World;
};