diff options
Diffstat (limited to '')
33 files changed, 499 insertions, 1740 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 0d87b31..67974fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,13 +26,13 @@ add_executable(AltCraft ${SOURCE_FILES}) ################ # CONFIGURATION ################ -set(LOGGER_DEFINITIONS "-DELPP_THREAD_SAFE -DELPP_FEATURE_CRASH_LOG") +set(LOGGER_DEFINITIONS "-DELPP_FEATURE_CRASH_LOG -DELPP_THREAD_SAFE -DELPP_STL_LOGGING") add_definitions(${LOGGER_DEFINITIONS}) #-DELPP_HANDLE_SIGABRT #Set compiler's flags and setup platfrom-dependent libraries if (CMAKE_COMPILER_IS_GNUCXX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -w -Werror -Wall -Wextra") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Werror") #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0") #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") @@ -78,10 +78,4 @@ if (ZLIB_FOUND) target_include_directories(AltCraft PUBLIC ${ZLIB_INCLUDE_DIR}) else () message(FATAL_ERROR "Zlib not found!") -endif () - - -include(cotire) -set_target_properties(AltCraft PROPERTIES - COTIRE_PREFIX_HEADER_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/depedencies") -cotire(AltCraft)
\ No newline at end of file +endif ()
\ No newline at end of file diff --git a/cwd/shaders/block.fs b/cwd/shaders/block.fs index 4df9b7b..dcc78cc 100644 --- a/cwd/shaders/block.fs +++ b/cwd/shaders/block.fs @@ -1,28 +1,95 @@ #version 330 core -struct TextureCoordData { - int blockId; - int blockState; - int blockSide; - vec4 texture; -}; - in vec2 UvPosition; -uniform sampler2D textureAtlas; +uniform float time; uniform int block; +uniform sampler2D textureAtlas; + +// TextureIndex: [most significant bit]<-...<-side[3bit]<-id[13]<-state[4] +layout(std140) uniform TextureIndexes { // binding point: 0 + int totalTextures; + int indexes[2047]; +}; +// layout(std140) uniform TextureData { vec4 textureData[1024]; }; //binding point: 1 +// layout(std140) uniform TextureData2 { vec4 textureData2[1024]; }; //binddingpoint: 2 +vec4 GetTextureByBlockId(int BlockId); +vec2 TransformTextureCoord(vec4 TextureAtlasCoords, vec2 UvCoords); + +void main() { +vec4 bad = vec4(1,0,0,1); + vec4 color = vec4(0,1,0,1); + if (totalTextures!=6) + color = bad; + if (indexes[0]!=393248) + color = bad; + for (int i=1;i<2047;i++) + if (indexes[i]!=0) + color=bad; + gl_FragColor = color; + /*vec4 BlockTextureCoords = GetTextureByBlockId(block); + vec2 AtlasCoords = TransformTextureCoord(BlockTextureCoords, UvPosition); + gl_FragColor = texture(textureAtlas, AtlasCoords);*/ +} vec4 GetTextureByBlockId(int BlockId) { - return vec4(0,0,0,0); + if (indexes[0] == 0) + return vec4(0.05, 0.004, 0.007, 0.004); + + if (totalTextures == 0) + return vec4(0, 0, 0.1, 0.1); + for (int i = 0; i < totalTextures; i++) { + int index = indexes[i + 1]; + int side = (index & 0xE0000) >> 16; + int id = (index & 0xFF0) >> 4; + int state = index & 0xF; + if (id == BlockId) { + return vec4(i, 0, 1, 1); + } + } + /* + TNT texture: + X 0.0546875 + Y ~0.00442477876106194690 + W 0.0078125 + H ~0.00442477876106194690 + */ + return vec4(0.0546875, 0.00442477876106194690, 0.0078125, + 0.00442477876106194690); } -vec4 TransformTextureCoord(vec4 TextureAtlasCoords){ - return vec4(0,0,0,0); +vec2 TransformTextureCoord(vec4 TextureAtlasCoords, vec2 UvCoords) { + float x = TextureAtlasCoords.x; + float y = TextureAtlasCoords.y; + float w = TextureAtlasCoords.z; + float h = TextureAtlasCoords.w; + vec2 A = vec2(x, y); + vec2 B = vec2(x + w, y + h); + + const bool isTextureFlippedVertically = true; + if (isTextureFlippedVertically) { + y = 1 - y; + A = vec2(x, y - h); + B = vec2(x + w, y); + } + return A + UvCoords * (B - A); } -void main() +/* + +float near = 1.0; +float far = 100.0; + +float LinearizeDepth(float depth) { - vec4 TextureCoords = GetTextureByBlockId(block); - gl_FragColor = texture(textureAtlas,UvPosition); + float z = depth * 2.0 - 1.0; // Back to NDC + return (2.0 * near * far) / (far + near - z * (far - near)); } +void main() +{ + float depth = LinearizeDepth(gl_FragCoord.z) / far; // divide by far for demonstration + gl_FragColor = vec4(vec3(depth), 1.0f); +}*/ + + diff --git a/cwd/shaders/block.vs b/cwd/shaders/block.vs index 7a36a5d..09d5b3f 100644 --- a/cwd/shaders/block.vs +++ b/cwd/shaders/block.vs @@ -4,12 +4,14 @@ layout (location = 2) in vec2 UvCoordinates; out vec2 UvPosition; + +uniform mat4 view; +uniform mat4 projection; +uniform float time; uniform mat4 model; -uniform mat4 view; -uniform mat4 projection; void main() { gl_Position = projection * view * model * vec4(position, 1.0f); UvPosition = vec2(UvCoordinates.x,UvCoordinates.y); -}
\ No newline at end of file +} diff --git a/cwd/textures.tps b/cwd/textures.tps deleted file mode 100644 index 914d320..0000000 --- a/cwd/textures.tps +++ /dev/null @@ -1,1581 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<data version="1.0"> - <struct type="Settings"> - <key>fileFormatVersion</key> - <int>4</int> - <key>texturePackerVersion</key> - <string>4.4.0</string> - <key>fileName</key> - <string>/home/lag1924/dev/AltCraft/cwd/textures.tps</string> - <key>autoSDSettings</key> - <array> - <struct type="AutoSDSettings"> - <key>scale</key> - <double>1</double> - <key>extension</key> - <string></string> - <key>spriteFilter</key> - <string></string> - <key>acceptFractionalValues</key> - <false/> - <key>maxTextureSize</key> - <QSize> - <key>width</key> - <int>-1</int> - <key>height</key> - <int>-1</int> - </QSize> - </struct> - </array> - <key>allowRotation</key> - <true/> - <key>shapeDebug</key> - <false/> - <key>dpi</key> - <uint>72</uint> - <key>dataFormat</key> - <string>json-array</string> - <key>textureFileName</key> - <filename></filename> - <key>flipPVR</key> - <false/> - <key>pvrCompressionQuality</key> - <enum type="SettingsBase::PvrCompressionQuality">PVR_QUALITY_NORMAL</enum> - <key>atfCompressData</key> - <false/> - <key>mipMapMinSize</key> - <uint>32768</uint> - <key>etc1CompressionQuality</key> - <enum type="SettingsBase::Etc1CompressionQuality">ETC1_QUALITY_LOW_PERCEPTUAL</enum> - <key>etc2CompressionQuality</key> - <enum type="SettingsBase::Etc2CompressionQuality">ETC2_QUALITY_LOW_PERCEPTUAL</enum> - <key>dxtCompressionMode</key> - <enum type="SettingsBase::DxtCompressionMode">DXT_PERCEPTUAL</enum> - <key>jxrColorFormat</key> - <enum type="SettingsBase::JpegXrColorMode">JXR_YUV444</enum> - <key>jxrTrimFlexBits</key> - <uint>0</uint> - <key>jxrCompressionLevel</key> - <uint>0</uint> - <key>ditherType</key> - <enum type="SettingsBase::DitherType">NearestNeighbour</enum> - <key>backgroundColor</key> - <uint>0</uint> - <key>libGdx</key> - <struct type="LibGDX"> - <key>filtering</key> - <struct type="LibGDXFiltering"> - <key>x</key> - <enum type="LibGDXFiltering::Filtering">Linear</enum> - <key>y</key> - <enum type="LibGDXFiltering::Filtering">Linear</enum> - </struct> - </struct> - <key>shapePadding</key> - <uint>0</uint> - <key>jpgQuality</key> - <uint>80</uint> - <key>pngOptimizationLevel</key> - <uint>0</uint> - <key>webpQualityLevel</key> - <uint>101</uint> - <key>textureSubPath</key> - <string></string> - <key>atfFormats</key> - <string></string> - <key>textureFormat</key> - <enum type="SettingsBase::TextureFormat">png</enum> - <key>borderPadding</key> - <uint>0</uint> - <key>maxTextureSize</key> - <QSize> - <key>width</key> - <int>4096</int> - <key>height</key> - <int>4096</int> - </QSize> - <key>fixedTextureSize</key> - <QSize> - <key>width</key> - <int>-1</int> - <key>height</key> - <int>-1</int> - </QSize> - <key>algorithmSettings</key> - <struct type="AlgorithmSettings"> - <key>algorithm</key> - <enum type="AlgorithmSettings::AlgorithmId">Basic</enum> - <key>freeSizeMode</key> - <enum type="AlgorithmSettings::AlgorithmFreeSizeMode">Best</enum> - <key>sizeConstraints</key> - <enum type="AlgorithmSettings::SizeConstraints">AnySize</enum> - <key>forceSquared</key> - <false/> - <key>maxRects</key> - <struct type="AlgorithmMaxRectsSettings"> - <key>heuristic</key> - <enum type="AlgorithmMaxRectsSettings::Heuristic">Best</enum> - </struct> - <key>basic</key> - <struct type="AlgorithmBasicSettings"> - <key>sortBy</key> - <enum type="AlgorithmBasicSettings::SortBy">Best</enum> - <key>order</key> - <enum type="AlgorithmBasicSettings::Order">Ascending</enum> - </struct> - <key>polygon</key> - <struct type="AlgorithmPolygonSettings"> - <key>alignToGrid</key> - <uint>1</uint> - </struct> - </struct> - <key>andEngine</key> - <struct type="AndEngine"> - <key>minFilter</key> - <enum type="AndEngine::MinFilter">Linear</enum> - <key>packageName</key> - <string>Texture</string> - <key>wrap</key> - <struct type="AndEngineWrap"> - <key>s</key> - <enum type="AndEngineWrap::Wrap">Clamp</enum> - <key>t</key> - <enum type="AndEngineWrap::Wrap">Clamp</enum> - </struct> - <key>magFilter</key> - <enum type="AndEngine::MagFilter">MagLinear</enum> - </struct> - <key>dataFileNames</key> - <map type="GFileNameMap"> - <key>data</key> - <struct type="DataFile"> - <key>name</key> - <filename>textures.json</filename> - </struct> - </map> - <key>multiPack</key> - <false/> - <key>forceIdenticalLayout</key> - <false/> - <key>outputFormat</key> - <enum type="SettingsBase::OutputFormat">RGBA8888</enum> - <key>alphaHandling</key> - <enum type="SettingsBase::AlphaHandling">ClearTransparentPixels</enum> - <key>contentProtection</key> - <struct type="ContentProtection"> - <key>key</key> - <string></string> - </struct> - <key>autoAliasEnabled</key> - <false/> - <key>trimSpriteNames</key> - <false/> - <key>prependSmartFolderName</key> - <false/> - <key>autodetectAnimations</key> - <true/> - <key>globalSpriteSettings</key> - <struct type="SpriteSettings"> - <key>scale</key> - <double>1</double> - <key>scaleMode</key> - <enum type="ScaleMode">Smooth</enum> - <key>extrude</key> - <uint>0</uint> - <key>trimThreshold</key> - <uint>1</uint> - <key>trimMargin</key> - <uint>1</uint> - <key>trimMode</key> - <enum type="SpriteSettings::TrimMode">None</enum> - <key>tracerTolerance</key> - <int>200</int> - <key>heuristicMask</key> - <false/> - <key>defaultPivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>writePivotPoints</key> - <false/> - </struct> - <key>individualSpriteSettings</key> - <map type="IndividualSpriteSettingsMap"> - <key type="filename">assets/minecraft/textures/blocks/air.png</key> - <key type="filename">assets/minecraft/textures/blocks/anvil_base.png</key> - <key type="filename">assets/minecraft/textures/blocks/anvil_top_damaged_0.png</key> - <key type="filename">assets/minecraft/textures/blocks/anvil_top_damaged_1.png</key> - <key type="filename">assets/minecraft/textures/blocks/anvil_top_damaged_2.png</key> - <key type="filename">assets/minecraft/textures/blocks/beacon.png</key> - <key type="filename">assets/minecraft/textures/blocks/bed_feet_end.png</key> - <key type="filename">assets/minecraft/textures/blocks/bed_feet_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/bed_feet_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/bed_head_end.png</key> - <key type="filename">assets/minecraft/textures/blocks/bed_head_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/bed_head_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/bedrock.png</key> - <key type="filename">assets/minecraft/textures/blocks/beetroots_stage_0.png</key> - <key type="filename">assets/minecraft/textures/blocks/beetroots_stage_1.png</key> - <key type="filename">assets/minecraft/textures/blocks/beetroots_stage_2.png</key> - <key type="filename">assets/minecraft/textures/blocks/beetroots_stage_3.png</key> - <key type="filename">assets/minecraft/textures/blocks/bone_block_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/bone_block_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/bookshelf.png</key> - <key type="filename">assets/minecraft/textures/blocks/brewing_stand.png</key> - <key type="filename">assets/minecraft/textures/blocks/brewing_stand_base.png</key> - <key type="filename">assets/minecraft/textures/blocks/brick.png</key> - <key type="filename">assets/minecraft/textures/blocks/cactus_bottom.png</key> - <key type="filename">assets/minecraft/textures/blocks/cactus_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/cactus_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/cake_bottom.png</key> - <key type="filename">assets/minecraft/textures/blocks/cake_inner.png</key> - <key type="filename">assets/minecraft/textures/blocks/cake_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/cake_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/carrots_stage_0.png</key> - <key type="filename">assets/minecraft/textures/blocks/carrots_stage_1.png</key> - <key type="filename">assets/minecraft/textures/blocks/carrots_stage_2.png</key> - <key type="filename">assets/minecraft/textures/blocks/carrots_stage_3.png</key> - <key type="filename">assets/minecraft/textures/blocks/cauldron_bottom.png</key> - <key type="filename">assets/minecraft/textures/blocks/cauldron_inner.png</key> - <key type="filename">assets/minecraft/textures/blocks/cauldron_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/cauldron_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/chorus_flower.png</key> - <key type="filename">assets/minecraft/textures/blocks/chorus_flower_dead.png</key> - <key type="filename">assets/minecraft/textures/blocks/chorus_plant.png</key> - <key type="filename">assets/minecraft/textures/blocks/clay.png</key> - <key type="filename">assets/minecraft/textures/blocks/coal_block.png</key> - <key type="filename">assets/minecraft/textures/blocks/coal_ore.png</key> - <key type="filename">assets/minecraft/textures/blocks/coarse_dirt.png</key> - <key type="filename">assets/minecraft/textures/blocks/cobblestone.png</key> - <key type="filename">assets/minecraft/textures/blocks/cobblestone_mossy.png</key> - <key type="filename">assets/minecraft/textures/blocks/cocoa_stage_0.png</key> - <key type="filename">assets/minecraft/textures/blocks/cocoa_stage_1.png</key> - <key type="filename">assets/minecraft/textures/blocks/cocoa_stage_2.png</key> - <key type="filename">assets/minecraft/textures/blocks/comparator_off.png</key> - <key type="filename">assets/minecraft/textures/blocks/comparator_on.png</key> - <key type="filename">assets/minecraft/textures/blocks/crafting_table_front.png</key> - <key type="filename">assets/minecraft/textures/blocks/crafting_table_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/crafting_table_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/daylight_detector_inverted_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/daylight_detector_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/daylight_detector_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/deadbush.png</key> - <key type="filename">assets/minecraft/textures/blocks/debug.png</key> - <key type="filename">assets/minecraft/textures/blocks/debug2.png</key> - <key type="filename">assets/minecraft/textures/blocks/destroy_stage_0.png</key> - <key type="filename">assets/minecraft/textures/blocks/destroy_stage_1.png</key> - <key type="filename">assets/minecraft/textures/blocks/destroy_stage_2.png</key> - <key type="filename">assets/minecraft/textures/blocks/destroy_stage_3.png</key> - <key type="filename">assets/minecraft/textures/blocks/destroy_stage_4.png</key> - <key type="filename">assets/minecraft/textures/blocks/destroy_stage_5.png</key> - <key type="filename">assets/minecraft/textures/blocks/destroy_stage_6.png</key> - <key type="filename">assets/minecraft/textures/blocks/destroy_stage_7.png</key> - <key type="filename">assets/minecraft/textures/blocks/destroy_stage_8.png</key> - <key type="filename">assets/minecraft/textures/blocks/destroy_stage_9.png</key> - <key type="filename">assets/minecraft/textures/blocks/diamond_block.png</key> - <key type="filename">assets/minecraft/textures/blocks/diamond_ore.png</key> - <key type="filename">assets/minecraft/textures/blocks/dirt.png</key> - <key type="filename">assets/minecraft/textures/blocks/dirt_podzol_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/dirt_podzol_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/dispenser_front_horizontal.png</key> - <key type="filename">assets/minecraft/textures/blocks/dispenser_front_vertical.png</key> - <key type="filename">assets/minecraft/textures/blocks/door_acacia_lower.png</key> - <key type="filename">assets/minecraft/textures/blocks/door_acacia_upper.png</key> - <key type="filename">assets/minecraft/textures/blocks/door_birch_lower.png</key> - <key type="filename">assets/minecraft/textures/blocks/door_birch_upper.png</key> - <key type="filename">assets/minecraft/textures/blocks/door_dark_oak_lower.png</key> - <key type="filename">assets/minecraft/textures/blocks/door_dark_oak_upper.png</key> - <key type="filename">assets/minecraft/textures/blocks/door_iron_lower.png</key> - <key type="filename">assets/minecraft/textures/blocks/door_iron_upper.png</key> - <key type="filename">assets/minecraft/textures/blocks/door_jungle_lower.png</key> - <key type="filename">assets/minecraft/textures/blocks/door_jungle_upper.png</key> - <key type="filename">assets/minecraft/textures/blocks/door_spruce_lower.png</key> - <key type="filename">assets/minecraft/textures/blocks/door_spruce_upper.png</key> - <key type="filename">assets/minecraft/textures/blocks/door_wood_lower.png</key> - <key type="filename">assets/minecraft/textures/blocks/door_wood_upper.png</key> - <key type="filename">assets/minecraft/textures/blocks/double_plant_fern_bottom.png</key> - <key type="filename">assets/minecraft/textures/blocks/double_plant_fern_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/double_plant_grass_bottom.png</key> - <key type="filename">assets/minecraft/textures/blocks/double_plant_grass_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/double_plant_paeonia_bottom.png</key> - <key type="filename">assets/minecraft/textures/blocks/double_plant_paeonia_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/double_plant_rose_bottom.png</key> - <key type="filename">assets/minecraft/textures/blocks/double_plant_rose_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/double_plant_sunflower_back.png</key> - <key type="filename">assets/minecraft/textures/blocks/double_plant_sunflower_bottom.png</key> - <key type="filename">assets/minecraft/textures/blocks/double_plant_sunflower_front.png</key> - <key type="filename">assets/minecraft/textures/blocks/double_plant_sunflower_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/double_plant_syringa_bottom.png</key> - <key type="filename">assets/minecraft/textures/blocks/double_plant_syringa_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/dragon_egg.png</key> - <key type="filename">assets/minecraft/textures/blocks/dropper_front_horizontal.png</key> - <key type="filename">assets/minecraft/textures/blocks/dropper_front_vertical.png</key> - <key type="filename">assets/minecraft/textures/blocks/emerald_block.png</key> - <key type="filename">assets/minecraft/textures/blocks/emerald_ore.png</key> - <key type="filename">assets/minecraft/textures/blocks/enchanting_table_bottom.png</key> - <key type="filename">assets/minecraft/textures/blocks/enchanting_table_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/enchanting_table_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/end_bricks.png</key> - <key type="filename">assets/minecraft/textures/blocks/end_rod.png</key> - <key type="filename">assets/minecraft/textures/blocks/end_stone.png</key> - <key type="filename">assets/minecraft/textures/blocks/endframe_eye.png</key> - <key type="filename">assets/minecraft/textures/blocks/endframe_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/endframe_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/farmland_dry.png</key> - <key type="filename">assets/minecraft/textures/blocks/farmland_wet.png</key> - <key type="filename">assets/minecraft/textures/blocks/fern.png</key> - <key type="filename">assets/minecraft/textures/blocks/flower_allium.png</key> - <key type="filename">assets/minecraft/textures/blocks/flower_blue_orchid.png</key> - <key type="filename">assets/minecraft/textures/blocks/flower_dandelion.png</key> - <key type="filename">assets/minecraft/textures/blocks/flower_houstonia.png</key> - <key type="filename">assets/minecraft/textures/blocks/flower_oxeye_daisy.png</key> - <key type="filename">assets/minecraft/textures/blocks/flower_paeonia.png</key> - <key type="filename">assets/minecraft/textures/blocks/flower_pot.png</key> - <key type="filename">assets/minecraft/textures/blocks/flower_rose.png</key> - <key type="filename">assets/minecraft/textures/blocks/flower_tulip_orange.png</key> - <key type="filename">assets/minecraft/textures/blocks/flower_tulip_pink.png</key> - <key type="filename">assets/minecraft/textures/blocks/flower_tulip_red.png</key> - <key type="filename">assets/minecraft/textures/blocks/flower_tulip_white.png</key> - <key type="filename">assets/minecraft/textures/blocks/frosted_ice_0.png</key> - <key type="filename">assets/minecraft/textures/blocks/frosted_ice_1.png</key> - <key type="filename">assets/minecraft/textures/blocks/frosted_ice_2.png</key> - <key type="filename">assets/minecraft/textures/blocks/frosted_ice_3.png</key> - <key type="filename">assets/minecraft/textures/blocks/furnace_front_off.png</key> - <key type="filename">assets/minecraft/textures/blocks/furnace_front_on.png</key> - <key type="filename">assets/minecraft/textures/blocks/furnace_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/furnace_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_black.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_blue.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_brown.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_cyan.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_gray.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_green.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_light_blue.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_lime.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_magenta.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_orange.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_pane_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_pane_top_black.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_pane_top_blue.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_pane_top_brown.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_pane_top_cyan.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_pane_top_gray.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_pane_top_green.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_pane_top_light_blue.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_pane_top_lime.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_pane_top_magenta.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_pane_top_orange.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_pane_top_pink.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_pane_top_purple.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_pane_top_red.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_pane_top_silver.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_pane_top_white.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_pane_top_yellow.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_pink.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_purple.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_red.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_silver.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_white.png</key> - <key type="filename">assets/minecraft/textures/blocks/glass_yellow.png</key> - <key type="filename">assets/minecraft/textures/blocks/glowstone.png</key> - <key type="filename">assets/minecraft/textures/blocks/gold_block.png</key> - <key type="filename">assets/minecraft/textures/blocks/gold_ore.png</key> - <key type="filename">assets/minecraft/textures/blocks/grass.png</key> - <key type="filename">assets/minecraft/textures/blocks/grass_path_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/grass_path_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/grass_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/grass_side_overlay.png</key> - <key type="filename">assets/minecraft/textures/blocks/grass_side_snowed.png</key> - <key type="filename">assets/minecraft/textures/blocks/grass_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/gravel.png</key> - <key type="filename">assets/minecraft/textures/blocks/hardened_clay.png</key> - <key type="filename">assets/minecraft/textures/blocks/hardened_clay_stained_black.png</key> - <key type="filename">assets/minecraft/textures/blocks/hardened_clay_stained_blue.png</key> - <key type="filename">assets/minecraft/textures/blocks/hardened_clay_stained_brown.png</key> - <key type="filename">assets/minecraft/textures/blocks/hardened_clay_stained_cyan.png</key> - <key type="filename">assets/minecraft/textures/blocks/hardened_clay_stained_gray.png</key> - <key type="filename">assets/minecraft/textures/blocks/hardened_clay_stained_green.png</key> - <key type="filename">assets/minecraft/textures/blocks/hardened_clay_stained_light_blue.png</key> - <key type="filename">assets/minecraft/textures/blocks/hardened_clay_stained_lime.png</key> - <key type="filename">assets/minecraft/textures/blocks/hardened_clay_stained_magenta.png</key> - <key type="filename">assets/minecraft/textures/blocks/hardened_clay_stained_orange.png</key> - <key type="filename">assets/minecraft/textures/blocks/hardened_clay_stained_pink.png</key> - <key type="filename">assets/minecraft/textures/blocks/hardened_clay_stained_purple.png</key> - <key type="filename">assets/minecraft/textures/blocks/hardened_clay_stained_red.png</key> - <key type="filename">assets/minecraft/textures/blocks/hardened_clay_stained_silver.png</key> - <key type="filename">assets/minecraft/textures/blocks/hardened_clay_stained_white.png</key> - <key type="filename">assets/minecraft/textures/blocks/hardened_clay_stained_yellow.png</key> - <key type="filename">assets/minecraft/textures/blocks/hay_block_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/hay_block_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/hopper_inside.png</key> - <key type="filename">assets/minecraft/textures/blocks/hopper_outside.png</key> - <key type="filename">assets/minecraft/textures/blocks/hopper_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/ice.png</key> - <key type="filename">assets/minecraft/textures/blocks/ice_packed.png</key> - <key type="filename">assets/minecraft/textures/blocks/iron_bars.png</key> - <key type="filename">assets/minecraft/textures/blocks/iron_block.png</key> - <key type="filename">assets/minecraft/textures/blocks/iron_ore.png</key> - <key type="filename">assets/minecraft/textures/blocks/iron_trapdoor.png</key> - <key type="filename">assets/minecraft/textures/blocks/itemframe_background.png</key> - <key type="filename">assets/minecraft/textures/blocks/jukebox_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/jukebox_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/ladder.png</key> - <key type="filename">assets/minecraft/textures/blocks/lapis_block.png</key> - <key type="filename">assets/minecraft/textures/blocks/lapis_ore.png</key> - <key type="filename">assets/minecraft/textures/blocks/leaves_acacia.png</key> - <key type="filename">assets/minecraft/textures/blocks/leaves_big_oak.png</key> - <key type="filename">assets/minecraft/textures/blocks/leaves_birch.png</key> - <key type="filename">assets/minecraft/textures/blocks/leaves_jungle.png</key> - <key type="filename">assets/minecraft/textures/blocks/leaves_oak.png</key> - <key type="filename">assets/minecraft/textures/blocks/leaves_spruce.png</key> - <key type="filename">assets/minecraft/textures/blocks/lever.png</key> - <key type="filename">assets/minecraft/textures/blocks/log_acacia.png</key> - <key type="filename">assets/minecraft/textures/blocks/log_acacia_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/log_big_oak.png</key> - <key type="filename">assets/minecraft/textures/blocks/log_big_oak_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/log_birch.png</key> - <key type="filename">assets/minecraft/textures/blocks/log_birch_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/log_jungle.png</key> - <key type="filename">assets/minecraft/textures/blocks/log_jungle_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/log_oak.png</key> - <key type="filename">assets/minecraft/textures/blocks/log_oak_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/log_spruce.png</key> - <key type="filename">assets/minecraft/textures/blocks/log_spruce_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/melon_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/melon_stem_connected.png</key> - <key type="filename">assets/minecraft/textures/blocks/melon_stem_disconnected.png</key> - <key type="filename">assets/minecraft/textures/blocks/melon_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/mob_spawner.png</key> - <key type="filename">assets/minecraft/textures/blocks/mushroom_block_inside.png</key> - <key type="filename">assets/minecraft/textures/blocks/mushroom_block_skin_brown.png</key> - <key type="filename">assets/minecraft/textures/blocks/mushroom_block_skin_red.png</key> - <key type="filename">assets/minecraft/textures/blocks/mushroom_block_skin_stem.png</key> - <key type="filename">assets/minecraft/textures/blocks/mushroom_brown.png</key> - <key type="filename">assets/minecraft/textures/blocks/mushroom_red.png</key> - <key type="filename">assets/minecraft/textures/blocks/mycelium_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/mycelium_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/nether_brick.png</key> - <key type="filename">assets/minecraft/textures/blocks/nether_wart_block.png</key> - <key type="filename">assets/minecraft/textures/blocks/nether_wart_stage_0.png</key> - <key type="filename">assets/minecraft/textures/blocks/nether_wart_stage_1.png</key> - <key type="filename">assets/minecraft/textures/blocks/nether_wart_stage_2.png</key> - <key type="filename">assets/minecraft/textures/blocks/netherrack.png</key> - <key type="filename">assets/minecraft/textures/blocks/noteblock.png</key> - <key type="filename">assets/minecraft/textures/blocks/observer_back.png</key> - <key type="filename">assets/minecraft/textures/blocks/observer_back_lit.png</key> - <key type="filename">assets/minecraft/textures/blocks/observer_front.png</key> - <key type="filename">assets/minecraft/textures/blocks/observer_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/observer_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/obsidian.png</key> - <key type="filename">assets/minecraft/textures/blocks/piston_bottom.png</key> - <key type="filename">assets/minecraft/textures/blocks/piston_inner.png</key> - <key type="filename">assets/minecraft/textures/blocks/piston_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/piston_top_normal.png</key> - <key type="filename">assets/minecraft/textures/blocks/piston_top_sticky.png</key> - <key type="filename">assets/minecraft/textures/blocks/planks_acacia.png</key> - <key type="filename">assets/minecraft/textures/blocks/planks_big_oak.png</key> - <key type="filename">assets/minecraft/textures/blocks/planks_birch.png</key> - <key type="filename">assets/minecraft/textures/blocks/planks_jungle.png</key> - <key type="filename">assets/minecraft/textures/blocks/planks_oak.png</key> - <key type="filename">assets/minecraft/textures/blocks/planks_spruce.png</key> - <key type="filename">assets/minecraft/textures/blocks/potatoes_stage_0.png</key> - <key type="filename">assets/minecraft/textures/blocks/potatoes_stage_1.png</key> - <key type="filename">assets/minecraft/textures/blocks/potatoes_stage_2.png</key> - <key type="filename">assets/minecraft/textures/blocks/potatoes_stage_3.png</key> - <key type="filename">assets/minecraft/textures/blocks/prismarine_bricks.png</key> - <key type="filename">assets/minecraft/textures/blocks/prismarine_dark.png</key> - <key type="filename">assets/minecraft/textures/blocks/pumpkin_face_off.png</key> - <key type="filename">assets/minecraft/textures/blocks/pumpkin_face_on.png</key> - <key type="filename">assets/minecraft/textures/blocks/pumpkin_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/pumpkin_stem_connected.png</key> - <key type="filename">assets/minecraft/textures/blocks/pumpkin_stem_disconnected.png</key> - <key type="filename">assets/minecraft/textures/blocks/pumpkin_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/purpur_block.png</key> - <key type="filename">assets/minecraft/textures/blocks/purpur_pillar.png</key> - <key type="filename">assets/minecraft/textures/blocks/purpur_pillar_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/quartz_block_bottom.png</key> - <key type="filename">assets/minecraft/textures/blocks/quartz_block_chiseled.png</key> - <key type="filename">assets/minecraft/textures/blocks/quartz_block_chiseled_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/quartz_block_lines.png</key> - <key type="filename">assets/minecraft/textures/blocks/quartz_block_lines_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/quartz_block_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/quartz_block_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/quartz_ore.png</key> - <key type="filename">assets/minecraft/textures/blocks/rail_activator.png</key> - <key type="filename">assets/minecraft/textures/blocks/rail_activator_powered.png</key> - <key type="filename">assets/minecraft/textures/blocks/rail_detector.png</key> - <key type="filename">assets/minecraft/textures/blocks/rail_detector_powered.png</key> - <key type="filename">assets/minecraft/textures/blocks/rail_golden.png</key> - <key type="filename">assets/minecraft/textures/blocks/rail_golden_powered.png</key> - <key type="filename">assets/minecraft/textures/blocks/rail_normal.png</key> - <key type="filename">assets/minecraft/textures/blocks/rail_normal_turned.png</key> - <key type="filename">assets/minecraft/textures/blocks/red_nether_brick.png</key> - <key type="filename">assets/minecraft/textures/blocks/red_sand.png</key> - <key type="filename">assets/minecraft/textures/blocks/red_sandstone_bottom.png</key> - <key type="filename">assets/minecraft/textures/blocks/red_sandstone_carved.png</key> - <key type="filename">assets/minecraft/textures/blocks/red_sandstone_normal.png</key> - <key type="filename">assets/minecraft/textures/blocks/red_sandstone_smooth.png</key> - <key type="filename">assets/minecraft/textures/blocks/red_sandstone_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/redstone_block.png</key> - <key type="filename">assets/minecraft/textures/blocks/redstone_dust_dot.png</key> - <key type="filename">assets/minecraft/textures/blocks/redstone_dust_line0.png</key> - <key type="filename">assets/minecraft/textures/blocks/redstone_dust_line1.png</key> - <key type="filename">assets/minecraft/textures/blocks/redstone_dust_overlay.png</key> - <key type="filename">assets/minecraft/textures/blocks/redstone_lamp_off.png</key> - <key type="filename">assets/minecraft/textures/blocks/redstone_lamp_on.png</key> - <key type="filename">assets/minecraft/textures/blocks/redstone_ore.png</key> - <key type="filename">assets/minecraft/textures/blocks/redstone_torch_off.png</key> - <key type="filename">assets/minecraft/textures/blocks/redstone_torch_on.png</key> - <key type="filename">assets/minecraft/textures/blocks/reeds.png</key> - <key type="filename">assets/minecraft/textures/blocks/repeater_off.png</key> - <key type="filename">assets/minecraft/textures/blocks/repeater_on.png</key> - <key type="filename">assets/minecraft/textures/blocks/sand.png</key> - <key type="filename">assets/minecraft/textures/blocks/sandstone_bottom.png</key> - <key type="filename">assets/minecraft/textures/blocks/sandstone_carved.png</key> - <key type="filename">assets/minecraft/textures/blocks/sandstone_normal.png</key> - <key type="filename">assets/minecraft/textures/blocks/sandstone_smooth.png</key> - <key type="filename">assets/minecraft/textures/blocks/sandstone_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/sapling_acacia.png</key> - <key type="filename">assets/minecraft/textures/blocks/sapling_birch.png</key> - <key type="filename">assets/minecraft/textures/blocks/sapling_jungle.png</key> - <key type="filename">assets/minecraft/textures/blocks/sapling_oak.png</key> - <key type="filename">assets/minecraft/textures/blocks/sapling_roofed_oak.png</key> - <key type="filename">assets/minecraft/textures/blocks/sapling_spruce.png</key> - <key type="filename">assets/minecraft/textures/blocks/shulker_top_black.png</key> - <key type="filename">assets/minecraft/textures/blocks/shulker_top_blue.png</key> - <key type="filename">assets/minecraft/textures/blocks/shulker_top_brown.png</key> - <key type="filename">assets/minecraft/textures/blocks/shulker_top_cyan.png</key> - <key type="filename">assets/minecraft/textures/blocks/shulker_top_gray.png</key> - <key type="filename">assets/minecraft/textures/blocks/shulker_top_green.png</key> - <key type="filename">assets/minecraft/textures/blocks/shulker_top_light_blue.png</key> - <key type="filename">assets/minecraft/textures/blocks/shulker_top_lime.png</key> - <key type="filename">assets/minecraft/textures/blocks/shulker_top_magenta.png</key> - <key type="filename">assets/minecraft/textures/blocks/shulker_top_orange.png</key> - <key type="filename">assets/minecraft/textures/blocks/shulker_top_pink.png</key> - <key type="filename">assets/minecraft/textures/blocks/shulker_top_purple.png</key> - <key type="filename">assets/minecraft/textures/blocks/shulker_top_red.png</key> - <key type="filename">assets/minecraft/textures/blocks/shulker_top_silver.png</key> - <key type="filename">assets/minecraft/textures/blocks/shulker_top_white.png</key> - <key type="filename">assets/minecraft/textures/blocks/shulker_top_yellow.png</key> - <key type="filename">assets/minecraft/textures/blocks/slime.png</key> - <key type="filename">assets/minecraft/textures/blocks/snow.png</key> - <key type="filename">assets/minecraft/textures/blocks/soul_sand.png</key> - <key type="filename">assets/minecraft/textures/blocks/sponge.png</key> - <key type="filename">assets/minecraft/textures/blocks/sponge_wet.png</key> - <key type="filename">assets/minecraft/textures/blocks/stone.png</key> - <key type="filename">assets/minecraft/textures/blocks/stone_andesite.png</key> - <key type="filename">assets/minecraft/textures/blocks/stone_andesite_smooth.png</key> - <key type="filename">assets/minecraft/textures/blocks/stone_diorite.png</key> - <key type="filename">assets/minecraft/textures/blocks/stone_diorite_smooth.png</key> - <key type="filename">assets/minecraft/textures/blocks/stone_granite.png</key> - <key type="filename">assets/minecraft/textures/blocks/stone_granite_smooth.png</key> - <key type="filename">assets/minecraft/textures/blocks/stone_slab_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/stone_slab_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/stonebrick.png</key> - <key type="filename">assets/minecraft/textures/blocks/stonebrick_carved.png</key> - <key type="filename">assets/minecraft/textures/blocks/stonebrick_cracked.png</key> - <key type="filename">assets/minecraft/textures/blocks/stonebrick_mossy.png</key> - <key type="filename">assets/minecraft/textures/blocks/structure_block.png</key> - <key type="filename">assets/minecraft/textures/blocks/structure_block_corner.png</key> - <key type="filename">assets/minecraft/textures/blocks/structure_block_data.png</key> - <key type="filename">assets/minecraft/textures/blocks/structure_block_load.png</key> - <key type="filename">assets/minecraft/textures/blocks/structure_block_save.png</key> - <key type="filename">assets/minecraft/textures/blocks/tallgrass.png</key> - <key type="filename">assets/minecraft/textures/blocks/tallgrass_green.png</key> - <key type="filename">assets/minecraft/textures/blocks/tnt_bottom.png</key> - <key type="filename">assets/minecraft/textures/blocks/tnt_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/tnt_top.png</key> - <key type="filename">assets/minecraft/textures/blocks/torch_on.png</key> - <key type="filename">assets/minecraft/textures/blocks/trapdoor.png</key> - <key type="filename">assets/minecraft/textures/blocks/trip_wire.png</key> - <key type="filename">assets/minecraft/textures/blocks/trip_wire_source.png</key> - <key type="filename">assets/minecraft/textures/blocks/vine.png</key> - <key type="filename">assets/minecraft/textures/blocks/water_overlay.png</key> - <key type="filename">assets/minecraft/textures/blocks/waterlily.png</key> - <key type="filename">assets/minecraft/textures/blocks/web.png</key> - <key type="filename">assets/minecraft/textures/blocks/wheat_stage_0.png</key> - <key type="filename">assets/minecraft/textures/blocks/wheat_stage_1.png</key> - <key type="filename">assets/minecraft/textures/blocks/wheat_stage_2.png</key> - <key type="filename">assets/minecraft/textures/blocks/wheat_stage_3.png</key> - <key type="filename">assets/minecraft/textures/blocks/wheat_stage_4.png</key> - <key type="filename">assets/minecraft/textures/blocks/wheat_stage_5.png</key> - <key type="filename">assets/minecraft/textures/blocks/wheat_stage_6.png</key> - <key type="filename">assets/minecraft/textures/blocks/wheat_stage_7.png</key> - <key type="filename">assets/minecraft/textures/blocks/wool_colored_black.png</key> - <key type="filename">assets/minecraft/textures/blocks/wool_colored_blue.png</key> - <key type="filename">assets/minecraft/textures/blocks/wool_colored_brown.png</key> - <key type="filename">assets/minecraft/textures/blocks/wool_colored_cyan.png</key> - <key type="filename">assets/minecraft/textures/blocks/wool_colored_gray.png</key> - <key type="filename">assets/minecraft/textures/blocks/wool_colored_green.png</key> - <key type="filename">assets/minecraft/textures/blocks/wool_colored_light_blue.png</key> - <key type="filename">assets/minecraft/textures/blocks/wool_colored_lime.png</key> - <key type="filename">assets/minecraft/textures/blocks/wool_colored_magenta.png</key> - <key type="filename">assets/minecraft/textures/blocks/wool_colored_orange.png</key> - <key type="filename">assets/minecraft/textures/blocks/wool_colored_pink.png</key> - <key type="filename">assets/minecraft/textures/blocks/wool_colored_purple.png</key> - <key type="filename">assets/minecraft/textures/blocks/wool_colored_red.png</key> - <key type="filename">assets/minecraft/textures/blocks/wool_colored_silver.png</key> - <key type="filename">assets/minecraft/textures/blocks/wool_colored_white.png</key> - <key type="filename">assets/minecraft/textures/blocks/wool_colored_yellow.png</key> - <key type="filename">assets/minecraft/textures/entity/beacon_beam.png</key> - <key type="filename">assets/minecraft/textures/entity/end_gateway_beam.png</key> - <key type="filename">assets/minecraft/textures/entity/enderdragon/dragon_fireball.png</key> - <key type="filename">assets/minecraft/textures/gui/options_background.png</key> - <key type="filename">assets/minecraft/textures/items/acacia_boat.png</key> - <key type="filename">assets/minecraft/textures/items/apple.png</key> - <key type="filename">assets/minecraft/textures/items/apple_golden.png</key> - <key type="filename">assets/minecraft/textures/items/arrow.png</key> - <key type="filename">assets/minecraft/textures/items/banner_overlay.png</key> - <key type="filename">assets/minecraft/textures/items/barrier.png</key> - <key type="filename">assets/minecraft/textures/items/bed.png</key> - <key type="filename">assets/minecraft/textures/items/beef_cooked.png</key> - <key type="filename">assets/minecraft/textures/items/beef_raw.png</key> - <key type="filename">assets/minecraft/textures/items/beetroot.png</key> - <key type="filename">assets/minecraft/textures/items/beetroot_seeds.png</key> - <key type="filename">assets/minecraft/textures/items/beetroot_soup.png</key> - <key type="filename">assets/minecraft/textures/items/birch_boat.png</key> - <key type="filename">assets/minecraft/textures/items/blaze_powder.png</key> - <key type="filename">assets/minecraft/textures/items/blaze_rod.png</key> - <key type="filename">assets/minecraft/textures/items/bone.png</key> - <key type="filename">assets/minecraft/textures/items/book_enchanted.png</key> - <key type="filename">assets/minecraft/textures/items/book_normal.png</key> - <key type="filename">assets/minecraft/textures/items/book_writable.png</key> - <key type="filename">assets/minecraft/textures/items/book_written.png</key> - <key type="filename">assets/minecraft/textures/items/bow_pulling_0.png</key> - <key type="filename">assets/minecraft/textures/items/bow_pulling_1.png</key> - <key type="filename">assets/minecraft/textures/items/bow_pulling_2.png</key> - <key type="filename">assets/minecraft/textures/items/bow_standby.png</key> - <key type="filename">assets/minecraft/textures/items/bowl.png</key> - <key type="filename">assets/minecraft/textures/items/bread.png</key> - <key type="filename">assets/minecraft/textures/items/brewing_stand.png</key> - <key type="filename">assets/minecraft/textures/items/brick.png</key> - <key type="filename">assets/minecraft/textures/items/broken_elytra.png</key> - <key type="filename">assets/minecraft/textures/items/bucket_empty.png</key> - <key type="filename">assets/minecraft/textures/items/bucket_lava.png</key> - <key type="filename">assets/minecraft/textures/items/bucket_milk.png</key> - <key type="filename">assets/minecraft/textures/items/bucket_water.png</key> - <key type="filename">assets/minecraft/textures/items/cake.png</key> - <key type="filename">assets/minecraft/textures/items/carrot.png</key> - <key type="filename">assets/minecraft/textures/items/carrot_golden.png</key> - <key type="filename">assets/minecraft/textures/items/carrot_on_a_stick.png</key> - <key type="filename">assets/minecraft/textures/items/cauldron.png</key> - <key type="filename">assets/minecraft/textures/items/chainmail_boots.png</key> - <key type="filename">assets/minecraft/textures/items/chainmail_chestplate.png</key> - <key type="filename">assets/minecraft/textures/items/chainmail_helmet.png</key> - <key type="filename">assets/minecraft/textures/items/chainmail_leggings.png</key> - <key type="filename">assets/minecraft/textures/items/charcoal.png</key> - <key type="filename">assets/minecraft/textures/items/chicken_cooked.png</key> - <key type="filename">assets/minecraft/textures/items/chicken_raw.png</key> - <key type="filename">assets/minecraft/textures/items/chorus_fruit.png</key> - <key type="filename">assets/minecraft/textures/items/chorus_fruit_popped.png</key> - <key type="filename">assets/minecraft/textures/items/clay_ball.png</key> - <key type="filename">assets/minecraft/textures/items/clock_00.png</key> - <key type="filename">assets/minecraft/textures/items/clock_01.png</key> - <key type="filename">assets/minecraft/textures/items/clock_02.png</key> - <key type="filename">assets/minecraft/textures/items/clock_03.png</key> - <key type="filename">assets/minecraft/textures/items/clock_04.png</key> - <key type="filename">assets/minecraft/textures/items/clock_05.png</key> - <key type="filename">assets/minecraft/textures/items/clock_06.png</key> - <key type="filename">assets/minecraft/textures/items/clock_07.png</key> - <key type="filename">assets/minecraft/textures/items/clock_08.png</key> - <key type="filename">assets/minecraft/textures/items/clock_09.png</key> - <key type="filename">assets/minecraft/textures/items/clock_10.png</key> - <key type="filename">assets/minecraft/textures/items/clock_11.png</key> - <key type="filename">assets/minecraft/textures/items/clock_12.png</key> - <key type="filename">assets/minecraft/textures/items/clock_13.png</key> - <key type="filename">assets/minecraft/textures/items/clock_14.png</key> - <key type="filename">assets/minecraft/textures/items/clock_15.png</key> - <key type="filename">assets/minecraft/textures/items/clock_16.png</key> - <key type="filename">assets/minecraft/textures/items/clock_17.png</key> - <key type="filename">assets/minecraft/textures/items/clock_18.png</key> - <key type="filename">assets/minecraft/textures/items/clock_19.png</key> - <key type="filename">assets/minecraft/textures/items/clock_20.png</key> - <key type="filename">assets/minecraft/textures/items/clock_21.png</key> - <key type="filename">assets/minecraft/textures/items/clock_22.png</key> - <key type="filename">assets/minecraft/textures/items/clock_23.png</key> - <key type="filename">assets/minecraft/textures/items/clock_24.png</key> - <key type="filename">assets/minecraft/textures/items/clock_25.png</key> - <key type="filename">assets/minecraft/textures/items/clock_26.png</key> - <key type="filename">assets/minecraft/textures/items/clock_27.png</key> - <key type="filename">assets/minecraft/textures/items/clock_28.png</key> - <key type="filename">assets/minecraft/textures/items/clock_29.png</key> - <key type="filename">assets/minecraft/textures/items/clock_30.png</key> - <key type="filename">assets/minecraft/textures/items/clock_31.png</key> - <key type="filename">assets/minecraft/textures/items/clock_32.png</key> - <key type="filename">assets/minecraft/textures/items/clock_33.png</key> - <key type="filename">assets/minecraft/textures/items/clock_34.png</key> - <key type="filename">assets/minecraft/textures/items/clock_35.png</key> - <key type="filename">assets/minecraft/textures/items/clock_36.png</key> - <key type="filename">assets/minecraft/textures/items/clock_37.png</key> - <key type="filename">assets/minecraft/textures/items/clock_38.png</key> - <key type="filename">assets/minecraft/textures/items/clock_39.png</key> - <key type="filename">assets/minecraft/textures/items/clock_40.png</key> - <key type="filename">assets/minecraft/textures/items/clock_41.png</key> - <key type="filename">assets/minecraft/textures/items/clock_42.png</key> - <key type="filename">assets/minecraft/textures/items/clock_43.png</key> - <key type="filename">assets/minecraft/textures/items/clock_44.png</key> - <key type="filename">assets/minecraft/textures/items/clock_45.png</key> - <key type="filename">assets/minecraft/textures/items/clock_46.png</key> - <key type="filename">assets/minecraft/textures/items/clock_47.png</key> - <key type="filename">assets/minecraft/textures/items/clock_48.png</key> - <key type="filename">assets/minecraft/textures/items/clock_49.png</key> - <key type="filename">assets/minecraft/textures/items/clock_50.png</key> - <key type="filename">assets/minecraft/textures/items/clock_51.png</key> - <key type="filename">assets/minecraft/textures/items/clock_52.png</key> - <key type="filename">assets/minecraft/textures/items/clock_53.png</key> - <key type="filename">assets/minecraft/textures/items/clock_54.png</key> - <key type="filename">assets/minecraft/textures/items/clock_55.png</key> - <key type="filename">assets/minecraft/textures/items/clock_56.png</key> - <key type="filename">assets/minecraft/textures/items/clock_57.png</key> - <key type="filename">assets/minecraft/textures/items/clock_58.png</key> - <key type="filename">assets/minecraft/textures/items/clock_59.png</key> - <key type="filename">assets/minecraft/textures/items/clock_60.png</key> - <key type="filename">assets/minecraft/textures/items/clock_61.png</key> - <key type="filename">assets/minecraft/textures/items/clock_62.png</key> - <key type="filename">assets/minecraft/textures/items/clock_63.png</key> - <key type="filename">assets/minecraft/textures/items/coal.png</key> - <key type="filename">assets/minecraft/textures/items/comparator.png</key> - <key type="filename">assets/minecraft/textures/items/compass_00.png</key> - <key type="filename">assets/minecraft/textures/items/compass_01.png</key> - <key type="filename">assets/minecraft/textures/items/compass_02.png</key> - <key type="filename">assets/minecraft/textures/items/compass_03.png</key> - <key type="filename">assets/minecraft/textures/items/compass_04.png</key> - <key type="filename">assets/minecraft/textures/items/compass_05.png</key> - <key type="filename">assets/minecraft/textures/items/compass_06.png</key> - <key type="filename">assets/minecraft/textures/items/compass_07.png</key> - <key type="filename">assets/minecraft/textures/items/compass_08.png</key> - <key type="filename">assets/minecraft/textures/items/compass_09.png</key> - <key type="filename">assets/minecraft/textures/items/compass_10.png</key> - <key type="filename">assets/minecraft/textures/items/compass_11.png</key> - <key type="filename">assets/minecraft/textures/items/compass_12.png</key> - <key type="filename">assets/minecraft/textures/items/compass_13.png</key> - <key type="filename">assets/minecraft/textures/items/compass_14.png</key> - <key type="filename">assets/minecraft/textures/items/compass_15.png</key> - <key type="filename">assets/minecraft/textures/items/compass_16.png</key> - <key type="filename">assets/minecraft/textures/items/compass_17.png</key> - <key type="filename">assets/minecraft/textures/items/compass_18.png</key> - <key type="filename">assets/minecraft/textures/items/compass_19.png</key> - <key type="filename">assets/minecraft/textures/items/compass_20.png</key> - <key type="filename">assets/minecraft/textures/items/compass_21.png</key> - <key type="filename">assets/minecraft/textures/items/compass_22.png</key> - <key type="filename">assets/minecraft/textures/items/compass_23.png</key> - <key type="filename">assets/minecraft/textures/items/compass_24.png</key> - <key type="filename">assets/minecraft/textures/items/compass_25.png</key> - <key type="filename">assets/minecraft/textures/items/compass_26.png</key> - <key type="filename">assets/minecraft/textures/items/compass_27.png</key> - <key type="filename">assets/minecraft/textures/items/compass_28.png</key> - <key type="filename">assets/minecraft/textures/items/compass_29.png</key> - <key type="filename">assets/minecraft/textures/items/compass_30.png</key> - <key type="filename">assets/minecraft/textures/items/compass_31.png</key> - <key type="filename">assets/minecraft/textures/items/cookie.png</key> - <key type="filename">assets/minecraft/textures/items/dark_oak_boat.png</key> - <key type="filename">assets/minecraft/textures/items/diamond.png</key> - <key type="filename">assets/minecraft/textures/items/diamond_axe.png</key> - <key type="filename">assets/minecraft/textures/items/diamond_boots.png</key> - <key type="filename">assets/minecraft/textures/items/diamond_chestplate.png</key> - <key type="filename">assets/minecraft/textures/items/diamond_helmet.png</key> - <key type="filename">assets/minecraft/textures/items/diamond_hoe.png</key> - <key type="filename">assets/minecraft/textures/items/diamond_horse_armor.png</key> - <key type="filename">assets/minecraft/textures/items/diamond_leggings.png</key> - <key type="filename">assets/minecraft/textures/items/diamond_pickaxe.png</key> - <key type="filename">assets/minecraft/textures/items/diamond_shovel.png</key> - <key type="filename">assets/minecraft/textures/items/diamond_sword.png</key> - <key type="filename">assets/minecraft/textures/items/door_acacia.png</key> - <key type="filename">assets/minecraft/textures/items/door_birch.png</key> - <key type="filename">assets/minecraft/textures/items/door_dark_oak.png</key> - <key type="filename">assets/minecraft/textures/items/door_iron.png</key> - <key type="filename">assets/minecraft/textures/items/door_jungle.png</key> - <key type="filename">assets/minecraft/textures/items/door_spruce.png</key> - <key type="filename">assets/minecraft/textures/items/door_wood.png</key> - <key type="filename">assets/minecraft/textures/items/dragon_breath.png</key> - <key type="filename">assets/minecraft/textures/items/dye_powder_black.png</key> - <key type="filename">assets/minecraft/textures/items/dye_powder_blue.png</key> - <key type="filename">assets/minecraft/textures/items/dye_powder_brown.png</key> - <key type="filename">assets/minecraft/textures/items/dye_powder_cyan.png</key> - <key type="filename">assets/minecraft/textures/items/dye_powder_gray.png</key> - <key type="filename">assets/minecraft/textures/items/dye_powder_green.png</key> - <key type="filename">assets/minecraft/textures/items/dye_powder_light_blue.png</key> - <key type="filename">assets/minecraft/textures/items/dye_powder_lime.png</key> - <key type="filename">assets/minecraft/textures/items/dye_powder_magenta.png</key> - <key type="filename">assets/minecraft/textures/items/dye_powder_orange.png</key> - <key type="filename">assets/minecraft/textures/items/dye_powder_pink.png</key> - <key type="filename">assets/minecraft/textures/items/dye_powder_purple.png</key> - <key type="filename">assets/minecraft/textures/items/dye_powder_red.png</key> - <key type="filename">assets/minecraft/textures/items/dye_powder_silver.png</key> - <key type="filename">assets/minecraft/textures/items/dye_powder_white.png</key> - <key type="filename">assets/minecraft/textures/items/dye_powder_yellow.png</key> - <key type="filename">assets/minecraft/textures/items/egg.png</key> - <key type="filename">assets/minecraft/textures/items/elytra.png</key> - <key type="filename">assets/minecraft/textures/items/emerald.png</key> - <key type="filename">assets/minecraft/textures/items/empty_armor_slot_boots.png</key> - <key type="filename">assets/minecraft/textures/items/empty_armor_slot_chestplate.png</key> - <key type="filename">assets/minecraft/textures/items/empty_armor_slot_helmet.png</key> - <key type="filename">assets/minecraft/textures/items/empty_armor_slot_leggings.png</key> - <key type="filename">assets/minecraft/textures/items/empty_armor_slot_shield.png</key> - <key type="filename">assets/minecraft/textures/items/end_crystal.png</key> - <key type="filename">assets/minecraft/textures/items/ender_eye.png</key> - <key type="filename">assets/minecraft/textures/items/ender_pearl.png</key> - <key type="filename">assets/minecraft/textures/items/experience_bottle.png</key> - <key type="filename">assets/minecraft/textures/items/feather.png</key> - <key type="filename">assets/minecraft/textures/items/fireball.png</key> - <key type="filename">assets/minecraft/textures/items/fireworks.png</key> - <key type="filename">assets/minecraft/textures/items/fireworks_charge.png</key> - <key type="filename">assets/minecraft/textures/items/fireworks_charge_overlay.png</key> - <key type="filename">assets/minecraft/textures/items/fish_clownfish_raw.png</key> - <key type="filename">assets/minecraft/textures/items/fish_cod_cooked.png</key> - <key type="filename">assets/minecraft/textures/items/fish_cod_raw.png</key> - <key type="filename">assets/minecraft/textures/items/fish_pufferfish_raw.png</key> - <key type="filename">assets/minecraft/textures/items/fish_salmon_cooked.png</key> - <key type="filename">assets/minecraft/textures/items/fish_salmon_raw.png</key> - <key type="filename">assets/minecraft/textures/items/fishing_rod_cast.png</key> - <key type="filename">assets/minecraft/textures/items/fishing_rod_uncast.png</key> - <key type="filename">assets/minecraft/textures/items/flint.png</key> - <key type="filename">assets/minecraft/textures/items/flint_and_steel.png</key> - <key type="filename">assets/minecraft/textures/items/flower_pot.png</key> - <key type="filename">assets/minecraft/textures/items/ghast_tear.png</key> - <key type="filename">assets/minecraft/textures/items/glowstone_dust.png</key> - <key type="filename">assets/minecraft/textures/items/gold_axe.png</key> - <key type="filename">assets/minecraft/textures/items/gold_boots.png</key> - <key type="filename">assets/minecraft/textures/items/gold_chestplate.png</key> - <key type="filename">assets/minecraft/textures/items/gold_helmet.png</key> - <key type="filename">assets/minecraft/textures/items/gold_hoe.png</key> - <key type="filename">assets/minecraft/textures/items/gold_horse_armor.png</key> - <key type="filename">assets/minecraft/textures/items/gold_ingot.png</key> - <key type="filename">assets/minecraft/textures/items/gold_leggings.png</key> - <key type="filename">assets/minecraft/textures/items/gold_nugget.png</key> - <key type="filename">assets/minecraft/textures/items/gold_pickaxe.png</key> - <key type="filename">assets/minecraft/textures/items/gold_shovel.png</key> - <key type="filename">assets/minecraft/textures/items/gold_sword.png</key> - <key type="filename">assets/minecraft/textures/items/gunpowder.png</key> - <key type="filename">assets/minecraft/textures/items/hopper.png</key> - <key type="filename">assets/minecraft/textures/items/iron_axe.png</key> - <key type="filename">assets/minecraft/textures/items/iron_boots.png</key> - <key type="filename">assets/minecraft/textures/items/iron_chestplate.png</key> - <key type="filename">assets/minecraft/textures/items/iron_helmet.png</key> - <key type="filename">assets/minecraft/textures/items/iron_hoe.png</key> - <key type="filename">assets/minecraft/textures/items/iron_horse_armor.png</key> - <key type="filename">assets/minecraft/textures/items/iron_ingot.png</key> - <key type="filename">assets/minecraft/textures/items/iron_leggings.png</key> - <key type="filename">assets/minecraft/textures/items/iron_nugget.png</key> - <key type="filename">assets/minecraft/textures/items/iron_pickaxe.png</key> - <key type="filename">assets/minecraft/textures/items/iron_shovel.png</key> - <key type="filename">assets/minecraft/textures/items/iron_sword.png</key> - <key type="filename">assets/minecraft/textures/items/item_frame.png</key> - <key type="filename">assets/minecraft/textures/items/jungle_boat.png</key> - <key type="filename">assets/minecraft/textures/items/lead.png</key> - <key type="filename">assets/minecraft/textures/items/leather.png</key> - <key type="filename">assets/minecraft/textures/items/leather_boots.png</key> - <key type="filename">assets/minecraft/textures/items/leather_boots_overlay.png</key> - <key type="filename">assets/minecraft/textures/items/leather_chestplate.png</key> - <key type="filename">assets/minecraft/textures/items/leather_chestplate_overlay.png</key> - <key type="filename">assets/minecraft/textures/items/leather_helmet.png</key> - <key type="filename">assets/minecraft/textures/items/leather_helmet_overlay.png</key> - <key type="filename">assets/minecraft/textures/items/leather_leggings.png</key> - <key type="filename">assets/minecraft/textures/items/leather_leggings_overlay.png</key> - <key type="filename">assets/minecraft/textures/items/magma_cream.png</key> - <key type="filename">assets/minecraft/textures/items/map_empty.png</key> - <key type="filename">assets/minecraft/textures/items/map_filled.png</key> - <key type="filename">assets/minecraft/textures/items/map_filled_markings.png</key> - <key type="filename">assets/minecraft/textures/items/melon.png</key> - <key type="filename">assets/minecraft/textures/items/melon_speckled.png</key> - <key type="filename">assets/minecraft/textures/items/minecart_chest.png</key> - <key type="filename">assets/minecraft/textures/items/minecart_command_block.png</key> - <key type="filename">assets/minecraft/textures/items/minecart_furnace.png</key> - <key type="filename">assets/minecraft/textures/items/minecart_hopper.png</key> - <key type="filename">assets/minecraft/textures/items/minecart_normal.png</key> - <key type="filename">assets/minecraft/textures/items/minecart_tnt.png</key> - <key type="filename">assets/minecraft/textures/items/mushroom_stew.png</key> - <key type="filename">assets/minecraft/textures/items/mutton_cooked.png</key> - <key type="filename">assets/minecraft/textures/items/mutton_raw.png</key> - <key type="filename">assets/minecraft/textures/items/name_tag.png</key> - <key type="filename">assets/minecraft/textures/items/nether_star.png</key> - <key type="filename">assets/minecraft/textures/items/nether_wart.png</key> - <key type="filename">assets/minecraft/textures/items/netherbrick.png</key> - <key type="filename">assets/minecraft/textures/items/oak_boat.png</key> - <key type="filename">assets/minecraft/textures/items/painting.png</key> - <key type="filename">assets/minecraft/textures/items/paper.png</key> - <key type="filename">assets/minecraft/textures/items/porkchop_cooked.png</key> - <key type="filename">assets/minecraft/textures/items/porkchop_raw.png</key> - <key type="filename">assets/minecraft/textures/items/potato.png</key> - <key type="filename">assets/minecraft/textures/items/potato_baked.png</key> - <key type="filename">assets/minecraft/textures/items/potato_poisonous.png</key> - <key type="filename">assets/minecraft/textures/items/potion_bottle_drinkable.png</key> - <key type="filename">assets/minecraft/textures/items/potion_bottle_empty.png</key> - <key type="filename">assets/minecraft/textures/items/potion_bottle_lingering.png</key> - <key type="filename">assets/minecraft/textures/items/potion_bottle_splash.png</key> - <key type="filename">assets/minecraft/textures/items/potion_overlay.png</key> - <key type="filename">assets/minecraft/textures/items/prismarine_crystals.png</key> - <key type="filename">assets/minecraft/textures/items/prismarine_shard.png</key> - <key type="filename">assets/minecraft/textures/items/pumpkin_pie.png</key> - <key type="filename">assets/minecraft/textures/items/quartz.png</key> - <key type="filename">assets/minecraft/textures/items/rabbit_cooked.png</key> - <key type="filename">assets/minecraft/textures/items/rabbit_foot.png</key> - <key type="filename">assets/minecraft/textures/items/rabbit_hide.png</key> - <key type="filename">assets/minecraft/textures/items/rabbit_raw.png</key> - <key type="filename">assets/minecraft/textures/items/rabbit_stew.png</key> - <key type="filename">assets/minecraft/textures/items/record_11.png</key> - <key type="filename">assets/minecraft/textures/items/record_13.png</key> - <key type="filename">assets/minecraft/textures/items/record_blocks.png</key> - <key type="filename">assets/minecraft/textures/items/record_cat.png</key> - <key type="filename">assets/minecraft/textures/items/record_chirp.png</key> - <key type="filename">assets/minecraft/textures/items/record_far.png</key> - <key type="filename">assets/minecraft/textures/items/record_mall.png</key> - <key type="filename">assets/minecraft/textures/items/record_mellohi.png</key> - <key type="filename">assets/minecraft/textures/items/record_stal.png</key> - <key type="filename">assets/minecraft/textures/items/record_strad.png</key> - <key type="filename">assets/minecraft/textures/items/record_wait.png</key> - <key type="filename">assets/minecraft/textures/items/record_ward.png</key> - <key type="filename">assets/minecraft/textures/items/redstone_dust.png</key> - <key type="filename">assets/minecraft/textures/items/reeds.png</key> - <key type="filename">assets/minecraft/textures/items/repeater.png</key> - <key type="filename">assets/minecraft/textures/items/rotten_flesh.png</key> - <key type="filename">assets/minecraft/textures/items/ruby.png</key> - <key type="filename">assets/minecraft/textures/items/saddle.png</key> - <key type="filename">assets/minecraft/textures/items/seeds_melon.png</key> - <key type="filename">assets/minecraft/textures/items/seeds_pumpkin.png</key> - <key type="filename">assets/minecraft/textures/items/seeds_wheat.png</key> - <key type="filename">assets/minecraft/textures/items/shears.png</key> - <key type="filename">assets/minecraft/textures/items/shulker_shell.png</key> - <key type="filename">assets/minecraft/textures/items/sign.png</key> - <key type="filename">assets/minecraft/textures/items/slimeball.png</key> - <key type="filename">assets/minecraft/textures/items/snowball.png</key> - <key type="filename">assets/minecraft/textures/items/spawn_egg.png</key> - <key type="filename">assets/minecraft/textures/items/spawn_egg_overlay.png</key> - <key type="filename">assets/minecraft/textures/items/spectral_arrow.png</key> - <key type="filename">assets/minecraft/textures/items/spider_eye.png</key> - <key type="filename">assets/minecraft/textures/items/spider_eye_fermented.png</key> - <key type="filename">assets/minecraft/textures/items/spruce_boat.png</key> - <key type="filename">assets/minecraft/textures/items/stick.png</key> - <key type="filename">assets/minecraft/textures/items/stone_axe.png</key> - <key type="filename">assets/minecraft/textures/items/stone_hoe.png</key> - <key type="filename">assets/minecraft/textures/items/stone_pickaxe.png</key> - <key type="filename">assets/minecraft/textures/items/stone_shovel.png</key> - <key type="filename">assets/minecraft/textures/items/stone_sword.png</key> - <key type="filename">assets/minecraft/textures/items/string.png</key> - <key type="filename">assets/minecraft/textures/items/structure_void.png</key> - <key type="filename">assets/minecraft/textures/items/sugar.png</key> - <key type="filename">assets/minecraft/textures/items/tipped_arrow_base.png</key> - <key type="filename">assets/minecraft/textures/items/tipped_arrow_head.png</key> - <key type="filename">assets/minecraft/textures/items/totem.png</key> - <key type="filename">assets/minecraft/textures/items/wheat.png</key> - <key type="filename">assets/minecraft/textures/items/wood_axe.png</key> - <key type="filename">assets/minecraft/textures/items/wood_hoe.png</key> - <key type="filename">assets/minecraft/textures/items/wood_pickaxe.png</key> - <key type="filename">assets/minecraft/textures/items/wood_shovel.png</key> - <key type="filename">assets/minecraft/textures/items/wood_sword.png</key> - <key type="filename">assets/minecraft/textures/items/wooden_armorstand.png</key> - <key type="filename">assets/minecraft/textures/misc/forcefield.png</key> - <key type="filename">assets/minecraft/textures/misc/underwater.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>4,4,8,8</rect> - <key>scale9Paddings</key> - <rect>4,4,8,8</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/blocks/chain_command_block_back.png</key> - <key type="filename">assets/minecraft/textures/blocks/chain_command_block_conditional.png</key> - <key type="filename">assets/minecraft/textures/blocks/chain_command_block_front.png</key> - <key type="filename">assets/minecraft/textures/blocks/chain_command_block_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/command_block_back.png</key> - <key type="filename">assets/minecraft/textures/blocks/command_block_conditional.png</key> - <key type="filename">assets/minecraft/textures/blocks/command_block_front.png</key> - <key type="filename">assets/minecraft/textures/blocks/command_block_side.png</key> - <key type="filename">assets/minecraft/textures/blocks/prismarine_rough.png</key> - <key type="filename">assets/minecraft/textures/blocks/repeating_command_block_back.png</key> - <key type="filename">assets/minecraft/textures/blocks/repeating_command_block_conditional.png</key> - <key type="filename">assets/minecraft/textures/blocks/repeating_command_block_front.png</key> - <key type="filename">assets/minecraft/textures/blocks/repeating_command_block_side.png</key> - <key type="filename">assets/minecraft/textures/gui/stream_indicator.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>4,16,8,32</rect> - <key>scale9Paddings</key> - <rect>4,16,8,32</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/blocks/fire_layer_0.png</key> - <key type="filename">assets/minecraft/textures/blocks/fire_layer_1.png</key> - <key type="filename">assets/minecraft/textures/blocks/portal.png</key> - <key type="filename">assets/minecraft/textures/blocks/water_still.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>4,128,8,256</rect> - <key>scale9Paddings</key> - <rect>4,128,8,256</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/blocks/lava_flow.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>8,128,16,256</rect> - <key>scale9Paddings</key> - <rect>8,128,16,256</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/blocks/lava_still.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>4,80,8,160</rect> - <key>scale9Paddings</key> - <rect>4,80,8,160</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/blocks/magma.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>4,12,8,24</rect> - <key>scale9Paddings</key> - <rect>4,12,8,24</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/blocks/sea_lantern.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>4,20,8,40</rect> - <key>scale9Paddings</key> - <rect>4,20,8,40</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/blocks/water_flow.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>8,256,16,512</rect> - <key>scale9Paddings</key> - <rect>8,256,16,512</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/colormap/foliage.png</key> - <key type="filename">assets/minecraft/textures/colormap/grass.png</key> - <key type="filename">assets/minecraft/textures/entity/end_portal.png</key> - <key type="filename">assets/minecraft/textures/entity/enderdragon/dragon.png</key> - <key type="filename">assets/minecraft/textures/entity/enderdragon/dragon_exploding.png</key> - <key type="filename">assets/minecraft/textures/entity/enderdragon/dragon_eyes.png</key> - <key type="filename">assets/minecraft/textures/environment/clouds.png</key> - <key type="filename">assets/minecraft/textures/gui/achievement/achievement_background.png</key> - <key type="filename">assets/minecraft/textures/gui/achievement/achievement_icons.png</key> - <key type="filename">assets/minecraft/textures/gui/bars.png</key> - <key type="filename">assets/minecraft/textures/gui/book.png</key> - <key type="filename">assets/minecraft/textures/gui/container/anvil.png</key> - <key type="filename">assets/minecraft/textures/gui/container/beacon.png</key> - <key type="filename">assets/minecraft/textures/gui/container/brewing_stand.png</key> - <key type="filename">assets/minecraft/textures/gui/container/crafting_table.png</key> - <key type="filename">assets/minecraft/textures/gui/container/creative_inventory/tab_inventory.png</key> - <key type="filename">assets/minecraft/textures/gui/container/creative_inventory/tab_item_search.png</key> - <key type="filename">assets/minecraft/textures/gui/container/creative_inventory/tab_items.png</key> - <key type="filename">assets/minecraft/textures/gui/container/creative_inventory/tabs.png</key> - <key type="filename">assets/minecraft/textures/gui/container/dispenser.png</key> - <key type="filename">assets/minecraft/textures/gui/container/enchanting_table.png</key> - <key type="filename">assets/minecraft/textures/gui/container/furnace.png</key> - <key type="filename">assets/minecraft/textures/gui/container/generic_54.png</key> - <key type="filename">assets/minecraft/textures/gui/container/hopper.png</key> - <key type="filename">assets/minecraft/textures/gui/container/horse.png</key> - <key type="filename">assets/minecraft/textures/gui/container/inventory.png</key> - <key type="filename">assets/minecraft/textures/gui/container/shulker_box.png</key> - <key type="filename">assets/minecraft/textures/gui/container/villager.png</key> - <key type="filename">assets/minecraft/textures/gui/demo_background.png</key> - <key type="filename">assets/minecraft/textures/gui/icons.png</key> - <key type="filename">assets/minecraft/textures/gui/presets/chaos.png</key> - <key type="filename">assets/minecraft/textures/gui/presets/delight.png</key> - <key type="filename">assets/minecraft/textures/gui/presets/drought.png</key> - <key type="filename">assets/minecraft/textures/gui/presets/isles.png</key> - <key type="filename">assets/minecraft/textures/gui/presets/luck.png</key> - <key type="filename">assets/minecraft/textures/gui/presets/madness.png</key> - <key type="filename">assets/minecraft/textures/gui/presets/water.png</key> - <key type="filename">assets/minecraft/textures/gui/resource_packs.png</key> - <key type="filename">assets/minecraft/textures/gui/server_selection.png</key> - <key type="filename">assets/minecraft/textures/gui/spectator_widgets.png</key> - <key type="filename">assets/minecraft/textures/gui/title/background/panorama_0.png</key> - <key type="filename">assets/minecraft/textures/gui/title/background/panorama_1.png</key> - <key type="filename">assets/minecraft/textures/gui/title/background/panorama_2.png</key> - <key type="filename">assets/minecraft/textures/gui/title/background/panorama_3.png</key> - <key type="filename">assets/minecraft/textures/gui/title/background/panorama_4.png</key> - <key type="filename">assets/minecraft/textures/gui/title/background/panorama_5.png</key> - <key type="filename">assets/minecraft/textures/gui/title/minecraft.png</key> - <key type="filename">assets/minecraft/textures/gui/title/mojang.png</key> - <key type="filename">assets/minecraft/textures/gui/widgets.png</key> - <key type="filename">assets/minecraft/textures/gui/world_selection.png</key> - <key type="filename">assets/minecraft/textures/misc/pumpkinblur.png</key> - <key type="filename">assets/minecraft/textures/misc/vignette.png</key> - <key type="filename">assets/minecraft/textures/painting/paintings_kristoffer_zetterstrand.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>64,64,128,128</rect> - <key>scale9Paddings</key> - <rect>64,64,128,128</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/effect/dither.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>1,1,2,2</rect> - <key>scale9Paddings</key> - <rect>1,1,2,2</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/entity/alex.png</key> - <key type="filename">assets/minecraft/textures/entity/armorstand/wood.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/base.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/border.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/bricks.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/circle.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/creeper.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/cross.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/curly_border.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/diagonal_left.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/diagonal_right.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/diagonal_up_left.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/diagonal_up_right.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/flower.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/gradient.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/gradient_up.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/half_horizontal.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/half_horizontal_bottom.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/half_vertical.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/half_vertical_right.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/mojang.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/rhombus.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/skull.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/small_stripes.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/square_bottom_left.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/square_bottom_right.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/square_top_left.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/square_top_right.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/straight_cross.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/stripe_bottom.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/stripe_center.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/stripe_downleft.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/stripe_downright.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/stripe_left.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/stripe_middle.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/stripe_right.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/stripe_top.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/triangle_bottom.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/triangle_top.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/triangles_bottom.png</key> - <key type="filename">assets/minecraft/textures/entity/banner/triangles_top.png</key> - <key type="filename">assets/minecraft/textures/entity/banner_base.png</key> - <key type="filename">assets/minecraft/textures/entity/bat.png</key> - <key type="filename">assets/minecraft/textures/entity/chest/christmas.png</key> - <key type="filename">assets/minecraft/textures/entity/chest/ender.png</key> - <key type="filename">assets/minecraft/textures/entity/chest/normal.png</key> - <key type="filename">assets/minecraft/textures/entity/chest/trapped.png</key> - <key type="filename">assets/minecraft/textures/entity/experience_orb.png</key> - <key type="filename">assets/minecraft/textures/entity/guardian.png</key> - <key type="filename">assets/minecraft/textures/entity/guardian_elder.png</key> - <key type="filename">assets/minecraft/textures/entity/illager/evoker.png</key> - <key type="filename">assets/minecraft/textures/entity/illager/vex.png</key> - <key type="filename">assets/minecraft/textures/entity/illager/vex_charging.png</key> - <key type="filename">assets/minecraft/textures/entity/illager/vindicator.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/base.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/border.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/bricks.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/circle.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/creeper.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/cross.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/curly_border.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/diagonal_left.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/diagonal_right.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/diagonal_up_left.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/diagonal_up_right.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/flower.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/gradient.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/gradient_up.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/half_horizontal.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/half_horizontal_bottom.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/half_vertical.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/half_vertical_right.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/mojang.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/rhombus.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/skull.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/small_stripes.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/square_bottom_left.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/square_bottom_right.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/square_top_left.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/square_top_right.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/straight_cross.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/stripe_bottom.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/stripe_center.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/stripe_downleft.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/stripe_downright.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/stripe_left.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/stripe_middle.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/stripe_right.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/stripe_top.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/triangle_bottom.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/triangle_top.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/triangles_bottom.png</key> - <key type="filename">assets/minecraft/textures/entity/shield/triangles_top.png</key> - <key type="filename">assets/minecraft/textures/entity/shield_base.png</key> - <key type="filename">assets/minecraft/textures/entity/shield_base_nopattern.png</key> - <key type="filename">assets/minecraft/textures/entity/shulker/shulker_black.png</key> - <key type="filename">assets/minecraft/textures/entity/shulker/shulker_blue.png</key> - <key type="filename">assets/minecraft/textures/entity/shulker/shulker_brown.png</key> - <key type="filename">assets/minecraft/textures/entity/shulker/shulker_cyan.png</key> - <key type="filename">assets/minecraft/textures/entity/shulker/shulker_gray.png</key> - <key type="filename">assets/minecraft/textures/entity/shulker/shulker_green.png</key> - <key type="filename">assets/minecraft/textures/entity/shulker/shulker_light_blue.png</key> - <key type="filename">assets/minecraft/textures/entity/shulker/shulker_lime.png</key> - <key type="filename">assets/minecraft/textures/entity/shulker/shulker_magenta.png</key> - <key type="filename">assets/minecraft/textures/entity/shulker/shulker_orange.png</key> - <key type="filename">assets/minecraft/textures/entity/shulker/shulker_pink.png</key> - <key type="filename">assets/minecraft/textures/entity/shulker/shulker_purple.png</key> - <key type="filename">assets/minecraft/textures/entity/shulker/shulker_red.png</key> - <key type="filename">assets/minecraft/textures/entity/shulker/shulker_silver.png</key> - <key type="filename">assets/minecraft/textures/entity/shulker/shulker_white.png</key> - <key type="filename">assets/minecraft/textures/entity/shulker/shulker_yellow.png</key> - <key type="filename">assets/minecraft/textures/entity/snowman.png</key> - <key type="filename">assets/minecraft/textures/entity/steve.png</key> - <key type="filename">assets/minecraft/textures/entity/villager/butcher.png</key> - <key type="filename">assets/minecraft/textures/entity/villager/farmer.png</key> - <key type="filename">assets/minecraft/textures/entity/villager/librarian.png</key> - <key type="filename">assets/minecraft/textures/entity/villager/priest.png</key> - <key type="filename">assets/minecraft/textures/entity/villager/smith.png</key> - <key type="filename">assets/minecraft/textures/entity/villager/villager.png</key> - <key type="filename">assets/minecraft/textures/entity/wither/wither.png</key> - <key type="filename">assets/minecraft/textures/entity/wither/wither_armor.png</key> - <key type="filename">assets/minecraft/textures/entity/wither/wither_invulnerable.png</key> - <key type="filename">assets/minecraft/textures/entity/zombie/husk.png</key> - <key type="filename">assets/minecraft/textures/entity/zombie/zombie.png</key> - <key type="filename">assets/minecraft/textures/entity/zombie/zombie_villager.png</key> - <key type="filename">assets/minecraft/textures/entity/zombie_pigman.png</key> - <key type="filename">assets/minecraft/textures/entity/zombie_villager/zombie_butcher.png</key> - <key type="filename">assets/minecraft/textures/entity/zombie_villager/zombie_farmer.png</key> - <key type="filename">assets/minecraft/textures/entity/zombie_villager/zombie_librarian.png</key> - <key type="filename">assets/minecraft/textures/entity/zombie_villager/zombie_priest.png</key> - <key type="filename">assets/minecraft/textures/entity/zombie_villager/zombie_smith.png</key> - <key type="filename">assets/minecraft/textures/entity/zombie_villager/zombie_villager.png</key> - <key type="filename">assets/minecraft/textures/map/map_background.png</key> - <key type="filename">assets/minecraft/textures/misc/enchanted_item_glint.png</key> - <key type="filename">assets/minecraft/textures/misc/shadow.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>16,16,32,32</rect> - <key>scale9Paddings</key> - <rect>16,16,32,32</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/entity/arrow.png</key> - <key type="filename">assets/minecraft/textures/entity/guardian_beam.png</key> - <key type="filename">assets/minecraft/textures/entity/lead_knot.png</key> - <key type="filename">assets/minecraft/textures/entity/projectiles/arrow.png</key> - <key type="filename">assets/minecraft/textures/entity/projectiles/spectral_arrow.png</key> - <key type="filename">assets/minecraft/textures/entity/projectiles/tipped_arrow.png</key> - <key type="filename">assets/minecraft/textures/environment/sun.png</key> - <key type="filename">assets/minecraft/textures/map/map_icons.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>8,8,16,16</rect> - <key>scale9Paddings</key> - <rect>8,8,16,16</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/entity/bear/polarbear.png</key> - <key type="filename">assets/minecraft/textures/entity/boat/boat_acacia.png</key> - <key type="filename">assets/minecraft/textures/entity/boat/boat_birch.png</key> - <key type="filename">assets/minecraft/textures/entity/boat/boat_darkoak.png</key> - <key type="filename">assets/minecraft/textures/entity/boat/boat_jungle.png</key> - <key type="filename">assets/minecraft/textures/entity/boat/boat_oak.png</key> - <key type="filename">assets/minecraft/textures/entity/boat/boat_spruce.png</key> - <key type="filename">assets/minecraft/textures/entity/chest/christmas_double.png</key> - <key type="filename">assets/minecraft/textures/entity/chest/normal_double.png</key> - <key type="filename">assets/minecraft/textures/entity/chest/trapped_double.png</key> - <key type="filename">assets/minecraft/textures/entity/endercrystal/endercrystal.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/decor/decor_black.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/decor/decor_blue.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/decor/decor_brown.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/decor/decor_cyan.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/decor/decor_gray.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/decor/decor_green.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/decor/decor_light_blue.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/decor/decor_lime.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/decor/decor_magenta.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/decor/decor_orange.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/decor/decor_pink.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/decor/decor_purple.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/decor/decor_red.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/decor/decor_silver.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/decor/decor_white.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/decor/decor_yellow.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/llama.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/llama_brown.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/llama_creamy.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/llama_gray.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/llama_white.png</key> - <key type="filename">assets/minecraft/textures/environment/moon_phases.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>32,16,64,32</rect> - <key>scale9Paddings</key> - <rect>32,16,64,32</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/entity/blaze.png</key> - <key type="filename">assets/minecraft/textures/entity/cat/black.png</key> - <key type="filename">assets/minecraft/textures/entity/cat/ocelot.png</key> - <key type="filename">assets/minecraft/textures/entity/cat/red.png</key> - <key type="filename">assets/minecraft/textures/entity/cat/siamese.png</key> - <key type="filename">assets/minecraft/textures/entity/chicken.png</key> - <key type="filename">assets/minecraft/textures/entity/cow/cow.png</key> - <key type="filename">assets/minecraft/textures/entity/cow/mooshroom.png</key> - <key type="filename">assets/minecraft/textures/entity/creeper/creeper.png</key> - <key type="filename">assets/minecraft/textures/entity/creeper/creeper_armor.png</key> - <key type="filename">assets/minecraft/textures/entity/elytra.png</key> - <key type="filename">assets/minecraft/textures/entity/enchanting_table_book.png</key> - <key type="filename">assets/minecraft/textures/entity/enderman/enderman.png</key> - <key type="filename">assets/minecraft/textures/entity/enderman/enderman_eyes.png</key> - <key type="filename">assets/minecraft/textures/entity/endermite.png</key> - <key type="filename">assets/minecraft/textures/entity/ghast/ghast.png</key> - <key type="filename">assets/minecraft/textures/entity/ghast/ghast_shooting.png</key> - <key type="filename">assets/minecraft/textures/entity/illager/fangs.png</key> - <key type="filename">assets/minecraft/textures/entity/llama/spit.png</key> - <key type="filename">assets/minecraft/textures/entity/minecart.png</key> - <key type="filename">assets/minecraft/textures/entity/pig/pig.png</key> - <key type="filename">assets/minecraft/textures/entity/pig/pig_saddle.png</key> - <key type="filename">assets/minecraft/textures/entity/rabbit/black.png</key> - <key type="filename">assets/minecraft/textures/entity/rabbit/brown.png</key> - <key type="filename">assets/minecraft/textures/entity/rabbit/caerbannog.png</key> - <key type="filename">assets/minecraft/textures/entity/rabbit/gold.png</key> - <key type="filename">assets/minecraft/textures/entity/rabbit/salt.png</key> - <key type="filename">assets/minecraft/textures/entity/rabbit/toast.png</key> - <key type="filename">assets/minecraft/textures/entity/rabbit/white.png</key> - <key type="filename">assets/minecraft/textures/entity/rabbit/white_splotched.png</key> - <key type="filename">assets/minecraft/textures/entity/sheep/sheep.png</key> - <key type="filename">assets/minecraft/textures/entity/sheep/sheep_fur.png</key> - <key type="filename">assets/minecraft/textures/entity/shulker/spark.png</key> - <key type="filename">assets/minecraft/textures/entity/sign.png</key> - <key type="filename">assets/minecraft/textures/entity/silverfish.png</key> - <key type="filename">assets/minecraft/textures/entity/skeleton/skeleton.png</key> - <key type="filename">assets/minecraft/textures/entity/skeleton/stray.png</key> - <key type="filename">assets/minecraft/textures/entity/skeleton/stray_overlay.png</key> - <key type="filename">assets/minecraft/textures/entity/skeleton/wither_skeleton.png</key> - <key type="filename">assets/minecraft/textures/entity/slime/magmacube.png</key> - <key type="filename">assets/minecraft/textures/entity/slime/slime.png</key> - <key type="filename">assets/minecraft/textures/entity/spider/cave_spider.png</key> - <key type="filename">assets/minecraft/textures/entity/spider/spider.png</key> - <key type="filename">assets/minecraft/textures/entity/spider_eyes.png</key> - <key type="filename">assets/minecraft/textures/entity/squid.png</key> - <key type="filename">assets/minecraft/textures/entity/wolf/wolf.png</key> - <key type="filename">assets/minecraft/textures/entity/wolf/wolf_angry.png</key> - <key type="filename">assets/minecraft/textures/entity/wolf/wolf_collar.png</key> - <key type="filename">assets/minecraft/textures/entity/wolf/wolf_tame.png</key> - <key type="filename">assets/minecraft/textures/models/armor/chainmail_layer_1.png</key> - <key type="filename">assets/minecraft/textures/models/armor/chainmail_layer_2.png</key> - <key type="filename">assets/minecraft/textures/models/armor/diamond_layer_1.png</key> - <key type="filename">assets/minecraft/textures/models/armor/diamond_layer_2.png</key> - <key type="filename">assets/minecraft/textures/models/armor/gold_layer_1.png</key> - <key type="filename">assets/minecraft/textures/models/armor/gold_layer_2.png</key> - <key type="filename">assets/minecraft/textures/models/armor/iron_layer_1.png</key> - <key type="filename">assets/minecraft/textures/models/armor/iron_layer_2.png</key> - <key type="filename">assets/minecraft/textures/models/armor/leather_layer_1.png</key> - <key type="filename">assets/minecraft/textures/models/armor/leather_layer_1_overlay.png</key> - <key type="filename">assets/minecraft/textures/models/armor/leather_layer_2.png</key> - <key type="filename">assets/minecraft/textures/models/armor/leather_layer_2_overlay.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>16,8,32,16</rect> - <key>scale9Paddings</key> - <rect>16,8,32,16</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/entity/endercrystal/endercrystal_beam.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>4,64,8,128</rect> - <key>scale9Paddings</key> - <rect>4,64,8,128</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/entity/explosion.png</key> - <key type="filename">assets/minecraft/textures/entity/horse/armor/horse_armor_diamond.png</key> - <key type="filename">assets/minecraft/textures/entity/horse/armor/horse_armor_gold.png</key> - <key type="filename">assets/minecraft/textures/entity/horse/armor/horse_armor_iron.png</key> - <key type="filename">assets/minecraft/textures/entity/horse/donkey.png</key> - <key type="filename">assets/minecraft/textures/entity/horse/horse_black.png</key> - <key type="filename">assets/minecraft/textures/entity/horse/horse_brown.png</key> - <key type="filename">assets/minecraft/textures/entity/horse/horse_chestnut.png</key> - <key type="filename">assets/minecraft/textures/entity/horse/horse_creamy.png</key> - <key type="filename">assets/minecraft/textures/entity/horse/horse_darkbrown.png</key> - <key type="filename">assets/minecraft/textures/entity/horse/horse_gray.png</key> - <key type="filename">assets/minecraft/textures/entity/horse/horse_markings_blackdots.png</key> - <key type="filename">assets/minecraft/textures/entity/horse/horse_markings_white.png</key> - <key type="filename">assets/minecraft/textures/entity/horse/horse_markings_whitedots.png</key> - <key type="filename">assets/minecraft/textures/entity/horse/horse_markings_whitefield.png</key> - <key type="filename">assets/minecraft/textures/entity/horse/horse_skeleton.png</key> - <key type="filename">assets/minecraft/textures/entity/horse/horse_white.png</key> - <key type="filename">assets/minecraft/textures/entity/horse/horse_zombie.png</key> - <key type="filename">assets/minecraft/textures/entity/horse/mule.png</key> - <key type="filename">assets/minecraft/textures/entity/iron_golem.png</key> - <key type="filename">assets/minecraft/textures/environment/end_sky.png</key> - <key type="filename">assets/minecraft/textures/gui/container/stats_icons.png</key> - <key type="filename">assets/minecraft/textures/misc/unknown_pack.png</key> - <key type="filename">assets/minecraft/textures/misc/unknown_server.png</key> - <key type="filename">assets/minecraft/textures/particle/particles.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>32,32,64,64</rect> - <key>scale9Paddings</key> - <rect>32,32,64,64</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/entity/sweep.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>32,8,64,16</rect> - <key>scale9Paddings</key> - <rect>32,8,64,16</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/entity/witch.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>16,32,32,64</rect> - <key>scale9Paddings</key> - <rect>16,32,32,64</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/environment/rain.png</key> - <key type="filename">assets/minecraft/textures/environment/snow.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>16,64,32,128</rect> - <key>scale9Paddings</key> - <rect>16,64,32,128</rect> - <key>scale9FromFile</key> - <false/> - </struct> - <key type="filename">assets/minecraft/textures/particle/footprint.png</key> - <struct type="IndividualSpriteSettings"> - <key>pivotPoint</key> - <point_f>0.5,0.5</point_f> - <key>scale9Enabled</key> - <false/> - <key>scale9Borders</key> - <rect>2,2,4,4</rect> - <key>scale9Paddings</key> - <rect>2,2,4,4</rect> - <key>scale9FromFile</key> - <false/> - </struct> - </map> - <key>fileList</key> - <array> - <filename>assets/minecraft/textures</filename> - </array> - <key>ignoreFileList</key> - <array/> - <key>replaceList</key> - <array/> - <key>ignoredWarnings</key> - <array/> - <key>commonDivisorX</key> - <uint>1</uint> - <key>commonDivisorY</key> - <uint>1</uint> - <key>packNormalMaps</key> - <false/> - <key>autodetectNormalMaps</key> - <true/> - <key>normalMapFilter</key> - <string></string> - <key>normalMapSuffix</key> - <string></string> - <key>normalMapSheetFileName</key> - <filename></filename> - <key>exporterProperties</key> - <map type="ExporterProperties"/> - </struct> -</data> diff --git a/depedencies/include/GL/glew.h b/depedencies/include/GL/glew.h index 702265c..3c95c71 100644 --- a/depedencies/include/GL/glew.h +++ b/depedencies/include/GL/glew.h @@ -77,6 +77,8 @@ ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ +#define GLEW_STATIC + #ifndef __glew_h__ #define __glew_h__ #define __GLEW_H__ diff --git a/src/core/AssetManager.cpp b/src/core/AssetManager.cpp index 003f2f0..eaa002f 100644 --- a/src/core/AssetManager.cpp +++ b/src/core/AssetManager.cpp @@ -8,9 +8,6 @@ const fs::path pathToAssetsList = "./items.json"; const fs::path pathToTextureIndex = "./textures.json"; AssetManager::AssetManager() { - for (auto &it:fs::recursive_directory_iterator(pathToAssets)) { - - } LoadIds(); LoadTextureResources(); } @@ -23,7 +20,7 @@ void AssetManager::LoadIds() { int id = it["type"].get<int>(); int state = it["meta"].get<int>(); std::string blockName = it["text_type"].get<std::string>(); - assetIds[blockName] = Block(id, 0, state); + assetIds[blockName] = Block(id, state); } LOG(INFO) << "Loaded " << assetIds.size() << " ids"; } @@ -38,13 +35,15 @@ void AssetManager::LoadTextureResources() { nlohmann::json index; in >> index; std::string filename = index["meta"]["image"].get<std::string>(); + float textureWidth = index["meta"]["size"]["w"].get<int>(); + float textureHeight = index["meta"]["size"]["h"].get<int>(); for (auto &it:index["frames"]) { auto frame = it["frame"]; - TextureCoord coord; - coord.x = frame["x"].get<int>(); - coord.y = frame["y"].get<int>();; - coord.w = frame["w"].get<int>(); - coord.h = frame["h"].get<int>(); + TextureCoordinates coord; + coord.x = frame["x"].get<int>() / textureWidth; + coord.y = frame["y"].get<int>() / textureHeight; + coord.w = frame["w"].get<int>() / textureWidth; + coord.h = frame["h"].get<int>() / textureHeight; std::string assetName = it["filename"].get<std::string>(); assetName.insert(0, "minecraft/textures/"); assetName.erase(assetName.length() - 4); @@ -55,30 +54,37 @@ void AssetManager::LoadTextureResources() { LOG(INFO) << "Texture atlas id is " << textureAtlas->texture; } -TextureCoord AssetManager::GetTextureByAssetName(std::string AssetName) { - return assetTextures[AssetName]; +TextureCoordinates AssetManager::GetTextureByAssetName(std::string AssetName) { + if (assetTextures.find(AssetName) != assetTextures.end()) + return assetTextures[AssetName]; + else + return TextureCoordinates{-1, -1, -1, -1}; } -std::string AssetManager::GetTextureAssetNameByBlockId(unsigned short BlockId, unsigned char BlockSide) { - //Block sides: 0 - bottom, 1 - top, 2 - north, 3 - south, 4 - west, 5 - east - std::map<Block, std::string> lookupTable = { - {Block(0), "minecraft/textures/blocks/air"}, - {Block(1, 0), "minecraft/textures/blocks/stone"}, - {Block(1, 1), "minecraft/textures/blocks/stone_granite"}, +std::string AssetManager::GetTextureAssetNameByBlockId(BlockTextureId block) { + //Block sides: 0 - bottom, 1 - top, 2 - north, 3 - south, 4 - west, 5 - east 6 - every side + std::map<BlockTextureId, std::string> lookupTable = { + {BlockTextureId(0, 0), "minecraft/textures/blocks/air"}, + {BlockTextureId(1, 0), "minecraft/textures/blocks/stone"}, + {BlockTextureId(1, 1), "minecraft/textures/blocks/stone_granite"}, - {Block(2, 0, 0), "minecraft/textures/blocks/dirt"}, - {Block(2, 0, 1), "minecraft/textures/blocks/grass_top"}, - {Block(2, 0, 2), "minecraft/textures/blocks/grass_side"}, - {Block(2, 0, 3), "minecraft/textures/blocks/grass_side"}, - {Block(2, 0, 4), "minecraft/textures/blocks/grass_side"}, - {Block(2, 0, 5), "minecraft/textures/blocks/grass_side"}, + {BlockTextureId(2, 0, 0), "minecraft/textures/blocks/dirt"}, + {BlockTextureId(2, 0, 1), "minecraft/textures/blocks/grass_top"}, + {BlockTextureId(2, 0, 2), "minecraft/textures/blocks/grass_side"}, + {BlockTextureId(2, 0, 3), "minecraft/textures/blocks/grass_side"}, + {BlockTextureId(2, 0, 4), "minecraft/textures/blocks/grass_side"}, + {BlockTextureId(2, 0, 5), "minecraft/textures/blocks/grass_side"}, - {Block(3), "minecraft/textures/blocks/dirt"}, - {Block(4), "minecraft/textures/blocks/cobblestone"}, + {BlockTextureId(3, 0), "minecraft/textures/blocks/dirt"}, + {BlockTextureId(4, 0), "minecraft/textures/blocks/cobblestone"}, }; - return lookupTable[Block(BlockId, BlockSide)]; + return lookupTable[block]; } -const GLuint AssetManager::GetTextureAtlas() { +GLuint AssetManager::GetTextureAtlas() { return textureAtlas->texture; } + +TextureCoordinates AssetManager::GetTextureByBlock(BlockTextureId block) { + return this->GetTextureByAssetName(this->GetTextureAssetNameByBlockId(block)); +} diff --git a/src/core/AssetManager.hpp b/src/core/AssetManager.hpp index 23b2ba6..b378764 100644 --- a/src/core/AssetManager.hpp +++ b/src/core/AssetManager.hpp @@ -8,14 +8,44 @@ #include "../world/Block.hpp" #include "../graphics/Texture.hpp" -struct TextureCoord{ - unsigned int x,y,w,h; +struct TextureCoordinates { + TextureCoordinates(float x = -1, float y = -1, float w = -1, float h = -1) : x(x), y(y), w(w), h(h) {} + + bool operator==(const TextureCoordinates &rhs) const { + return x == rhs.x && + y == rhs.y && + w == rhs.w && + h == rhs.h; + } + + explicit operator bool() const { + return !(*this == TextureCoordinates(-1, -1, -1, -1)); + } + + float x, y, w, h; +}; + +struct BlockTextureId { + //Block sides: 0 - bottom, 1 - top, 2 - north, 3 - south, 4 - west, 5 - east 6 - every side + BlockTextureId(int id = 0, int state = 0, int side = 6) : id(id), state(state), side(side) {} + + int id:9; + int state:4; + int side:3; + + bool operator<(const BlockTextureId &rhs) const { + if (id < rhs.id) + return true; + if (rhs.id < id) + return false; + return state < rhs.state; + } }; class AssetManager { Texture *textureAtlas; - std::map<std::string,Block> assetIds; - std::map<std::string,TextureCoord> assetTextures; + std::map<std::string, Block> assetIds; + std::map<std::string, TextureCoordinates> assetTextures; public: AssetManager(); @@ -23,11 +53,13 @@ public: void LoadTextureResources(); - TextureCoord GetTextureByAssetName(std::string AssetName); + TextureCoordinates GetTextureByAssetName(std::string AssetName); - std::string GetTextureAssetNameByBlockId(unsigned short BlockId, unsigned char BlockSide = 0); + std::string GetTextureAssetNameByBlockId(BlockTextureId block); - const GLuint GetTextureAtlas(); + GLuint GetTextureAtlas(); void LoadIds(); + + TextureCoordinates GetTextureByBlock(BlockTextureId block); }; diff --git a/src/core/Core.cpp b/src/core/Core.cpp index 1481e36..ade043e 100644 --- a/src/core/Core.cpp +++ b/src/core/Core.cpp @@ -1,5 +1,39 @@ #include "Core.hpp" +GLenum glCheckError_(const char *file, int line) { + GLenum errorCode; + while ((errorCode = glGetError()) != GL_NO_ERROR) { + std::string error; + switch (errorCode) { + case GL_INVALID_ENUM: + error = "INVALID_ENUM"; + break; + case GL_INVALID_VALUE: + error = "INVALID_VALUE"; + break; + case GL_INVALID_OPERATION: + error = "INVALID_OPERATION"; + break; + case GL_STACK_OVERFLOW: + error = "STACK_OVERFLOW"; + break; + case GL_STACK_UNDERFLOW: + error = "STACK_UNDERFLOW"; + break; + case GL_OUT_OF_MEMORY: + error = "OUT_OF_MEMORY"; + break; + case GL_INVALID_FRAMEBUFFER_OPERATION: + error = "INVALID_FRAMEBUFFER_OPERATION"; + break; + } + LOG(ERROR) << "OpenGL error: " << error << " at " << file << ":" << line; + } + return errorCode; +} + +#define glCheckError() glCheckError_(__FILE__, __LINE__) + const GLfloat vertices[] = { //Z+ edge -0.5f, 0.5f, 0.5f, @@ -49,6 +83,56 @@ const GLfloat vertices[] = { 0.5f, -0.5f, -0.5f, -0.5f, -0.5f, 0.5f, }; + +/*const GLfloat vertices[] = { + //Z+ edge + -0.5f, 0.5f, 0.5f, + -0.5f, -0.5f, 0.5f, + 0.5f, -0.5f, 0.5f, + -0.5f, 0.5f, 0.5f, + 0.5f, -0.5f, 0.5f, + 0.5f, 0.5f, 0.5f, + + //Z- edge + -0.5f, -0.5f, -0.5f, + -0.5f, 0.5f, -0.5f, + 0.5f, -0.5f, -0.5f, + 0.5f, -0.5f, -0.5f, + -0.5f, 0.5f, -0.5f, + 0.5f, 0.5f, -0.5f, + + //X+ edge + -0.5f, -0.5f, -0.5f, + -0.5f, -0.5f, 0.5f, + -0.5f, 0.5f, -0.5f, + -0.5f, 0.5f, -0.5f, + -0.5f, -0.5f, 0.5f, + -0.5f, 0.5f, 0.5f, + + //X- edge + 0.5f, -0.5f, 0.5f, + 0.5f, 0.5f, -0.5f, + 0.5f, 0.5f, 0.5f, + 0.5f, -0.5f, 0.5f, + 0.5f, -0.5f, -0.5f, + 0.5f, 0.5f, -0.5f, + + //Y+ edge + 0.5f, 0.5f, -0.5f, + -0.5f, 0.5f, 0.5f, + 0.5f, 0.5f, 0.5f, + 0.5f, 0.5f, -0.5f, + -0.5f, 0.5f, -0.5f, + -0.5f, 0.5f, 0.5f, + + //Y- edge + -0.5f, -0.5f, 0.5f, + 0.5f, -0.5f, -0.5f, + 0.5f, -0.5f, 0.5f, + -0.5f, -0.5f, -0.5f, + 0.5f, -0.5f, -0.5f, + -0.5f, -0.5f, 0.5f, +};*/ const GLfloat uv_coords[] = { //Z+ 0.0f, 1.0f, @@ -102,7 +186,9 @@ const GLfloat uv_coords[] = { Core::Core() { LOG(INFO) << "Core initializing..."; InitSfml(1280, 720, "AltCraft"); + glCheckError(); InitGlew(); + glCheckError(); client = new NetworkClient("127.0.0.1", 25565, "HelloOne"); gameState = new GameState(client); std::thread loop = std::thread(&Core::UpdateGameState, this); @@ -110,6 +196,7 @@ Core::Core() { assetManager = new AssetManager; PrepareToWorldRendering(); LOG(INFO) << "Core is initialized"; + glCheckError(); } Core::~Core() { @@ -118,10 +205,13 @@ Core::~Core() { delete shader; delete gameState; delete client; + delete assetManager; + delete window; LOG(INFO) << "Core is stopped"; } void Core::Exec() { + LOG(INFO) << "Main loop is executing!"; isRunning = true; while (isRunning) { static sf::Clock clock, clock1; @@ -145,8 +235,10 @@ void Core::Exec() { HandleEvents(); if (isMouseCaptured) HandleMouseCapture(); + glCheckError(); RenderFrame(); + } } @@ -162,11 +254,11 @@ void Core::RenderFrame() { //RenderGui(LoadingScreen); break; case Playing: - RenderWorld(gameState->world); + RenderWorld(); //RenderGui(HUD); break; case PauseMenu: - RenderWorld(gameState->world); + RenderWorld(); //RenderGui(PauseGui); break; } @@ -182,7 +274,8 @@ void Core::InitSfml(unsigned int WinWidth, unsigned int WinHeight, std::string W contextSetting.attributeFlags = contextSetting.Core; contextSetting.depthBits = 24; window = new sf::Window(sf::VideoMode(WinWidth, WinHeight), WinTitle, sf::Style::Default, contextSetting); - //window->setVerticalSyncEnabled(true); + glCheckError(); + window->setVerticalSyncEnabled(true); window->setPosition(sf::Vector2i(sf::VideoMode::getDesktopMode().width / 2 - window->getSize().x / 2, sf::VideoMode::getDesktopMode().height / 2 - window->getSize().y / 2)); @@ -193,6 +286,7 @@ void Core::InitGlew() { LOG(INFO) << "Initializing GLEW"; glewExperimental = GL_TRUE; GLenum glewStatus = glewInit(); + glCheckError(); if (glewStatus != GLEW_OK) { LOG(FATAL) << "Failed to initialize GLEW: " << glewGetErrorString(glewStatus); } @@ -201,6 +295,7 @@ void Core::InitGlew() { glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glFrontFace(GL_CCW); + glCheckError(); } unsigned int Core::width() { @@ -216,14 +311,18 @@ void Core::HandleEvents() { while (window->pollEvent(event)) { switch (event.type) { case sf::Event::Closed: + LOG(INFO) << "Received close event by window closing"; isRunning = false; break; case sf::Event::Resized: glViewport(0, 0, width(), height()); break; case sf::Event::KeyPressed: + if (!window->hasFocus()) + break; switch (event.key.code) { case sf::Keyboard::Escape: + LOG(INFO) << "Received close event by esc"; isRunning = false; break; case sf::Keyboard::T: @@ -239,21 +338,24 @@ void Core::HandleEvents() { break; } case sf::Event::MouseWheelScrolled: - //camera.ProcessMouseScroll(event.mouseWheelScroll.delta); + if (!window->hasFocus()) + break; + camera.ProcessMouseScroll(event.mouseWheelScroll.delta); break; default: break; } } - - if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)) - camera.ProcessKeyboard(Camera_Movement::FORWARD, deltaTime); - if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)) - camera.ProcessKeyboard(Camera_Movement::BACKWARD, deltaTime); - if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) - camera.ProcessKeyboard(Camera_Movement::LEFT, deltaTime); - if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)) - camera.ProcessKeyboard(Camera_Movement::RIGHT, deltaTime); + if (window->hasFocus()) { + if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)) + camera.ProcessKeyboard(Camera_Movement::FORWARD, deltaTime); + if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)) + camera.ProcessKeyboard(Camera_Movement::BACKWARD, deltaTime); + if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) + camera.ProcessKeyboard(Camera_Movement::LEFT, deltaTime); + if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)) + camera.ProcessKeyboard(Camera_Movement::RIGHT, deltaTime); + } } void Core::HandleMouseCapture() { @@ -265,23 +367,26 @@ void Core::HandleMouseCapture() { } void Core::RenderGui(Gui &Target) { - + Target.WHY++; } -void Core::RenderWorld(World &Target) { +void Core::RenderWorld() { shader->Use(); + glCheckError(); GLint modelLoc = glGetUniformLocation(shader->Program, "model"); GLint projectionLoc = glGetUniformLocation(shader->Program, "projection"); GLint viewLoc = glGetUniformLocation(shader->Program, "view"); GLint blockLoc = glGetUniformLocation(shader->Program, "block"); GLint timeLoc = glGetUniformLocation(shader->Program, "time"); - glm::mat4 projection = glm::perspective(camera.Zoom, (float) width() / (float) height(), 0.0001f, 1000.0f); + glm::mat4 projection = glm::perspective(camera.Zoom, (float) width() / (float) height(), 0.1f, 10000000.0f); glm::mat4 view = camera.GetViewMatrix(); glUniformMatrix4fv(projectionLoc, 1, GL_FALSE, glm::value_ptr(projection)); glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view)); glUniform1f(timeLoc, absTime); + glCheckError(); + glBindVertexArray(VAO); for (auto §ionPos:toRender) { @@ -290,7 +395,7 @@ void Core::RenderWorld(World &Target) { for (int z = 0; z < 16; z++) { for (int x = 0; x < 16; x++) { Block block = section.GetBlock(Vector(x, y, z)); - if (block.id==0) + if (block.id == 0) continue; glm::mat4 model; @@ -298,7 +403,6 @@ void Core::RenderWorld(World &Target) { sectionPos.GetZ() * 16)); model = glm::translate(model, glm::vec3(x, y, z)); - glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model)); glUniform1i(blockLoc, block.id); @@ -308,6 +412,7 @@ void Core::RenderWorld(World &Target) { } } glBindVertexArray(0); + glCheckError(); } void Core::SetMouseCapture(bool IsCaptured) { @@ -318,6 +423,7 @@ void Core::SetMouseCapture(bool IsCaptured) { } void Core::PrepareToWorldRendering() { + //Cube-rendering data glGenBuffers(1, &VBO); glGenBuffers(1, &VBO2); glGenVertexArrays(1, &VAO); @@ -336,19 +442,116 @@ void Core::PrepareToWorldRendering() { } glBindVertexArray(0); + glCheckError(); + shader = new Shader("./shaders/block.vs", "./shaders/block.fs"); shader->Use(); + LOG(INFO) << "Initializing texture atlas..."; + //TextureAtlas texture glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, assetManager->GetTextureAtlas()); glUniform1i(glGetUniformLocation(shader->Program, "textureAtlas"), 0); + //TextureAtlas coordinates + std::vector<glm::vec4> textureCoordinates; + std::vector<GLint> indexes; + GLint totalTextures; + for (int id = 0; id < 4096; id++) { + bool isReachedEnd = true; + for (int state = 0; state < 16; state++) { + if (!assetManager->GetTextureByBlock(BlockTextureId(id, state, 6)) || + !assetManager->GetTextureByBlock(BlockTextureId(id, state, 0))) { + continue; + } + isReachedEnd = false; + int side = assetManager->GetTextureByBlock(BlockTextureId(id, state, 6)) ? 6 : 0; + do { + int index = (side << 16) | (id << 4) | state; + TextureCoordinates tc = assetManager->GetTextureByBlock(BlockTextureId(id, state, side)); + textureCoordinates.push_back(glm::vec4(tc.x, tc.y, tc.w, tc.h)); + indexes.push_back(index); + /*LOG(ERROR) << "Encoded (" << side << " " << id << " " << state << ") as " << index << " (" + << std::bitset<20>(index) << ")";*/ + /*LOG(FATAL)<<std::bitset<18>(index); + side = 0x7; + id = 0xFFF; + state = 0xF; + LOG(WARNING) << "side: " << side << " id: " << id << " state: " << state; + int i, si, st, index = 0; + si = side << 15; + i = id<<3; + st = state; + index = i | si | st; + LOG(FATAL) << std::bitset<18>(index) << " (" << index << "): " << std::bitset<18>(si) << " " + << std::bitset<18>(i) << " " << std::bitset<18>(st);*/ + /*if (rand() == 73) //Almost impossible(Almost==1/32768) + { + int index = 393233; + LOG(WARNING) << std::bitset<20>(index) << "(" << index << ")"; + int side = (index & 0xE0000) >> 16; + int id = (index & 0xFF0) >> 4; + int state = index & 0xF; + LOG(WARNING) << std::bitset<20>(side) << " " << std::bitset<20>(id) << " " + << std::bitset<20>(state); + LOG(FATAL) << side << " " << id << " " << state; + }*/ + side++; + } while (side < 7); + } + if (isReachedEnd) + break; + + } + totalTextures = indexes.size(); + LOG(INFO) << "Created " << totalTextures << " texture indexes"; + CHECK_EQ(indexes.size(), textureCoordinates.size()) << "Arrays of textureCoordinates and of indexes is not equals"; + CHECK_LE(totalTextures, 2048) << "There is more texture indexes, than GLSL buffer allows"; + + for (auto& it:indexes){ + LOG(WARNING)<<it; + } + + indexes.insert(indexes.begin(), totalTextures); + indexes.resize(2048); + + + + GLuint ubo = glGetUniformBlockIndex(shader->Program, "TextureIndexes"); + glUniformBlockBinding(shader->Program, ubo, 0); + glGenBuffers(1, &UBO); + glBindBuffer(GL_UNIFORM_BUFFER, UBO); + glBufferData(GL_UNIFORM_BUFFER, indexes.size() * sizeof(GLint), NULL, GL_STATIC_DRAW); + glBindBufferRange(GL_UNIFORM_BUFFER, 0, UBO, 0, indexes.size() * sizeof(GLint)); + glBufferSubData(GL_UNIFORM_BUFFER, 0, indexes.size() * sizeof(GLint), &indexes[0]); + glCheckError(); + + LOG(WARNING)<<"Uploaded "<<indexes.size() * sizeof(GLint)<<" bytes"; + + /*GLuint ubo2 = glGetUniformBlockIndex(shader->Program, "TextureData"); + glUniformBlockBinding(shader->Program, ubo2, 1); + glGenBuffers(1, &UBO2); + glBindBuffer(GL_UNIFORM_BUFFER, UBO2); + glBufferData(GL_UNIFORM_BUFFER, sizeof(glm::vec4) * 1024, NULL, GL_STATIC_DRAW); + glBindBufferRange(GL_UNIFORM_BUFFER, 1, UBO2, 0, 1024 * sizeof(glm::vec4)); + glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(glm::vec4) * textureCoordinates.size(), textureCoordinates.data());*/ + + /* + GLuint ubo3 = glGetUniformBlockIndex(shader->Program, "TextureData2"); + glUniformBlockBinding(shader->Program, ubo3, 2); + glGenBuffers(1, &UBO3); + glBindBuffer(GL_UNIFORM_BUFFER, UBO3); + glBufferData(GL_UNIFORM_BUFFER, sizeof(glm::vec4) * 1024, NULL, GL_STATIC_DRAW); + glBindBufferRange(GL_UNIFORM_BUFFER, 2, UBO3, 0, 1024 * sizeof(glm::vec4));*/ + + glBindBuffer(GL_UNIFORM_BUFFER,0); + glCheckError(); } void Core::UpdateChunksToRender() { camera.Position = glm::vec3(gameState->g_PlayerX, gameState->g_PlayerY, gameState->g_PlayerZ); toRender.clear(); - const float ChunkDistance = 1.3; + const float ChunkDistance = 1; Vector playerChunk = Vector(floor(gameState->g_PlayerX / 16.0f), floor(gameState->g_PlayerY / 16.0f), floor(gameState->g_PlayerZ / 16.0f)); for (auto &it:gameState->world.m_sections) { @@ -359,12 +562,26 @@ void Core::UpdateChunksToRender() { toRender.push_back(chunkPosition); } LOG(INFO) << "Chunks to render: " << toRender.size(); + + /*std::map<Block, int> totalBlocks; + for (auto §ion:toRender) + for (int x = 0; x < 16; x++) + for (int y = 0; y < 16; y++) + for (int z = 0; z < 16; z++) + totalBlocks[gameState->world.m_sections.find(section)->second.GetBlock(Vector(x, y, z))]++; + for (auto &it:totalBlocks) { + LOG(WARNING) << it.first.id << ":" << (int) it.first.state << " = " << it.second << " (" + << std::bitset<13>(it.first.id) << ")"; + }*/ } void Core::UpdateGameState() { + el::Helpers::setThreadName("Game"); LOG(INFO) << "GameState thread is started"; while (isRunning) { gameState->Update(); + if (toRender.size() > 0) + break; } LOG(INFO) << "GameState thread is stopped"; } diff --git a/src/core/Core.hpp b/src/core/Core.hpp index 8bf74da..e5fe315 100644 --- a/src/core/Core.hpp +++ b/src/core/Core.hpp @@ -29,7 +29,7 @@ class Core { float deltaTime; float absTime; - void RenderWorld(World &Target); + void RenderWorld(); void RenderGui(Gui &Target); @@ -59,7 +59,8 @@ class Core { Camera3D camera; Shader *shader; - GLuint VBO, VAO, VBO2; + //Cube verticies, Cube VAO, Cube UVs, TextureIndexes UBO, TextureData UBO, TextureData2 UBO + GLuint VBO, VAO, VBO2, UBO,UBO2,UBO3; std::vector<Vector> toRender; public: diff --git a/src/gamestate/GameState.hpp b/src/gamestate/GameState.hpp index c9ca44a..8817f4c 100644 --- a/src/gamestate/GameState.hpp +++ b/src/gamestate/GameState.hpp @@ -1,5 +1,6 @@ #pragma once +#include <nlohmann/json.hpp> #include "../world/World.hpp" #include "../network/NetworkClient.hpp" #include "../packet/PacketParser.hpp" diff --git a/src/graphics/Shader.cpp b/src/graphics/Shader.cpp index 9bb08ba..83eb93f 100644 --- a/src/graphics/Shader.cpp +++ b/src/graphics/Shader.cpp @@ -1,4 +1,3 @@ -#include <easylogging++.h> #include "Shader.hpp" Shader::Shader(const GLchar *vertexPath, const GLchar *fragmentPath) { @@ -70,7 +69,7 @@ Shader::Shader(const GLchar *vertexPath, const GLchar *fragmentPath) { glGetProgramiv(this->Program, GL_LINK_STATUS, &success); if (!success) { glGetProgramInfoLog(this->Program, 512, NULL, infoLog); - LOG(ERROR) << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n" << infoLog; + LOG(FATAL) << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n" << infoLog; } // Удаляем шейдеры, поскольку они уже в программу и нам больше не нужны. diff --git a/src/graphics/Shader.hpp b/src/graphics/Shader.hpp index 66d687c..a336b1a 100644 --- a/src/graphics/Shader.hpp +++ b/src/graphics/Shader.hpp @@ -2,7 +2,7 @@ #include <string> #include <fstream> #include <sstream> - +#include <easylogging++.h> #include <GL/glew.h> class Shader diff --git a/src/graphics/Texture.cpp b/src/graphics/Texture.cpp index bd5c53f..5d183c3 100644 --- a/src/graphics/Texture.cpp +++ b/src/graphics/Texture.cpp @@ -1,5 +1,3 @@ -#include <SFML/Graphics.hpp> -#include <easylogging++.h> #include "Texture.hpp" Texture::Texture(std::string filename, GLenum textureWrapping, GLenum textureFiltering) { diff --git a/src/graphics/Texture.hpp b/src/graphics/Texture.hpp index 8e3f1af..277806a 100644 --- a/src/graphics/Texture.hpp +++ b/src/graphics/Texture.hpp @@ -1,5 +1,7 @@ #pragma once +#include <SFML/Graphics.hpp> +#include <easylogging++.h> #include <GL/glew.h> class Texture { diff --git a/src/gui/Gui.hpp b/src/gui/Gui.hpp index 1ea4e11..641b941 100644 --- a/src/gui/Gui.hpp +++ b/src/gui/Gui.hpp @@ -2,4 +2,6 @@ class Gui { +public: + int WHY=0; }; diff --git a/src/main.cpp b/src/main.cpp index de2c9d8..8a7b974 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,10 +15,12 @@ int main() { el::Configurations loggerConfiguration; el::Helpers::installCustomFormatSpecifier( el::CustomFormatSpecifier("%startTime", std::bind(getTimeSinceProgramStart))); - std::string format = "[%startTime][%level][%fbase]: %msg"; + std::string format = "[%startTime][%level][%thread][%fbase]: %msg"; loggerConfiguration.set(el::Level::Info, el::ConfigurationType::Format, format); loggerConfiguration.set(el::Level::Error, el::ConfigurationType::Format, format); loggerConfiguration.set(el::Level::Fatal, el::ConfigurationType::Format, format); + loggerConfiguration.set(el::Level::Warning, el::ConfigurationType::Format, format); + el::Helpers::setThreadName("Render"); el::Loggers::reconfigureAllLoggers(loggerConfiguration); el::Loggers::addFlag(el::LoggingFlag::ColoredTerminalOutput); LOG(INFO) << "Logger is configured"; diff --git a/src/network/Network.cpp b/src/network/Network.cpp index b3b1e4b..7757be9 100644 --- a/src/network/Network.cpp +++ b/src/network/Network.cpp @@ -1,5 +1,4 @@ #include "Network.hpp" -#include "../packet/PacketBuilder.hpp" Network::Network(std::string address, unsigned short port) : m_address(address), m_port(port) { LOG(INFO) << "Connecting to server " << m_address << ":" << m_port; @@ -55,7 +54,7 @@ Packet Network::ReceivePacket() { break; } } - Field fLen = FieldParser::Parse(VarInt, bufLen); + Field fLen = FieldParser::Parse(VarIntType, bufLen); size_t packetLen = fLen.GetVarInt() + fLen.GetLength(); if (packetLen > 1024 * 1024 * 15) LOG(WARNING)<<"OMG SIZEOF PACKAGE IS "<<packetLen; diff --git a/src/network/Network.hpp b/src/network/Network.hpp index 7d8cfeb..84f2e7f 100644 --- a/src/network/Network.hpp +++ b/src/network/Network.hpp @@ -4,6 +4,7 @@ #include <easylogging++.h> #include <SFML/Network.hpp> #include "../packet/Packet.hpp" +#include "../packet/PacketBuilder.hpp" class Network { diff --git a/src/network/NetworkClient.cpp b/src/network/NetworkClient.cpp index 9916b10..fd957a5 100644 --- a/src/network/NetworkClient.cpp +++ b/src/network/NetworkClient.cpp @@ -95,6 +95,7 @@ void NetworkClient::Update() { } void NetworkClient::MainLoop() { + el::Helpers::setThreadName("Network"); try { while (isContinue) { Update(); diff --git a/src/network/NetworkClient.hpp b/src/network/NetworkClient.hpp index 9f68e37..14745a5 100644 --- a/src/network/NetworkClient.hpp +++ b/src/network/NetworkClient.hpp @@ -3,6 +3,7 @@ #include <queue> #include <thread> #include <mutex> +#include <nlohmann/json.hpp> #include "Network.hpp" #include "../packet/PacketParser.hpp" #include "../packet/PacketBuilder.hpp" diff --git a/src/packet/Field.cpp b/src/packet/Field.cpp index 69402f1..9be2469 100644 --- a/src/packet/Field.cpp +++ b/src/packet/Field.cpp @@ -1,4 +1,3 @@ -#include <cmath> #include "Field.hpp" Field::Field() { @@ -59,7 +58,7 @@ int Field::GetVarInt() { void Field::SetVarInt(int value) { Clear(); - m_type = VarInt; + m_type = VarIntType; m_data = new byte[5]; m_dataLength = VarIntWrite(value, m_data); } @@ -252,7 +251,7 @@ void Field::SetDouble(double value) { size_t Field::GetFieldLength(FieldType type) { switch (type) { - case Unknown: + case UnknownType: return 0; case Boolean: return 1; diff --git a/src/packet/Field.hpp b/src/packet/Field.hpp index 8be9c9b..c33cd1c 100644 --- a/src/packet/Field.hpp +++ b/src/packet/Field.hpp @@ -2,8 +2,10 @@ #include <cstddef> #include <cstdint> +#include <cmath> #include <string> #include <vector> + #include "../utility/utility.h" #include "../utility/Vector.hpp" @@ -11,7 +13,7 @@ typedef unsigned char byte; typedef signed char sbyte; enum FieldType { - Unknown = 0, + UnknownType = 0, Boolean, //Bool Byte8_t, //int8_t UnsignedByte, //uint8_t @@ -28,7 +30,7 @@ enum FieldType { String = 100, //std::string Chat, //std::string - VarInt, //int32_t + VarIntType, //int32_t VarLong, //int64_t ChunkSection, //byte* EntityMetadata, //byte* @@ -55,7 +57,7 @@ public: void CopyToBuff(byte *ptr); - void SetRaw(byte *ptr, size_t len = 0, FieldType type = Unknown); + void SetRaw(byte *ptr, size_t len = 0, FieldType type = UnknownType); FieldType GetType(); @@ -114,6 +116,6 @@ public: private: size_t m_dataLength = 0; byte *m_data = nullptr; - FieldType m_type = Unknown; + FieldType m_type = UnknownType; std::vector<Field> m_childs; }; diff --git a/src/packet/FieldParser.cpp b/src/packet/FieldParser.cpp index 500a973..295e78f 100644 --- a/src/packet/FieldParser.cpp +++ b/src/packet/FieldParser.cpp @@ -2,26 +2,26 @@ Field FieldParser::Parse(FieldType type, byte *data, size_t len) { switch (type) { - case VarInt: + case VarIntType: return ParseVarInt(data, len); case Boolean: - return ParseBool(data, len); + return ParseBool(data); case String: - return ParseString(data, len); + return ParseString(data); case Long: - return ParseLong(data, len); + return ParseLong(data); case Int: - return ParseInt(data, len); + return ParseInt(data); case UnsignedByte: - return ParseUByte(data, len); + return ParseUByte(data); case Byte8_t: - return ParseByte(data, len); + return ParseByte(data); case Float: - return ParseFloat(data, len); + return ParseFloat(data); case Position: - return ParsePosition(data, len); + return ParsePosition(data); case Double: - return ParseDouble(data, len); + return ParseDouble(data); case ByteArray: return ParseByteArray(data, len); default: @@ -29,23 +29,23 @@ Field FieldParser::Parse(FieldType type, byte *data, size_t len) { } } -Field FieldParser::ParseString(byte *data, size_t len) { +Field FieldParser::ParseString(byte *data) { Field fLen = ParseVarInt(data, 0); Field f; f.SetRaw(data, fLen.GetLength() + fLen.GetVarInt(), String); return f; } -Field FieldParser::ParseBool(byte *data, size_t len) { +Field FieldParser::ParseBool(byte *data) { Field f; - f.SetRaw(data,1,Boolean); + f.SetRaw(data, 1, Boolean); return f; } Field FieldParser::ParseVarInt(byte *data, size_t len) { if (len != 0) { Field f; - f.SetRaw(data, len, VarInt); + f.SetRaw(data, len, VarIntType); return f; } int val = VarIntRead(data, len); @@ -54,43 +54,43 @@ Field FieldParser::ParseVarInt(byte *data, size_t len) { return f; } -Field FieldParser::ParseLong(byte *data, size_t len) { +Field FieldParser::ParseLong(byte *data) { Field f; f.SetRaw(data, 8, Long); return f; } -Field FieldParser::ParseInt(byte *data, size_t len) { +Field FieldParser::ParseInt(byte *data) { Field f; f.SetRaw(data, 4, Int); return f; } -Field FieldParser::ParseUByte(byte *data, size_t len) { +Field FieldParser::ParseUByte(byte *data) { Field f; f.SetRaw(data, 1, UnsignedByte); return f; } -Field FieldParser::ParseByte(byte *data, size_t len) { +Field FieldParser::ParseByte(byte *data) { Field f; f.SetRaw(data, 1, Byte8_t); return f; } -Field FieldParser::ParseFloat(byte *data, size_t len) { +Field FieldParser::ParseFloat(byte *data) { Field f; f.SetRaw(data, 4, Float); return f; } -Field FieldParser::ParsePosition(byte *data, size_t len) { +Field FieldParser::ParsePosition(byte *data) { Field f; f.SetRaw(data, 8, Position); return f; } -Field FieldParser::ParseDouble(byte *data, size_t len) { +Field FieldParser::ParseDouble(byte *data) { Field f; f.SetRaw(data, 8, Double); return f; @@ -101,6 +101,5 @@ Field FieldParser::ParseByteArray(byte *data, size_t len) { throw 119; Field f; f.SetRaw(data, len, Byte8_t); - //f.SetRaw(data, len, ByteArray); return f; } diff --git a/src/packet/FieldParser.hpp b/src/packet/FieldParser.hpp index 274ab9e..f256b34 100644 --- a/src/packet/FieldParser.hpp +++ b/src/packet/FieldParser.hpp @@ -6,25 +6,25 @@ class FieldParser { public: static Field ParseVarInt(byte *data, size_t len); - static Field ParseBool(byte *data, size_t len); + static Field ParseBool(byte *data); - static Field ParseString(byte *data, size_t len); + static Field ParseString(byte *data); static Field Parse(FieldType type, byte* data, size_t len=0); - static Field ParseLong(byte *data, size_t len); + static Field ParseLong(byte *data); - static Field ParseInt(byte *data, size_t len); + static Field ParseInt(byte *data); - static Field ParseUByte(byte *data, size_t len); + static Field ParseUByte(byte *data); - static Field ParseByte(byte *data, size_t len); + static Field ParseByte(byte *data); - static Field ParseFloat(byte *data, size_t len); + static Field ParseFloat(byte *data); - static Field ParsePosition(byte *data, size_t len); + static Field ParsePosition(byte *data); - static Field ParseDouble(byte *data, size_t len); + static Field ParseDouble(byte *data); static Field ParseByteArray(byte *data, size_t len); };
\ No newline at end of file diff --git a/src/packet/Packet.cpp b/src/packet/Packet.cpp index 695e371..68cc3c3 100644 --- a/src/packet/Packet.cpp +++ b/src/packet/Packet.cpp @@ -23,9 +23,9 @@ void Packet::swap(Packet &other) { void Packet::CopyToBuff(byte *ptr) { m_fields[0].SetVarInt(GetLength() - m_fields[0].GetLength()); - for (int i = 0; i < m_fields.size(); i++) { - m_fields[i].CopyToBuff(ptr); - ptr += m_fields[i].GetLength(); + for (auto &it:m_fields) { + it.CopyToBuff(ptr); + ptr += it.GetLength(); } } @@ -44,28 +44,29 @@ void Packet::ParseField(FieldType type, size_t len) { } Packet::Packet(byte *data) { - Field fLen = FieldParser::Parse(VarInt, data); + Field fLen = FieldParser::Parse(VarIntType, data); data += fLen.GetLength(); - Field fId = FieldParser::Parse(VarInt, data); + Field fId = FieldParser::Parse(VarIntType, data); data += fId.GetLength(); m_dataLength = fLen.GetVarInt() - fId.GetLength(); m_data = new byte[m_dataLength]; - std::copy(data,data+m_dataLength,m_data); + std::copy(data, data + m_dataLength, m_data); m_parsePtr = m_data; m_fields.push_back(fLen); m_fields.push_back(fId); } Field &Packet::GetField(int id) { - if (id < -2 || id >= m_fields.size() - 2) + if (id < -2 || id >= (int) m_fields.size() - 2) throw 111; return m_fields[id + 2]; } size_t Packet::GetLength() { size_t len = 0; - for (int i = 0; i < m_fields.size(); i++) - len += m_fields[i].GetLength(); + for (auto &it:m_fields) { + len += it.GetLength(); + } return len + m_dataLength; } diff --git a/src/packet/Packet.hpp b/src/packet/Packet.hpp index 67e95e5..68a5d5e 100644 --- a/src/packet/Packet.hpp +++ b/src/packet/Packet.hpp @@ -30,7 +30,7 @@ enum PacketsClientBound{ ChatMessage, MultiBlockChange, ConfirmTransaction, - CloseWindow, + CloseWindowEvent, OpenWindow, WindowItems, WindowProperty, diff --git a/src/packet/PacketParser.cpp b/src/packet/PacketParser.cpp index 488c812..a609011 100644 --- a/src/packet/PacketParser.cpp +++ b/src/packet/PacketParser.cpp @@ -21,7 +21,8 @@ void PacketParser::Parse(Packet &packet, ConnectionState state, bool ClientBound } void PacketParser::ParseServerBound(Packet &packet, ConnectionState state) { - throw 107; + if (packet.GetLength() != state) + throw 107; } void PacketParser::ParseLogin(Packet &packet) { @@ -32,9 +33,8 @@ void PacketParser::ParseLogin(Packet &packet) { case 0x02: ParseLogin0x02(packet); break; - default: - { - int i = packet.GetId(); + default: { + //throw 112; } } @@ -94,7 +94,7 @@ void PacketParser::ParsePlay0x23(Packet &packet) { } void PacketParser::ParsePlay0x1F(Packet &packet) { - packet.ParseField(VarInt); + packet.ParseField(VarIntType); } void PacketParser::ParsePlay0x0D(Packet &packet) { @@ -118,7 +118,7 @@ void PacketParser::ParsePlay0x2E(Packet &packet) { packet.ParseField(Float); packet.ParseField(Float); packet.ParseField(Byte8_t); - packet.ParseField(VarInt); + packet.ParseField(VarIntType); } void PacketParser::ParsePlay0x1A(Packet &packet) { @@ -129,19 +129,19 @@ void PacketParser::ParsePlay0x20(Packet &packet) { packet.ParseField(Int); packet.ParseField(Int); packet.ParseField(Boolean); - packet.ParseField(VarInt); - packet.ParseField(VarInt); + packet.ParseField(VarIntType); + packet.ParseField(VarIntType); packet.ParseField(ByteArray, packet.GetField(4).GetVarInt()); - packet.ParseField(VarInt); + packet.ParseField(VarIntType); //packet.ParseField(NbtTag); //packet.GetField(7).SetArray(packet.GetField(6).GetVarInt()); } void PacketParser::ParsePlay0x07(Packet &packet) { - packet.ParseField(VarInt); + packet.ParseField(VarIntType); packet.AddField(Field()); - for (int i=0;i<packet.GetField(0).GetVarInt();i++){ + for (int i = 0; i < packet.GetField(0).GetVarInt(); i++) { packet.ParseFieldArray(packet.GetField(1), String, 0); - packet.ParseFieldArray(packet.GetField(1), VarInt, 0); + packet.ParseFieldArray(packet.GetField(1), VarIntType, 0); } } diff --git a/src/world/Block.cpp b/src/world/Block.cpp index 54b7e5e..74423e0 100644 --- a/src/world/Block.cpp +++ b/src/world/Block.cpp @@ -2,7 +2,7 @@ Block::~Block() {} -Block::Block(unsigned short id, unsigned short state, unsigned char light) : id(id), state(state) {} +Block::Block(unsigned short id, unsigned short state) : id(id), state(state) {} Block::Block() : id(0), state(0) {} diff --git a/src/world/Block.hpp b/src/world/Block.hpp index 1a53868..50268f3 100644 --- a/src/world/Block.hpp +++ b/src/world/Block.hpp @@ -3,7 +3,7 @@ struct Block { Block(); - Block(unsigned short id, unsigned short state = 0, unsigned char light = 0); + Block(unsigned short id, unsigned short state); ~Block(); diff --git a/src/world/Section.cpp b/src/world/Section.cpp index 5c42ea5..6147295 100644 --- a/src/world/Section.cpp +++ b/src/world/Section.cpp @@ -36,6 +36,7 @@ Block &Section::GetBlock(Vector pos) { while (m_dataBlocks != nullptr) { parseWaiter.wait(parseLocker); } + LOG(WARNING)<<"Successfully waited for block render!"; } return m_blocks[pos.GetY() * 256 + pos.GetZ() * 16 + pos.GetX()]; } @@ -45,13 +46,13 @@ void Section::Parse() { return; long long *longArray = reinterpret_cast<long long *>(m_dataBlocks); - for (int i = 0; i < m_dataBlocksLen / 8; i++) + for (size_t i = 0; i < m_dataBlocksLen / 8; i++) endswap(&longArray[i]); std::vector<unsigned short> blocks; blocks.reserve(4096); int bitPos = 0; unsigned short t = 0; - for (int i = 0; i < m_dataBlocksLen; i++) { + for (size_t i = 0; i < m_dataBlocksLen; i++) { for (int j = 0; j < 8; j++) { t |= (m_dataBlocks[i] & 0x01) ? 0x80 : 0x00; t >>= 1; @@ -77,7 +78,7 @@ void Section::Parse() { } for (int i = 0; i < 4096; i++) { unsigned short blockId = m_palette.size() > 0 ? m_palette[blocks[i]] : blocks[i]; - Block block(blockId, 0, light[i]); + Block block(blockId>>4, blockId>>4 & 0xF); m_blocks.push_back(block); } if ((light.size() + blocks.size()) / 2 != 4096) { @@ -90,7 +91,17 @@ void Section::Parse() { m_dataLight = nullptr; delete[] m_dataSkyLight; m_dataSkyLight = nullptr; + parseWaiter.notify_all(); + /*static std::map<Block,int> totalBlocks; + for (int x=0;x<16;x++) + for (int y=0;y<16;y++) + for (int z=0;z<16;z++) + totalBlocks[GetBlock(Vector(x,y,z))]++; + LOG(ERROR)<<"Logging chunk"; + for (auto& it:totalBlocks){ + LOG(WARNING)<<it.first.id<<":"<<(int)it.first.state<<" = "<<it.second; + }*/ } Section &Section::operator=(Section other) { diff --git a/src/world/Section.hpp b/src/world/Section.hpp index 3065cbd..36fc91a 100644 --- a/src/world/Section.hpp +++ b/src/world/Section.hpp @@ -3,6 +3,7 @@ #include <vector> #include <map> #include <condition_variable> +#include <easylogging++.h> #include "Block.hpp" #include "../packet/Field.hpp" diff --git a/src/world/World.cpp b/src/world/World.cpp index d13d01d..121b904 100644 --- a/src/world/World.cpp +++ b/src/world/World.cpp @@ -1,5 +1,3 @@ -#include <bitset> -#include <easylogging++.h> #include "World.hpp" void World::ParseChunkData(Packet packet) { @@ -43,7 +41,7 @@ Section World::ParseSection(byte *data, size_t &dataLen) { data += fBitsPerBlock.GetLength(); dataLen += fBitsPerBlock.GetLength(); - Field fPaletteLength = FieldParser::Parse(VarInt, data); + Field fPaletteLength = FieldParser::Parse(VarIntType, data); int paletteLength = fPaletteLength.GetVarInt(); data += fPaletteLength.GetLength(); dataLen += fPaletteLength.GetLength(); @@ -52,7 +50,7 @@ Section World::ParseSection(byte *data, size_t &dataLen) { if (paletteLength > 0) { for (unsigned char i = 0; i < paletteLength; i++) { endswap(&i); - Field f = FieldParser::Parse(VarInt, data); + Field f = FieldParser::Parse(VarIntType, data); data += f.GetLength(); dataLen += f.GetLength(); palette.push_back(f.GetVarInt()); @@ -60,7 +58,7 @@ Section World::ParseSection(byte *data, size_t &dataLen) { } } - Field fDataLength = FieldParser::Parse(VarInt, data); + Field fDataLength = FieldParser::Parse(VarIntType, data); data += fDataLength.GetLength(); dataLen += fDataLength.GetLength(); diff --git a/src/world/World.hpp b/src/world/World.hpp index cef9eea..b33499c 100644 --- a/src/world/World.hpp +++ b/src/world/World.hpp @@ -5,6 +5,8 @@ #include <mutex> #include <condition_variable> #include <queue> +#include <bitset> +#include <easylogging++.h> #include "Block.hpp" #include "../packet/Packet.hpp" #include "Section.hpp" |