summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--CMakeLists.txt12
-rw-r--r--cwd/shaders/block.fs95
-rw-r--r--cwd/shaders/block.vs8
-rw-r--r--cwd/textures.tps1581
-rw-r--r--depedencies/include/GL/glew.h2
-rw-r--r--src/core/AssetManager.cpp60
-rw-r--r--src/core/AssetManager.hpp46
-rw-r--r--src/core/Core.cpp255
-rw-r--r--src/core/Core.hpp5
-rw-r--r--src/gamestate/GameState.hpp1
-rw-r--r--src/graphics/Shader.cpp3
-rw-r--r--src/graphics/Shader.hpp2
-rw-r--r--src/graphics/Texture.cpp2
-rw-r--r--src/graphics/Texture.hpp2
-rw-r--r--src/gui/Gui.hpp2
-rw-r--r--src/main.cpp4
-rw-r--r--src/network/Network.cpp3
-rw-r--r--src/network/Network.hpp1
-rw-r--r--src/network/NetworkClient.cpp1
-rw-r--r--src/network/NetworkClient.hpp1
-rw-r--r--src/packet/Field.cpp5
-rw-r--r--src/packet/Field.hpp10
-rw-r--r--src/packet/FieldParser.cpp43
-rw-r--r--src/packet/FieldParser.hpp18
-rw-r--r--src/packet/Packet.cpp19
-rw-r--r--src/packet/Packet.hpp2
-rw-r--r--src/packet/PacketParser.cpp24
-rw-r--r--src/world/Block.cpp2
-rw-r--r--src/world/Block.hpp2
-rw-r--r--src/world/Section.cpp17
-rw-r--r--src/world/Section.hpp1
-rw-r--r--src/world/World.cpp8
-rw-r--r--src/world/World.hpp2
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 &sectionPos: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 &section: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"