diff options
| author | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
|---|---|---|
| committer | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
| commit | b691c43c44ff180d10e7d4a9afc83b98551ff586 (patch) | |
| tree | 3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.World/Material.cpp | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.World/Material.cpp')
| -rw-r--r-- | Minecraft.World/Material.cpp | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/Minecraft.World/Material.cpp b/Minecraft.World/Material.cpp new file mode 100644 index 00000000..9e201ad5 --- /dev/null +++ b/Minecraft.World/Material.cpp @@ -0,0 +1,192 @@ +#include "stdafx.h" +#include "Material.h" +#include "DecorationMaterial.h" +#include "GasMaterial.h" +#include "LiquidMaterial.h" +#include "PortalMaterial.h" +#include "WebMaterial.h"// 4J added, Java version just does a local alteration when instantiating the Material for webs to get the same thing + +Material *Material::air = NULL; +Material *Material::grass = NULL; +Material *Material::dirt = NULL; +Material *Material::wood = NULL; +Material *Material::stone = NULL; +Material *Material::metal = NULL; +Material *Material::heavyMetal = NULL; +Material *Material::water = NULL; +Material *Material::lava = NULL; +Material *Material::leaves = NULL; +Material *Material::plant = NULL; +Material *Material::replaceable_plant = NULL; +Material *Material::sponge = NULL; +Material *Material::cloth = NULL; +Material *Material::fire = NULL; +Material *Material::sand = NULL; +Material *Material::decoration = NULL; +Material *Material::clothDecoration = NULL; +Material *Material::glass = NULL; +Material *Material::buildable_glass = NULL; +Material *Material::explosive = NULL; +Material *Material::coral = NULL; +Material *Material::ice = NULL; +Material *Material::topSnow = NULL; +Material *Material::snow = NULL; +Material *Material::cactus = NULL; +Material *Material::clay = NULL; +Material *Material::vegetable = NULL; +Material *Material::egg = NULL; +Material *Material::portal = NULL; +Material *Material::cake = NULL; +Material *Material::piston = NULL; +Material *Material::web = NULL; + +void Material::staticCtor() +{ + Material::air = new GasMaterial(MaterialColor::none); + Material::grass = new Material(MaterialColor::grass); + Material::dirt = new Material(MaterialColor::dirt); + Material::wood = (new Material(MaterialColor::wood))->flammable(); + Material::stone = (new Material(MaterialColor::stone))->notAlwaysDestroyable(); + Material::metal = (new Material(MaterialColor::metal))->notAlwaysDestroyable(); + Material::heavyMetal = (new Material(MaterialColor::metal))->notAlwaysDestroyable()->notPushable(); + Material::water = (new LiquidMaterial(MaterialColor::water))->destroyOnPush(); + Material::lava = (new LiquidMaterial(MaterialColor::fire))->destroyOnPush(); + Material::leaves = (new Material(MaterialColor::plant))->flammable()->neverBuildable()->destroyOnPush(); + Material::plant = (new DecorationMaterial(MaterialColor::plant))->destroyOnPush(); + Material::replaceable_plant = (new DecorationMaterial(MaterialColor::plant))->flammable()->destroyOnPush()->replaceable(); + Material::sponge = new Material(MaterialColor::cloth); + Material::cloth = (new Material(MaterialColor::cloth))->flammable(); + Material::fire = (new GasMaterial(MaterialColor::none))->destroyOnPush(); + Material::sand = new Material(MaterialColor::sand); + Material::decoration = (new DecorationMaterial(MaterialColor::none))->destroyOnPush(); + Material::clothDecoration = (new DecorationMaterial(MaterialColor::cloth))->flammable(); + Material::glass = (new Material(MaterialColor::none))->neverBuildable()->makeDestroyedByHand(); + Material::buildable_glass = (new Material(MaterialColor::none))->makeDestroyedByHand(); + Material::explosive = (new Material(MaterialColor::fire))->flammable()->neverBuildable(); + Material::coral = (new Material(MaterialColor::plant))->destroyOnPush(); + Material::ice = (new Material(MaterialColor::ice))->neverBuildable()->makeDestroyedByHand(); + Material::topSnow = (new DecorationMaterial(MaterialColor::snow))->replaceable()->neverBuildable()->notAlwaysDestroyable()->destroyOnPush(); + Material::snow = (new Material(MaterialColor::snow))->notAlwaysDestroyable(); + Material::cactus = (new Material(MaterialColor::plant))->neverBuildable()->destroyOnPush(); + Material::clay = (new Material(MaterialColor::clay)); + Material::vegetable = (new Material(MaterialColor::plant))->destroyOnPush(); + Material::egg = ( new Material(MaterialColor::plant))->destroyOnPush(); + Material::portal = (new PortalMaterial(MaterialColor::none))->notPushable(); + Material::cake = (new Material(MaterialColor::none))->destroyOnPush(); + // 4J added WebMaterial, Java version just does a local alteration when instantiating the Material for webs to get the same thing + Material::web = (new WebMaterial(MaterialColor::cloth))->notAlwaysDestroyable()->destroyOnPush(); + Material::piston = (new Material(MaterialColor::stone))->notPushable(); +} + +Material::Material(MaterialColor *color) +{ + this->color = color; + + // 4J Stu - Default inits + _flammable = false; + _replaceable = false; + _neverBuildable = false; + _isAlwaysDestroyable = true; + pushReaction = 0; + destroyedByHand = false; +} + +bool Material::isLiquid() +{ + return false; +} + +bool Material::letsWaterThrough() +{ + return (!isLiquid() && !isSolid()); +} + +bool Material::isSolid() +{ + return true; +} + +bool Material::blocksLight() +{ + return true; +} + +bool Material::blocksMotion() +{ + return true; +} + +Material *Material::neverBuildable() +{ + this->_neverBuildable = true; + return this; +} + +Material *Material::notAlwaysDestroyable() +{ + this->_isAlwaysDestroyable = false; + return this; +} + +Material *Material::flammable() +{ + this->_flammable = true; + return this; +} + +bool Material::isFlammable() +{ + return _flammable; +} + +Material *Material::replaceable() +{ + this->_replaceable = true; + return this; +} + +bool Material::isReplaceable() +{ + return _replaceable; +} + +bool Material::isSolidBlocking() +{ + if (_neverBuildable) return false; + return blocksMotion(); +} + +bool Material::isAlwaysDestroyable() +{ + // these materials will always drop resources when destroyed, regardless + // of player's equipment + return _isAlwaysDestroyable; +} + +int Material::getPushReaction() +{ + return pushReaction; +} + +Material *Material::makeDestroyedByHand() +{ + this->destroyedByHand = true; + return this; +} + +bool Material::isDestroyedByHand() +{ + return destroyedByHand; +} + +Material *Material::destroyOnPush() +{ + pushReaction = PUSH_DESTROY; + return this; +} + +Material *Material::notPushable() +{ + pushReaction = PUSH_BLOCK; + return this; +}
\ No newline at end of file |
