summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoradmin@omencraft.com <admin@omencraft.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2011-11-05 19:28:19 +0100
committeradmin@omencraft.com <admin@omencraft.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2011-11-05 19:28:19 +0100
commitf32b5aafe824ab1d865ea0df8698ce45ccd1ca8b (patch)
treeba5f6257f478321730c3b7fd4097844920f5e853
parentdang finicky OS installs. >.> Bug fixes to make sure this compiles is more than two OS's. (diff)
downloadcuberite-f32b5aafe824ab1d865ea0df8698ce45ccd1ca8b.tar
cuberite-f32b5aafe824ab1d865ea0df8698ce45ccd1ca8b.tar.gz
cuberite-f32b5aafe824ab1d865ea0df8698ce45ccd1ca8b.tar.bz2
cuberite-f32b5aafe824ab1d865ea0df8698ce45ccd1ca8b.tar.lz
cuberite-f32b5aafe824ab1d865ea0df8698ce45ccd1ca8b.tar.xz
cuberite-f32b5aafe824ab1d865ea0df8698ce45ccd1ca8b.tar.zst
cuberite-f32b5aafe824ab1d865ea0df8698ce45ccd1ca8b.zip
-rw-r--r--makefile8
-rw-r--r--source/BlockID.h269
-rw-r--r--source/Defines.h6
-rw-r--r--source/cClientHandle.cpp12
-rw-r--r--source/cPiston.cpp50
-rw-r--r--source/cPiston.h45
6 files changed, 372 insertions, 18 deletions
diff --git a/makefile b/makefile
index d94859fff..5f0ea966f 100644
--- a/makefile
+++ b/makefile
@@ -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
diff --git a/source/BlockID.h b/source/BlockID.h
index 43451569d..01a491555 100644
--- a/source/BlockID.h
+++ b/source/BlockID.h
@@ -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
diff --git a/source/Defines.h b/source/Defines.h
index 1b176208c..e40da0420 100644
--- a/source/Defines.h
+++ b/source/Defines.h
@@ -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 )
{
diff --git a/source/cClientHandle.cpp b/source/cClientHandle.cpp
index 003f23f55..2238a3df0 100644
--- a/source/cClientHandle.cpp
+++ b/source/cClientHandle.cpp
@@ -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() );
}
}
diff --git a/source/cPiston.cpp b/source/cPiston.cpp
new file mode 100644
index 000000000..966c96c5b
--- /dev/null
+++ b/source/cPiston.cpp
@@ -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
+ }
+
+}
diff --git a/source/cPiston.h b/source/cPiston.h
new file mode 100644
index 000000000..46d7d2b20
--- /dev/null
+++ b/source/cPiston.h
@@ -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;
+
+};