From 76dc1023c76beaa174d27d220f1df71a1c988e9b Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 9 Mar 2017 19:25:40 +0100 Subject: [PATCH] New Camera System --- src/Crafting/Crossbow.yml | 14 - src/Crafting/GraveStone.yml | 11 - src/Crafting/Hammock.yml | 14 - src/Crafting/Sunshade.yml | 13 - src/Models/Crossbow.yml | 33 ++ src/Models/GraveStone.yml | 37 ++ src/Models/Hammock.yml | 53 +++ src/Models/Sunshade.yml | 46 +++ src/Models/Tent1.yml | 97 +++++ .../Furniture/Camera/Utils/GetBlocks.java | 254 +++--------- .../Furniture/Camera/Utils/Layer.java | 26 ++ .../Furniture/Camera/Utils/Pixel.java | 23 ++ .../Furniture/Camera/Utils/RenderClass.java | 34 +- src/de/Ste3et_C0st/Furniture/Main/main.java | 71 ++-- .../Furniture/Objects/RPG/Catapult.java | 161 ++++++-- .../Furniture/Objects/RPG/Crossbow.java | 224 +++-------- .../Furniture/Objects/garden/graveStone.java | 148 +------ .../Furniture/Objects/garden/mailBox.java | 223 ----------- .../Furniture/Objects/garden/sunshade.java | 379 +++++------------- .../Furniture/Objects/indoor/largeTable.java | 6 +- .../Furniture/Objects/outdoor/hammock.java | 312 ++------------ .../Furniture/Objects/outdoor/tent_1.java | 241 +---------- src/plugin.yml | 2 +- 23 files changed, 769 insertions(+), 1653 deletions(-) delete mode 100644 src/Crafting/Crossbow.yml delete mode 100644 src/Crafting/GraveStone.yml delete mode 100644 src/Crafting/Hammock.yml delete mode 100644 src/Crafting/Sunshade.yml create mode 100644 src/Models/Crossbow.yml create mode 100644 src/Models/GraveStone.yml create mode 100644 src/Models/Hammock.yml create mode 100644 src/Models/Sunshade.yml create mode 100644 src/Models/Tent1.yml create mode 100644 src/de/Ste3et_C0st/Furniture/Camera/Utils/Layer.java create mode 100644 src/de/Ste3et_C0st/Furniture/Camera/Utils/Pixel.java delete mode 100644 src/de/Ste3et_C0st/Furniture/Objects/garden/mailBox.java diff --git a/src/Crafting/Crossbow.yml b/src/Crafting/Crossbow.yml deleted file mode 100644 index 1109cac..0000000 --- a/src/Crafting/Crossbow.yml +++ /dev/null @@ -1,14 +0,0 @@ -Crossbow: - system-ID: 'Crossbow' - name: '&cCrossbow' - material: 383 - glow: false - lore: '' - crafting: - disable: false - recipe: XAX,XOX,OBO - index: - X: 0 - A: 261 - O: 280 - B: 44 \ No newline at end of file diff --git a/src/Crafting/GraveStone.yml b/src/Crafting/GraveStone.yml deleted file mode 100644 index f09b419..0000000 --- a/src/Crafting/GraveStone.yml +++ /dev/null @@ -1,11 +0,0 @@ -GraveStone: - system-ID: 'GraveStone' - name: '&cGrave Stone' - material: 383 - glow: false - lore: '' - crafting: - disable: true - recipe: XXX,XXX,XXX - index: - X: 0 \ No newline at end of file diff --git a/src/Crafting/Hammock.yml b/src/Crafting/Hammock.yml deleted file mode 100644 index 8cca148..0000000 --- a/src/Crafting/Hammock.yml +++ /dev/null @@ -1,14 +0,0 @@ -Hammock: - system-ID: 'Hammock' - name: '&cHammock' - material: 383 - glow: false - lore: '' - crafting: - disable: false - recipe: 000,XEX,A0A - index: - X: 280 - E: 425 - A: 17 - 0: 0 \ No newline at end of file diff --git a/src/Crafting/Sunshade.yml b/src/Crafting/Sunshade.yml deleted file mode 100644 index 22cc46b..0000000 --- a/src/Crafting/Sunshade.yml +++ /dev/null @@ -1,13 +0,0 @@ -Sunshade: - system-ID: 'Sunshade' - name: '&cSunshade' - material: 383 - glow: false - lore: '' - crafting: - disable: false - recipe: AAA,0X0,0X0 - index: - '0': 0 - X: 280 - A: 171 \ No newline at end of file diff --git a/src/Models/Crossbow.yml b/src/Models/Crossbow.yml new file mode 100644 index 0000000..4247f99 --- /dev/null +++ b/src/Models/Crossbow.yml @@ -0,0 +1,33 @@ +Crossbow: + system-ID: Crossbow + name: '&cCrossbow' + material: 383 + creator: 80f94595-e1f5-3520-b48c-c07d9f03274e + PlaceAbleSide: TOP + glow: false + lore: '' + crafting: + disable: false + recipe: XAX,XOX,OBO + index: + X: 0 + A: 261 + O: 280 + B: 44 + ProjectModels: + ArmorStands: + '0': H4sIAAAAAAAAAONiYGBm4PZLzE0NyyzOTMpJZWAAiXA6JRanBuQklkD5rMG5iTk5EDaLW2YRVJjFsSi3GKrDM68MbgIjMwObb2JRdmoRRJLdPSe/PDMvHcTjYuByLc1JLXLMS89J5WLg8HF1C4n3cXVnY2CM2D/xvrvSFYd4IDuSAQqA7CiYOFAzi4erowtILZI8iloYmwFmtmOQL9jsY+ESrzsDyjDMhoqDzHbyd4kk0mzOIE93D7jh9j8Vf4e46EqANDgI3aypN1a8BNLgwARhIzRAfWqPw6cwcbAVwCBNzSvJL6rkYGB19nANDmFg8fP3c+WABAKMw+7v5ubh6AflA33t6+jpBxLgYGDKTGHgz83MS00uSkwrsSouyUzOZgSalV+aV8LIxMDmkpibmA6KMKCRQIcFw813c3WFWgaSAiUPSHjmJyeWZObnsTFwROj6p6UVp5bsv3qoP0bjG9DxHFFQIfubM0GgASgUCVP12RgETFgZmCMTy53ZQd4FAKZdpa57AgAA + '1': H4sIAAAAAAAAAONiYGBm4PZLzE0NyyzOTMpJZWAAiXA6JRanBuQklkD5rMG5iTk5EDaLW2YRVJjFsSi3GKrDM68MbgIjMwObb2JRdmoRRJLdPSe/PDMvHcTjYuByLc1JLXLMS89J5WLg8HF1C4n3cXVnY2CM2D/xvrvSFYd4IDuSAQqA7CiYOFAzi4erowtILZI8iloYmwFmtmOQL9jsY+ESrzsDyjDMhoqDzHbyd4kk0mzOIE93D7jh9j8Vf4e46EqANDgI3aypN1a8BNLgwARhIzRAfWqPw6cwcbAVwCBNzSvJL6rkYGB19nANDmFg8fP3c+WABAKMw+7v5ubh6AflA33t6+jpBxLgYGDKTGHgz83MS00uSkwrsSouyUzOZgSalV+aV8LIxMDmkpibmA6KMKCRQIcFw813c3WFWgaSAiUPSHjmJyeWZObnsTFwROj6p6UVp5bsvzkTCGYBHc8RBRO6eqg/RuPrAaBQJEzoszEImLAyMEcmljsngrwLACsAhiR7AgAA + '2': H4sIAAAAAAAAAONiYGBm4PZLzE0NyyzOTMpJZWAAiXA6JRanBuQklkD5rMG5iTk5EDaLW2YRVJjFsSi3GKrDM68MbgIjMwObb2JRdmoRRJLdPSe/PDMvHcTjYuByLc1JLXLMS89J5WLg8HF1C4n3cXVnY2CM2D/xvrvSFYd4IDuSAQqA7CiYOFAzi4erowtILZI8iloYmwFmtmOQL9jsY+ESrzsDyjDMhoqDzHbyd4kk0mzOIE93D7jh9j8Vf4e46EqANDgI3aypN1a8BNLgwARhIzRAfWqPw6cwcbAVwCBNzSvJL6rkYGB19nANDmFg8fP3c+WABAKMw+7v5ubh6AflA33t6+jpBxLgYGDKTGHgz83MS00uSkwrsSouyUzOZgSalV+aV8LIxMDmkpibmA6KMKCRQIcFw813c3WFWgaSAiUPSHjmJyeWZObnsTFwROj6p6UVp5bYXz3UH6PxDeh4jiio0P6bM0GgASgUCRP6bAwCJqwMzJGJ5c5zG4B2AgDvw9uSewIAAA== + '3': H4sIAAAAAAAAAONiYGBm4PZLzE0NyyzOTMpJZWAAiXA6JRanBuQklkD5rMG5iTk5EDaLW2YRVJjFsSi3GKrDM68MbgIjMwObb2JRdmoRRJLdPSe/PDMvHcTjYuByLc1JLXLMS89J5WLg8HF1C4n3cXVnY2CM2D/xvrvSFYd4IDuSAQqA7CiYOFAzi4erowtILZI8iloYmwFmtmOQL9jsY+ESrzsDyjDMhoqDzHbyd4kk0mzOIE93D7jh9j8Vf4e46EqANDgI3aypN1a8BNLgwARhIzRAfWqPw6cwcbAVwCBNzSvJL6rkYGB19nANDmFg8fP3c+WABAKMw+7v5ubh6AflA33t6+jpBxLgYGDKTGHgz83MS00uSkwrsSouyUzOZgSalV+aV8LIxMDmkpibmA6KMKCRQIcFw813c3WFWgaSAiUPSHjmJyeWZObnsTFwROj6p6UVp5bY35wJBLOAjueIggldPdQfo/H1AFAoEiq0/7MxCJiwMjBHJpY7n2oA2gkAVA+5hHsCAAA= + '4': H4sIAAAAAAAAAI1SPU/CQBh+C6UcNe7O7m5OLljotSWBlgBRykJOPJrGa5u0BeJPcHQybv4T4mJ0c3D3B/gnvIMroMTEm973ued53o87HaAMBy6J6EWYhVeMAgik1iAZ7TKSy7zSjwhjPFTKoFphKmHVSKNMKlrxfOPAWVqHpDc0XSdVmyWLMA4EVQcdzxhNjThgVAfUxtZg3Ma2Bspwef9pH3+cj3nsgzw8HhU4F6sONkzB3bn/wS1iKLyNXmfl/XJ59HXXne95S1x4NzzT/6d3rdeyna35+3P34RU1fgvqW3MpkJPW/5i0wFcl+EppnCfpLYJK08H9Aaiu52K5BASl8BoOozCmk5RM8zOWBAonJrM4V0qgmSQigXgNBFXPshzDNdd6BKhjtNxdQOVt9TeJhbEsxbWq+BzrbSYTkodJrAEannjTaUbzbetotA/5Elq+PYrzVIGyTxbNU3H9DUAkfE95AgAA + '5': H4sIAAAAAAAAAI2Sv0/CQBTHX6WUUgdXJhPdmdxcSrG/MNAiEKEs5MSDNPRH0haIf4Axjv4vDm44OTo56+DgwG5iXLyjV/wVE29673vf97l7704CyMGmhXx87MbuiYcBqFKsohg3PZSwPN/2keelMa+7EZN5JfJjVlELZmsClwOhgaIJjtKkYHjh3A3G1CqBpE09HCnB2MMSiHVN7wzqmiEA11tcPRm7D5UBiR1gi8T9TCfFvKkpKvV+2f/mzWLI2EqrsWLfdUvLy+bsF5vplF21Veef7GKrZphruPzaLR2+qBc/C+S3nfeOWi59FrBO5T86zfTVEWSkOEjC6EyE/IGptTvAW7aliekQsqRg67qpWCwnXTeUmkUFETbcU9jy3QAPIzRK9uPEHU44wgqnQcJtgKAiH43pgxEkuVh7zdc1jR1Gt+j3SOcZDlHihoEAYq9sj0YxThaPN0fL821yebHPJPl5j64KkZzMdb9y3eYh56B59Zq2+wEH3C6WewIAAA== + '6': H4sIAAAAAAAAAONiYGBm4PZLzE0NyyzOTMpJZWAAiXA6JRanBuQklkD5rMG5iTk5EDaLW2YRVJjFsSi3GKrDM68MbgIjMwObb2JRdmoRhMPunpNfnpmXDlLKxcDlWpqTWuSYl56TysXA4ePqFhLv4+rOxsAYsX/ifXelKw7xQHYkAxQA2VEwcaBmFg9XRxeQWiR5FLUwNgPMbMcgX7DZx8IlXncGlGGYDRUHme3k7xJJpNmcQZ7uHnDD7Vede/m5+vVVkAZ7oIFez13aQBrsfyr+DnHRlUBogPrUHuIjF3Qb7GE+BekABmlqXkl+USUHA6uzh2twCAOLn7+fKwckEGAcdn83Nw9HPygf6GtfR08/kAAHA1NmCgNvbmZeanJRYlqJVVJ+OSPQpPzSvBJGJgY2l8TcxHRQdAENBDorGG66m6sr1CqQFChxQEIzPzmxJDM/j42BI0LXPy2tOLVk/5Kqh+7rBIBO54iCCtnfnAkCDUChSJiqwzEaXw/1J7AyMEcmljttAXkWAMbu+RZ5AgAA + '7': H4sIAAAAAAAAAONiYGBm4PZLzE0NyyzOTMpJZWAAiXA6JRanBuQklkD5rMG5iTk5EDaLW2YRVJjFsSi3GKrDM68MbgIjMwObb2JRdmoRhMPunpNfnpmXDlLKxcDlWpqTWuSYl56TysXA4ePqFhLv4+rOxsAYsX/ifXelKw7xQHYkAxQA2VEwcaBmFg9XRxeQWiR5FLUwNgPMbMcgX7DZx8IlXncGlGGYDRUHme3k7xJJpNmcQZ7uHnDDkTXYv7J/vy8z7Dp2DVCf2uPwKUwcrAMYpKl5JflFlRwMrM4ersEhDCx+/n6uHJBAgHHY/d3cPBz94HwOX0dPP2QBFqCdwXCOm6sr1BwGIA8U8wzsyo5BQf7hyqAQy09OLMnMz2Nj4IjQ9U9LK04tsT9S9dB9nQjQeRxRMKGdM4FgFkgoEiZ0C6So6gErA3NkYrnTFpCHAJW79z5dAgAA + Block: + '0': + X-Offset: 0.0 + Y-Offset: 0.0 + Z-Offset: 0.0 + Type: STEP + Data: 0 diff --git a/src/Models/GraveStone.yml b/src/Models/GraveStone.yml new file mode 100644 index 0000000..932ed81 --- /dev/null +++ b/src/Models/GraveStone.yml @@ -0,0 +1,37 @@ +GraveStone: + system-ID: GraveStone + name: '&cGraveStone' + creator: 0e4e3fb0-168f-4f1b-8437-f39ef157af94 + PlaceAbleSide: TOP + material: 383 + glow: false + lore: '' + crafting: + disable: true + recipe: xxx,xxx,xxx + index: + X: 0 + x: '7' + ProjectModels: + ArmorStands: + '0': H4sIAAAAAAAAAH1Sv0/CQBR+QCkHziZMJrrzD7hga1sggYJAlLKQo15JY38kbYG4sTg4Ohn/Av8BBzeig3F0MC4Ozkb/AePiHVwBQ/RN7333fd+79+5yACnY0LFLDu3Q7jsEgCFZGYek4eCI1+mWix2HpokUCJodcFiQAjfkioo3WjhQlljDwQkJ5kWm5Phj2xswag5y6tAhgeQNHJIDVFW1dq+qlkRIdKYXb6Wd570ezQ3gQfNujFOxUFYlhXFXzn9xi1/b322lkIfYW2rWZt4PR/mP88ZozZvjzFuuK8Z/3nFOudlmpVRemj/dNS4fkbx2maU5F/BJi39MGuOzFnSlxIv84BRBer+sttog6HVd5UtAkLSPYdO1PWIG2Ip2Tb9P1x9GvkcSVOAPvSiRBFHBLh6wV0GQqWtaWdKVuQ8CVJMq+iog0Ou1FoWmqrwl1Qrsk0Dq/tpki/VNHNm+JwLqFOqWFZJo+nq2dXvwSadAXQ4VXywWEwoZMev9isUkDSkDj+UbNvcPPJeGj4QCAAA= + '1': H4sIAAAAAAAAAH1SPU8CQRCdgwOWszah1Z4/YIN33gckcEeAKEdDFtwjF+8juTsgWlHYWFoZ/4SVPbExlhbG1lgaf4GxcRf2AEN0qpm3773ZmV0JIAs7JvbJsRu7A48AMKSo4Jg0PZzwOtf2sefRVMiCqLsRh0U58mOuqAWTlQNl5Rs4OiPRsigYXjh1gxGjSiBpY49EcjDyiASorumdfl0z8iB059dvxv7LYZ/mNvCgeS/FqVisarLKuBvnv7iVr73vjlouQeottxoL78eT0udVc7LlzXHmrViq/Z93mlNusVUzqmvz54fmzRNSti6zNucCPmnlj0lTfNGCrpQESRidI8gdVbV2B0TTMjW+BAQZ9xR2fTcgwwg7ycEwHND1x0kYEIEKwnGQCBnIq9jHI/YqCAqWrldlU136IEANuWZuAiK9XntV6JrGW1KtyD4JLLYaDnHihkEeULdsOU5Mksrlxbtxx0ZAvRR6dVjMKGRzaP5xy2KWg6yNp8o9G/oHp1Sx6oECAAA= + '2': H4sIAAAAAAAAAH1SPU8CQRCdgwOWszah1Z4/YIN33hcJ3BEgytGQBffIxftI7g6IHa2llfF/2BMbY2FhYaxMrI2/wNi4C3uAITrVzNv33uzMrgSQhz0LB+TUS7yhTwAYUlZwQlo+Tnld6ATY92kq5EHUvZjDohwHCVfUw+nagbKKTRxfkHhVlAw/mnnhmFElkLSJT2I5HPtEAtTQ9O6goRlFEHqL63fj8OV4QHMHeNC8n+FULJqarDLu1vkvbu3r4LurViuQecvt5tL74azyedWa7nhznHkrtur8553llFtu1w1zY/5837p5RMrOZTbmXMAnrf0xaYYvW9CVkjCN4ksEhRNT63RBtGxL40tAkPPOYT/wQjKKsZsejaIhXX+SRiERqCCahKmQg6KKAzxmr4KgZOu6KVvqygcBasp1axsQ6fU660LXNN6SakX2SWC51WiEUy8Ki4B6Vdt1E5LW3p5Y0BFQP4NeXRZzCjkcWnzcspgXIO/gmXLHhv4Bzdt5cIECAAA= + '3': H4sIAAAAAAAAAHVSMU/CQBj9gFKO+geYTHRyYXNyqYW2lAQKAaJATMiJB2lsr+ZaIP4EJ+PkzyE6GEcHBzfdnR2Mi3dwBYLxpve9e+/dfd+dBpCBHRcH5MSLvHOfAAgmX8IRafo4lnW2HWDf5zCVAcX2mKQVgwWRdFTpdJXAVWods0vClkWu4oczj46FVAPNmviEGXTsEw1QzbI7g5pVUSHVnd+9V/Zfjwcc90AujvsJz82KYxmm0Orfez8ds1jY1iYYkmyjVV9kP50WPm+a0z/ZkhfZpYbZE9qN/f+y861qxVmHvzw0759Radugr8OlQXaq/9Npwi+O4CMlNA7ZNYJs2bHaHVDchmvJISBIexewG3iUDBkexUdRHFIyuGIkiiaMA/F8Ke4MJzROpUE1cYDH4nkQ5Bq27RiuuQxEgOpG1d0kFH7P9qqwLUuezb2K+C3L8YZDHHshVQF1i43RKCKx/vb1eHt2wHtB/YT6SNpDPUnNJZWFTA/PyocC/wI0UKzgigIAAA== + '4': H4sIAAAAAAAAAHVSu04CQRS9CwsM6w9QmWhPZ2WzLuyLBHYJEGVpyIgD2bgPM7tAtLaxtPIv/AViYywt7NXaLzA2zsAsEIxTnXvmnDNz74wCkIc9B4fk1E/884AAcKZcwwlpBzgVdaEb4iBgUMqDbPpU0LJGw0Q4GtFsncBUxRaml4SuipIVxHM/mnCpAooxDQjVoklAFEBNw+wNm4ZVBKm/uH+3Dt9Ohgx7IBbDg4xnZtk2NJ1r1e+Dn55erexqMwxZttZpLbOfzypfd+3Zn2zB8+yaq3tcu7X/X3a507DsTfjrU/vhBdV2DeomXBhEp+o/nWb88gg2UhKlMb1GUKjbRrcHsuM6hhgCgpx/AfuhH5ERxeP0OEnjiAyvKEmSKWWAP5/EnPE0SqUcFHUc4gl/HgQl1zRtzdFXgQhQS2s424TM7tldF6ZhiLOZV+a/ZTXeeIRTP46KgPpVdzxOSKre3nxaj7wXNMioj6w95AlqIagC5D08rx9x/AvZ2JnTigIAAA== + '5': H4sIAAAAAAAAAHVSMU/CQBj9CgUOXB2YTHRnc3KphbaUBFoCRIGFnHiQxvZqrgWi/8DRyX/hXyAuxtHBxFGd/QXGxTu4AsFw0/vevffuvu+uAJCGPQcH5MyLvAufAAgmX8YRafo4lnWmHWDf51BJg2p5TNKqzoJIOmp0ukrgqmwDsyvClkWu6oczj46FtAAFc+ITptOxTwqA6qbVGdTNahaU7vz+o3r0djrguAdycdxPeG5WbVM3hFb7OfztGKXitjbBkGTrrcYi+/m8+H3XnP7LlrzILrtGT2g39ndl51u1qr0Of31qPryg8rZBW4dLg+xU29Fpwi+O4CMlNA7ZDYJMxTbbHVAd1zHlEBCkvEs4CDxKhgyP4pMoDikZXDMSRRPGgXg+hTvDCY2VFGQNHOCxeB4EOdeybN0xloEIUEOvOZuEyu/ZXhWWacqzuVcVv2U53nCIYy+kWUDdkjsaRSSevz/u337ZvBfUl5T2mbSHeolKUhlI9/CscizwH/60gD2KAgAA + '6': H4sIAAAAAAAAAHVSv0/CQBj9CgWO+g8wmejkwqJOLlhoS0mgJUAUiAk58SCN/WGuBeKf4GSc/HOImhhHBwc33Z0djIt3cAWC4ab3vXvv3X3fnQKQhC0Le+TECZ1zlwBwJlvEIam7OBJ1qulh12VQSoJsOFTQskq9UDgq/niRwFTpGqaXhM6LTNkNJo4/5FIFFH3kEqr6Q5cogKq60epV9XIapPb07qO8+3bcY7gDYjHcjXlmlk1d1bi28LPz29LyuXVtjCHOVhu1Wfbzae7rpj7+ly14nl20tQ7Xruxvys42KmVzGf76UL9/QcV1Q2EZLgyi08KGTmN+dgQbKfGjgF4jSJVMvdkC2bItXQwBQcK5gG3P8Umf4kF0FEaBT3pXlIThiDLAn09izmDkR1IC0hr28JA/D4KMbRimamnzQASoplasVUJm92wuCkPXxdnMK/PfMh9v0MeRE/hpQO28PRiEJCq8fz/enu2xXlA3pj7j9lBHUNOnA7b2IQXJDp6UDvn2H2DTx9mKAgAA + '7': H4sIAAAAAAAAAHVSu04CQRS9CwsM6w9QmWhPo1Y268I+IIGFAFGWhow4kI37MLMLRGsbSyv/wl8gxsRYWtirtV9gbJyBWSAYpjr3zDln5t4ZBSANOzb2yakbueceAeBMvoQj0vRwLOpM28eex6CUBtl0qaBljfqRcFSDyTKBqbJ1TC8JXRQ5ywunbjDiUgUUY+wRqgUjjyiAaobZ6dcMKwtSd3b/Ye2/n/QZdkAshnsJz8xyxdB0rlV/9n47erGwqU0wJNlaqz7PfjkrfN81J/+yBc+zSw3d4dq1/W3Z+VbVqqzC356aD6+otGlQV+HCIDpVt3Sa8PMj2EhJEIf0GkGmXDHaHZDthm2IISBIuRew67sBGVA8jI+jOAxI/4qSKBpTBvjzScwZjoNYSkFWxz4e8edBkGuYZkWz9UUgAlTXqvY6IbN7tpeFaRjibOaV+W9ZjDcc4NgNgyygbrExHEYkVm9vvqxH3gvqJdRn0h5yBDV7PmTrADKQdvC0fMS3/wCNW/LqigIAAA== + '8': H4sIAAAAAAAAAHVSPU/CQBh+gQJHXR2YTHRnUSeXWmhLSaAlQJSykBMP0tgPcy0Q/QeOTv4L/wIxJsbRwcRRnf0FxsU7uALBeNPzPvc8z9373skAGdiysE9O3Mg98wgAZwplHJGmh2NRZ9s+9jwGUxmQDJcKWlKpHwlHLZgsE5gq18D0gtBFka964dQNRlwqg6yPPULVYOQRGVBdNzr9ul7NQao7u32v7r0e9xl2QCyGewnPzJKpqxrXKt+7Px2tVNzUJhiSbLXVmGc/nRa/bpqTP9mC59llW3O4dm3/v+xCq1Y1V+EvD827Z1TeNCircGEQnSr/dJrw8yPYSEkQh/QKQbZi6u0OSJZt6WIICNLuOez4bkAGFA/joygOA9K/pCSKxpQB/nwp5gzHQZxKQ07DPh7x50GQtw3DVC1tEYgANdSatU5I7J7tZWHoujibeSX+WxbjDQc4dsMgB6hbsofDiMSzt/vt60+T9YJ6glI+kvaQk6geD9jahyxkHDytHPLtX6o36wSKAgAA + '9': H4sIAAAAAAAAAHVSMU/CQBj9CgUO/ANMJjq5sDm51EJbIIFCgCglJuTEgzS2V3MtEH+Ck3Ey+meMDkY3Bwc33Z0djIt3cAWD4ab3vXvv3X3fXQ4gCRs29smBG7rHHgEQTLaIQ9L0cCTrVNvHnsehkgTVcpmkVZ35oXRU6WSRwFXpOmanhM2LTNkLpi4dCWkOcubYI0ynI4/kANVMq9OvmeU0KN27q/fy9ut+n2MH5OK4F/PcrFZM3RBa7Xvrp2MU8qvaGEOcrbfqs+zHw/znRXPyL1vyIrvYMByh/bO/LjvbqpYry/CX++b1EyquGrRluDTITrU1ncb87Ag+UkKjgJ0jSJUqZrsDqt2wTTkEBAn3BDZ9l5IBw8NoL4wCSvpnjIThmHEgnk/hzmBMIyUBaQP7eCSeB0GmYVkV3TbmgQhQXa/afwmV37O9KCzTlGdzryp+y3y8wQBHbkDTgLqFxnAYkkh7+3q4PNrhvaBeTH3E7SEnpp5v+LqFFCQdPC3tiu1f1yP664oCAAA= + '10': H4sIAAAAAAAAAHVSu04CQRS9wALD+gNUJtrTWdngws4uJLBLgChLQ0YcyMZ9mNkForWNpZXRj/AXjI3RzsJerf0CY+MMzALBONW5Z845M/fOqAAZ2LKITw/dyD32KIBgChUS0ZZHYllnOz7xPA5TGVAMl0la0ZgfSUc9mC4TuCrXJOyUskWRN71w5gZjIVVBxROPMi0Ye1QF1MBGd9DAZg5SvYfrd3P37WDAsQNycdxPeG5WaljThbb8vfPT1UvFTW2CIcnW2s159tNR8euqNf2TLXmRXbF1R2jX9v/LLrTrZm0V/vrYunlGlU1DeRUuDbLT8j+dJvz8CD5SGsQhO0eQrdZwpwuKZVtYDgFB2j2Bbd8N6JCRUbwfxWFAB2eMRtGEcSCeL8Wd4SSIU2nI6cQnY/E8CPK2YdQ0S18EIkBNrW6tEwq/Z2dZGBjLs7lXEb9lMd5wSGI3DHKAeiV7NIpoXL68+DTvRS+on1AfSXvISaiXW77uIAsZh8yqe2L7Fzqrz9iKAgAA + '11': H4sIAAAAAAAAAHVSu04CQRS9yAIDthZUJtrTWdmsCzvLksAuAaJAQ0YcyMZ9mNkFon9gaWX0I/wFYmO0szCxVGu/wNg4A7NAMEx17plzzsy9MzmAJGxbxKPHTuicuhRAMNkiCWndJZGsU02PuC6HiSQohsMkrWjMC6Wj4o8XCVyVrhF2Ttm8yJTdYOL4QyHNQQ6PXMo0f+jSHKAqNlq9Ki6nIdGe3nyU99+Oehx3QC6OuzHPzYqJNV1o1Z+935ZeyK9rYwxxttaozbKfTvLf1/Xxv2zJi+yirXeEdmV/U3a2USmby/DXx/rtMyquG9RluDTITtUNncb87Ag+UupHAbtEkCqZuNkCxbItLIeAYMs5g13P8WmfkUF0GEaBT3sXjIbhiHEgni/BncHIjxJbkNaJR4bieRBkbMMwNUufByJANa1irRIKv2dzURgYy7O5VxG/ZT7eoE8iJ/DTgNoFezAIaTR9f9i5+jJ5L6grKfUzbg91Yurljq97SEGyQyalA7H9Bx3H1jaKAgAA + '12': H4sIAAAAAAAAAI2SPVPCQBCGNxJCiIUNhZWFvX/ABoNcEmYgQWCU0DAnHswN+ZhJAoxWNhaWlv4JKws7rKws7SwcaqmtvSMXRsdxdKvd93af2907DSAHmzb2yTGN6alHALhSrOCYND2ciDjf9rHnpb5s0EjIsh75saioBdM1QcqB0sDRmERpUDC9cEaDEU/VQEMTj0R6MPKIBmodGZ1+HZkKSN35zZu5+3LQZ74Lwpjfy3RWLFtIr/LcL+ffcjMfMrbeaqzYTyfb79fN6Q+20Dm74lTdf7KLrZppreHlj9LFwrwr/V0gJi3/MmmmryrYSkmQhNG5CvlDC7U7INuOjdR0CVlQcAzD0m0Rs6kbes3mggob9Ay2fBqQQYSHyX6c0MFYYqxwEiTSBihV7OMRfzCGZI2113wDIXEZP+LfI91nOMAJDQMF1O6eMxzGJJm/Xu08HC1Z82pPSOXlM7dHJrmZtLjldpmHnItnlXs+7icjaDOCewIAAA== + '13': H4sIAAAAAAAAAONiYGBm4PZLzE0NyyzOTMpJZWAAiXA6JRanBuQklkD5rMG5iTk5EDaLW2YRVJjFsSi3GKrDM68MbgIjMwObb2JRdmoRhMPunpNfnpmXDlLKxcDlWpqTWuSYl56TysXA4ePqFhLv4+rOxsAYsX/ifXelKw7xQHYkAxQA2VEwcaBmFg9XRxeQWiR5FLUwNgPMbMcgX7DZx8IlXncGlGGYDRUHme3k7xJJpNmcQZ7uHnDD7b+JVD10XycC0mD/U25H4OtWeZAGGBuhAepTexw+hYmDrQAGaWpeSX5RJQcDq7OHa3AIA4ufv58rByQQYBx2fzc3D0c/KB/oa19HTz+QAAcDU2YKA39uZl5qclFiWolVcUlmcjYj0Kz80rwSRiYGNpfE3MR0UIQBjQQ6LBhuvpurK9QykBQoeUDCMz85sSQzP4+NgSNC1z8trTi1xP4VyN/VQMdzRMGEHvXHaHw91AAUioQJPTkDAg2sDMyRieUQ7wIACUiMrHsCAAA= + Block: + '0': + X-Offset: 0.0 + Y-Offset: 0.0 + Z-Offset: 0.0 + Type: BARRIER + Data: 0 \ No newline at end of file diff --git a/src/Models/Hammock.yml b/src/Models/Hammock.yml new file mode 100644 index 0000000..8e3912f --- /dev/null +++ b/src/Models/Hammock.yml @@ -0,0 +1,53 @@ +Hammock: + system-ID: Hammock + name: '&cHammock' + creator: 80f94595-e1f5-3520-b48c-c07d9f03274e + material: 383 + glow: false + lore: '' + PlaceAbleSide: TOP + crafting: + disable: false + recipe: 000,XEX,A0A + index: + X: 280 + E: 425 + A: 17 + '0': 0 + ProjectModels: + ArmorStands: + '0': H4sIAAAAAAAAAI1STU/CQBCdQilLjXfPcvYPeMFitx9JaRsgSrmQFbdN47ZN2gLxJ3j05M8hXoxHD979Ad4929ItoMTEPb15M+/NzuzKAE04sklEr8IsvGEUoGQ6fZJRl5Gcx61RRBirsKiFKadFJY0yrjDj5dZBaII0IOkdTaugrbNkFcZBWSqDjBeMpkocMCoDsrA2nllYl0CYrB8/9NP3i1mBPeCnwNOaL8SigRW1rN3L/6itMdTeynCw8X65Pvl8cJcH3pwvvfuO6v3TuzM0dWNn/vbsPr2i/m9Bb2fOBXzS3h+T1vymRbFSGudJeo+gdWng0RhE27ExXwKCRngLx1EY03lK/PycJYFQFCaLOBcaIKkkIkH5GgjajqYZiq1WegRooJj2PiEW1xptAw1j3qrQiuXnANR1TctSht1yq8mc5GESS4AmZ47vZzTfjYCmh5THqfWXvzktaHpkVaW/AfCtBOKBAgAA + '1': H4sIAAAAAAAAAI1STU/CQBCdSilLjXfOcvYPeIFCtx9JaRsgSrmQFbdNYz+StkD8BcajJ38O8WI8evDuD/Du2S5sATUm7mnmzbw3+2ZXBqjBsU1iehHm4VVEARjS7JGcuhEpeF4fxSSKtrGohRmHRSWLc84wk+VOQaiBNCDZDc22SUOP0lWYBKxVBhkvIpopSRBRGZCFtfHMwroEwmT98K6fvnVnZewBP2U8rfCSLBpYUVnvQf1bbxVDpa0MBxvt58vWx727/KXNcabdc1Tvn9rNoakbe/HXJ/fxBfV+Ejp7cU7gTjt/OK3wzYhypTQp0uwWQb1v4NEYRNuxMV8CgqPwGk7iMKHzjPjFeZQGQtmYLpJCOAJJJTEJ2GsgaDiaZii2uuUjQAPFtA8BsbzWaJdoGPNRJVdknwNQ2zUtSxm22VbTOSnCNJEATc4c389p0W1VFtCUQ3tXyOPQ+tPfnDrUPLLq37HyFwi+rvqBAgAA + '2': H4sIAAAAAAAAAHVSPVPCQBDdQAhHbLSztrHyD9hAIF/MQMIAo4SGOfBgMiaXmUuAsbRyLK38K3Zo41hQWNjb2Fn6B8zHBRgdrtp9+97b272TAYpwYGGfXLihO/YIQIJU6jgkHQ9HPC/1fOx5WSzqLuOwqDA/5IomXWwchCJIbcyuCcuSsuEFS5fOEqoMsjb3CFPozCMyoJam90ctzZBAGKwePo2Tj9oojh3gJ46HOR6LRVNT1JT7oz6dCke3f7l5DLm30m2n/NfL4+/7zuKfN8cT77qtOgl3p77Pu9JtGubW/P2l8/iG6n8F1a05F/BJq3smzfG0RbxSQqOA3SAoNUyt1wfRsi2NLwFBwb2CQ9+lZMLwNDofY0oJE2JuMKeRUABJxT6eJQ+CoGzruqlYamaBALWVprULiPHNeptE1zTeLdaKyf/IFhpMcOQGVAI0OLOn05BENWmdnOcYGnJoOxByOLT6SlnrEhQdvGzcJeVfRyfdnHwCAAA= + '3': H4sIAAAAAAAAAHVSzU7CQBCeQilLvWjigaveeQEvUOgfCbQEiFIuuOCWNLbbpK0QfQHj0ZNv4SsQL8ajB09e1LNPYLzY0i0QDHua+eb7vtmZXREgD3sG9sipEzpjlwAkSKmOQ9JxccTyQs/DrpvGvOoEDOalwAuZoklnKwcuD0IbB5ckSJOi5vpzh04TqgiicuWSQKJTl4iAWoraH7UUTQBusLj/0I7faqM4toCdOB5meCzmdUWSl9yfo9++XClvc7MYMm+p217yn8/K33ed2T9vhifedVO2Eu5GfZd3qdvU9LX561Pn4QXVtwXVtTkTsEmrOybN8GWLeKWERn5wjaDQ0JVeH3jDNBS2BAQ55wL2PYeSSYDt6GSMKSUBF3P9KxpxORBk7OFp8iAIiqaq6pIhpxYIUFtqGpsAH9+st0pURWHdYi2f/I90of4ER45PBUCDimnbIYlqB3ZyzmNoyKD1QMhi0OL9S3s8vPksQN7C88ZtUv4DChPnCHwCAAA= + '4': H4sIAAAAAAAAAI2RzU7CQBDHh/SDpb6AZzn7DNDK9iOBtqGN0l7IahbSuLRJWyE+gkdPytMQL8ajB++ejS9hl24BNSbuaf7/mfntzqwGIMGRSxb0PCmSS0YBuNMxSEF9RkqhlWBBGKtj2UxyYct6vihEh5Mud4SWBOqI5Nc0r0XbYtkqSee8VAMN3zCa6+mcUQ3QEJvhdIgtFVqTzf27dfLWn1ZxBOJUcdz4VbNsY33Aaw/y32qbGBq2Ph5t2c8Xx593/vIXW/icbXiD6J/sztix7D389cl/eEHGz4beHi4axKS9PyZt/O0V1UppWmb5LQLlzMZBCLLruRjVS2hE2zNNW3d3Go10xz005OrOYCdMjAUHKsV/HtRu4IRxly8suyJlkqUqoMmpN5sVtOyj5nUoFtb+wSgS1uZjzc+jAlJEVnX6C4hAqa1cAgAA + '5': H4sIAAAAAAAAAHVSv0/CQBR+hVKOuujm7OLk5OYChf4igZYAUcpCDjxIY3tNrgXi6Ojo5L/iRlyMg4ODuzFxc/QfsD+uQDC86b3vvu97996dDFCEAwv75NIN3bFHABKkUsch6Xg44nWp52PPy3JRdxmHRYX5IVc06WLtIBRBamN2Q1hWlA0vWLp0llBlkLW5R5hCZx6RAbU0vT9qaYYEwmD18GmcfNRGce4Ajzgf5ngsFk1NUVPur/p0Khzd7XLzHHJvpdtO+S9Xxz/3ncU/b44n3nVbdRLu1vk+70q3aZgb8/fnzuMrqu8KqhtzLuCTVvdMmuNpi3ilhEYBu0VQapharw+iZVsaXwKCgnsNh75LyYThaXQxxpQSJsTcYE4joQCSin08Sx4EQdnWdVOx1MwCAWorTWsbEOOb9daFrmm8W6wVk/+RLTSY4MgNqARocGZPpyGJapXzJGoxNOTQZiDkcGj1/ZZGCYoOXja+kuM/UqZr5nwCAAA= + '6': H4sIAAAAAAAAAI2SvU7CUBTHT6GUUgcTJ2Z3ExOdWKDQLwy0BIhQFrziLWnoR9IWiE9gHH0aR+LiC+iukw4+g8R76S1q1MQznfM/5/9rz2klgDzsmMjHp27snnsYgCqlOopxx0MJqws9H3lemvOaGzGZlyM/Zo5msNgSuDwIbRTNcJQWRd0Ll24wpaMSSOrcw5EcTD0sgdhStf64peoCcMPVzZO+/1gbk9wGFiQfZTox84YqK3T2S//bbJZDxpa77Q37flB+u+4sfrCZTtl1S7H/yS51m7rxCX8ZlE9elStqqK5v75z3deV3A9u0+semmb5xkJPiIAmjSxEKDUPt9YE3LVMV0yNkRdHSNEM2WU22bstNkwoi5NwL2PXdAE8i5CSVOHEnM46wwnmQcDkQFOSjKf1gBElerLfla6rKHkZb9PdI7xlOUOKGgQDi8MBynBgntT2HxhmRRkxaPWf7iDaTqg9HNA4LkLfRsnFM2x8K14JSewIAAA== + '7': H4sIAAAAAAAAAI1SvU7CUBj9CqWUOpg4OTsYFxMTnXSAQv8w0BJAocQEL3hLGvqTtAXiExgnw3v4DiYOvoA6u+ngapy9l7aoURO/6Zxz7znt+VoBIAsrOnLxsR3aAwcDUKVQRiFuOChKeK7lIseJMavYQSKzYuCGBDHEUfWmywTCuToKxjiISV51/JntjahLAEGeODgQvZGDBeBrstLu12SVA6Z7M39SNx5KfYJNSIbgXqoTM6vJokTvfjn/djfFkGaLzfoi+66z/nrZmP7ITnSaXTYk85/ZhWZV1T7Dnzvrhy/SBTUU3wbX882Do98NSdPiH01TfeEgK8Ve5AfnPOQqmtxqA6sbuszHS0hJ3lAUTdQTTlrXxapOBR4y9hmsuraHhwGyov0wsodjhmT5Ey9iMsBJyEUj+sFIJHmx1jJfkeXkYfSI/h7xPv0himzf44DvbhuWFeKotGbROSVSL5GKj7dXJ1vvpA9vptL9Lp2dHGRNNKvs0bofjDE1QnsCAAA= + '8': H4sIAAAAAAAAAONiYGBm4PZLzE0NyyzOTMpJZWAAiXA6JRanBuQklkD5rMG5iTk5EDaLW2YRVJjFsSi3GMhiBOrwzCuDmwDks/kmFmWnFkE47O45+eWZeekgXVwMXK6lOalFjnnpOalcDBw+rm4h8T6u7mwMjBH7J953V7riEA9kRzJAAZAdBRMHambxcHV0AalFkkdRC2MzwMx2DPIFm30sXOJ1Z0AZhtlQcZDZTv4ukUSazRnk6e6BMPxZuITXc5d2kAb7L0lrJqpZh2LXAPWpPQ6fwsTBOoBBmppXkl9UycHA6uzhGhzCwOLn7+fKAQkEGIfd383Nw9EPygf62tfR0w8kwMHAlJnCwJ+bmZeaXJSYVmJVXJKZnM0INCu/NK+EkYmBzSUxNzEdFGFAI4EOC4ab7+bqCrUMJAVKHpDwzE9OLMnMz2Nj4IjQ9U9LK04tsf/6ulVuRxDQ8RxRUKH9Vw/1x2h8AwlFwlRdNgYBA1YG5sjEcoh3Ad4pBN97AgAA + '9': H4sIAAAAAAAAAI1SPU/CQBh+KwVKHVyZHNxNTNxYsNgvDLQEiFAWcuKVXOhH0haIP8AYR3+NbsbFP6C7TjowO0q8oz3UqIk3Pc/z3vPcve+dDJCDTQv5+JjE5MTDAEwp1VCMWx5KMp7v+MjzUizqJMpkUYn8mCKBOurBbJ1AeaGJogmOUlI0vHBOgjFzySBrUw9HSjD2sAxSQ9O7w4ZmFEDo3149GTuPB0OKHcgWxQOuU7NoaorK9n6pf9vLMfBspd1cZd/3yovL1uxHdqaz7JqtOv/MLrXrhvkZ/tIrH72qF8xQXV7fue/Lyu+GrNPqH51yfeWgI8VBEkZnEuQPTa3TBdGyLU1Kh8BJ0dZ1U7EyTrtuKnWLCRJskFPY8kmARxFyk0qckNFEoFnhNEiEDSioyEdj9mA0kl6ss87XNS07jJXY90jnGY5QQsKgAFJ/13bdGCfVt8X59k2bXl4acOmZ9yM5XHrYZ2svDzkHzdPyB7WYcRV7AgAA + Block: + '0': + X-Offset: 0.0 + Y-Offset: 0.0 + Z-Offset: 0.0 + Type: FENCE + Data: 0 + '1': + X-Offset: 0.0 + Y-Offset: 1.0 + Z-Offset: 0.0 + Type: FENCE + Data: 0 + '2': + X-Offset: 6.0 + Y-Offset: 0.0 + Z-Offset: 0.0 + Type: FENCE + Data: 0 + '3': + X-Offset: 6.0 + Y-Offset: 1.0 + Z-Offset: 0.0 + Type: FENCE + Data: 0 diff --git a/src/Models/Sunshade.yml b/src/Models/Sunshade.yml new file mode 100644 index 0000000..73a5bc6 --- /dev/null +++ b/src/Models/Sunshade.yml @@ -0,0 +1,46 @@ +Sunshade: + system-ID: Sunshade + name: '&cSunshade' + material: 383 + glow: false + lore: '' + creator: 80f94595-e1f5-3520-b48c-c07d9f03274e + PlaceAbleSide: TOP + crafting: + disable: false + recipe: AAA,0X0,0X0 + index: + '0': 0 + X: 280 + A: 171 + ProjectModels: + ArmorStands: + '0': H4sIAAAAAAAAAI2Sv0/CQBTHX6GUUgcXBycHdyeZTAgW6A8SaBGIUhZy4kEu9IdpC0R3B0f/BndnNzb/AhOdNMaR3dk7eiUaY/Sm977vvc+99+4UgCxsWMjDxyQipy4GYEqhgiLcclHM/VzHQ66b2KJOQi6LauhFvKLuz9YEIQtSE4UTHCZO3nCDOfHHLFUBRZu6OFT9sYsVkBua3h00NEMCobe4eTV2Hw8H1HaAH2r3U50Wi6am1ljul/i33NSGlK22myv2w8n28ro1+8HmOmNX7JrzT3ahXTfMNbz8UTq/fVJKfxfwScu/TJrqqwq6UuzHQXghQ65qap0uiJZtaXKyhNTJ27puqhb36dRNtW4xQYYMOYNNj/h4GKJRfBDFZDgRKCuY+rGQAamGPDRmD0aRtLHOmq9rGr+Mhdj3SPYZDFFMAl8Cubdnj0YRjhfPR8urnXvavNxPpZetyzfjjklOKr3vs1PMQdZB82qRjfsJmzd4nXsCAAA= + '1': H4sIAAAAAAAAAI2SvU/CQBTAX6GUUgcXBycHdzcnE4IFri0JtHxFKQs58SAN/TBtgeju4Ojf4O7sxuZuYqKTxpnFydk7eiUaY7TTe79779d7r1UAsrBhYo8cOZFz4hIARgplHJGmi2Oe5zoedt0kFjUn5FhUQy/iHTV/tjYIWZAaOJyQMEnyuhvMHX/MShVQ0NQloeqPXaKAXEdad1BHugRCb3H9qu8+Hg5obAN/aNxPOW0WDaRWWe2X82+1aQypW203Vu774+3lVXP2w805c5etqv1Pd6Fd0421vPRRPLt5Uop/N/BJS79MmvJVB10p8eMgPJchVzFQpwuiaZlITpaQJnlL0wzV5DmduqHWTAZkyDinsOk5PhmGeBQfRLEznAjUFUz9WMiAVMUeHrMPRpX0Yp21X0OIv4wdsd8j2WcwxLET+BLIvT1rNIpIvHhuLS937ujl5X6KXrYu3vRbhmyOSg+sqPWeg6yN55V9Nu4nBXVOgHsCAAA= + '2': H4sIAAAAAAAAAONiYGBm4PZLzE0NyyzOTMpJZWAAiXA6JRanBuQklkD5rMG5iTk5EDaLW2YRVJjFsSi3GKrDM68MbgIjMwObb2JRdmoRhMPunpNfnpmXDlLKxcDlWpqTWuSYl56TysXA4ePqFhLv4+rOxsAYsX/ifXelKw7xQHYkAxQA2VEwcaBmFg9XRxeQWiR5FLUwNgPMbMcgX7DZx8IlXncGlGGYDRUHme3k7xJJpNmcQZ7uHnDD7b/ZFiy+zmVLWAPUp/Y4fAoTB+sABmlqXkl+USUHA6uzh2twCAOLn7+fKwckEGAcdn83Nw9HPygf6GtfR08/kAAHA1NmCgN/bmZeanJRYlqJVXFJZnI2I9Cs/NK8EkYmBjaXxNzEdFCEAY0EOiwYbr6bqyvUMpAUKHlAwjM/ObEkMz+PjYEjQtc/La04tWT/jcDXrXI7gI7niIIJ3ROpeui+DiQUCRWy/9Qfo/H10ARWBubIxHJnE5B3AS8g/Xt7AgAA + '3': H4sIAAAAAAAAAI2SvU7DMBDHL22SuoGBkZmOiBdgKSlxPqQ2idoKmi6VKW4VkQ/kpK14AsTIxKuwIRbEyMDOA7DxBCSN0xYqJDzd/X3/n31nKwBV2LFJSM/8xL8IKECu1FskoW5AUp5LvZAEQRGLus+4LKosTLjDiuYrglAFuUPYFWVFUjOCeOFH07xUAQXPAsrUaBpQBVAb6/1RGxsyCIOn+w/j4P1klMUe8JXFw1LPzKKJVS2v3dj/UVvGULLVbmfJfjnf/7xz51tsrufslqN5/2TXu5ZhruFvz+7DK2r9NjTXcG7gnTb/6LTUl0dkI6VRGrMbBNKpiXt9EG3HxnwICCr+JeyFfkTHjEzS4zFh1zQVstp4FqVCBWSNhGSaPwiCmqPrpmprBQIB6qiWvSmI2c16q0THmJ+WecX8f4DU6DtuI59qPCapH0cyoMGRM5kkNF23gIbbksel5tftYWXXepSg6pFFsf0NOIZS7oECAAA= + '4': H4sIAAAAAAAAAHVSsU4CQRAduAOWM1ErY621ibUWeMgekMAdEaJCYxZcLhf39pK9BUJvY2FhxeeojbEyFjZWfIAfQOutLGIwbDXz5r03O7NrARiw4ZKQngdx0GUUQCH5IolpgxGp80wzJIzNY9MJhIZNW4SxVlT58NchZUC2TsQNFfMkV2bRKOC+olpg4QGjwuY+oxagGnZaVzVczkLq8vFhWt77OLlK4jbok8SdBZ6IzQq2S4r7hPjk3pser3IXMSy87bP6j/fLxe7XXWP4z1vjyrvoldqK+6e+zjt/Vi1Xlubvz43JKyquCgpLcy3QkxbWTLrAf1okK6VcRmKMIHNawc0WmK7nYr0EBOngGrbDgNOeIH151CWcU5FKuNGAy5QFhiS+BZtFFvVuMJeBHLeInwfUIFJSwWMraZpGkNM5pLvSUGoWqXfbgLWlLSWEbImExKdq0ZDzHKdiu6X5DRGgul11/wJmMnjzN3Ew1sMkWlN9P7D2cQ3XsdvaP1QvF/WIDCKeBXR54PX7MZXLNaHOf6itocKsOXv73LnNgNEmo3n5G7ryM6/lAgAA + '5': H4sIAAAAAAAAAHVSsU4CQRAduAOWM1ErYy21ha0WeMjeQQJ3RIiCjVlwuVzc20v2Vgm9jYWFFb/gX6iNsTIWNlZ+gB9g6y0sYjRsNfPmvTc7s2sBGLDikYgehUnYZxRAIcUKSWiLEanzXDsijM1i0wmFhk1bRIlW1Pnlj0PGgHyTiHMqZknBZfEo5IGiWmDhC0aFzQNGLUAN7HROG9jNQ6Z7f/vhbr3tn6ZxD/RJ45M5norNGrarivuA+OTG/9j7y53HMPe2D5tT76fjzc/r1uU/b40r74pf7Snur/oy7+Jh3a0tzF8fW5NnVPkrKC/MtUBPWl4y6RyftkhXSrmMxRhB7qCG2x0wPd/DegkIsuEZrEchpwNBhnK3TzinIpNy4wsuMxYYkgQWrFZYPDjHXIZy3CFBEVCLSEkFT6y0aRZBQeeQ7UtDqVms3m0FlpbWlBDyVRKRgKpFQ8F3nJrtVWc3RICadt37DZjp4O2fxMFYD5NqTfX9wCrhBm5ir1PaUS8XD4gMY54H1N32h8OEysWa0Ml/qKeh8lf76+V94yoHRo+M7DtV/gZXPKFG5QIAAA== + '6': H4sIAAAAAAAAAHVSsU4CQRAduAOWM1ErY62NjY2lFngne0ACdwSICo1ZcLlc3NtL9laNvY2FhZWfozbGyljYWPEBfgCtt7CA0bDVzJv33uzMrgVgwIpHInocJmGfUQCFFB2S0CYjUue5dkQYm8amGwoNm7aIEq2o8au5Q8aAfIOICyqmSaHC4uuQB4pqgYUvGRU2Dxi1ANWx2zmr40oeMqdPD6PK1ufhWRp3QZ807s3wVGxWsV1W3GfEH+/90cFf7iyGmbfdaky8X082v++aV/+8Na68Hb/cVdxf9WXexVatUl2Yf7w0H9+Q81dQWphrgZ60tGTSGT5pka6UchmLGwS5oypud8D0fA/rJSDIhuewHoWcDgQZyv0+4ZyKTMqNL7nMWGBIEliw6rB4cIG5DOVNhwRFQE0iJRU8sdKmWQQFnUO2Lw2lZrF6txVYWlpTQsiXSUQCqhYNBd91q7ZXnt4QAWrYNe83YKaDt+eJi7EeJtWa6vuBtY3ruIG9zvaeerl4QGQY8zyg011/OEyoXKwJ9f5DXQ2Vxu3x+9fGbQ6MLrl2dlT5B/67kcflAgAA + '7': H4sIAAAAAAAAAHVSsU4CQRAduAOWM1ErY621lZ0WeCd7QAJ3RIgCDVlwuVzc20v2Vo2JpY2FhZWfozbGyljYWPkBfoCtt7CAwbDVzJv33uzMrgVgwIpHInocJuGAUQCFFB2S0CYjUue5VkQYm8SmGwoNm7aIEq2o8YuZQ8aAfIOIMyomSaHC4suQB4pqgYXPGRU2Dxi1ANWx2+7XcSUPmc7j/Vdl6+Ogn8Zd0CeNe1M8FZtVbJcV9wnxhzv/a3+RO41h6m0fNcbeLyeb37fNi3/eGlfejl/uKu6f+jLv4lGtUp2bvz83H16Rsygozc21QE9aWjLpFB+3SFdKuYzFFYLcYRW32mB6vof1EhBkw1NYj0JOh4KM5N6AcE5FJuXG51xmLDAkCSxYdVg8PMNchvKqTYIioCaRkgqeWGnTLIKCziE7kIZSs1i92wosLa0pIeTLJCIBVYuGgu+6VdsrT26IADXsmvcXMNPBW7PExVgPk2pN9f3A2sZ13MBee3tXvVw8JDKMeR5QZ8cfjRIq52tCvf9QV0Oln9bP2+fGTQ6MLrl0rlX5F4YRw2flAgAA + '8': H4sIAAAAAAAAAHVSsU4CQRAduAOWM1ErY621nZUWeCd7QAJ3RIgCjVlwuVzc20v2Vgm9jYWFlb/gX6iNsTIWNlZ+gB9g6y0sYDRsNfPmvTc7s2sBGLDikYgeh0nYZxRAIUWHJLTJiNR5rhURxqax6YZCw6YtokQravxy7pAxIN8g4pyKaVKosHgU8kBRLbDwBaPC5gGjFqA6dtundVzJQ6bzcPtZ2Xo/OE3jLuiTxr0ZnorNKrbLivuI+N2N/7n/lzuLYeZtHzUm3s8nm1/Xzct/3hpX3o5f7irur/oy7+JRrVJdmL89Ne9ekPNXUFqYa4GetLRk0hk+aZGulHIZizGC3GEVt9pger6H9RIQZMMzWI9CTgeCDOVen3BORSblxhdcZiwwJAksWHVYPDjHXIZy3CZBEVCTSEkFT6y0aRZBQeeQ7UtDqVms3m0FlpbWlBDyZRKRgKpFQ8F33artlac3RIAads37DZjp4K154mKsh0m1pvp+YG3jOm5gr729q14uHhAZxjwPqLPjD4cJlYs1od5/qKuh0nfr+/Vj4yoHRpeMnHtV/gEHhoLB5QIAAA== + '9': H4sIAAAAAAAAAHVSsU4CQRAduAOWM1ErY621pY0WeCd7QAJ3RIgCjVlwuVzc20v2Vgm9jYWFlZ+jNsbKGGNj5Qf4AbbewgJGw1Yzb957szO7FoABKx6J6HGYhH1GARRSdEhCm4xInedaEWFsGptuKDRs2iJKtKLGL+cOGQPyDSLOqZgmhQqLRyEPFNUCC18wKmweMGoBqmO3fVrHlTxkOve3n5Wt94PTNO6CPmncm+Gp2Kxiu6y4D4jf3fif+3+5sxhm3vZRY+L9dLL5dd28/OetceXt+OWu4v6qL/MuHtUq1YX562Pz7hk5fwWlhbkW6ElLSyad4ZMW6Uopl7EYI8gdVnGrDabne1gvAUE2PIP1KOR0IMhQ7vUJ51RkUm58wWXGAkOSwIJVh8WDc8xlKMdtEhQBNYmUVPDESptmERR0Dtm+NJSaxerdVmBpaU0JIV8mEQmoWjQUfNet2l55ekMEqGHXvN+AmQ7emicuxnqYVGuq7wfWNq7jBvba27vq5eIBkWHM84A6O/5wmFC5WBPq/Ye6Gip9t75fPjaucmB0ych5U+UfGr0hH+UCAAA= + '10': H4sIAAAAAAAAAHVSsU4CQRAduAOWM1ErY621rYUWeCd7QAJ3BIiCjVlwuVzc20v2Foy9jYWFlZ+jNsbKWNhY8QF+gI2Ft7CI0bDVzJv33uzMrgVgwIpHInoUJmGfUQCFFB2S0CYjUue5dkQYm8WmGwoNm7aIEq2o8fGPQ8aAfIOIcypmSaHC4ouQB4pqgYVHjAqbB4xagOrY7ZzWcSUPme797aSy9XZwmsY90CeNT+Z4Kjar2C4r7gPidzf+ZP8vdx7D3NtuNabeT8ebH9fN8T9vjStvxy/3FPdXfZl3sVWrVBfmr4/Nu2fk/BWUFuZaoCctLZl0jk9bpCulXMbiEkHusIrbHTA938N6CQiy4RmsRyGnA0GGcq9POKcik3LjEZcZCwxJAgtWHRYPzjGXobzskKAIqEmkpIInVto0i6Cgc8j2paHULFbvtgJLS2tKCPkyiUhA1aKh4Ltu1fbKsxsiQA275v0GzHTw9k/iYqyHSbWm+n5gbeM6bmCvs72rXi4eEBnGPA+ou+MPhwmVizWhk/9QT0Olz/bny/vGVQ6MHrlwvlT5G+ppktflAgAA + '11': H4sIAAAAAAAAAHVSsU4CQRAduAOWM1ETE2MttbWJFnjAHpDAHRGiYmMWXC4X9vaSvVVCb2NhYcXnqI2xMhY2Vn6AH2DrrSxiIGw18+a9NzuzawEYsOaSkJ4EcdBjFEAh+RKJaYsRqfNMOySMTWPTCYSGTVuEsVbU+fWfQ8qAbJOIIRXTJFdl0SjgvqJaYOErRoXNfUYtQA3sdC4auJqF1NnD/Wd19/3oIom7oE8Sn8/wRGzWsF1R3EfEJ3fe5+EidxbDzNs+bv56P5/ufN22rpe8Na68S16lq7j/6qu888f1am1u/vbUmryg0qKgODfXAj1pccWkM/y3RbJSymUkxggy5Rpud8B0PRfrJSBIB5ewGQac9gUZyIMe4ZyKVMKNrrhMWWBI4luwXmJRf4i5DOS4Q/w8oBaRkgoeW0nTNIKcziHdk4ZSs0i92xqsLG0oIWQrJCQ+VYuGnOc4NdutTG+IADXtuvsfMJPB23+Jg7EeJtGa6vuBVcAN3MRup7CvXi7qExlEPAvobM8bDGIq52tC58tQV0PF7/b368f2TQaMLhmVt1T5BzIpi9vlAgAA + '12': H4sIAAAAAAAAAHVSsU4CQRAduAOWM1ErY62Njb3RAg/ZAxK4I0BUaMyCy+Xi3l6yt0robSwsrPwctTFWxsLGig/wA2i9hUWIhq1m3rz3Zmd2LQAD1lwS0tMgDnqMAigkXyQxbTAidZ5phYSxWWw6gdCwaYsw1ooqv/l1SBmQrRNxRcUsyZVZNAy4r6gWWPiaUWFzn1ELUA077YsaLmchdf70MC7vfB5fJHEH9Eni7hxPxGYF2yXFfUb88d4bH/3lzmOYe9vN+tT79Wz7+65x889b48q76JU6irtUX+Wdb1bLlYX5x0vj8Q0V/woKC3Mt0JMWVkw6x6ctkpVSLiMxQpA5qeBWG0zXc7FeAoJ0cAmbYcBpX5CBPOwRzqlIJdzomsuUBYYkvgXrRRb1rzCXgRy1iZ8H1CBSUsFjK2maRpDTOaR70lBqFql3W4OVpQ0lhGyJhMSnatGQ8xynYrul2Q0RoLpddZcBMxm89Zs4GOthEq2pvh9Yu7iG69ht7x6ol4v6RAYRzwI63/cGg5jKxZpQ9z/U0VBh0pq8f23dZsDokOHJnir/AKf5og/lAgAA + '13': H4sIAAAAAAAAAHVSsU4CQRAduAOWM1ErY621H6DG4CF7QAJ3BIgKjVlwuVzc20v2Vgm9jYWFlZ+jNsbKWNhY8QF+AK23sAjRsNXMm/fe7MyuBWDAmktCehrEQY9RAIXkiySmDUakzjOtkDA2i00nEBo2bRHGWlHlN78OKQOydSKuqJgluTKLhgH3FdUCC18zKmzuM2oBqmGnfVHD5Sykzp8exuWdz+OLJO6APkncneOJ2Kxgu6S4z4g/3nvjw7/ceQxzb7tZn3q/nm1/3zVu/nlrXHkXvVJHcZfqq7zzzWq5sjD/eGk8vqHiX0FhYa4FetLCiknn+LRFslLKZSRGCDInFdxqg+l6LtZLQJAOLmEzDDjtCzKQBz3CORWphBtdc5mywJDEt2C9yKL+FeYykKM28fOAGkRKKnhsJU3TCHI6h3RPGkrNIvVua7CytKGEkC2RkPhULRpynuNUbLc0uyECVLer7jJgJoO3fhMHYz1MojXV9wNrF9dwHbvt3X31clGfyCDiWUDne95gEFO5WBPq/oc6GipMWpP3r63bDBgdMjw5UuUfJiJjyuUCAAA= + '14': H4sIAAAAAAAAAHVSsU4CQRAduAOWI1ErYy21ibZa4CF7QAJ3BIgCjVlwuVzc20v2Vo29jYWFFZ+jNsbKWNhY+QF+gK23sIjBsNXMm/fe7MyuBWBAwSUhPQ7iYMgogELyZRLTFiNS55lOSBibxaYTCA2btghjrajzy1+HlAHZJhHnVMySXJVFVwH3FdUCC18wKmzuM2oBamCne9rA1Sykeg/3n9Xt98PTJO6DPkk8mOOJ2Kxhu6K4j4hP7rzPg2XuPIa5t91uTr2fT7a+bluX/7w1rrzLXqWvuH/qq7zz7Xq1tjB/e2pNXlB5WVBamGuBnrS0YtI5Pm2RrJRyGYlrBJmjGu50wXQ9F+slIEgHZ7ARBpyOBBnL/SHhnIpUwo0uuExZYEjiW7BWZtHoHHMZyOsu8fOAWkRKKnhsJU3TCHI6h/RQGkrNIvVuBVhZWldCyFZISHyqFg05z3FqtluZ3RABatp19y9gJoN3fhMHYz1MojXV94NCETdwE7vd4t6uerpoRGQQ8Syg3o43HsdULvaEBv+hvoZK353v14/NmwwYfXJ11FblHy+EihfmAgAA + '15': H4sIAAAAAAAAAHVSPU8CMRh+4Q4oR6JOxllnB1Yd8JAekMAdEaLgYgqWy8VeL+kVCLuLg4MTP0ddjJNxcHHyB/gDXL1CEaOh0/s+fZ6nfT8sAAMKLgnpaRAHfUYBFJIvk5i2GJE6z7RDwtgiNp1AaNi0RRhrRZ2PfxxSBmSbRFxRsUhyVRZNAu4rqgUWHjEqbO4zagFqYKdz0cDVLKS693cf1d23o4sk7oE+SXy+xBOxWcN2RXEfEJ/deh+Hf7nLGJbe9klz7v10tvN50xr/89a48i57lZ7i/rpf550/qVdrK/PXx9bsGZX/Ckorcy3QlZbWVLrE508kLaVcRmKKIHNcw+0OmK7nYt0EBOngErbCgNOBIEN50CecU5FKuNGIy5QFhiS+BRtlFg2uMJeBnHaInwfUIlJSwWMreTSNIKdzSPelodQsUnMrwNqrTSWEbIWExKeq0ZDzHKdmu5XFDxGgpl13fwNmUnj7J3Ew1sUkWlOtHxT2cAM3sdvZKxbV6KIBkUHEs4C6+95wGFO56hM6/w/1NFT6an+9vG9fZ8DokcnxfOe+AapwihPmAgAA + '16': H4sIAAAAAAAAAHVSsU4CQRAduAOWI1ErY621hZZa4CF7QAJ3BIgKjVlwuVzc20v2Vo2JpY2FhZWfozbGyljYWPEBfgCtt7CA0bDVzJv33uzMrgVgQMElIT0K4qDPKIBC8iUS0yYjUueZdkgYm8amEwgNm7YIY62o8cu5Q8qAbIOIcyqmSa7CoquA+4pqgYUvGBU29xm1ANWx0zmt40oWUidPD6PK5ufBaRJ3QZ8k7s3wRGxWsV1W3GfEH++90f5f7iyGmbfdaky8X483vu+al/+8Na68S165q7i/6su8861apbow/3hpPr6h0l9BcWGuBXrS4pJJZ/ikRbJSymUkrhFkDqu43QHT9Vysl4AgHZzBWhhwOhBkKPf6hHMqUgk3uuAyZYEhiW/BSolFg3PMZSCvO8TPA2oSKangsZU0TSPI6RzSfWkoNYvUuxVgaWlVCSFbJiHxqVo05DzHqdpueXpDBKhh19zfgJkM3p4nDsZ6mERrqu8HhS1cxw3sdrZ2dtXTRQMig4hnAZ1se8NhTOViT6j3H+pqqDhuj9+/1m8zYHTJ1eGNKv8ArJP4suYCAAA= + '17': H4sIAAAAAAAAAHVSMU8CMRR+cAeUI1En46yzg3HTAQ/pAQncESEqLqZguVzs9ZJe0bg5OOjg4OTPURfjZBxcnPwB/gBXWyliNHR673vf972+1zoAFpR8EtPdKI36jAJopFghKW0zIk2e68SEsXFse5EwsO2KODWKBj/5cchYkG8RcUzFOCnUWHIa8VBTHXDwiFHh8pBRB1ATe93DJq7lIbN/d/NeW37dOlRxD8xR8cEEV2K7jt2q5t4jfnsdvG/+5U5imHi7O61v78e9pY+r9sk/b4Nr70pQ7Wnur/os7+JOo1afmr88tG+fUOWvoDw1NwIzaXnGpBP8u4VaKeUyEWcIctt13OmC7Qc+NktAkI2OYCGOOB0IMpQbfcI5FRnFTUZcZhywJAkdmKuwZHCMuYzkWZeERUBtIiUVPHVU0yyCgskh25eWVrNEv1sJZpbmtRDyVRKTkOpFQyHwvLrrV8c3RIBabsP/Ddhq8M5P4mFshlFaW38/KK3gJm5hv7uytq6fLhkQGSU8D2h/NRgOUyqne0IH/6Gegcqfnc/nt8WLHFg9crp9ea7KX3kQ1I/mAgAA + '18': H4sIAAAAAAAAAHVSsU4CQRAduAOWI1ErY621hYmVFnjIHpDAHQGiQmMWXC4X9/aSvVVjb2NhYSz8HLUxVsbCxooP8ANovYUFjIatZt6892Zndi0AAwouCelREAd9RgEUki+RmDYZkTrPtEPC2DQ2nUBo2LRFGGtFjV/OHVIGZBtEnFMxTXIVFl0F3FdUCyx8waiwuc+oBaiOnc5pHVeykDp5uh9VNj8PTpO4C/okcW+GJ2Kziu2y4j4j/njnjfb/cmcxzLztVmPi/Xq88X3bvPznrXHlXfLKXcX9VV/mnW/VKtWF+cdL8/ENlf4KigtzLdCTFpdMOsMnLZKVUi4jcY0gc1jF7Q6YrudivQQE6eAM1sKA04EgQ7nXJ5xTkUq40QWXKQsMSXwLVkosGpxjLgN53SF+HlCTSEkFj62kaRpBTueQ7ktDqVmk3q0AS0urSgjZMgmJT9WiIec5TtV2y9MbIkANu+b+Bsxk8PY8cTDWwyRaU30/KGzhOm5gt7O1s6ueLhoQGUQ8C+hk2xsOYyoXe0K9/1BXQ8Vxe/z+tX6TAaNLrg4fVPkHyU6Jr+YCAAA= + '19': H4sIAAAAAAAAAHVSMU8CMRR+cAeUI1En46yzg4OLDnhID0jgjghRcTEFy+Vir5f0isbNwcXBwcnJ36Iuxsk4uDj5A/wBrrZSxGjo9N73vu97fa91ACwo+SSmu1Ea9RkF0EixQlLaZkSaPNeJCWPj2PYiYWDbFXFqFA1+8uOQsSDfIuKYinFSqLHkNOKhpjrg4BGjwuUhow6gJva6h01cy0Nm/+76vbb8unWo4h6Yo+KDCa7Edh27Vc29R/zmKnjf/MudxDDxdnda396Pe0sfl+2Tf94G196VoNrT3F/1Wd7FnUatPjV/eWjfPKHKX0F5am4EZtLyjEkn+HcLtVLKZSLOEOS267jTBdsPfGyWgCAbHcFCHHE6EGQoN/qEcyoyipuMuMw4YEkSOjBXYcngGHMZybMuCYuA2kRKKnjqqKZZBAWTQ7YvLa1miX63EswszWsh5KskJiHVi4ZC4Hl116+Ob4gAtdyG/xuw1eCdn8TD2AyjtLb+flBawU3cwn53ZW1dP10yIDJKeB7Q/mowHKZUTveEDv5DPQOVPzufz2+LFzmweuR0+/Zclb8A4IUhkOYCAAA= + '20': H4sIAAAAAAAAAHVSsU4CQRAduAOWI1ErY621hY2FFnjIHpDAHQGiQmMWXC4X9/aSvVVjb2NhYeUv+BdqY6yMhY0VH+AH0HoLCxgNW828ee/NzuxaAAYUXBLSoyAO+owCKCRfIjFtMiJ1nmmHhLFpbDqB0LBpizDWihq/nDukDMg2iDinYprkKiy6CrivqBZY+IJRYXOfUQtQHTud0zquZCF18nQ/qmx+HpwmcRf0SeLeDE/EZhXbZcV9Rvzhzhvt/+XOYph5263GxPv1eOP7tnn5z1vjyrvklbuK+6u+zDvfqlWqC/OPl+bDGyr9FRQX5lqgJy0umXSGT1okK6VcRuIaQeawitsdMF3PxXoJCNLBGayFAacDQYZyr084pyKVcKMLLlMWGJL4FqyUWDQ4x1wG8rpD/DygJpGSCh5bSdM0gpzOId2XhlKzSL1bAZaWVpUQsmUSEp+qRUPOc5yq7ZanN0SAGnbN/Q2YyeDteeJgrIdJtKb6flDYwnXcwG5na2dXPV00IDKIeBbQybY3HMZULvaEev+hroaK4/b4/Wv9JgNGl1wdPqryD7hB+6LmAgAA + '21': H4sIAAAAAAAAAHVSsU7DMBC9NmnrphIwIWaYGZiQYCgpddpKbVLRCigLcosbRTiO5LggNgYWBgYm/oMfABbEhBhYmPgAPoAVm7oUgerp7t1773xnOwAWlHwS090ojfqMAmikWCEpbTMiTZ7rxISxcWx7kTCw7Yo4NYoGP/lxyFiQbxFxTMU4KdRYchrxUFMdcPCIUeHykFEHUBN73cMmruUhs393/V5bft06VHEPzFHxwQRXYruO3arm3iN+cxW8b/7lTmKYeLs7rW/vx72lj8v2yT9vg2vvSlDtae6v+izv4k6jVp+avzy0b55Q5a+gPDU3AjNpecakE/y7hVop5TIRZwhy23Xc6YLtBz42S0CQjY5gIY44HQgylBt9wjkVGcVNRlxmHLAkCR2Yq7BkcIy5jORZl4RFQG0iJRU8dVTTLIKCySHbl5ZWs0S/Wwlmlua1EPJVEpOQ6kVDIfC8uutXxzdEgFpuw/8N2Grwzk/iYWyGUVpbfz8oreAmbmG/u7K2rp8uGRAZJTwPaH81GA5TKqd7Qgf/oZ6Byp+dz+e3xYscWD1yun17rspf07szCOYCAAA= + Block: + '0': + X-Offset: 0.0 + Y-Offset: 2.0 + Z-Offset: 0.0 + Type: BARRIER + Data: 0 \ No newline at end of file diff --git a/src/Models/Tent1.yml b/src/Models/Tent1.yml new file mode 100644 index 0000000..70c880b --- /dev/null +++ b/src/Models/Tent1.yml @@ -0,0 +1,97 @@ +Tent1: + system-ID: Tent1 + name: '&cTent #1' + creator: 10eabfae-1d87-3120-b9bc-cb16bfa6ce88 + material: 383 + glow: false + lore: '' + PlaceAbleSide: TOP + crafting: + disable: false + recipe: 0X0,XEX,EAE + index: + '0': 0 + E: 35 + A: 58 + X: 280 + ProjectModels: + ArmorStands: + '0': H4sIAAAAAAAAAH1SvVLCQBDeQIAjNpbW9r6ADQZzSZiBhAFGCQ1z4sFkzI9zCTA+gqWVP2/gI1gxNo52FvY+gK0P4B25AOroVrvfft93t3unARRhyyEhPfIT/ySgAAKp1klC2wFJRa0UodQNSRBkPdX0maSpOgsTqWhEs5UDV5RbhJ1RlhUVK4jnfjQRVA00PA0o06NJQDVATWz2hk1slUHpL67erd23gyHPPZDB80GOc7FqY90Q3I3+d+7LrYg7yL31Tmvp/XS883HZnv3iS1x4113D+887zzm32mlY9tr89bF9/YzqPwW1tbkUyElrf0ya48sj+EpplMbsAkHp0MbdHqiO62C5BAQF/xS2Qz+iI0bG6f6IsHOaKpwbT6NUKUDZICGZiAdBUHFN09YdI7NAgFp6w9kEVH6z7qowMZanca0q/gcsFxqPSOrHURlQf88djxOa1h7Eum/47dEgh+5XkCehxWc2YwmKHpln+RcBBP6yfAIAAA== + '1': H4sIAAAAAAAAAH1SPU8CQRCdgwOWs7G0sLKy8Q/Y4OF9kcAdAaIcMSEr7uHF+zDHAfEnWBkr9Sf4K1ALY6GJhb2JrYmdvbvcHqBGp5p5+96bndmVALKwZGKf7LgDd98jAAwplvGA1D0cs1rIQq7pY89LzkTNjThNlCN/wBWVYDRzoIp8DUdHJEqKgu6FYzfoM6oEkjr0SCQHfY9IgKqq1upWVT0PQnty/qqvvWx1aW4DD5p3UpyKRUOVFcZdOP/GvVl9ZPEEqbfcqE2973dX3k/ro1/eHGfeZUux//NOc8otNiq6MTd/vq1fPKDyT0Fpbs4FfNLSH5Om+LQFXSkJ4jA6QZDbNtRmC0TTMlW+BAQZ9wCWfTcgvQg78WYPR8ckFig3HAaxkIG8gn3cZw+CoGBpmiGbSmKBANXkirkIiPRmzVmhqSrvRrUi+x8wXWjYw7EbBnlA7Q3LcQYkLr2d7a1/3tHbo04KXV/RuGSQzaHJh8PiMAdZG4+Teb8A8iVf6HwCAAA= + '2': H4sIAAAAAAAAAH1SvU4CQRAe5IDlbCwtTEzsfQETg4f3RwJ3CEQ5GrLiQi7eD7k7ID6AhaWVWlv5BnZoYyw0sTCxMj4Aic/gLrcHqNGpZr79vm92ZlcESMOygV2yb4f2oUMAGJIv4pBUHRyxOpWGTN3FjhOfCaodcJogBW7IFSVvOHOgimwFB8ckiIuc5vgj2+sxqgiiMnBIIHk9h4iAyoraaJcVLQup5vj8Q9t43WnT3AIeNG8lOBULuiLJjLtw/o17t/bE4hkSb6lWmXo/HKxOzqrDX94cZ95FU7b+805yys3XSpo+N3+5r148ouJPQWFuzgV80sIfkyb4tAVdKfEiPzhBkNnVlXoDBMM0FL4EBEv2Eay4tkc6Ae5GWx0c9EmUolx/4EWpJcjK2MU99iAIcqaq6pIhxxYIUEUqGYuAQG9WnxWqovBuVCuw/wHThfodHNm+lwXU3DS73ZBEhc/bvcnpOr09aiXQzRWNSwZZHBq/96/fxO1+BtIWHsXzfgFXv3A3fAIAAA== + '3': H4sIAAAAAAAAAH1SPVPCQBDdQAhHbCwsrHTG3j9gg8F8MQMJAqOEhjnxYDLmw0kCjGNtYWml/gQbaju1cSx0xsLesabzF3hHEkAd3Wr33Xtvb/dOBMjCkoFdsmeH9oFDABhSKOGQ1BwcsZrLQq7hYseJz3jVDhIaLwVumCjK3nDmQBVCFQdHJIiLvOb4I9vrM6oIojJwSCB5fYeIgCqK2uxUFE0ArnV38a5tvG13aG5BEjRvpzgV87oiyYy7cP6Ne7/2zOIFUm+pXp16P+6vTs5rw1/eCc68S6Zs/eed5pRbqJc1fW7++lC7fEKln4Li3DwRJJMW/5g0xact6EqJF/nBCYLcjq40msAbpqEkS0CQsQ9h2bU90g1wL9rq4uCYRBzl+gMv4jIgyNjFffYgCPKmquqSIccWCFBVKhuLAE9v1pgVqqIk3aiWZ/8Dpgv1uziyfU8A1No0e72QRMXPD228ckpvj9opdHNN44pBVgqNb3cnZ+uQg6yFR/G8X8cJJp58AgAA + '4': H4sIAAAAAAAAAH1Su07DQBBcJ05yMQ0FBTU9P0ATHHy2IyV2lEQQp4mOcI4s/EBnJwgqWkoq4BNo+AVEgygp6FEoEBIfQMv5lQQQbLU7NzN7u3cSQBFWDOLRXSd09l0KECPVOglp2yVRXAtFKHU94rrpmag6LKOJMvPCTNHwp3MHrii3CDukLC0qmhscO/44pkog4YlLmeyPXSoBamK1N2xirQxC/+7iRdt43h7y3IIseD7IcS4WdSwrMXfp/Dv3zU4Ccm+500q8H/bWP87b01/8DI+966Zi/eed55xb7TQ0fWH+dN++fET1n4LawjwTZJPW/pg0x5MWfKXUjwJ2gqC0o+NuD0TDNHC2BAQF5wBWPcenI0bsaGtE2BGNBM4NJn4kFKCsEI+M4wdBUDFVVZcNJbVAgFpyw1gGRH6z7rxQMc66ca0Y/w9IFhqMSOQEfhlQf9O07ZBGtc/btdOZdsahQQ7dXPO44gMhK4deZxrnvZegaJHjdN4vX2NUyHwCAAA= + '5': H4sIAAAAAAAAAH1STU/CQBCdQoGlXjx69u4fMDFQ7LYlgZYAUcqFrLiQxn6QtmD8CR49+XH1V3giXozePJh4NPHq1R/gLt0CanROM2/ee7szuwpAHjYs4tMDN3aPPArAkXKNxLTlkYTXUh4KHZ94XtqTdTcSNFmN/Fgo6sFs6cAUxSaJTmiUFiXDC0/dYMypCih46tFIDcYeVQA1sN4dNLBRBKk3v3gztl+qA5Y7IILl/QxnYtnEqsa5a/3v3KdrHjeQeavt5sL74XDr47w1+8UXOPeu2Zrzn3eWM265XTfMlfnzfevyEdV+CiorcyEQk1b+mDTDF0ewldIgCaMzBIV9E3e6IFu2hcUSEOTcY9j03YAOIzJKdockmtBEYtxwGiRSDooa8cmYPwiCkq3rpmppqQUC1FTr1jogs5t1loWOsTiNaWX+P2Cx0HBIEjcMioB6O/ZoFNOkcsfXfcVuj/oCmr/vTW5flSqDnAz6TGcsQN4hp2n+BWi43UV8AgAA + '6': H4sIAAAAAAAAAH1SPU8CQRCdgwOWs7G0sLKy8Q+YGDi8PSCBOwJEOWJCVlzw4n2Y44D4E6yMlT/AH4JaGAtNLEwsTWhN7Ozd5fYANTrVzNv33uzMrgKQhBWDuHTPHtiHDgXgSLZABrTmkJDXUhJSDZc4TnQm63YgaLIauAOhKHujuQNTpKskOKFBVGSKjj+2vT6nKqDgoUMD1es7VAFUwXqzU8HFNEityeVbceMl32G5BSJY3o5xJpZLWNU4d+n8G/dm/ZHHE8Tear06877fX3s/r41+eQucexdMzfrPO84ZN1svF0sL8+fb2tUDKvwU5BbmQiAmzf0xaYzPWrCVUi/0gzMEqd0SbjRBNkwDiyUgSNhHsOraHu0GpBdud0lwSkOJcf2hF0oJSGvEJX3+IAgypq6XVEOLLBCgqlo2lgGZ3awxL3SMRTemlfn/gNlC/S4Jbd9LA2ptmb3egIa56cXB5ucduz1qC2gy3Tm9flXyDLJi6KPH4zgFSYuMo3m/AJuZfB98AgAA + '7': H4sIAAAAAAAAAH1SvU4CQRCek+NYzsbSwsTE3hcwIXB4P5DAHQJRjoasuJCL90OOA+IDWFha+QC+hB3aGAtNLEysjIktic/gLrcHqNGpZr75vm93ZlcGSMG6iT1y6AydY5cAMCRbxENSc3HEaiEF6YaHXTfuiboTcpqohN6QK8r+eOFAFVIVh6ckjIuM4QYTx+8zqgyyNnJJqPh9l8iAKpre7FQ0QwKhNb18N3ZeCh2a28CD5u0Ep2KxpCkq4670v3Fvtx5ZPEHirdSrc+/7o83ZRW38y5vjzLtoqfZ/3klOudl62SgtzZ/valcPqPhTkF+acwGfNP/HpAk+P4KulPhREJ4hSO+XtEYTRNMyNb4EBGvOCWx4jk+6Ie5Fe10cDkgkUG4w8iNhDSQVe7jPHgRBxtL1kmKqsQUCVFXK5iog0ps1FoWuafw0qhXZ/4D5QoMujpzAlwC1dq1eb0ii/OfNwex8m94etTk0/cgNrl/lAoXsBHpjSG6QhpSNJ/G8Xz4DU8B8AgAA + '8': H4sIAAAAAAAAAH1SPU8CQRAd4DiWs7GwsNLE3j9gYuDwvkjgDoEo0JAVF3LxPsjdATHWFpZW/gB7aju0MRaaWJhYGm3p/AXucXuAGp1q5s17b3dmVwBIwYqObXJg+uaRRQBCJFvAPqlYOAjrRArSNRtbVtTjFNNjNE70bJ8pis5w7kAVfBl7J8SLioxquSPT6YVUAQR5YBFPdHoWEQCVZKXeLskqD4nG5PJN3XrJt2neBBY0b8U4FXOaLEohd6n/jXu78RjGE8TeYrU8874/XJ9eVIa/vBkeehcMqfmfd5xTbrZaVLWF+fNd5eoBFX4KcgtzJmCT5v6YNMZnR9CVEidwvVME6T1NrtWB0w1dZktAkDSPYdU2HdLxcDfY6WCvT4IE5boDJ0gkgZewjXvhgyDIGIqiiboUWSBAZbGoLwMcvVltXiiyzE6jWi78HzBbqNvBgek6PKDGttHt+iTIfb6r47UzenvUYtDkY7d//SrkKdSMWeOb/en5JqQh1cSjaN4vrrUFaXwCAAA= + '9': H4sIAAAAAAAAAH1SPU/CUBS9hQKlLg4Ozu7+ARMDxX6RSEuAKGUhT3wljf0grwWik6ujkz/A3b9AXIyjg4mjgcGY+ANcfW1fATX6pnvPPefcd+97IkAeNgzk4SMndE5cDBAj5RoKcdNFUZxzeSi0PeS6aY1XHcJovES8kCnq/mTpQBXFBiJnmKRJSXODqeMPY6oIojJ2MZH8oYtFEA4VtdM/VLQicN3Z9au281zt09gCdmjcy3Aq5nVFkmPuWv07981ODmTeUquReD8cb39cNSe/+AyPvWumbP3nncWUW27VNX1l/nTfvHkUaj8FlZU5E7BJK39MmuFJC7pS7EcBORegcKAr7Q7whmkobAkC5JxT2PQcHw8IsqO9ASIjHHGUG4z9iMtBUUYeGsYPIkDJVFVdMuTUQgChIdWNdYCnN2svE1VRWDeq5eP/AclCgwGKnMAvgtDdNW07xFHl827rYq5dUqjHoNlif3T7IlYpZGWsxVyjvPcC5C00Tef9Ajbfdz98AgAA + '10': H4sIAAAAAAAAAH1Su04CQRS9CwsMa2Npaez9ARODi/sikV0CRFkaMuJANu6DzC4QP8HSykfrV1gRG6OdhYmlH2CpH+AMOwuo0Vvde+45Z+beGQUgD2s2DsihF3vHPgHgSLmKY9LwccJrKQ+FVoB9P+3JhkcFTVZpEAtFLZwsHJiiWMf0lNC0KJl+NPXCIacqoOhjn1A1HPpEAXSgG+3egW4WQerMLt7MrZe9HstdEMHyboYzsWzpqsa5K/3v3KdrHjeQeavN+tz74Wjj/bwx+cUXOPeuOpr7n3eWM265WTOtpfnzfePyEVV/CipLcyEQk1b+mDTD50ewlZIwiegZgsK+pbfaINuOrYslIMh5J7AeeCHpUzxIdvqYjkgiMW40DhMpB0UNB3jIHwRByTEMS7W11AIBqqs1exWQ2c1ai8LQdXEa08r8f8B8oVEfJ14UFgF1tp3BICZJ5Y6v+4rdHnUFNPtQdke3r5sMcjPoM52xAHkXT9P8C4n47+d8AgAA + '11': H4sIAAAAAAAAAH1SPU8CQRCdgwOWs7G0sDBWNv4BE4OH9wEJ3BEgyhETsuKCF+/D3B0Qf4KVsfIH+ENQC2OhiYWJpYmtiY2xd5fbA9ToVDNv33uzM7sSQBoWDOySHTu09x0CwJB8EYek5uCI1UIaMg0XO058Jmp2wGmiHLghV5S94dSBKrJVHByRIC5yuuOPbK/PqBJI6sAhgez1HSIBqqhas1NR9SwIrfH5i776tNWhuQU8aN5OcCoWS6qsMO7c+Tfu1fI9iwdIvOV6deJ9u7v0dlob/vLmOPMumor1n3eSU26+XtZLM/PH69rFHSr+FBRm5lzAJy38MWmCT1rQlRIv8oMTBJntktpogmiYhsqXgCBlH8Cia3ukG+BetNHFwTGJBMr1B14kpCCrYBf32YMgyJmaVpINJbZAgKpy2ZgHRHqzxrTQVJV3o1qR/Q+YLNTv4sj2vSyg1rrZ64UkKrye7a193tDbozaHxh/S5vHl8wqFrAR677E4zEDawqN43i962U69fAIAAA== + '12': H4sIAAAAAAAAAH2SzU7CQBSFb6GUoW5cujDRuPcFTAwW+0cCLQJRyoaMOJDG/pC2QHwAFy5d+QC+hDt0Y1xo4sLElfEBSNz4Ak7pFFCjs7rzzTln5t5WBMjCioFdcmiH9rFDAGJSKOGQ1BwcxXsuC7mGix0nOeNVO2AyXgrckDnK3mieQB1CFQenJEg2ec3xx7bXj6UiiMrQIYHk9R0iAqooarNTUTQBuNbk8l3betnr0NoCtmjdTjk187oiybF26fyb9nb9MV5PkGZL9eos+/5obXpRG/3KZjzOLpmy9V92WlNtoV7W9EX4813t6gGVfhqKi3BmYJ0W/+g05bMr6EiJF/nBGYLcvq40msAbpqGwISDI2Cew6toe6Qa4F+10cTAgEUe1/tCLuAwIMnZxP/4gCPKmquqSIScRCFBVKhvLgKcva8w3qqKw26iXj/8PmA3U7+LI9j0BUGvb7PVCEhU/bg6m5xv09ajN0ORT3B1cv25SZKXojQJKc5C18Djp9wvfQ2FifAIAAA== + '13': H4sIAAAAAAAAAH1Sv0/CQBR+hQJHXRwcnNS4+w+YGCz2WkigIBAFFnLiQRr7g7QFYpwdHJ38A9yZ3dDFOGjiYOJonNn0H/BKr4AafdN73/u+7+69OwkgDks6seiB4RlHJgUIkHSWeLRsEj+ohTgkqhYxzbAnqobLaaLsWh5X5O3BzIEpkkXinlA3LFKa6QwNuxtQJZBw36SubHdNKgEqYLXWKmAtCUJ9fPmmbb7stljeAB4sb0Y4E4s5LCsBd6H/jXu79hjEE0TecqU49b4/XJ1clAe/vDkeeGdLSuM/7yhn3HQlr+Xm5s935asHlP0pyMzNuYBPmvlj0gifHsFWSm3fcU8RJPZyuFoDUS/pmC8BQcw4hmXLsGnbJR1/u03cHvUFxnX6ti/EIKkQi3SDB0GQKqlqTtaV0AIBKsp5fREQ2c2qs0LFmJ/GtGLwP2C6UKdNfMOxk4DqW6VOx6N+5uNdG62csdujJofGn9JO7/p1g0GNiDW62Z+cr0MC4g0yDOf9Ak/1N8t8AgAA + '14': H4sIAAAAAAAAAH1SPU/CUBS9hVJKXRwcHI27f8DEYLFfJNASIEpZyBNfSWM/yKNCdHJ1dPIHuPsXiItxdDBxNDgYE0cHV1/bV0CNvunec8859937ngSQhxUT+XjfHbmHHgaIkVIFjXDDQ1Gcc3kotHzkeWmN11zCaLxM/BFTVIPx3IEqhDoix5ikSVH3wokbDGKqBJJ64mEiBwMPSyDWVK3dq6m6AFxnevmsbz7u9mhsAzs07mY4FfOGKisxd6n+nfvqJAcyb7lZT7zvDtbfLxrjX3yGx94VS7H/885iyi01q7qxMH+4bVzdi5WfgvLCnAnYpOU/Js3wpAVdKQ6ikJyKUNgz1FYbeNMyVbYEEXLuEaz6boD7BDnRdh+RIY44yg1PgojLgaAgHw3iBxGhaGmaIZtKaiGCWJer5jLA05u15ommqqwb1fLx/4BkoWEfRW4YCCB2tizHGeGo/HmzdjbTzynUZdD0Q9oZXj9tUMjOWC8znfLeCpC30SSd9wvXn0WdfAIAAA== + '15': H4sIAAAAAAAAAH1SPVPCQBDdQIAjNpbWdhb+ARsM5pIwAwkDjBLGGebEg8mYDycJMv4EK8fKj39ixWjhaGdh7w+w1c7CO3IB1NGtdt++9+527xSAPKxYxKe7buweeBSAI+UqiWnTIwmvpTwU2j7xvLQn624kaLIa+bFQ1IKTuQNTFBskOqJRWpQML5y4wYhTFVDw2KORGow8qgCqY73Tr2OjCFJ3evFqrL9s91nugAiW9zKciWUTqxrnLvW/c5+uedxA5q22GjPvh721t7PmyS++wLl31dac/7yznHHLrZphLsyf75qXj6j6U1BZmAuBmLTyx6QZPjuCrZQGSRidIijsmLjdAdmyLSyWgCDnHsKq7wZ0EJFhsjUg0TFNJMYNx0Ei5aCoEZ+M+IMgKNm6bqqWllogQA21Zi0DMrtZe17oGIvTmFbm/wNmCw0HJHHDoAiou2kPhzFNKrd83Vfs9qgnoOnnx/35/gaHnAx6T2csQN4hkzT/AoFDj2V8AgAA + '16': H4sIAAAAAAAAAH1SPU8CQRAd5DgWbCwtrKy08A/Y4OHdAQncESDKERKy4h5evA+zd0D8CVbEyp+DUhgLTSzsTWxN7Ogs3IU9QI1ONfP2vTc7s5sFSMK6gT1y5ITOiUsAOJLJ45BUXRzxOpGEVN3Drjs/k3SHCpqkUC8UipI/WDgwhVzB9JzQeZEuuMHQ8XucmoWs1ncJVfyeS7KAypre6JS1ggyJ5vj6tbD9ctBhuQUiWN6KcSaWipqicu7K+Tfu7dYjjyeIvZVaZeZ9f7z5flUd/PIWOPfOm6r1n3ecM26mVioUl+bPd9WbB5T/KcgtzYVATJr7Y9IYn7VgKyV+FNBLBKnDolZvgGSYhiaWgGDNOYUNz/FJl2I72u9iekGiBOMGfT9KrIGsYg/3+IMgSJu6XlQMdW6BAFWUkrEKSOxm9UWha5roxrQS/x8wW2jQxZET+DKg5p5p2yGJcm+j9s50wm6PWgIaf04no/Yuh6wY+rB5nKUgaeHhfN4vcmIuP3wCAAA= + '17': H4sIAAAAAAAAAONiYGBm4PZLzE0NyyzOTMpJZWAAiXA6JRanBuQkloD4jMwMrMG5iTk5EDkWt8wiqDIWx6LcYqgOz7wyuAlAHWy+iUXZqUUQDrt7Tn55Zl46SCkXA5draU5qkWNeek4qFwOHj6tbSLyPqzsbA2PE/on33ZWuOMQD2ZEMUABkR8HEgZpZPFwdXUBqkeRR1B6QOQMCZxlgZjsG+YLNPhYu8bozoAzDbKg4yGwnf5dIfGbD2EC1nEGe7h4Iwy8cDJh+gsMJXYM9wnCoBqhP7XH4FCYOtgIYpKl5JflFlRwMrM4ersEhDCx+/n6u0EDgYGDKTGEQyM3MS00uSkwrsUpOLCpILWEEqs0vzSthZGJgc0nMTUwHRQgHA7u/m5uHo58LxAgOBg5fR08/ZAEWoMuC4Rw3V1eobUC9LKD0wQAO0PzkxJLM/Dw2Bo4IXf+0tOLUEvt3OwJft8oDXc8RBRXa/+frof4YTZBQJEzobsHi61y2BawMzJGJ5RD/AgDX+AHgfAIAAA== + '18': H4sIAAAAAAAAAH1SPU8CQRCdgwOWs7GwsNLEzsI/YIOH9wEJ3CEQBWJCVlzIxfswdwfEWFtYGSv/BbUdamEsNLGwN9Z0JnYW7sIeoEanmnnz3tud2ZUA4rBgYIfsWoF1YBMAhqSzOCAlG4esFuKQqDjYtic9UbN8ThNl3wm4Iu/2pg5UkSxi/4j4kyKl217fcjuMKoGkdm3iy27HJhKggqpVmwVVT4JQG16+6msvW02a14EHzRsRTsViTpUVxp3rf+PerDyyeILIWy4Xx973e8uj81LvlzfHmXfWVOr/eUc55abLeT03M3++LV09oOxPQWZmzgV80swfk0b4+Ai6UuKGnn+CILGdUytVEA3TUPkSEMSsQ1h0LJe0fNwON1vYPyahQLle1w2FGCQV7OAOexAEKVPTcrKhTCwQoKKcN+YBkd6sMi00VeWnUa3I/geMF+q1cGh5bhJQbcNstwMSZt7f9MHSKb09anBo+Plxd7G/zqB6xBpc74zOViEB8TruT+b9AkdOV0l8AgAA + '19': H4sIAAAAAAAAAH1SPU/CUBS9hQKPujg4OLs5+AdcsNgvEmkJEKXEhDzxlTT2w7QFopOrk3HyX/gXiA7G0cHd4GBMnI2Lg6/tK6BG33Tvueec++59TwDIw5KOXbJrh/aBQwBipFzFIWk4OIpzLg+FlosdJ63xih0wGi8GbsgUNW80c6CKYh0HRyRIk5Lq+GPbG8RUAQR56JBA9AYOEQDtyEq7tyOrReA6k8snde1xq0djE9ihcTfDqZjXZFGKuQv179wXKzmQeYvNeuJ9t7f6dt4Y/eIzPPauGpL5n3cWU265WVO1ufnDTePqHlV/CipzcyZgk1b+mDTDkxZ0pcSL/OAEQWFbk1tt4HVDl9kSEOTsQ1h2bY/0A2xFm30cHJOIo1x/6EVcDooSdvEgfhAEJUNRNFGXUgsEqC7W9EWApzdrzRJFllk3quXj/wHJQv0+jmzfKwLqbBiWFZKo8nG9cjpVzyjUZdDk8/32Yn+dDoTMjPU8VSnvtQB5E4/Teb8A3yQlH3wCAAA= + '20': H4sIAAAAAAAAAH1Sy07CQBS9paUMdePStXt/wMRgsS8SaAkQpWzIiANp7IO0BeInuHTlY+tXuEI3RncuTFz6AW79AGfoFFCjd3XvueecmXtnFAARNmwckEMv8Y59AsCQchUnpOnjlNWCCMV2gH0/60mGF3OapMZBwhW1cLp0oAq5geNTEmdFyfSjmReOGFUBRZ/4JFbDkU8UQHXd6PTruimD0J1fvJvbr/t9mrvAg+a9HKdiydJVjXHX+t+5z9csbiD3VluNhffj0dbHeXP6i89x5l11NPc/7zyn3HKrZlor85eH5uUTqv4UVFbmXMAnrfwxaY4vjqArJWEaxWcIigeW3u6AZDu2zpeAoOCdwGbghWQQ42G6O8DxmKQC5UaTMBUKIGs4wCP2IAhKjmFYqq1lFghQQ63Z64BEb9ZeFoau89OoVmL/AxYLjQY49aJQBtTdcYbDhKSVO7buK3p71OPQvTi+fVP2xhRyOTT/zGYsgujiWZZ/Ae8ukMl8AgAA + '21': H4sIAAAAAAAAAH1SPU8CQRAd4DiWs7G0sLKy8Q+YGDxkD0jgIECUIyZkxQUv3gfZOyD+BCtj5Q/wh4AWxkITCxNLE1sTO3t3YQ9Qo1PNvH3vzc7sagAJWDGJS/ftwD5yKIBA0lkS0KpDQlHHEpCsu8RxZmeKYTNJU3TmBlJR9IZzB65Qy4SdUjYrUnnHH9leT1A10PDAoUz3eg7VAJWw0WiXcF6FWHN8+ZrfeN5t89wCGTxvRTgXKwWs5wR36fwbd7L+IOIRIm+9Vp563x2svZ9Xh7+8JS68s5Wc9Z93lHNuulbMFxbmTzfVq3uU/SnILMylQE6a+WPSCJ+24CulXuizMwTJvQKuN0AxKyaWS0AQt49h1bU92mGkG253COvTMMa5/sALY3FQc8QlPfEgCFIVwyjoZm5mgQCV9aK5DCj8ZvV5YWAsu3GtIv4HTBfqd0ho+54KqLlV6XYDGmbeLg43P2/57VFLQpNE//pF2+lzyJLQ+KMr4iQJCYuMZvN+ARwPMZN8AgAA + '22': H4sIAAAAAAAAAH1SzU7CQBCe2lKWevHowcTEuy9gYrDYPxJoEYhSLmTFhTT2h7QF4gN48OjJB/AlvIEX40ETDyaejA9A4jO4pVtAjc5p5pvv+3ZndiUAHtZN7JFjJ3JOXQKQIIUSjkjNxXFSczzkGh523bQnaE7IaIIcehFTlP3RwoEqxCoOz0mYFnndDcaO30+oEkjq0CWh7PddIgGqqFqzU1F1EbjW5PpD33k96NDcBhY0b2c4FQuGKisJd6X/jTvdekriGTJvuV6dez+cbM6uaqNf3gxPvEuWYv/nneWUW6iXdWNp/nJfu3lEpZ+C4tKcCdikxT8mzfD5EXSlxI+D8AJB7tBQG00QTMtU2RIQrDlnsOE5PumGuBfvdXE4IDFHucHQj7k1EBXs4X7yIAjylqYZsqmkFghQVS6bq4BAb9ZYFJqqstOoVkj+B8wXGnRx7AS+CKi1a/V6EYmLn3dHs8ttenvUZtCUH9y+SfsDCtkMmrynUA54G4/Teb8AuZUeTHwCAAA= + '23': H4sIAAAAAAAAAH1SPU8CQRAduONYzsbCwkoTe/+AicFD7oMEDgSiQENWXMjF+yB3B8RYW1ha+QPsqe3ExlhoYmFiaazp/AXucnuAGp1q5s17b3dmVwYQYMXEDjm0AuvYJgAMyeRwQCo2DlmdECBVc7BtRz1Rs3xOExXfCbii4A7nDlQhlbB/SvyoSOu2N7LcHqPKIKsDm/iK27OJDKioavV2UdUlSDTurt71rde9Ns2bwIPmrRinYtFQlTzjLvW/cScbTyyeIfZWqqWZ98PR+vSyMvzlzXHmnSvnm/95xznlZqoF3ViYv9xXrh9R7qcguzDnAj5p9o9JY3x2BF0pcUPPP0OQ2jfUWh1Es2yqfAkIktYJrDqWSzo+7oY7Hez3SZigXG/ghokkSHns4B57EATpsqYZipmPLBCgklIwlwGR3qw2LzRV5adRrcj+B8wW6nVwaHmuBKixXe52AxJmPz/08do5vT1qcWgi9G/e5N0+hZoxa3x7ML3YhBQITTyK5v0CKSNI5XwCAAA= + '24': H4sIAAAAAAAAAH1Su07DQBBcx07imIaCgpqeH0BCwcGvSMSOkgjiNNERzpGFH9HZSQQVLSUVH0DPLwANoqRAokShQEh8AC1n+5wEEFy1Ozsze7t3EgAPKyby8b4buYceBkiQSg1FuOmhOMk5HoptH3leVhM0lzCaIBM/Yop6MJk7UEWpgcgxJllS1r1w6gbDhCqBpI49TORg6GEJxD1V6/T3VL0EXPfm4kXfeNrp09gGdmjcy3EqFgxVVhLuUv07981JD+TecquRet8frH+cNye/+AxPvGuWYv/nnceUW2nVdWNh/njXvHwQaz8F1YU5E7BJq39MmuNpC7pSHMQhORGhuGuo7Q4IpmWqbAkiFNwjWPXdAA8IcuKtASIjHHOUG46DmCtASUE+GiYPIkLZ0jRDNpXMQgSxIdfNZUCgN2vPE01VWTeqFZL/AelCwwGK3TAogdjdtBwnwnH183rtdKafUajHoFt+dPUsbY8oZOes15lOee9F4G00zeb9ArFJOrN8AgAA + '25': H4sIAAAAAAAAAH1SvVLCQBDeSAhHbCyt7X0BGwzmkjADCQOMEhrmxAuTMT9MEmB8BEsrf97ECm0c7SzsfQBbH8A7cgHU0a12v/u+b2/3TgUowbZNQnrsp/5pQAE4Uq2TlLYDkvFaKkG5G5IgyM9kw08ETdaSMBWKRjRbOTCF0iLJOU3yomIG8dyPxpyqgoqnAU20aBxQFVATG71hE5sKSP3F1bu593Y4ZLkLIlg+KHAmli2s6Zy7cf6d+3LL4w4Kb63TWno/nex+XLZnv/gC5951R3f/8y5yxq12Gqa1Nn99bF8/o/pPQW1tLgRi0tofkxb4sgVbKY2yOLlAUD6ycLcHsu3YWCwBwZZ/BjuhH9FRQrzsYESSCc0kxo2nUSZtgaKTkIz5gyCoOIZhabaeWyBALa1hbwIyu1l3VRgYi25MK/P/AcuFxiOS+XGkAOrvO56X0qx2z9d9w26PBgJ6QB6PCYNcAS0+8xnLUHLJPM+/AC6oF558AgAA + '26': H4sIAAAAAAAAAH1SPU8CQRCdg+NYzsbSwsrKxj9gg4fcB4ncESAKxISsuODF+yB7B8SfYGWs/DmghbHQxMLexNbEzt7dYw9Qo1PNvH3vzc7sqgBZWLOxTw7dyD3xCABHCiUckZqHY15LWcg1fOx58zPZcKmgyRr1I6GoBOOFA1MoVUzPCZ0XedMLJ24w4FQVVH3kEaoFA4+ogA50o9k90E0FpNb0+tXcetnrsrwNIljeSXEmli1dK3Puyvk37mzzkccTpN5avZp43x9tvF/Wxr+8Bc69S065/Z93mjNuoV4xraX5823t5gGVfgqKS3MhEJMW/5g0xZMWbKUkiEN6gSC3b+mNJsi2Y+tiCQgy7ims+25AehT3490epkMSS4wbjoJYyoBSxj4e8AdBkHcMw9Ls8twCAapqFXsVkNnNGovC0HXRjWll/j8gWWjYw7EbBgqg1o7T70ckLr5dHW9/3rHbo46AZqjPY8igtoCmHwl0loNsG0/m834B3Ym2xHwCAAA= + '27': H4sIAAAAAAAAAH1SvU4CQRCekwOWs7G0MDGx9wVMDB7eHwncIRDlaMiKe+Ti/eU4ID6AhaWVD+BL2IGNsdDEwsTK+AAkPoO7sAeo0almvv2+b3ZmVwLIwLqJfXLs9t1TjwAwpFDCfVLzcMJqIQPZho89b34mam7MaaIc+32uKAfDhQNV5Ko4PifxvMjrXjhygx6jSiCpA4/EctDziASoomrNTkXVcyC0xtcf+s7rQYfmNvCgeTvFqVg0VFlh3JXzb9zJ1hOLZ0i95Xp15v1wsjm9qg1/eXOceZcsxf7PO80pt1Av68bS/OW+dvOISj8FxaU5F/BJi39MmuKzFnSlJEjC+AJB9tBQG00QTctU+RIQrLlnsOG7AenG2En2ujiOSCJQbjgIEmENcgr2cY89CIK8pWmGbCpzCwSoKpfNVUCkN2ssCk1VeTeqFdn/gNlCwy5O3DDIAWrtWo7TJ0nx8+5oerlNb4/aHJogh0VEIZtD4/fo9k3aj7KQsfFoPu8XeBOZG3wCAAA= + '28': H4sIAAAAAAAAAH1SPU8CQRCdg+NYzsbCwkoTe/+ADR7eFwncIRDlaMiKC7l4H+bugBhrC0sr/wW1ndgYC00s7I01nb/AXdgD1OhUM2/fe7MzuzJAFtYs7JMjN3ZPPALAkEIJx6Tm4YTVQhZyDR973vxM1N2I00Ql8mOuKAfDhQNVSFUcnZFoXuQNLxy5QZ9RZZC1gUciJeh7RAZU0fRmp6IZEgit+5t3Y+dtv0NzB3jQvJ3iVCyamqIy7sr5N+5k65nFC6TeSr0683483pxe14a/vDnOvEu26vznneaUW6iXDXNp/vpQu31CpZ+C4tKcC/ikxT8mTfFZC7pSEiRhdIEgd2BqjSaIlm1pfAkIMu4prPtuQLoR7iV7XRydk0Sg3HAQJEIGJBX7uM8eBEHe1nVTsdS5BQJUVcrWKiDSmzUWha5pvBvViux/wGyhYRcnbhhIgFq7dq8Xk6T4+WGMNy7p7VGbQxPUY3FOISdlje8Op1fbkIOsg0fzeb8A6KXPsnwCAAA= + '29': H4sIAAAAAAAAAH1SPVPCQBDdQIAjNhYW1vb+ARsM5pIwAwkDjBIa5sQLkzEfTBJgtLK1tPJf+BfUxrG0sHewcJzxB9h6SS6AOrrV7rv33t3ungRQhA2DePTQiZxjlwIkSLVOItp2SZzUQhFKXY+4bnYmqk7IaaIcehFXNPzZ0oEpyi0SntIwKyqaG8wdf5xQJZDw1KWh7I9dKgFqYrU3bGKtDEL/9upF23neH7LcAh4sH+Q4E4s6lpWEu3b+nftmpwG5t9xppd4PR9sfl+3ZLz7HE++6qVj/eec541Y7DU1fmT/dt68fUf2noLYy5wLeae2PTnM8vYKNlPpxEJ4hKB3ouNsD0TANzIeAoOCcwKbn+HQUEjveG5FwQmOBcYOpHwsFKCvEI+NkIQgqpqrqsqFkFghQS24Y64DIXtZdFirG/DamFZP/AelAgxGJncAvA+rvmrYd0bj2ebN1vtAuGDTg0B1KNzBhkJWzXhca472XoGiRedbvF3DPveR8AgAA + '30': H4sIAAAAAAAAAH1Su04CQRS9C8syrIWW1vZ2ViYGFvZFArsEiLI0ZMSBbNwH2V0hfoKllY/Wyq8gNkY7CxNLP8DWD3CGnQXU6FT3nnvOmbn3jgyQhw0L++TQjd1jjwAwpFTFMWl5OGG5kIdCx8eel9ZE3Y04TVQiP+aKejBdOlCF1MTRKYnSpGh44cwNxowqg6ydeSRSgrFHZEANTe8OGpohgdCbX74bO6+VAY0d4IfG/QynYtHUFJVx1+rfuc837NxC5q20mwvvx6Ptj4vW9Bef48y7aqvOf95ZTLmldt0wV+YvD62rJ1T9KSivzLmAd1r+o9MMX1xBR0qCJIzOERRqptbpgmjZlsaHgCDnnsCW7wZkGOFRsj/E0YQkAuWGZ0Ei5EBSsY/HbCEIiraum4qlphYIUFOpW+uASF/WWSa6pvHbqFZk/wMWAw2HOHHDQALU27VHo5gklU35YHL3Rl+P+hwq37MNXDPI4dD8M+2xAHkHz2p7LP4Ch0j7cnwCAAA= + '31': H4sIAAAAAAAAAH1SPU8CQRCdg+NYoLG0sLKysbOygQPugATuCBDliAlZcQ8v3ofZOyB2tlbGSv0J/grUwlhoYmHvDzCxs3cXlg81OtXM2/fe7MxuGiAOGQN7ZMcJnX2XAHAklcchqbs44rUUh0TTw647PZN1hwqarFIvFIqKP5w7MIVSw/SI0GmRLLnByPH7nJqGtDZwCVX9vkvSgKqa3upWtZICUnt88VZaf811WW6BCJZ3ZjgTy2VNLXLu0vk37u3aE49nmHmrjdrE+2F39f2sPvzlLXDunTeL1n/es5xxU41Kqbwwf7mrXz6i/E9BdmEuBGLS7B+TzvBJC7ZS4kcBPUGQKJS1ZgtkwzQ0sQQEMecAVjzHJz2K7Wi7h+kxiSTGDQZ+JMVAKWIP9/mDIEiaul5WjeLUAgGqqRVjGZDZzZrzQtc00Y1pZf4/YLLQoIcjJ/AVQO1N07ZDEuUyexuf9+enDOoIKHtzzeKKDYQsAY0/bB6HCYhbeFTY4vN+AYmMAol8AgAA + '32': H4sIAAAAAAAAAH1SPU8CQRCdkwOWs7G0MBb2dlYmBg64DxK4QyAKNGTFhVy8D7IcEH+AhaWVWlv5D+zQxlhoYmFiZfwB/Al3YQ9Qo1PNvH3vzc7sKgAxWLWwRw6cvnPkEgCOpLK4T8ouDnktxSBe9bDrzs5k3aGCJqvU6wtFwR/OHZgiUcL0hNBZkTTcYOT4XU5VQNEGLqGq33WJAqio6bVWUTMSINXHF5/G1lumxfIGiGB5M8KZWDY1Nc+5S+ffuPcbzzxeIPJWK6Wp9+Ph+uS8PPzlLXDunbXzjf+8o5xxU5WCYS7MXx/Kl08o+1OQXpgLgZg0/cekET5twVZK/DCgpwjiOVOr1kC2bEsTS0Cw4hzDmuf4pE1xJ9xtY9ojocS4wcAPpRVI5LGHu/xBECRtXTdVKz+zQIBKasFaBmR2s+q80DVNdGNamf8PmC40aOPQCfwEoPq23en0SZhB+5OzzbsMg5oCSt9es7hiA6GGgMYfvZt3Za8Xh1gDj3I7fN4v62Qu2XwCAAA= + '33': H4sIAAAAAAAAAH1SPU8CQRCdg+NYzsbSShMrGzsrGzjgDkjgQCAKxISsuJCL92H2DoidjYWVsVJ/go21nR+FsdDEwt4fQG3vLuwBanSqmbfvvdmZXRUgCgsmdsi25Vt7NgHgSCKNfVKxccBrKQqxmoNte3ImGxYVNFmjji8UBXcwdWAKpYTpAaGTIp6zvaHl9jhVBVXv24Rqbs8mKqCibtTbRT2ngNS4O//Irb6n2ixvggiWt0KcieW8rmU5d+78G/d++YXHK4TeWrU09n7aWRqdVga/vAXOvdPlbPM/7zBn3ES1kMvPzN8eKhfPKP1TkJyZC4GYNPnHpCE+bsFWStzAo0cIYpm8XquDbJZNXSwBQcTah0XHckmH4m6w2cH0kAQS43p9N5AioGSxg3v8QRDEy4aR18zsxAIBKmkFcx6Q2c1q08LQddGNaWX+P2C8UK+DA8tzFUCN9XK365MgpZztrn0+HjOoJaDk9RWLSzYQaobQze3W6GQFYhBt4mFmg8/7BWCtcWV8AgAA + '34': H4sIAAAAAAAAAH1SPU/CUBS9hVIedXFwcHZycXNygUK/SKAlQJQSE/LEB2nsh2kLRP+Bk3FSf4KLf8HoYBwd3I0OxsTZ3dfyCqjRO9173jnnvnvfEwGysGRgl2zbob3nEIAYKZRxSBoOjuKay0Ku5WLHmZ7xqh0wGi8FbsgUVW88c6AKoY6DAxJMi7zm+BPbG8ZUEURl5JBA8oYOEQHVFLXdqymaAFzn5uxZW3sq9WhuAQuad1OcinldkeSYu3D+nfs2SAJSb6lZT7zvd1Y/ThrjX3yGx95lU7b+805zyi00q5o+N3+8bZw/oPJPQXFuzgRs0uIfk6Z40oKulHiRHxwhyFV0pdUG3jANhS0BQcbeh2XX9kg/wINoq4+DQxJxlOuPvIjLgCBjFw/jB0GQN1VVlwx5aoEA1aWqsQjw9GatWaEqCutGtXz8PyBZqN/Hke17AqDOhjkYhCQq8eufd6e7JQp1GVS8uqRxQQdCVgq9vmjXK8fvOchaeFLZjOf9AttnqXl8AgAA + '35': H4sIAAAAAAAAAH1SPU8CQRCdg+NYzkJLa3s7KxMDB/dFAncEiHI0ZMWFXLwPcndA/AmWVkZbfwixMdpZmFia2Nr6A9zl9gA1OtXMm/fe7syuDJCHLQv75NiN3VOPADCkVMUxaXk4YbWQh0LHx56X9kTdjThNVCI/5op6MFs5UIXUxNE5idKiaHjh3A3GjCqDrE09EinB2CMyoIamdwcNzZBA6C2u3oy9l8qA5g7woHk/w6lYNDVFZdyN/nfu0w2LW8i8lXZz6f1wsvtx2Zr94nOceVdt1fnPO8spt9SuG+ba/Pm+df2Iqj8F5bU5F/BJy39MmuHLI+hKSZCE0QWCQs3UOl0QLdvS+BIQ5Nwz2PHdgAwjPEoOhziakESg3HAaJEIOJBX7eMweBEHR1nVTsdTUAgFqKnVrExDpzTqrQtc0fhrViux/wHKh4RAnbhhIgHr79mgUk6SyLR9N7l7p7VGfQ4t3hsgVCjkZ9JnOWIC8g+e1A5Z/Ae702IV8AgAA + '36': H4sIAAAAAAAAAH1Sv0/CQBR+QCmlLI4OTk4ubk4mBgr0Bwm0BIhSYkJOvGJjf5C2QNxcnYyTf4B/COpgHDRxMHE0cTVxc/cOroAafdN7333f9+69OxEgBTkduXjXDu0DBwNQJFtEIa47KKJ1IgXpposcZ3bGKXbAaJwUuCFTVLzR3IEo+BoKjnEwKzKq449tr0+pIojy0MGB5PUdLIJQlZVWtyqrPCTak4tXdf250CW5CSxI3olxIuY0WSpT7tL5N+712gONR4i9pUZt6n23t/p+Vh/98mY49S4aZfM/7zgn3GyjomoL86eb+uW9UPwpyC/MmYBNmv9j0hiftiArxV7kBycCpEua3GwBpxu6zJYgQNI+hBXX9nAvQFa03UPBAEcJwvWHXpRIAl9GLurTBxEgYyiKJunlmYUAQk2q6MsAR27WnBeKLLNuRMvR/wHThfo9FNm+x4PQ3jQsK8RRIbe/8Xl7fkqgDoMmbzuDqxexQCAzhj4sGkdpSJloXNqi834B4DAhfnwCAAA= + '37': H4sIAAAAAAAAAH2SP0/CQBjG30KBoy6ODsbB3c3JhEChLZBAi0CUspATD9LYP+QoED+Ag6OTH8Av4YYuxkETBxMnY+LKl/AOroAavem93z3Pc/e+rQIQhw0Te+TIGTonLgHgJJ3HQ1Jzccj3UhwSDQ+77uJMNhwqZLJKvaFwlP3xMoE5klVMzwhdbFJFN5g4fp9LFVD0kUuo6vddogCq6EazU9GLSZBa06uP4u5rrsNqG8RidTvizCyXdFXj2rXzb9q77Se+niHKVuvVefbD8dbssjb+lS04z85bmv1fdlQzbbpeLpZW4S/3tetHlP9pyK7ChUF0mv2j04jPr2AjJX4Y0HMEiUJJbzRBNi1TF0NAEHNOYdNzfNKluBcedDEdkFBi2mDkh1IMkhr2cJ9/EAQpyzBKqqktIhCgqlo214HMXtZYbgxdF7cxr8z/D5gPNOji0An8JKDWntXrDUmYQ4ezi53bHENtgaafmcHNm8KRHaF3TjKDBMRtPCns836/AILYDS58AgAA + '38': H4sIAAAAAAAAAONiYGBm4PZLzE0NyyzOTMpJZWAAiXA6JRanBuQkloD4jMwMrMG5iTk5EDkWt8wiqDIWx6LcYqgOz7wyuAlAHWy+iUXZqUUQDrt7Tn55Zl46SCkXA5draU5qkWNeek4qFwOHj6tbSLyPqzsbA2PE/on33ZWuOMQD2ZEMUABkR8HEgZpZPFwdXUBqkeRR1B6QOwMCZxlgZjsG+YLNPhYu8bozoAzDbKg4yGwnf5dIfGbD2EC1nEGe7h4Iwy8cDJh+gsMJXYM9wnCoBqhP7XH4FCYOtgIYpKl5JflFlRwMrM4ersEhDCx+/n6u0EDgYGDKTGEQyM3MS00uSkwrsUpOLCpILWEEqs0vzSthZGJgc0nMTUwHRQgHA7u/m5uHo58LxAgOBg5fR08/ZAEWoMuC4Rw3V1eobUC9LKD0wQAO0PzkxJLM/Dw2Bo4IXf+0tOLUEge2/hiNr4cagEJRUKH9j2wLFl/ncgAKRUKF7NftCHzdKs/AysAcmVjubALyLwAJEVKSfAIAAA== + '39': H4sIAAAAAAAAAH1SPU8CQRAd4DiOs7GwsLaysbMyMXBwewcJHASIcsSErLiQi/dhlgOi/8DKWPkD7P0LRAtjaWFiaaQwJtb27sIeoEa3mnnz3pud2VUBErBiYY/sOX3n0CUAHEnncJ9UXRzyPJaAZN3DrjurSYZDBU3SqNcXiqI/nDswhVzG9JjQWZIy3WDk+D1OVUFFA5dQze+5RAWlhIxGu4RMGWLN8eWLufGUbbPYBnFY3IpwJpYKSNM5d6n+nfvWnR6IvLVaeep9v7/+cV4d/uILnHvnKrr9n3cUM266VjQLC/PH2+rVg5L7KcgszIVATJr5Y9IIn7ZgKyV+GNBTBZL5Aqo3QLIqFhJLUCDuHMGq5/ikQ3E33OlgekLCGOMGAz+MxUHWsYd7/EEUSFUMo6BZ+sxCAaWsFa1lQGI3q88TAyHRjWkl/j9gutCgg0Mn8GVQmluVbrdPwqy0+Xl3cZBlUEtA48nuyfWzyiFbQJnJq3mzdvaehISNR/ltPu8XstuKjnwCAAA= + '40': H4sIAAAAAAAAAH1SPU8CQRCdg+NYzkJLa3s7KxMDB/dFAncEiHI0ZMWFXLwPcndA/AmWVkZbfwixMdpZmFj6Ayz1B7jL7QFqdKqZN++93ZldGSAPWxb2ybEbu6ceAWBIqYpj0vJwwmohD4WOjz0v7Ym6G3GaqER+zBX1YLZyoAqpiaNzEqVF0fDCuRuMGVUGWZt6JFKCsUdkQA1N7w4amiGB0FtcvRl7L5UBzR3gQfN+hlOxaGqKyrgb/e/cpxsWt5B5K+3m0vvhZPf9sjX7xec4867aqvOfd5ZTbqldN8y1+fN96/oRVX8KymtzLuCTlv+YNMOXR9CVkiAJowsEhZqpdbogWral8SUgyLlnsOO7ARlGeJQcDnE0IYlAueE0SIQcSCr28Zg9CIKireumYqmpBQLUVOrWJiDSm3VWha5p/DSqFdn/gOVCwyFO3DCQAPX27dEoJkllWz6a3L3S26M+hxYfK8jJoM90xgLkHTyvHbD8C91pWB18AgAA + '41': H4sIAAAAAAAAAH1Sv0/CQBR+QClHWRwdnJxc3JxMDBRogQRaAkQpMSEnXrGxP0hbIG6uTsbJP8A/BHUwDpo4mDj6B5i4GHfv4Aqo0Te99933fe/eu5MAEpDRsEN2rcA6sAkAQ9J5HJC6jUNWxxKQbDrYtmdngmr5nCbIvhNwRcUdzR2oQqxh/5j4syJVsr2x5fYZVQJJGdrEl92+TSRAVUVtdatKSYRYe3LxWlp/znVpbgAPmncinIqFsiIXGXfp/Bv3eu2BxSNE3nKjNvW+21t9O6uPfnlznHnn9aLxn3eUU266USmVF+ZPN/XLe5T/KcguzLmAT5r9Y9IIn7agKyVu6PknCJKFstJsgaDpmsKXgCBuHcKKY7mk52Mz3O5hf0DCGOV6QzeMxUEsYgf32YMgSOmqWpa14swCAarJFW0ZEOjNmvNCVRTejWoF9j9gulCvh0PLc0VA7U3dNAMS5jL7G5+356cU6nBo8iHtDK5e6EDIiKB3k8VREhIGHhe22Lxf062h5nwCAAA= + '42': H4sIAAAAAAAAAH2SP0/CQBjG30IpR10cHYyDu5uTiYFC/5FAi0CUspATD9LYP6YUiB/AwdHJD+CXcEMX46CJg4mT8QMw+gW8gyugRm9673fP89y9bysDpGHNwj45dAfusUcAGMkV8YDUPByzvZCGTMPHnjc/E3U34jJRifwBd5SD0SKBOqQqjk5JNN9kDS8cu0GfSWWQtaFHIiXoe0QGVNH0ZqeiGRIIrcnVh7H9WujQ2gG+aN1OODWLpqaoTLty/k17t/nE1jMk2Uq9Ost+ONqYXtZGv7I5Z9lFW3X+y05qqs3Vy4a5DH+5r10/ouJPQ34Zzg280/wfnSZ8dgUdKQniMDpHkCmZWqMJomVbGh8CgpR7Auu+G5BuhHvxXhdHZyQWqDYcBrGQAknFPu6zD4Iga+u6qVjqPAIBqiplaxWI9GWNxUbXNH4b9Yrs/4DZQMMujt0wkAC1duxeb0DiAjqYXmzdFihqczT5lPfPbt5oQ8hJ0DsFlGYg7eBxaZf1+wWxRY22fAIAAA== + '43': H4sIAAAAAAAAAONiYGBm4PZLzE0NyyzOTMpJZWAAiXA6JRanBuQkloD4jMwMrMG5iTk5EDkWt8wiqDIWx6LcYqgOz7wyuAlAHWy+iUXZqUUQDrt7Tn55Zl46SCkXA5draU5qkWNeek4qFwOHj6tbSLyPqzsbA2PE/on33ZWuOMQD2ZEMUABkR8HEgZpZPFwdXUBqkeRR1B6QOwMCZxlgZjsG+YLNPhYu8bozoAzDbKg4yGwnf5dIfGbD2EC1nEGe7h4Iwy8cDJh+gsMJXYM9wnCoBqhP7XH4FCYOtgIYpKl5JflFlRwMrM4ersEhDCx+/n6u0EDgYGDKTGEQyM3MS00uSkwrsUpOLCpILWEEqs0vzSthZGJgc0nMTUwHRQgHA7u/m5uHo58LxAgOBg5fR08/ZAEWoMuC4Rw3V1eobUC9LKD0wQAO0PzkxJLM/Dw2Bo4IXf+0tOLUEge2/hiNr4cagEJRUKH9n7lsCxZfB3qIIxIqZL9uR+DrVnkGVgbmyMRyZxOQfwE6jNIKfAIAAA== + '44': H4sIAAAAAAAAAH1Sv0/CQBR+QIGjLg4Ozk4ubk4mBgq9FhJoCRClxISceCWN/WFKgeh/4GSc/APc/ReIDsbRwcTR6GBMHI2713IF1OhN733v+753792JAClY0ohDd6yBtW9TgBDJFcmA1m0ShHkiBemmQ2x7WhMUy+c0QfKdAVdU3NHMgSkyNeIfUn+aZFXbG1tuP6SKIOKhTX3J7dtUBFTFSqtbxWoGEu3J+ZO69lDostgAfljciXEmFspYkkPuQv0799WMDsTeUqMWed/urr6f1ke/+BwPvYu6bPznHceMm2tU1PLc/P66fnGHij8F+bk5F/BJ839MGuNRC7ZS6gaef4wgXSrjZgsETdcwXwKCpHUAy47l0p5PzGCrR/wjGiQY1xu6QSIJGZk4pB8+CIKsrihlSZOnFghQTapoi4DAbtacJQrGvBvTCuH/gGihXo8EludmALU3dNMc0KAgrH/enO0VGNTh0ORD3D66fGQDIYND+Zdn9Wrl5C0NKYOMS5vhvF+BRgoWfAIAAA== + '45': H4sIAAAAAAAAAH1SPU8CQRCdgwOWs9DS2s7CzsrEwAH3QQJ3BIhyxISsuJCL92HuDog/wcpYGW39IUQLo52FiaU/wFY7C3e5PUCNTjXz5r23O7MrAaRhxcAu2bND+9AhAAzJl3BIGg6OWC2kIdNysePEPVG1A04T5cANuaLqjecOVJGt4+CYBHGR0xx/YntDRpVAUkYOCWRv6BAJUE1R272aomVB6EwvXrWN52KP5hbwoHk3walY1BW5wrhL/e/cxysW15B4y836zPt+f/3trDH+xec48y6ZFes/7ySn3HyzqukL86fbxuUDKv0UFBbmXMAnLfwxaYLPjqArJV7kB6cIMmVdabVBNExD4UtAkLKPYM21PdIP8CDa6ePghEQC5fojLxJSkK1gFw/ZgyDImaqqy0YltkCA6nLVWAZEerPWvFAVhZ9GtSL7HzBbqN/Hke17WUCdLXMwCElUXJV2T25e6O1Rl0PTz4+784NNBlkJ9B7PmIG0hSflbZZ/AQcPiqV8AgAA + '46': H4sIAAAAAAAAAH1SPU8CQRCdgwOWo7G0sLLSws7KBg7uAxI4CBDlCAlZcQ8v3oe5OyB2tlbGyp+DWhgLTSzs/QEmdnYW7sIeoEanmnn73pud2ZUAkpAzsEv27dA+dAgAQ7JFHJKGgyNWC0lItVzsOPMzUbMDThPlwA25ouKNFw5Uka7h4IQE8yKjO/7E9oaMKoGkjhwSyN7QIRKgqqq1+1VVT4PQmV696psvhT7NTeBB826MU7FYVmWFcVfOv3FvNh5ZPEHsLTdrM+/7g/W3i8b4lzfHmXexrpj/ecc55WabFb28NH++bVw/oOJPQX5pzgV80vwfk8b4rAVdKfEiPzhDkCqV1VYbRKNuqHwJCBL2Eay5tkcGAbaivQEOTkkkUK4/8iIhAWkFu3jIHgRBpq5pZdlQ5hYIUE2uGKuASG/WWhSaqvJuVCuy/wGzhfoDHNm+lwbU2albVkiiQq639XF3eU6hLoemnxTobdOBkBlD7xaL4xQkTTwp7bJ5vwAJy3NefAIAAA== + '47': H4sIAAAAAAAAAONiYGBm4PZLzE0NyyzOTMpJZWAAiXA6JRanBuQkloD4jMwMrMG5iTk5EDkWt8wiqDIWx6LcYqgOz7wyuAlAHWy+iUXZqUUQDrt7Tn55Zl46SCkXA5draU5qkWNeek4qFwOHj6tbSLyPqzsbA2PE/on33ZWuOMQD2ZEMUABkR8HEgZpZPFwdXUBqkeRR1B6QOQMCZxlgZjsG+YLNPhYu8bozoAzDbKg4yGwnf5dIfGbD2EC1nEGe7h4Iwy8cDJh+gsMJXYM9wnCoBqhP7XH4FCYOtgIYpKl5JflFlRwMrM4ersEhDCx+/n6u0EDgYGDKTGEQyM3MS00uSkwrsUpOLCpILWEEqs0vzSthZGJgc0nMTUwHRQgHA7u/m5uHo58LxAgOBg5fR08/ZAEWoMuC4Rw3V1eobUC9LKD0wQAO0PzkxJLM/Dw2Bo4IXf+0tOLUEgeOwNetcjscgEJRUKH9f74e6o/RBHqIIxImdLdg8XUu2wJWBubIxHJnE5B/AWsjXw58AgAA + '48': H4sIAAAAAAAAAH1SPU8CQRCdg+NYsLG00sRKCzsrGzi4LxI4EIgCISErLuTifZjjgNjZWFgRK/+FtR1KYSw0sbD3B1DTWbgLy4ca3WrmzXtvdmY3DhCGNRM75MjqWCc2AWBILIU7pGDjgOVCGCIlB9v2rCZqls9pouw7Ha7IuL2FA1VIOeyfEX+WRHXb61tum1HjEFe7NvFlt22TOKCsqpUbWVWXQKgMbz707fdkg8ZV4IfGtTlOxaKhygrjrtS/cR82X9h5hbm3XMxNvZ+ON8bXhd4vb44z71Reqf7nPY8pN1bM6MbS/O2xcPuMUj8FiaU5F/BJE39MOsenLehKiRt4/gWCSNpQS2UQzbyp8iUgCFmnsO5YLmn6uBUcNLF/TgKBcr2uGwghkBTs4DZ7EATRvKYZsqnMLBCgnJwxVwGR3qy0SDRV5d2oVmT/A6YL9Zo4sDxXAlTZy7daHRIkpUF9ZzK6pFCNQ8PPyWhQ36UDoSqHEnf3h+OrLYhAuIr76X027xfg6gCyfAIAAA== + '49': H4sIAAAAAAAAAH1SPU8CQRCdgwOWs7GwsLbSws7KBg5u7yCBOwJEgZiQFffIxfswxwHRf2BlrPwX/gWihbG0sDdaGBNrOwt3j+VDjW418+a9NzuzqwAkYcUkHt1zBs6hSwE4ki2QAa25JOK5lIRUwyOuO63JuhMKmqyG3kAoyv5o7sAU6SoJj2k4TTKGG4wdv8+pCih46NJQ9fsuVQBVsN7sVrCRBqk1uXwyNh7zXRa3QRwWd2Y4E8slrGqcu1T/zn214wMzb7Vejb3v9tffz2ujX3yBc++CpbX/857FjJutl43SwvzhpnZ1jwo/BbmFuRCISXN/TDrD4xZspdSPgvAUQapYwo0myKZlYrEEBAnnCFY9x6e9kNjRbo+EJzSSGDcY+pGUgLRGPNLnD4IgY+l6STW1qQUCVFXL5jIgs5s15omOsejGtDL/HxAvNOiRyAn8NKDWtmXbAxrl5c2P24uDPIM6App8cmSLDYTaAsq9PBvXa2dvKUi2ybi4w+f9Alsg2K58AgAA + '50': H4sIAAAAAAAAAH2SP0/CQBjG39ICRx10dHZ3czIxUOg/EmgJEKUs5MSDNPYPaQvEj+DoZHT1g6CL0c3BxNEP4OoH8I5eATV603u/e57n7n1bGUCELQv75NiN3VOPADBSquKYtDycsL0gQr7jY89LzyTdjbhMUiI/5o56MFslUEehiaNzEqWbouGFczcYM6kMsjb1SKQEY4/IgBqa3h00NKMAQm9x9W7svVYGtHaAL1r3M07NkqkpKtNunH/XPt+wdQtZttJuLrMfT3Y/LluzX3rOWXbVVp3/srOaakvtumGuw18eWtdPqPrTUF6HcwPvtPxHpxlfXkFHSoIkjC4Q5Gum1umCZNmWxoeAIOeewY7vBmQY4VFyOMTRhCQC1YbTIBFyUFCxj8fsgyAo2rpuKpaaRiBATaVubQKJvqyz2uiaxm+jXon9H7AcaDjEiRsGBUC9fXs0iklS2ZaPJndv9PWoz9G9SAGlFDkcLT7THvMgOnheO2D1F2lilQl8AgAA + '51': H4sIAAAAAAAAAH1SPU8CQRAduAOOo7G0sLKysbMyMXBwXyRwR4AoR0zIint48T7IcUDsbK2MlT/AHwJaGAtNLEws/QEmdvbuwh6gRqeaefvem53ZFQE4yBnIw/vOwDlyMQBFskU0wDUXRbROcJBqeMh152e86oSMxkuhN2CKsj9aOBBFuorCUxzOi4zmBmPH71GqCKIydHEo+T0XiyBUFLXZqShaGhKtydWbtvlS6JDcAhYkb8c4EfO6IsmUu3L+jTvdeKTxBLG3VK/OvO8P1t8vaqNf3gyn3kVTtv7zjnPCzdbLmr40f76tXT8IxZ+C/NKcCdik+T8mjfFZC7JS7EdBeCZAqqQrjSbwhmkobAkCJJ1jWPMcH3dDZEe7XRT2cZQg3GDoR4kkpGXkoR59EAEypqrqkiHPLQQQqlLZWAV4crPGolAVhXUjWp7+D5gtNOiiyAn8NAitbdO2Bzgq5A63Pu8uzwnUZtCU69+8int9AlkMmnzYNE5SwFloXNqh834BZ6Zs8nwCAAA= + '52': H4sIAAAAAAAAAH2Su04CQRSGz7oLDGtjaWEs7O2sTAws7AUSWBCIsjRkxIFs3AsZFogPYGFp5QP4EnZgYyw0sTCxMj4AL+EMO1zU6FRnvvn/f+acXRVAhk0b++TEHbhnHgHgJJ3DA1L1cMT3kgyJuo89Lz5TTJcKmaJRfyAcxWC0TGCOZBnTC0LjTcrywrEb9LhUBdUYeoRqQc8jKqCSYTbaJcNKgtSc3Hxae2/ZNqsdEIvVrQVnZqVgaDrXrp1/0053nvl6gUW2VivPsx9Pt2fX1dGvbMF5dq6iO/9lL2qmTdeKVmEV/vpQvX1CuZ+GzCpcGESnmT86XfD5FWykJIhCeokgkS8Y9QYodsU2xBAQbLjnsOW7AelQ3I0OO5j2SSQxbTgMImkDkjr2cY9/EASpimkWNFuPIxCgsla014HCXlZfbkzDELcxr8L/D5gPNOzgyA2DJKDmfqXbHZAoi45nV7v3WYZaAk3l/t27etRnyBFo8hGjBMgOHucPeL9fBU5AonwCAAA= + '53': H4sIAAAAAAAAAH1Sv0/CQBR+paWUujg6aeLk4uZkYqBAS0mgIBClxISceJDG/iBtgbi5ODgZJ/8Ad2c30cE4aOJg4ugfwOzuHVwBNXrTe9/7vu/de3cyAA9LBnLwnhVYhzYGoEgygwJcsVFIc46HeM1Btj2tCZrlM5qg+E7AFAV3MHMgCrGE/GPsT5NE3vaGltulVBlktW9jX3G7NpZBKqpavVVU8yJwjbvLj/z6W7pFYhPYIXEzwolY0FUlR7kL9W/c0eozPS8QeSvV0sT7cX9lfF4Z/PJmOPXOlHPmf95RTLjJaiGvz81f7ytXT1LmpyA1N2cCNmnqj0kjfNKCrBS7oeefSBDP6mqtDoJRNlS2BAli1hEsO5aL2z7qhNtt5PdwyBGu13dDLgZiDjmoSx9EgkRZ03TFyE0tJJBKSsFYBARys9os0VSVdSNagf4PmCzUa6PQ8lwRpMZmudMJcJgWLw42Ph9OCdRk0IjvXb/LOz0CmQxK3dzujs/WIA68iYbZLTrvF46HHx58AgAA + '54': H4sIAAAAAAAAAH1SPU/CUBS9paWUujg4ODu5uDmZGCj0iwQKAaKUmJAnvpLGfpC2QPQfOBknf4C7f8GPwTg6mDgaHYyJs7uv5RVQo2+699xzzn33vicCsLBkIBfv2KG972CAGMmXUIgbDorinGEh23KR40xrnGoHlMZJgRtSRcUbzxyIgq+h4BAH0ySnOf7E9gYxVQRRGTk4kLyBg0UQqora7lUVjQemc3X2rK09FnskNoEeEndTnIg5XZHkmLtQ/859s5IDqbfUrCXed7urHyeN8S8+xWPvUl02//NOY8LNNyuaPjd/uGmc3wuln4LC3JwK6KSFPyZN8aQFWSn2Ij84EiBb1pVWGzijbih0CQJk7ANYdm0P9wNkRVt9FAxxxBCuP/IiJgO8jFw0iB9EgFxdVXXJkKcWAgg1qWIsAhy5WWuWqIpCuxEtF/8PSBbq91Fk+x4PQmejblkhjorc+uft6V6RQF0KXbPDiydxe0ggk0KF1xftcuX4PQusiSblzXjeLzVNxwJ8AgAA + '55': H4sIAAAAAAAAAH1Su07DQBBcJ45zMQWU1PR0VEgoceJXpMSOkgjiNOEI58jCD2Q7ifgESioELR8SaBB0FEiUfAAtH8BdfHkAgq1252Zmb/dOBsjDhoUDcugl3olPABhSquKEtHycslrIQ6ETYN/PzkTdizlNVOIg4Yp6OFk6UIXUxPEZibOiaPjR1AtHjCqDrI19EivhyCcyoIamdwcNzZBA6M2u3o2d18qA5g7woHl/gVOxaGqKyrhr59+5zzcsbmHhrbSbc+/Ho+2Py9bkF5/jzLtqq85/3oucckvtumGuzF8eWtdPqPpTUF6ZcwGftPzHpAt83oKulIRpFF8gKNRMrdMF0bItjS8BQc47ha3AC8kwxm66P8TxOUkFyo3GYSrkQFJxgEfsQRAUbV03FUvNLBCgplK31gGR3qyzLHRN492oVmT/A+YLjYY49aJQAtTbtV03IWllUz44v3ujt0d9Dt0jl8UxhRwOzT6zGQuQd/C0tsfyL0GKS0N8AgAA + '56': H4sIAAAAAAAAAH1SPU8CQRAd5IDlaCwtrKxs7Kxs4OC+SOAgQBSICa64hxfvw+wdEDtbK2PlzwEtjIUmFvb+ABM7e3dhD1CjU828fe/NzuzKAEnIWdgj+07oHLsEgCPZIg5J3cURrxNJSDU97LrzM0l3qKBJCvVCoSj7o4UDU6SrmJ4ROi8yhhuMHX/AqTLI2tAlVPEHLpEBVTS91atoRhoS7cnNm7H1WuixvAMiWN6NcSaWTE1ROXfl/Bt3uvnE4xlib6VRnXk/HGy8X9VHv7wFzr2LNbXzn3ecM262UTbMpfnLXf32ERV/CvJLcyEQk+b/mDTGZy3YSokfBfQCQapkas0WSFbN0sQSEKw5J7DuOT7pU2xHe31Mz0mUYNxg6EeJNUir2MMD/iAIMjVdNxVLnVsgQFWlbK0CErtZc1Homia6Ma3E/wfMFhr0ceQEfhpQe6dm2yGJCrnD7c/760sGdQU0RTaPIwZ1BDT5mEGnKUh28Li0y+f9Ak9Osrh8AgAA + '57': H4sIAAAAAAAAAH1SvU4CQRAe4IDlbCwtjIW9nZWJgYO7AxK4QyDK0eCKe+Ti/ZC9A+IDWFha+QC+hB3YGAtNLEysjA/AS7gLy48anWrm2+/7Zmd2ZYAEbBjYI8dO6Jy5BIAjmTwOSc3FEa9jCUg2POy68zNJd6igSQr1QqEo+8OlA1OkqpheEDov0kU3GDl+j1NlkLWBS6ji91wiA6poerNT0YopiLXGN5/F3bdch+UWiGB5e4EzsVTSFJVz186/cSfbzzxeYOGt1Ksz78eTrel1bfjLW+DcO2+q1n/ei5xxM/VysbQyf32o3T6h/E9BdmUuBGLS7B+TLvBZC7ZS4kcBvUSQLJS0RhMkwzQ0sQQEceccNj3HJ12K7eigi2mfRDHGDQZ+FItDSsUe7vEHQZA2db2kGOrcAgGqKmVjHZDYzRrLQtc00Y1pJf4/YLbQoIsjJ/BTgFp7pm2HJMqho+nVzn2OQW0BTZDN45RBloDGH/27d/mwn4SEhUeFfT7vFy2mnuh8AgAA + '58': H4sIAAAAAAAAAH1Sv0/CQBR+lVKOujg6aeLk4ubkAgVaIIEWgSglJnjilTT2h2kLxM3Fwck4+V84u4kOxkETB3f/AGZ37+AKqNE3vffd933v3ruTARKwrGOX7NmhfeQQAIakczgkNQdHrBYSkGy42HGmZ6JmB5wmKoEbckXZG8wcqEKq4uCEBNMiVXT8oe31GFUGWe07JFC8nkNkQBVVa3YqalECoXV//VHceM92aG4CD5q3Y5yKxZKqFBh34fwbd7T2wuIVYm+lXp14P+2vji9rg1/eHGfeOaNg/ucd55SbrpeLpbn520Pt5hnlfgoyc3Mu4JNm/pg0xict6EqJF/nBGYJkvqQ2miDqhq7yJSBYso9hxbU90g2wFe10cXBKIoFy/b4XCUsgFbCLe+xBEKQMTSspemFqgQBVlbK+CIj0Zo1Zoakq70a1IvsfMFmo38WR7XsSoNaWYVkhibLS1cHm5+M5hdocGiGLxSGFTA5lbu92xxfrkISEiYf5bTbvF6ZvwVR8AgAA + '59': H4sIAAAAAAAAAH1SPU/CUBS9lVIedXFwcHZycXNygUK/SKAlQJQSE3ziK2nsh2kLRP+Bk3HyX/gX/BiMo4O70cGYOLv7Wl4BNXqne88757x3730iQA6WDeyRHSdyDlwCkCDFCo5I08VxUnM5yLc97LrTM151QkbjpdCLmKLmj2cOVCE0cHhEwmlR0Nxg4vjDhCqCqIxcEkr+0CUioLqidvp1RROA615fPGvrT+U+zS1gQfNehlMxryuSnHAXzr9z3+w0IPOWWo3U+3537eOsOf7FZ3jiXTFl6z/vLKfcYqum6XPzx9vm5QOq/BSU5uZMwDot/dFphqdX0JESPw7CEwT5qq60O8AbpqGwISBYcg5hxXN8MgixHW8PcHhMYo5yg5Efc0sgyNjDw2QhCAqmquqSIU8tEKCGVDMWAZ6+rD0rVEVht1Etn/wPSAcaDHDsBL4AqLtp2nZE4jK/8Xl3vlemUI9BNyjdwD6FLAaVXl+0q9XT9zzkLDypbiX9fgEdpRlIfAIAAA== + '60': H4sIAAAAAAAAAI2Sv0/CQBTHX6GUo66aOBp3/wEXKPbakkCLQJSykAMO0tgfSVtA3R0cnfwvmN2Mi3F0cDcmbvwTXukVUGPiTe99730/d+/dyQB52DGJR8+cyBm4FCBRSlUS0aZL4iQX8lBoe8R10z1Rc0JeJiqhF3FHzZ+tCcwhNUh4QcM0KepuMHf8SVIqg4ynLg0Vf+JSGVAda51+HesSCN3Hu3f98K3SZ7ENfLG4l+nMLBpYUZParf1vtVkMGVtpNVbs5/P95W1z9ovN9YRdtVT7n+xSq6YbG/jrU/P+BVV/GsobODfwTst/dJrpqyPYSKkfB+EVgsKJgdsdEE3LxHwICHLOCPY8x6fDkIzj43kQjKjfj1wyEJghmPqxkANJJR6ZJK+CoGhpmqGYaspBgBpKzdwWRHa99jrRMOZHMq+YfJJ0qsGQxE7gS4C6R9Z4HNG4sm4B9bhUXjycLm8OEsnOpM/rD32xe1mAvE3mqeML3NMY7oECAAA= + '61': H4sIAAAAAAAAAI2Sv0/CQBTHX6GUo66aODm4+w+4QLHXlgRaAkQpCzngII39kbQF1N3B0cn/wtmNuBhHB3dD4sY/4ZVeATUm3vTe9973c/fenQyQhz2TePTciZyBSwESpVQlEW26JE5yIQ+FtkdcN90TNSfkZaISehF31PzZhsAcUoOElzRMk6LuBnPHnySlMsh46tJQ8SculQHVsdbp17EugdBd3H/ox++VPott4IvFvUxnZtHAiprU7ux/q81iyNhKq7Fmv1wcru6as19srifsqqXa/2SXWjXd2MLfnpsPr6j601DewrmBd1r+o9NMXx/BRkr9OAivERTODNzugGhaJuZDQJBzRnDgOT4dhmQcn86DYET9fuSSgcAMwdSPhRxIKvHIJHkVBEVL0wzFVFMOAtRQauauILLrtTeJhjE/knnF5JOkUw2GJHYCXwLUPbHG44jGlU0LqMelxXJ1e/TUSiSbS+XPm6X+uH9VgLxN5qnjC9Xovx+BAgAA + '62': H4sIAAAAAAAAAI2Sz07CQBDGp1BgqVdNPHv3BbxAsf9IoCVAlHIhCyyksd0mbQHlDTx68i18BeLFePTgXU28efMJ3KVbQI2Je5r5dr7f7syuApCHPRsH5MyLvaFPALhSruGYtHyc8FzKQ6ETYN9P92TDi0SZrEZBLBx1Ot8QmKPYxNEFidKkZPrhwqNTXqqAos98Eql06hMFUEM3uoOGbhZB6q1uXsyj5+qAxS6IxeJ+pjOzbOmqxmt39r/VZjFkbLXdXLMfzg8/rlvzX2yhc3bN0dx/ssvtumlt4U/3rdtHVPtpqGzhwiA6rfzRaaavj2AjJTQJoysEhVNL73RBth1bF0NAkPPGcBB4lIwiPElOFmE4JnQQ+3goMUM4o4mUg6KGAzzlr4Kg5BiGpdpaykGAmmrd3hVkdr3OJjF0XRzJvDL/JOlUwxFOvJAWAfWOnckkJkl10wLqC2n1+Wbe7S9fmeQKqfK+5NplAfIuXqSOLxH5/PeBAgAA + '63': H4sIAAAAAAAAAI2SMU/CQBTHX6HAUVdNnN39Ai5Q7LUlgZYAUcpCDjhIY3tN2gLqN3B08lv4FdDFODg4uBsTN7+Cg1d6BdSYeNN7/3v/3917dwpAHnYs4tMTN3KHHgVIlHKNRLTlkTjJpTwUOj7xvHRP1t1QlMlq6EfCUWfzNYE7ik0SntEwTUqGFyxcNk1KFVDwzKOhyqYeVQA1sN4dNLBRBKm3vH41Dl6qAx47IBaP+5nOzbKJVS2p3dr/VpvFkLHVdnPFfjjd/7hqzX+xhZ6wa7bm/JNdbtcNcwN/vm/dPKLaT0NlAxcG0Wnlj04zfXUEHyllcRBeICgcm7jTBdmyLSyGgCDnjmHPdxkdhWQSHy2CYEzZIPLIUOKGYMZiKQdFjfhkmrwKgpKt66ZqaSkHAWqqdWtbkPn1OutEx1gcyb1y8knSqQYjErsBKwLqHdqTSUTj6roF1BfS8vMpWXdccoRUeb98M253zwuQd8gidXwBzqUOnoECAAA= + '64': H4sIAAAAAAAAAI2SzU7CQBDHp7TAUq+aePbkxRfwAsV+kUhLgCglJrjAQhrbbdIWUN/Ak/HkW/gKfhyMRw/ejYk3z97d0i2gxsQ9zfx3/r/dmV0ZQIQ1C/vkwI3cvkcAEqVUxRFpeDhOckGEfMvHnpfuSbob8jJJCf2IO2p0uiAwR6GOwxMSpknR8IKZS8dJqQyyNvFIqNCxR2RA+5re7u1rRgGEzu3Vq7H1Uumx2AG+WNzNdGaWTE1Rk9qV/W+1WQwZW2nW5+zHw82Pi8b0F5vrCbtqq84/2aVmzTCX8Of7xvUTqv40lJdwbuCdlv/oNNPnR7CREhoH4RmC/J6ptdogWbal8SEgyLlD2PBdSgYhHsW7syAYEtqLPNwXmCGY0FjIQUHFPh4nr4KgaOu6qVhqykGA6krNWhUkdr3WItE1jR/JvFLySdKpBgMcuwEtAOrs2KNRROLKogXU5dKdeLT9+XB5zCSHS+X38zfjZv00D6KDZ6njC5J7sYaBAgAA + '65': H4sIAAAAAAAAAI2Sv0/CQBTHX6HAUVdNnBzc/QdcoNhfJNBWIEpZyAEHaWyvSVtA3R0cnfwvnN3UxTg6uBsTN/4Jr/QKqDHxpve+976fu/fuJIA8bJnYJydu5A48ApAo5RqOiO3hOMmFPBTaPva8dE/U3JCXiXLoR9xRp7MVgTmKTRyekTBNSroXzF06SUolkNSpR0KZTjwiAWqoWqffUPUiCN2Hm3d9/63aZ7EDfLG4l+nMLBqqrCS1G/vfarMYMrbcai7Zz6e7i2t79ovN9YRdsxTnn+xyq64ba/jrk337gmo/DZU1nBt4p5U/Os305RFspITGQXiBoHBkqO0OiKZlqnwICHLuCHZ8l5JhiMfx4TwIRoT2Iw8PBGYIpjQWclBUsI8nyasgKFmaZsimknIQoKZcNzcFkV2vvUo0VeVHMq+YfJJ0qsEQx25Ai4C6B9Z4HJG4umoB9bj0iI4XV3v3NpMcLlU+Lz/0u+3zAuQdPE8dX89/vHSBAgAA + '66': H4sIAAAAAAAAAI1SzU7CQBCeQilLfQA9e/cFvGChfyTQEiBKuZAVt7ihP2ZbJD6B8ehJfRrixejNg3cfwHcwbukWUGPinGa+me+bnZlVAcqw4+CQHNOEngYEIENqDZyQboDTLJbKUOmHOAjynGxSJspkjYWJYLSiy7UCZygdzGaE5UHVCuIFjaZZqQqqMQ8I06JpQFRAbcMcjNuGpYA0XN6+W/tvR2PueyCM+6MC52TZNjQ9q93Kf6stfCi0tV5npf10svdx0738pS3wTLvh6t4/tWu9lmVvxF8fu3fPqPGTUN+IC4KYtP7HpAW+asFXSqI0ZlcIKk3b6A9AdlzHEEtAUKJnsBvSiEwY9tPDlNGLBb/N+DyOZxKnxPMolUqg6DjE0+wuCKquadqao+dKCFBHaznbgMwf2F8HpmGIppwrZ98k32s8wSmNIwXQ8MD1/YSk9ZcHbvd8CDQS0GYu5Alo+emvrAJlDy+a11n6C3gt/j+DAgAA + '67': H4sIAAAAAAAAAI1SzU7CQBCeQoGlPoCevfsCXrDQbUsCLQGilAtZcYsN/THbAvEJjEdP6tOgF6M3D959AN/BuKVbQI2Jc5r5Zr5vdmZWASjCjkUCeuzF3qlPAVKkWicx7fgkSWOpCKVeQHw/y8m6x0SZrLIgFoxmOF8rcEa5TdiUsiyoGH608MJJWqqAgmc+ZWo48akCqIX1/qiFjTJIg+XNu7H/djTivgPCuD/McU6WTaxqae1W/ltt7kOurXbbK+2nk72P6878l7bAU+26rTn/1K52m4a5EX997Nw+o/pPQm0jLghi0tofk+b4qgVfKQ2TiF0iKDVM3OuDbNkWFktAUPDOYDfwQjpmxE0OE+ZdLPhtRudRNJU4JZqFiVSAskYCMknvgqBi67qpWlqmhAC11aa1Dcj8gb11oGMsmnKunH6TbK/RmCReFJYBDQ5s141pUnu553bHh0BDAT2gfC7kCGj56a6sBEWHLBpXafoLRxWBAIMCAAA= + '68': H4sIAAAAAAAAAI1SvVLCQBDeQAgHVlZa21vZ2UAgf8xAwgCjhIY58YI35MdJAoxP4Fha+Tho41ha2PsAvoPjHbkA6jjjVrvf7vft7e5VAYqwZ+OAnNGEXvgEgCOVBk5I18cpj6UilPoB9v0sJxs0FmWyGgeJYLTCxUaBMZQOjmckzoKy6UdLGk55aRWq+twnsRpOfVIF1NaNwbitmwpIw9X9u3n0Vh8z3wVhzB/lOCPLlq5qvHYn/6029yHXVnudtfbz+eHHXXfxS1vgXLvhaO4/tSu9lmltxV+fug8vqPGTUNuKC4KYtPbHpDm+bsFWSsI0im8QlJqW3h+AbDu2LpaAoEAv4SCgIZnE2EtP05heL9ltxldRNJMYJZqHqVQARcMBnvK7ICg7hmGptpYpIUAdtWXvAjJ7YH8TGLoumjKuzL9JttdoglMahQqg4bHjeQlJ6/sn3OoMGgnoEeVzIVdAq09vbSUounjZvOXpL4HOfiiDAgAA + '69': H4sIAAAAAAAAAI1SvVLCQBDeQAhHrKy0treys4FA/piRhAFGCQ1z4gVvyI+TBBifwLG08nEYG8fSwt4H8B0c78gFUMcZt9r9dr9vb3dPBSjDnoNDck5TehkQAI7Umjgl3QBnPJbKUOmHOAjynGzSRJTJWhKmgtGOFhsFxlA6OJmRJA+qVhAvaTTlpSqoxjwgiRZNA6ICOjPMwfjMsBSQhquHd+vorTFmvgfCmD8qcEaWbUPTee1O/ltt4UOhrfU6a+3ni8OP++7il7bAuXbT1b1/atd6bcveir8+dR9fUPMnob4VFwQxaf2PSQt83YKtlERZnNwiqLRsoz8A2XEdQywBQYlewUFIIzJJsJ+dZgm9WbLbjK/jeCYxSjyPMqkEio5DPOV3QVB1TdPWHD1XQoA6WtvZBWT2wP4mMA1DNGVcmX+TfK/xBGc0jhRAw2PX91OSNfZPuDUYNBLQdi7kCWj16a+tAmUPL1t3PP0FvvYBF4MCAAA= + '70': H4sIAAAAAAAAAI2Sv07CUBTGT6GUS10cnZ1cfAEXKPa2JYGWAFFKTMgVLqSxf5K2QHwC42ScfBzUwTg6uPsALi7u3ktvATUmdjrnd7/vuz2nVQGKsGOTgJ54iXfuUwBOKnWS0LZPUt5LRSh1A+L72ZlseLGQyVocJMLRCOfrBOZQWiS+oHHWlE0/WnjhlEtVUPHMp7EWTn2qAmpiozdsYlMBqb+8fTP3X2tDVrsgHlYPcs7MsoU1nWu3zr9p8xrybK3TWmU/ne69X7fnv7IF59l1R3f/mV3pNExrE/7y0L57RvWfhuomXBjEpNU/Js356gq2UhqmUXyJoHRs4W4PZNuxsVgCgoI3ht3AC+koJpP0yCfjMY0lpo1mYSoVQNFJQKb8gyAoO4ZhabaeRSBALa1hbwOZvVl33RgYi9uYV+b/R7bQaERSLwoVQP1DZzJJaForHHw+3pzVGBoIdL8eCLkCLT8yVIKiSxbHV7z+AhPs4CV8AgAA + '71': H4sIAAAAAAAAAI1SPU/CUBS9hVIedXF0cnBy8Q+4QKFfJNBWIEqJCXnCgzT2I2kLxB9gjJNx8q+4oQ7G0cHBzR/A7O4rfQXUmPime88959x373siQB62DOyRYydyzlwCkCClKo6I5eI4ybk8FNoedt20xqtOyGi8FHoRU9T96cqBKoQmDs9JmCZFzQ1mjj9OqCKIysQloeSPXSICaihqp99QNAG47vz2Q9t7q/RpbAM7NO5lOBXzuiLJCXej/o2bxZB5S63m0vv5ZGdxbU1/eTM88a6asv1P71Krrulr89dH6+4FVX8KymtzJmCTlv+YNMOXLehKiR8H4QWCQk1X2h3gDdNQ2BIQ5JwhbHuOTwYhHsWHLh4OSchRbjDxYy4Hgow9PE4eBEHRVFVdMuTUAgFqSnVjE+DpzdqrRFUU1o1q+eR/pAsNBjh2Al8A1D0wR6OIxJXc/ufTzWmFQj0GPawGQjaD5u9Hi8vde6sAeRvPaldJ+QsuoJmQfAIAAA== + Block: + '0': + X-Offset: 2.0 + Y-Offset: 0.0 + Z-Offset: -2.0 + Type: WORKBENCH + Data: 0 \ No newline at end of file diff --git a/src/de/Ste3et_C0st/Furniture/Camera/Utils/GetBlocks.java b/src/de/Ste3et_C0st/Furniture/Camera/Utils/GetBlocks.java index e774e89..8359ed9 100644 --- a/src/de/Ste3et_C0st/Furniture/Camera/Utils/GetBlocks.java +++ b/src/de/Ste3et_C0st/Furniture/Camera/Utils/GetBlocks.java @@ -1,226 +1,62 @@ package de.Ste3et_C0st.Furniture.Camera.Utils; -import java.awt.Color; -import java.util.HashMap; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.List; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; -import org.bukkit.map.MapPalette; - import de.Ste3et_C0st.Furniture.Main.main; +import de.Ste3et_C0st.FurnitureLib.main.FurnitureLib; +import de.Ste3et_C0st.FurnitureLib.main.entity.Relative; -public class GetBlocks { - public HashMap> returnBlocks(Location location, int höhe, int links){ - HashMap> blockList = new HashMap>(); - BlockFace b = main.getLocationUtil().yawToFace(location.getYaw()); - höhe = höhe/2; - //links = links/2; - location = main.getLocationUtil().getRelativ(location, b, 0D,- (double) (links/2)); - Integer tiefe = 24; - int layer = 0; - for(int x = 0;x<=tiefe;x++){ - HashMap layerlist = new HashMap(); - Integer blockindex = 0; - for(int y = 0;y<=links;y++){ - for(int z = 0;z<=höhe;z++){ - Block b1 = main.getLocationUtil().getRelativ(location, b,(double) x, (double) y).add(0,z,0).getBlock(); - byte byte1 = getByteFromBlock(b1); - layerlist.put(blockindex, byte1); - blockindex++; - layerlist.put(blockindex, byte1); - blockindex++; +public class GetBlocks { + + Class CraftBlockClass = null; + Class CraftMagicNumbersClass = null; + + public List returnBlocks(Location startLocation, int width, int heigt, int depth, int offsetZ){ + try{ + String str = FurnitureLib.getInstance().getBukkitVersion(); + this.CraftBlockClass = Class.forName("org.bukkit.craftbukkit."+str+".block.CraftBlock"); + this.CraftMagicNumbersClass = Class.forName("org.bukkit.craftbukkit."+str+".util.CraftMagicNumbers"); + + BlockFace face = main.getLocationUtil().yawToFace(startLocation.getYaw()).getOppositeFace(); + List layerList = new ArrayList(); + for(int i = depth; i>=0; i--){ + Layer l = new Layer(i); + Location start = new Relative(startLocation, - offsetZ - i, 0, (width/2), face).getSecondLocation(); + for(int z = 0; z < width; z++){ + for(int y = 0; y < heigt; y++){ + Location loc = new Relative(start, 0, y, - z, face).getSecondLocation(); + l.addPixel(new Pixel(width - z, heigt - y, getByteFromBlock(loc.getBlock()))); + } } + layerList.add(l); } - blockList.put(layer, layerlist); - layer++; + return layerList; + }catch(Exception ex){ + ex.printStackTrace(); + return null; } - return blockList; } - @SuppressWarnings("deprecation") - public Color getRedByte(Block b){ - return MapPalette.getColor((byte) b.getTypeId()); - } - - @SuppressWarnings("deprecation") public Byte getByteFromBlock(Block b){ - Material m = b.getType(); - Integer subID = (int) b.getData(); - switch (m){ - //green - case GRASS:return (byte) 4; - case MYCEL:return (byte) 4; - //yellow - case SAND: return (byte) 8; - case GRAVEL: return (byte) 8; - case SOUL_SAND: return (byte) 8; - case SANDSTONE: return (byte) 8; - //Light Gray - case STAINED_CLAY: return (byte) 12; - case SPONGE : return (byte) 12; - case BED_BLOCK: return (byte) 12; - case WEB: return (byte) 12; - //-- - case GOLD_BLOCK: return (byte) 13; - case IRON_BLOCK: return (byte) 13; - case DIAMOND_BLOCK: return (byte) 13; - case IRON_DOOR_BLOCK: return (byte) 13; - case IRON_BARDING: return (byte) 13; - case BREWING_STAND: return (byte) 13; - case CAULDRON: return (byte) 13; - //RED - case TNT: return (byte) 16; - case LAVA: return (byte) 16; - //BLUE - case ICE: return (byte) 21; - case PACKED_ICE: return (byte) 20; - case LAPIS_BLOCK: return (byte) 100; - //GREEN DARK - case SAPLING: return (byte) 28; - case LEAVES: return (byte) 28; - case LEAVES_2: return (byte) 28; - case LONG_GRASS: return (byte) 28; - case DEAD_BUSH: return (byte) 28; - case RED_ROSE: return (byte) 28; - case YELLOW_FLOWER: return (byte) 28; - case DOUBLE_PLANT: return (byte) 28; - case RED_MUSHROOM: return (byte) 28; - case BROWN_MUSHROOM: return (byte) 28; - case WHEAT: return (byte) 28; - case CACTUS: return (byte) 28; - case SUGAR_CANE_BLOCK: return (byte) 28; - case PUMPKIN: return (byte) 28; - case JACK_O_LANTERN: return (byte) 28; - case MELON_BLOCK: return (byte) 28; - case PUMPKIN_STEM: return (byte) 28; - case MELON_STEM: return (byte) 28; - case VINE: return (byte) 28; - case WATER_LILY: return (byte) 28; - case NETHER_WARTS: return (byte) 28; - case DRAGON_EGG: return (byte) 28; - //WHITE - case WOOL: switch (subID) { - case 0: return (byte) 34; - case 1: return (byte) 62; - case 2: return (byte) 66; - case 3: return (byte) 70; - case 4: return (byte) 122; - case 5: return (byte) 78; - case 6: return (byte) 82; - case 7: return (byte) 15; - case 8: return (byte) 14; - case 9: return (byte) 92; - case 10: return (byte) 99; - case 11: return (byte) 51; - case 12: return (byte) 107; - case 13: return (byte) 31; - case 14: return (byte) 19; - case 15: return (byte) 119; - default: return (byte) 34; - } - case SNOW: return (byte) 34; - case SNOW_BLOCK: return (byte) 34; - //GRAY - case CLAY: return (byte) 36; - case MONSTER_EGG: return (byte) 36; - //Borwn - case DIRT: return (byte) 53; - //Farmlandcase F: return (byte) 9; - //GRAY - case STONE: return (byte) 56; - case COBBLESTONE: return (byte) 56; - case BEDROCK: return (byte) 56; - case GOLD_ORE: return (byte) 56; - case IRON_ORE: return (byte) 56; - case COAL_BLOCK: return (byte) 56; - case LAPIS_ORE: return (byte) 56; - case DISPENSER: return (byte) 56; - case DROPPER: return (byte) 56; - case PISTON_STICKY_BASE: return (byte) 56; - case PISTON_BASE: return (byte) 56; - case OBSIDIAN: return (byte) 56; - case MOB_SPAWNER: return (byte) 56; - case DIAMOND_ORE: return (byte) 56; - case FURNACE: return (byte) 56; - case STONE_PLATE: return (byte) 56; - case REDSTONE_ORE: return (byte) 56; - case NETHERRACK: return (byte) 56; - case STONE_SLAB2: return (byte) 56; - case BRICK: return (byte) 56; - case BRICK_STAIRS: return (byte) 56; - case NETHER_BRICK: return (byte) 56; - case NETHER_BRICK_STAIRS: return (byte) 56; - case NETHER_FENCE: return (byte) 56; - case ENCHANTMENT_TABLE: return (byte) 56; - case ENDER_STONE: return (byte) 56; - case SMOOTH_BRICK: return (byte) 56; - case SMOOTH_STAIRS: return (byte) 56; - //Blue - case WATER: return (byte) 68; - //Brown - case LOG: switch (subID) { - case 0: return (byte) 43; - case 1: return (byte) 52; - case 2: return (byte) 57; - case 3: return (byte) 60; - default: return (byte) 43; - } - case LOG_2: switch (subID) { - case 0:return (byte) 44; - case 1:return (byte) 55; - default:return (byte) 44; - } - //Brown - case WOOD_PLATE: return (byte) 40; - case WOOD: switch (subID) { - case 0:return (byte) 42; - case 1:return (byte) 40; - case 2:return (byte) 8; - case 3:return (byte) 41; - case 4:return (byte) 62; - case 5:return (byte) 104; - default:return (byte) 42; - } - case NOTE_BLOCK: return (byte) 40; - case BOOKSHELF: return (byte) 40; - case WOOD_STAIRS: switch (subID) { - case 0:return (byte) 42; - case 1:return (byte) 40; - case 2:return (byte) 8; - case 3:return (byte) 41; - default:return (byte) 42; - } - case CHEST: return (byte) 40; - case WOOD_DOUBLE_STEP: return (byte) 40; - case WOOD_STEP: return (byte) 42; - case ACACIA_STAIRS:switch (subID) { - case 0:return (byte) 62; - case 1:return (byte) 104; - default:return (byte) 104; - } - case JUKEBOX: return (byte) 40; - case FENCE: switch (subID) { - case 0:return (byte) 42; - case 1:return (byte) 40; - case 2:return (byte) 8; - case 3:return (byte) 41; - default:return (byte) 42; - } - case ACACIA_FENCE:switch (subID) { - case 0:return (byte) 62; - case 1:return (byte) 104; - default:return (byte) 104; - } - case WOOD_DOOR: return (byte) 42; - case SPRUCE_DOOR: return (byte) 40; - case BIRCH_DOOR: return (byte) 8; - case JUNGLE_DOOR: return (byte) 41; - case ACACIA_DOOR:return (byte) 62; - case DARK_OAK_DOOR: return (byte) 104; - case TRAP_DOOR: return (byte) 40; - default: return (byte) 0; + try { + Object obj = CraftBlockClass.cast(b); + Object NMSBlock = CraftMagicNumbersClass.getDeclaredMethod("getBlock", org.bukkit.block.Block.class).invoke(null, obj); + Object IBlockData = NMSBlock.getClass().getSuperclass().getMethod("getBlockData", null).invoke(NMSBlock); + java.lang.reflect.Method m = IBlockData.getClass().getMethod("g", null); + m.setAccessible(true); + Object o = m.invoke(IBlockData); + int baseColor = (int) o.getClass().getField("M").get(o); + int color = baseColor * 4 + 0; + return (byte) color; + } catch (IllegalAccessException | IllegalArgumentException + | InvocationTargetException | NoSuchMethodException | SecurityException | NoSuchFieldException e) { + e.printStackTrace(); + return 0; } } } diff --git a/src/de/Ste3et_C0st/Furniture/Camera/Utils/Layer.java b/src/de/Ste3et_C0st/Furniture/Camera/Utils/Layer.java new file mode 100644 index 0000000..13c8acf --- /dev/null +++ b/src/de/Ste3et_C0st/Furniture/Camera/Utils/Layer.java @@ -0,0 +1,26 @@ +package de.Ste3et_C0st.Furniture.Camera.Utils; + +import java.util.ArrayList; +import java.util.List; + +public class Layer { + + private int layerID = 0; + private List pixelList = new ArrayList(); + + public Layer(int layerID){ + this.layerID = layerID; + } + + public void addPixel(Pixel p){ + this.pixelList.add(p); + } + + public List getPixelList(){ + return this.pixelList; + } + + public int getLayerID(){ + return this.layerID; + } +} diff --git a/src/de/Ste3et_C0st/Furniture/Camera/Utils/Pixel.java b/src/de/Ste3et_C0st/Furniture/Camera/Utils/Pixel.java new file mode 100644 index 0000000..01a7ba5 --- /dev/null +++ b/src/de/Ste3et_C0st/Furniture/Camera/Utils/Pixel.java @@ -0,0 +1,23 @@ +package de.Ste3et_C0st.Furniture.Camera.Utils; + +import java.util.UUID; + +public class Pixel { + + int x = 0; + int z = 0; + byte color = 0; + @SuppressWarnings("unused") + private UUID serialID = UUID.randomUUID(); + + public Pixel(int x, int z, byte color){ + this.x = x; + this.z = z; + this.color = color; + } + + public int getX(){return this.x;} + public int getZ(){return this.z;} + + public byte getColor(){return this.color;} +} diff --git a/src/de/Ste3et_C0st/Furniture/Camera/Utils/RenderClass.java b/src/de/Ste3et_C0st/Furniture/Camera/Utils/RenderClass.java index 4c56ab7..164a21d 100644 --- a/src/de/Ste3et_C0st/Furniture/Camera/Utils/RenderClass.java +++ b/src/de/Ste3et_C0st/Furniture/Camera/Utils/RenderClass.java @@ -1,6 +1,7 @@ package de.Ste3et_C0st.Furniture.Camera.Utils; -import java.util.HashMap; +import java.util.ArrayList; +import java.util.List; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -10,20 +11,20 @@ import org.bukkit.map.MapView; public class RenderClass extends MapRenderer { private boolean hasRendered = false; - private HashMap> byteList = new HashMap>(); + private List layerList = new ArrayList(); Integer height = 55; Integer width = 55; + public RenderClass(Location loc){ GetBlocks blocks = new GetBlocks(); hasRendered = true; - this.byteList = blocks.returnBlocks(loc, height, width); + this.layerList = blocks.returnBlocks(loc, 56, 56, 29, 0); } @Override public void render(MapView mapView, MapCanvas mapCanvas, Player player) { if(!hasRendered){return;} - if(this.byteList.isEmpty()){return;} try { mapView.setWorld(player.getWorld()); mapView.setCenterX(player.getLocation().getChunk().getX()); @@ -49,29 +50,14 @@ public class RenderClass extends MapRenderer { } } - - for(int layer = byteList.size()-1; layer>=0;layer--){ - HashMap colorList = this.byteList.get(layer); - Integer index = colorList.size()-1; - for(int y = 0; y<=width;y++){ - for(int z = 0; z<=height;z++){ - Integer Y = startX+y; - Integer Z = startY+z; - if(colorList.get(index)!=null&&colorList.get(index)!=0){ - mapCanvas.setPixel(Y,Z,colorList.get(index)); - mapCanvas.setPixel(Y,Z,colorList.get(index)); - } - - index--; - } + for(Layer l : this.layerList){ + for(Pixel p : l.getPixelList()){ + Byte b = p.getColor(); + if(b == 0) continue; + mapCanvas.setPixel(- 1 + startX + p.getX(),- 1 + startY + p.getZ(), b); } } - - //mapCanvas.drawText(10, 10, font, "�18;TESTPHASE"); - hasRendered = false; }catch(Exception e){e.printStackTrace();} } - - } diff --git a/src/de/Ste3et_C0st/Furniture/Main/main.java b/src/de/Ste3et_C0st/Furniture/Main/main.java index defed10..ba02665 100644 --- a/src/de/Ste3et_C0st/Furniture/Main/main.java +++ b/src/de/Ste3et_C0st/Furniture/Main/main.java @@ -44,12 +44,12 @@ import de.Ste3et_C0st.Furniture.Objects.outdoor.tent_3; import de.Ste3et_C0st.Furniture.Objects.trap.BearTrap; import de.Ste3et_C0st.FurnitureLib.Crafting.Project; import de.Ste3et_C0st.FurnitureLib.Events.FurnitureLateSpawnEvent; -import de.Ste3et_C0st.FurnitureLib.ShematicLoader.ProjectLoader; import de.Ste3et_C0st.FurnitureLib.Utilitis.LocationUtil; import de.Ste3et_C0st.FurnitureLib.main.FurnitureLib; import de.Ste3et_C0st.FurnitureLib.main.ObjectID; import de.Ste3et_C0st.FurnitureLib.main.Type.CenterType; import de.Ste3et_C0st.FurnitureLib.main.Type.PlaceableSide; +import de.Ste3et_C0st.FurnitureLib.main.Type.SQLAction; public class main extends JavaPlugin implements Listener{ @@ -68,52 +68,51 @@ public class main extends JavaPlugin implements Listener{ instance = this; lib = (FurnitureLib) Bukkit.getPluginManager().getPlugin("FurnitureLib"); util = lib.getLocationUtil(); - if(lib.getDescription().getVersion().startsWith("1.8")){ + if(lib.getDescription().getVersion().startsWith("1.8") || lib.getDescription().getVersion().startsWith("1.9")){ new Project("Camera", this,getResource("Crafting/Camera.yml"),PlaceableSide.TOP, camera.class).setSize(1, 1, 1, CenterType.RIGHT); - new Project("GraveStone", this,getResource("Crafting/GraveStone.yml"),PlaceableSide.TOP, graveStone.class).setSize(1, 2, 3, CenterType.CENTER); new Project("LargeTable", this,getResource("Crafting/LargeTable.yml"),PlaceableSide.TOP, largeTable.class).setSize(2, 1, 2, CenterType.RIGHT); new Project("Sofa", this,getResource("Crafting/Sofa.yml"),PlaceableSide.TOP, sofa.class).setSize(1, 1, 3, CenterType.RIGHT); new Project("Campfire1", this,getResource("Crafting/Campfire1.yml"),PlaceableSide.TOP, campfire_1.class).setSize(1, 1, 1, CenterType.RIGHT); new Project("Campfire2", this,getResource("Crafting/Campfire2.yml"),PlaceableSide.TOP, campfire_2.class).setSize(1, 1, 1, CenterType.RIGHT); - new Project("Tent1", this,getResource("Crafting/Tent1.yml"),PlaceableSide.TOP, tent_1.class).setSize(4, 3, 5, CenterType.RIGHT); new Project("Tent2", this,getResource("Crafting/Tent2.yml"),PlaceableSide.TOP, tent_2.class).setSize(4, 3, 5, CenterType.RIGHT); new Project("Tent3", this,getResource("Crafting/Tent3.yml"),PlaceableSide.TOP, tent_3.class).setSize(3, 2, 3, CenterType.CENTER); - new Project("Sunshade", this, getResource("Crafting/Sunshade.yml"),PlaceableSide.TOP, sunshade.class).setSize(1, 3, 1, CenterType.RIGHT); new Project("Streetlamp", this, getResource("Crafting/Streetlamp.yml"),PlaceableSide.TOP, streetlamp.class).setSize(2, 4, 1, CenterType.FRONT); new Project("Billboard", this, getResource("Crafting/Billboard.yml"),PlaceableSide.TOP, billboard.class).setSize(1, 3, 3, CenterType.RIGHT); new Project("WeaponStand", this, getResource("Crafting/WeaponStand.yml"),PlaceableSide.TOP, weaponStand.class).setSize(1, 1, 1, CenterType.RIGHT); - new Project("Hammock", this, getResource("Crafting/Hammock.yml"),PlaceableSide.TOP, hammock.class).setSize(1, 2, 7, CenterType.RIGHT); new Project("Guillotine", this, getResource("Crafting/guillotine.yml"),PlaceableSide.TOP, guillotine.class).setSize(1, 5, 2, CenterType.RIGHT); new Project("Log", this, getResource("Crafting/log.yml"), PlaceableSide.TOP, log.class).setSize(1, 1, 1, CenterType.RIGHT); new Project("FlowerPot", this, getResource("Crafting/FlowerPot.yml"),PlaceableSide.BOTTOM, TFlowerPot.class).setSize(1, 1, 1, CenterType.RIGHT); new Project("BearTrap", this, getResource("Crafting/BearTrap.yml"), PlaceableSide.TOP, BearTrap.class).setSize(1, 1, 1, CenterType.RIGHT); new Project("TrashCan", this, getResource("Crafting/TrashCan.yml"), PlaceableSide.TOP, TrashCan.class).setSize(1, 1, 1, CenterType.RIGHT); - new Project("Crossbow", this, getResource("Crafting/Crossbow.yml"), PlaceableSide.TOP, Crossbow.class).setSize(1, 1, 1, CenterType.RIGHT); new Project("Flag", this, getResource("Crafting/flag.yml"), PlaceableSide.TOP, flag.class).setSize(1, 3, 1, CenterType.RIGHT); new Project("AdventCalender", this, getResource("Crafting/AdventCalender.yml"), PlaceableSide.TOP, AdventCalender.class).setSize(1, 1, 1, CenterType.RIGHT); new Project("FireworkLauncher", this, getResource("Crafting/FireworkLauncher.yml"), PlaceableSide.TOP, FireworkLauncher.class).setSize(1, 1, 1, CenterType.CENTER); - - new Project("Catapult", this, getResource("Models/Catapult.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(3, 2, 3, CenterType.RIGHT).setEditorProject(false); - new Project("HumanSkeleton", this, getResource("Models/HumanSkeleton.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(3, 1, 2, CenterType.RIGHT).setEditorProject(false); - new Project("CandyCane", this, getResource("Models/CandyCane.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(3, 4, 1, CenterType.RIGHT).setEditorProject(false); - new Project("SnowGolem", this, getResource("Models/SnowGolem.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(1, 2, 1, CenterType.RIGHT).setEditorProject(false); - new Project("TV", this, getResource("Models/TV.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(1, 2, 3, CenterType.CENTER).setEditorProject(false); - new Project("Chair", this, getResource("Models/Chair.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); - new Project("CampChair", this, getResource("Models/CampChair.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); - new Project("CactusPlant", this, getResource("Models/CactusPlant.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); - new Project("SleepingBag", this, getResource("Models/SleepingBag.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(1, 1, 2, CenterType.RIGHT).setEditorProject(false); - new Project("ChristmasTree", this, getResource("Models/ChristmasTree.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(1, 1, 2, CenterType.RIGHT).setEditorProject(false); - new Project("Table", this, getResource("Models/Table.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); - new Project("SchoolChair", this, getResource("Models/SchoolChair.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); - new Project("SchoolTable", this, getResource("Models/SchoolTable.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); - new Project("BlackBoard", this, getResource("Models/BlackBoard.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(1, 2, 3, CenterType.RIGHT).setEditorProject(false); - new Project("Barrels", this, getResource("Models/Barrels.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); - new Project("WaxCandle", this, getResource("Models/WaxCandle.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); - new Project("Lantern", this, getResource("Models/Lantern.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); - new Project("Mailbox", this, getResource("Models/Mailbox.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(1, 2, 1, CenterType.RIGHT).setEditorProject(false); - new Project("Fence", this, getResource("Models/Fence.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); - new Project("Trunk", this, getResource("Models/Trunk.yml"), PlaceableSide.TOP, ProjectLoader.class).setSize(1, 1, 4, CenterType.RIGHT).setEditorProject(false); - + + new Project("Catapult", this, getResource("Models/Catapult.yml")).setSize(3, 2, 3, CenterType.RIGHT).setEditorProject(false); + new Project("HumanSkeleton", this, getResource("Models/HumanSkeleton.yml")).setSize(3, 1, 2, CenterType.RIGHT).setEditorProject(false); + new Project("CandyCane", this, getResource("Models/CandyCane.yml")).setSize(3, 4, 1, CenterType.RIGHT).setEditorProject(false); + new Project("SnowGolem", this, getResource("Models/SnowGolem.yml")).setSize(1, 2, 1, CenterType.RIGHT).setEditorProject(false); + new Project("TV", this, getResource("Models/TV.yml")).setSize(1, 2, 3, CenterType.CENTER).setEditorProject(false); + new Project("Chair", this, getResource("Models/Chair.yml")).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); + new Project("CampChair", this, getResource("Models/CampChair.yml")).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); + new Project("CactusPlant", this, getResource("Models/CactusPlant.yml")).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); + new Project("SleepingBag", this, getResource("Models/SleepingBag.yml")).setSize(1, 1, 2, CenterType.RIGHT).setEditorProject(false); + new Project("ChristmasTree", this, getResource("Models/ChristmasTree.yml")).setSize(1, 1, 2, CenterType.RIGHT).setEditorProject(false); + new Project("Table", this, getResource("Models/Table.yml")).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); + new Project("SchoolChair", this, getResource("Models/SchoolChair.yml")).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); + new Project("SchoolTable", this, getResource("Models/SchoolTable.yml")).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); + new Project("BlackBoard", this, getResource("Models/BlackBoard.yml")).setSize(1, 2, 3, CenterType.RIGHT).setEditorProject(false); + new Project("Barrels", this, getResource("Models/Barrels.yml")).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); + new Project("WaxCandle", this, getResource("Models/WaxCandle.yml")).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); + new Project("Lantern", this, getResource("Models/Lantern.yml")).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); + new Project("Mailbox", this, getResource("Models/Mailbox.yml")).setSize(1, 2, 1, CenterType.RIGHT).setEditorProject(false); + new Project("Fence", this, getResource("Models/Fence.yml")).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); + new Project("Trunk", this, getResource("Models/Trunk.yml")).setSize(1, 1, 4, CenterType.RIGHT).setEditorProject(false); + new Project("Sunshade", this, getResource("Models/Sunshade.yml")).setSize(1, 3, 1, CenterType.RIGHT).setEditorProject(false); + new Project("Hammock", this, getResource("Models/Hammock.yml")).setSize(1, 2, 7, CenterType.RIGHT).setEditorProject(false); + new Project("Crossbow", this, getResource("Models/Crossbow.yml")).setSize(1, 1, 1, CenterType.RIGHT).setEditorProject(false); + new Project("Tent1", this,getResource("Models/Tent1.yml")).setSize(4, 3, 5, CenterType.RIGHT).setEditorProject(false); + new Project("GraveStone", this,getResource("Models/GraveStone.yml")).setSize(1, 2, 3, CenterType.CENTER).setEditorProject(false); addDefault("fence", "whiteList", "config.yml"); addDefault("bearTrap", "damage", "damage.yml"); addDefault("catapult", "range", "range.yml"); @@ -176,7 +175,8 @@ public class main extends JavaPlugin implements Listener{ public void loadModels(){ for(ObjectID id : FurnitureLib.getInstance().getFurnitureManager().getObjectList()){ if(id==null) continue; - if(id.getProjectOBJ() == null) return; + if(id.getProjectOBJ() == null) continue; + if(id.getSQLAction().equals(SQLAction.REMOVE)) continue; switch (id.getProjectOBJ().getName()) { case "Catapult":new Catapult(id);break; case "Barrels": new barrels(id);break; @@ -184,6 +184,11 @@ public class main extends JavaPlugin implements Listener{ case "Lantern": new WaxCandle(id);break; case "Fence": new fance(id);break; case "Trunk": new Trunk(id);break; + case "Sunshade": new sunshade(id);break; + case "Hammock": new hammock(id);break; + case "Crossbow": new Crossbow(id);break; + case "Tent1": new tent_1(id);break; + case "GraveStone": new graveStone(id);break; default:break; } } @@ -193,6 +198,7 @@ public class main extends JavaPlugin implements Listener{ public void onFurnitureLateSpawn(FurnitureLateSpawnEvent event){ if(event.getProject()==null) return; if(event.getProject().getName()==null) return; + if(event.getID().getSQLAction().equals(SQLAction.REMOVE)) return; switch (event.getProject().getName()) { case "Catapult":new Catapult(event.getID());break; case "Barrels": new barrels(event.getID());break; @@ -200,6 +206,11 @@ public class main extends JavaPlugin implements Listener{ case "Lantern": new WaxCandle(event.getID());break; case "Fence": new fance(event.getID());break; case "Trunk": new Trunk(event.getID());break; + case "Sunshade": new sunshade(event.getID());break; + case "Hammock": new hammock(event.getID());break; + case "Crossbow": new Crossbow(event.getID());break; + case "Tent1": new tent_1(event.getID());break; + case "GraveStone": new graveStone(event.getID());break; default:break; } } diff --git a/src/de/Ste3et_C0st/Furniture/Objects/RPG/Catapult.java b/src/de/Ste3et_C0st/Furniture/Objects/RPG/Catapult.java index c31d1eb..54ad984 100644 --- a/src/de/Ste3et_C0st/Furniture/Objects/RPG/Catapult.java +++ b/src/de/Ste3et_C0st/Furniture/Objects/RPG/Catapult.java @@ -1,26 +1,39 @@ package de.Ste3et_C0st.Furniture.Objects.RPG; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; +import java.util.Random; import org.bukkit.Bukkit; +import org.bukkit.DyeColor; import org.bukkit.EntityEffect; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; +import org.bukkit.entity.Creeper; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.FallingBlock; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.entity.Sheep; import org.bukkit.entity.TNTPrimed; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; import org.bukkit.util.EulerAngle; import org.bukkit.util.Vector; import de.Ste3et_C0st.Furniture.Main.main; +import de.Ste3et_C0st.FurnitureLib.NBT.CraftItemStack; +import de.Ste3et_C0st.FurnitureLib.NBT.NBTTagCompound; import de.Ste3et_C0st.FurnitureLib.ShematicLoader.Events.ProjectClickEvent; import de.Ste3et_C0st.FurnitureLib.main.FurnitureHelper; import de.Ste3et_C0st.FurnitureLib.main.FurnitureLib; @@ -33,6 +46,7 @@ public class Catapult extends FurnitureHelper implements Listener{ private fArmorStand stand1; private HashMap fallingSandList = new HashMap(); + private List entityList = Arrays.asList(EntityType.PIG, EntityType.CREEPER, EntityType.COW); public Catapult(ObjectID id) { super(id); @@ -67,6 +81,23 @@ public class Catapult extends FurnitureHelper implements Listener{ } } + @EventHandler + public void onFallingSand(EntityChangeBlockEvent e){ + if(e.getEntity()==null) return; + if(e.getEntity() instanceof FallingBlock){ + if(fallingSandList.containsKey(e.getEntity())){ + Entity entity = e.getEntity(); + Player p = fallingSandList.get(e.getEntity()); + fallingSandList.remove(e.getEntity()); + Block b = entity.getLocation().getBlock().getRelative(BlockFace.DOWN); + if(!FurnitureLib.getInstance().getPermManager().canBuild(p, b.getLocation())){ + e.setCancelled(true); + e.getEntity().remove(); + } + } + } + } + @EventHandler public void FurnitureClickEvent(ProjectClickEvent e){ if(getObjID()==null) return; @@ -85,36 +116,10 @@ public class Catapult extends FurnitureHelper implements Listener{ tnt.setVelocity(v.multiply(1)); fallingSandList.put(tnt, e.getPlayer()); }else if(stack.getType().equals(Material.AIR)){ - if(stand1!=null){ - int x = -59; - String name = "#range:1"; - switch (stand1.getName().substring(stand1.getName().length()-1, stand1.getName().length())) { - case "1": - name = "#range:2"; - x -= 4; - break; - case "2": - name = "#range:3"; - x -= 8; - break; - case "3": - name = "#range:4"; - x -= 12; - break; - case "4": - name = "#range:5"; - x -= 16; - break; - default: break; - } - stand1.setName(name); - EulerAngle angle = stand1.getLeftArmPose(); - angle = getLutil().Radtodegress(angle); - angle = angle.setX(x); - stand1.setLeftArmPose(getLutil().degresstoRad(angle)); - update(); - } + setRange(e.getPlayer()); + return; }else{ + if(stack.getType().isBlock()){ @SuppressWarnings("deprecation") FallingBlock block = getWorld().spawnFallingBlock(loc, stack.getType().getId(), (byte) stack.getDurability()); if(block == null) return; @@ -123,11 +128,107 @@ public class Catapult extends FurnitureHelper implements Listener{ block.setDropItem(false); block.setVelocity(v.multiply(1)); fallingSandList.put(block, e.getPlayer()); - + e.getPlayer().playSound(getLocation(), Sound.ENTITY_ARROW_SHOOT, 1, (float) getPitch()); + }else if(stack.getType().equals(Material.MONSTER_EGG)){ + try{ + NBTTagCompound nbtTag = new CraftItemStack().getNBTTag(stack); + if(nbtTag.hasKey("tag")){ + NBTTagCompound tag = nbtTag.getCompound("tag"); + NBTTagCompound id = tag.getCompound("EntityTag"); + String str = id.getString("id").replace("minecraft:", ""); + @SuppressWarnings("deprecation") + EntityType type = EntityType.fromName(str); + if(!entityList.contains(type)){setRange(e.getPlayer());return;} + Vector v= getLaunchVector(getBlockFace()); + Entity entity = getWorld().spawnEntity(loc, type); + entity.setVelocity(v); + LivingEntity entiLivingEntity = (LivingEntity) entity; + entiLivingEntity.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, Integer.MAX_VALUE, 4), false); + if(type.equals(EntityType.CREEPER)){ + if(randInt(0, 25)==7){ + Creeper creeper = (Creeper) entity; + creeper.setPowered(true); + } + }else if(type.equals(EntityType.SHEEP)){ + Sheep mob = (Sheep) entity; + int i = randInt(0, DyeColor.values().length); + mob.setColor(DyeColor.values()[i]); + if(randInt(0, 25)==7){ + mob.setCustomName("jeb_"); + mob.setCustomNameVisible(false); + } + } + } + e.getPlayer().playSound(getLocation(), Sound.ENTITY_ARROW_SHOOT, 1, (float) getPitch()); + return; + }catch(Exception ex){ + ex.printStackTrace(); + } + }else{ + setRange(e.getPlayer()); + return; + } } consumeItem(e.getPlayer()); } + public void setRange(Player p){ + if(stand1!=null){ + int x = -59; + String name = "#range:1"; + switch (stand1.getName().substring(stand1.getName().length()-1, stand1.getName().length())) { + case "1": + name = "#range:2"; + x -= 4; + break; + case "2": + name = "#range:3"; + x -= 8; + break; + case "3": + name = "#range:4"; + x -= 12; + break; + case "4": + name = "#range:5"; + x -= 16; + break; + default: break; + } + stand1.setName(name); + EulerAngle angle = stand1.getLeftArmPose(); + angle = getLutil().Radtodegress(angle); + angle = angle.setX(x); + stand1.setLeftArmPose(getLutil().degresstoRad(angle)); + update(); + p.playSound(getLocation(), Sound.UI_BUTTON_CLICK, 1, (float) getPitch()); + } + } + + public static int randInt(int min, int max) { + Random rand = new Random(); + int randomNum = rand.nextInt((max - min) + 1) + min; + return randomNum; + } + + public double getPitch(){ + String str = "#range:1"; + if(this.stand1!=null){str = stand1.getName().toLowerCase();} + str = str.replace("#range:", ""); + if(str.equalsIgnoreCase("1")){ + return .1; + }else if(str.equalsIgnoreCase("2")){ + return .4; + }else if(str.equalsIgnoreCase("3")){ + return .6; + }else if(str.equalsIgnoreCase("4")){ + return .7; + }else if(str.equalsIgnoreCase("5")){ + return .8; + } + return .1; + } + public Vector getLaunchVector(BlockFace face){ String str = "#range:1"; if(this.stand1!=null){str = stand1.getName().toLowerCase();} diff --git a/src/de/Ste3et_C0st/Furniture/Objects/RPG/Crossbow.java b/src/de/Ste3et_C0st/Furniture/Objects/RPG/Crossbow.java index d46bde9..99e2372 100644 --- a/src/de/Ste3et_C0st/Furniture/Objects/RPG/Crossbow.java +++ b/src/de/Ste3et_C0st/Furniture/Objects/RPG/Crossbow.java @@ -1,130 +1,38 @@ package de.Ste3et_C0st.Furniture.Objects.RPG; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.Random; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; -import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; import org.bukkit.entity.Arrow; -import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.entity.SpectralArrow; +import org.bukkit.entity.TippedArrow; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.inventory.ItemStack; -import org.bukkit.util.EulerAngle; import org.bukkit.util.Vector; import de.Ste3et_C0st.Furniture.Main.main; -import de.Ste3et_C0st.FurnitureLib.Events.FurnitureBlockBreakEvent; -import de.Ste3et_C0st.FurnitureLib.Events.FurnitureBlockClickEvent; -import de.Ste3et_C0st.FurnitureLib.Events.FurnitureBreakEvent; -import de.Ste3et_C0st.FurnitureLib.Events.FurnitureClickEvent; -import de.Ste3et_C0st.FurnitureLib.main.Furniture; +import de.Ste3et_C0st.FurnitureLib.ShematicLoader.Events.ProjectClickEvent; +import de.Ste3et_C0st.FurnitureLib.main.FurnitureHelper; import de.Ste3et_C0st.FurnitureLib.main.ObjectID; import de.Ste3et_C0st.FurnitureLib.main.Type.SQLAction; -import de.Ste3et_C0st.FurnitureLib.main.entity.fArmorStand; import de.Ste3et_C0st.FurnitureLib.main.entity.fEntity; -public class Crossbow extends Furniture implements Listener { +public class Crossbow extends FurnitureHelper implements Listener { public Crossbow(ObjectID id){ super(id); - setBlock(); - if(isFinish()){ - Bukkit.getPluginManager().registerEvents(this, main.getInstance()); - return; - } - spawn(id.getStartLocation()); - } - - private void setBlock(){ - Block b = getLocation().getBlock(); - if(b.getType()==null||!b.getType().equals(Material.STEP)){ - b.setType(Material.STEP); - } - getObjID().addBlock(Arrays.asList(b)); - } - - @Override - public void spawn(Location paramLocation) { - List asList = new ArrayList(); - - float yaw = 90; - for(int i = 0; i<4;i++){ - Location loc = getLutil().getRelativ(getCenter().add(0, -1.7, 0), getLutil().yawToFace(yaw), .34, .4); - loc.setYaw(yaw+45); - fArmorStand stand = spawnArmorStand(loc); - stand.setItemInMainHand(new ItemStack(Material.STICK)); - stand.setMarker(false); - stand.setRightArmPose(getLutil().degresstoRad(new EulerAngle(90,270,135))); - asList.add(stand); - yaw+=90; - } - - fArmorStand stand = spawnArmorStand(getCenter().add(0, -0.7, 0)); - stand.setHelmet(new ItemStack(Material.LOG)); - stand.setSmall(true); - asList.add(stand); - - Location loc = getRelative(getCenter().add(0, -.74, 0), getBlockFace(), -.6, .48); - loc.setYaw(getYaw()-90); - stand = spawnArmorStand(loc); - stand.setItemInMainHand(new ItemStack(Material.STICK)); - stand.setRightArmPose(getLutil().degresstoRad(new EulerAngle(80,0,90))); - stand.setMarker(false); - asList.add(stand); - - loc = getRelative(getCenter().add(0, -.62, 0),getBlockFace(), -.4,.07); - loc.setYaw(getYaw()-90); - stand = spawnArmorStand(loc); - stand.setItemInMainHand(new ItemStack(Material.BOW)); - stand.setRightArmPose(getLutil().degresstoRad(new EulerAngle(0,10,90))); - stand.setMarker(false); - asList.add(stand); - - loc = getRelative(getCenter().add(0, -.08, 0), getBlockFace(), -.1, .25); - loc.setYaw(getYaw()-90); - stand = spawnArmorStand(loc); - stand.setName("#ARROW#"); - stand.setRightArmPose(getLutil().degresstoRad(new EulerAngle(0,135,0))); - stand.setMarker(false); - asList.add(stand); - - for(fArmorStand asp : asList){ - asp.setInvisible(true); - asp.setBasePlate(false); - } - send(); - Bukkit.getPluginManager().registerEvents(this, getPlugin()); - } - - @EventHandler - public void onFurnitureBreak(FurnitureBreakEvent e) { - if(e.getID() == null || getObjID() == null) return; - if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} - if(!e.getID().equals(getObjID())) return; - if(!e.canBuild()){return;} - e.remove(); - delete(); + Bukkit.getPluginManager().registerEvents(this, main.instance); } @EventHandler - public void onFurnitureBreak(FurnitureBlockBreakEvent e) { - if(e.getID() == null || getObjID() == null) return; - if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} - if(!e.getID().equals(getObjID())) return; - if(!e.canBuild()){return;} - e.remove(); - delete(); - } - - @EventHandler - public void onFurnitureClick(FurnitureClickEvent e) { + public void onFurnitureClick(ProjectClickEvent e) { if(e.getID() == null || getObjID() == null) return; if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} if(!e.getID().equals(getObjID())) return; @@ -132,89 +40,65 @@ public class Crossbow extends Furniture implements Listener { fEntity stand = getArmorStand(); if(stand==null){return;} ItemStack is = e.getPlayer().getInventory().getItemInMainHand(); - if(!hasArrow()||(is!=null&&is.getType()!=null&&is.getType().equals(Material.ARROW))){ - if(e.getPlayer().getInventory().getItemInMainHand()==null){return;} - if(e.getPlayer().getInventory().getItemInMainHand().getType()==null){return;} - if(!e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.ARROW)){return;} - addArmor(is, stand); - }else{ - spawnArrow(); - removeArrow(stand); + if(is!=null&& (is.getType().equals(Material.ARROW) || is.getType().equals(Material.SPECTRAL_ARROW) || is.getType().equals(Material.TIPPED_ARROW)) ){ + if(!hasArrow()){ + fEntity entity = getArmorStand(); + entity.setItemInMainHand(is.clone()); + update(); + consumeItem(e.getPlayer()); + return; + } + } + if(hasArrow()){ + spawnArrow(getArrow().getType(), e.getPlayer()); } } - @EventHandler - public void onFurnitureClick(FurnitureBlockClickEvent e) { - if(e.getID() == null || getObjID() == null) return; - if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} - if(!e.getID().equals(getObjID())) return; - if(!e.canBuild()){return;} - fEntity stand = getArmorStand(); - if(stand==null){return;} - ItemStack is = e.getPlayer().getInventory().getItemInMainHand(); - if(!hasArrow()||(is!=null&&is.getType()!=null&&is.getType().equals(Material.ARROW))){ - if(e.getPlayer().getInventory().getItemInMainHand()==null){return;} - if(e.getPlayer().getInventory().getItemInMainHand().getType()==null){return;} - if(!e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.ARROW)){return;} - addArmor(is, stand); - }else{ - spawnArrow(); - removeArrow(stand); - } - } - - private void spawnArrow(){ + private void spawnArrow(Material mat, Player p){ Location loc = getRelative(getCenter(), getBlockFace(), 0,18); loc.setYaw(getYaw()); - Vector v=null; - switch (getBlockFace()) { - case NORTH:v= new Vector(0, 0.5, 1.2);break; - case SOUTH:v= new Vector(0, 0.5, -1.2);break; - case EAST: v= new Vector(-1.2, 0.5, 0);break; - case WEST: v= new Vector(1.2, 0.5, 0);break; - default:break; - } + Vector v= getLaunchVector(getBlockFace()); if(v == null) return; getWorld().playSound(getLocation(), Sound.ENTITY_ARROW_SHOOT, 1, 1); Location start = getRelative(getCenter(), getBlockFace(), 0,0); start.setYaw(getYaw()); start = start.add(0, 1.8, 0); - Arrow a = getWorld().spawnArrow(start, v.multiply(2), 2F, 3F); - a.setCritical(true); - } - - public static Set getEntitiesInChunks(Location l, int chunkRadius) { - Block b = l.getBlock(); - Set entities = new HashSet(); - for (int x = -16 * chunkRadius; x <= 16 * chunkRadius; x += 16) { - for (int z = -16 * chunkRadius; z <= 16 * chunkRadius; z += 16) { - for (Entity e : b.getRelative(x, 0, z).getChunk().getEntities()) { - entities.add(e); - } - } - } - return entities; - } - - private void removeArrow(fEntity stand){ - ItemStack is = stand.getItemInMainHand(); - if(is.getAmount()-1<=0){ - stand.setItemInMainHand(new ItemStack(Material.AIR)); - update(); - return; + Arrow a = null; + if(mat.equals(Material.ARROW)){ + a = (Arrow) getWorld().spawnEntity(start, EntityType.ARROW); + }else if(mat.equals(Material.SPECTRAL_ARROW)){ + a = (SpectralArrow) getWorld().spawnEntity(start, EntityType.SPECTRAL_ARROW); + }else if(mat.equals(Material.TIPPED_ARROW)){ + a = (TippedArrow) getWorld().spawnEntity(start, EntityType.TIPPED_ARROW); } - is.setAmount(is.getAmount()-1); - stand.setItemInMainHand(is); + a.setCritical(true); + a.setVelocity(v); + a.setShooter(p); + fEntity entity = getArmorStand(); + entity.setItemInMainHand(null); update(); + } - private void addArmor(ItemStack is, fEntity stand){ - if(getArrow()!=null){is.setAmount(getArrow().getAmount());} - stand.setItemInMainHand(is); - update(); + public Vector getLaunchVector(BlockFace face){ + int j = random(75, 45), l =random(150, 80); + double k = ((double) j / 100), h = ((double) l / 100); + + Vector v = new Vector(0, k, h); + switch (face) { + case SOUTH:v= new Vector(-v.getY(), v.getY(), -v.getZ());break; + case EAST: v= new Vector(-v.getZ(), v.getY(), -v.getY());break; + case WEST: v= new Vector(v.getZ(), v.getY(), v.getY());break; + default:break; + } + return v; } - + public int random(int max, int min){ + Random r = new Random(); + int randInt = r.nextInt(max-min) + min; + return randInt; + } private fEntity getArmorStand(){ for(fEntity stand : getfAsList()){ diff --git a/src/de/Ste3et_C0st/Furniture/Objects/garden/graveStone.java b/src/de/Ste3et_C0st/Furniture/Objects/garden/graveStone.java index 2c8dc8a..d13ddf4 100644 --- a/src/de/Ste3et_C0st/Furniture/Objects/garden/graveStone.java +++ b/src/de/Ste3et_C0st/Furniture/Objects/garden/graveStone.java @@ -1,52 +1,37 @@ package de.Ste3et_C0st.Furniture.Objects.garden; -import java.util.ArrayList; import java.util.Arrays; -import java.util.List; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.BlockState; import org.bukkit.block.Sign; -import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BookMeta; -import org.bukkit.util.EulerAngle; import de.Ste3et_C0st.Furniture.Main.main; -import de.Ste3et_C0st.FurnitureLib.Events.FurnitureBreakEvent; -import de.Ste3et_C0st.FurnitureLib.Events.FurnitureClickEvent; +import de.Ste3et_C0st.FurnitureLib.ShematicLoader.Events.ProjectBreakEvent; import de.Ste3et_C0st.FurnitureLib.Utilitis.LocationUtil; -import de.Ste3et_C0st.FurnitureLib.main.Furniture; +import de.Ste3et_C0st.FurnitureLib.main.FurnitureHelper; import de.Ste3et_C0st.FurnitureLib.main.ObjectID; -import de.Ste3et_C0st.FurnitureLib.main.Type.BodyPart; -import de.Ste3et_C0st.FurnitureLib.main.Type.SQLAction; -import de.Ste3et_C0st.FurnitureLib.main.entity.fArmorStand; -public class graveStone extends Furniture implements Listener{ - public graveStone(ObjectID id){ - super(id); - if(isFinish()){ - Bukkit.getPluginManager().registerEvents(this, main.getInstance()); - setBlock(); - return; - } - spawn(id.getStartLocation()); - Bukkit.getPluginManager().registerEvents(this, main.getInstance()); - setBlock(); - } +public class graveStone extends FurnitureHelper implements Listener{ + + private Location signLoc; + private Block sign; + private String[] lines = new String[4]; - Location signLoc; - Block sign; - String[] lines = new String[4]; + public graveStone(ObjectID id) { + super(id); + setBlock(); + Bukkit.getPluginManager().registerEvents(this, main.instance); + } @SuppressWarnings("deprecation") private void setBlock(){ @@ -74,94 +59,14 @@ public class graveStone extends Furniture implements Listener{ getObjID().addBlock(Arrays.asList(this.sign)); } - public void spawn(Location location){ - List aspList = new ArrayList(); - if(getBlockFace().equals(BlockFace.WEST)){location = getLutil().getRelativ(location, getBlockFace(), .0, -1.02);} - if(getBlockFace().equals(BlockFace.SOUTH)){location = getLutil().getRelativ(location, getBlockFace(), -1.0, -1.02);} - if(getBlockFace().equals(BlockFace.EAST)){location = getLutil().getRelativ(location, getBlockFace(), -1.0, .0);} - Location center = getLutil().getRelativ(location, getBlockFace(), .18D, .955D); - center.add(0,-.8,0); - center.setYaw(getLutil().FaceToYaw(getBlockFace().getOppositeFace()) + 90); - Location kreutz1 = getLutil().getRelativ(center, getBlockFace(), -.55, .0); - kreutz1.add(0, 1.5, 0); - kreutz1.setYaw(getLutil().FaceToYaw(getBlockFace().getOppositeFace()) + 90); - - Location kreutz2 = getLutil().getRelativ(center, getBlockFace(), -.23, -1.27); - kreutz2.add(0, 1.6, 0); - kreutz2.setYaw(getLutil().FaceToYaw(getBlockFace().getOppositeFace())); - - Location loc = center; - - for(int i = 0; i<=2;i++){ - Location l = getLutil().getRelativ(loc, getBlockFace(), .0, -.44*i); - - l.setYaw(getLutil().FaceToYaw(getBlockFace().getOppositeFace()) + 90); - fArmorStand as = getManager().createArmorStand(getObjID(), l); - as.getInventory().setHelmet(new ItemStack(Material.COBBLESTONE)); - as.setSmall(true); - as.setPose(getLutil().degresstoRad(new EulerAngle(0, 0, 90)), BodyPart.HEAD); - aspList.add(as); - } - - Double l = .3; - for(int i = 0;i<=2;i++){ - setRow(center, .38, l, -.15,2,getLutil().degresstoRad(new EulerAngle(90, 0, 0)), aspList); - l+=.35; - - } - - fArmorStand as = getManager().createArmorStand(getObjID(), kreutz1.add(0, -.15, 0)); - as.getInventory().setItemInMainHand(new ItemStack(Material.STICK)); - as.setPose(new EulerAngle(1.38,.0,.0), BodyPart.RIGHT_ARM); - aspList.add(as); - as = getManager().createArmorStand(getObjID(), kreutz2.add(0, -.15, 0)); - as.getInventory().setItemInMainHand(new ItemStack(Material.STICK)); - as.setPose(new EulerAngle(1.38,1.57,1.57), BodyPart.RIGHT_ARM); - aspList.add(as); - - for(fArmorStand asp : aspList){ - asp.setInvisible(true); - asp.setBasePlate(false); - } - send(); - } - - @EventHandler(priority=EventPriority.LOW) - public void onFurnitureBreak(FurnitureBreakEvent e){ + @EventHandler + private void onBlockBreak(ProjectBreakEvent e){ if(e.getID() == null || getObjID() == null) return; - if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} - if(!e.getID().getPlugin().equalsIgnoreCase(main.getInstance().getName())){return;} if(!e.getID().equals(getObjID())){return;} if(!e.canBuild()){return;} - e.remove(); - sign.setType(Material.AIR); - sign = null; - delete(); - removeSign(); - } - - @EventHandler - private void onPhysiks(BlockPhysicsEvent e){ - if(getObjID() == null) return; - if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} - if (sign==null) return; - if (e.getBlock() == null) return; - if (!e.getBlock().equals(sign)) return; - e.setCancelled(true); - } - - @EventHandler - public void onFurnitureClick(FurnitureClickEvent e){ - if(e.getID() == null || getObjID() == null) return; - if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} - if(!e.getID().getPlugin().equalsIgnoreCase(getPlugin().getName())){return;} - Player p = e.getPlayer(); - if(!e.getID().equals(getObjID())) return; - if(!e.canBuild()){return;} - ItemStack is = p.getInventory().getItemInMainHand(); - if (is == null) return; - if (!is.getType().equals(Material.WRITTEN_BOOK)) return; - readFromBook(is); + if(sign!=null){ + sign.setType(Material.AIR); + } } public void resetSign(){ @@ -174,6 +79,8 @@ public class graveStone extends Furniture implements Listener{ }); } + public Location getSignLocation(){return this.signLoc;} + public void removeSign(){ if(sign!=null){ sign.setType(Material.AIR); @@ -239,19 +146,4 @@ public class graveStone extends Furniture implements Listener{ sign.update(true, false); lines[line] = text; } - - public void setRow(Location loc, double x,double y, double z, int replay, EulerAngle angle, List list){ - Double d = .0; - for(int i = 0; i<=replay;i++){ - Location loc1= getLutil().getRelativ(loc, getBlockFace(), z, d-.825); - loc1.setYaw(getLutil().FaceToYaw(getBlockFace())); - loc1.add(0, y,0); - fArmorStand packet = getManager().createArmorStand(getObjID(), loc1); - packet.getInventory().setHelmet(new ItemStack(Material.STONE_PLATE)); - packet.setSmall(true); - packet.setPose(angle, BodyPart.HEAD); - list.add(packet); - d+=x; - } - } } diff --git a/src/de/Ste3et_C0st/Furniture/Objects/garden/mailBox.java b/src/de/Ste3et_C0st/Furniture/Objects/garden/mailBox.java deleted file mode 100644 index 5ba1615..0000000 --- a/src/de/Ste3et_C0st/Furniture/Objects/garden/mailBox.java +++ /dev/null @@ -1,223 +0,0 @@ -package de.Ste3et_C0st.Furniture.Objects.garden; - -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.util.EulerAngle; - -import de.Ste3et_C0st.Furniture.Main.main; -import de.Ste3et_C0st.FurnitureLib.Events.FurnitureBreakEvent; -import de.Ste3et_C0st.FurnitureLib.Events.FurnitureClickEvent; -import de.Ste3et_C0st.FurnitureLib.main.Furniture; -import de.Ste3et_C0st.FurnitureLib.main.ObjectID; -import de.Ste3et_C0st.FurnitureLib.main.Type.BodyPart; -import de.Ste3et_C0st.FurnitureLib.main.Type.EventType; -import de.Ste3et_C0st.FurnitureLib.main.Type.SQLAction; -import de.Ste3et_C0st.FurnitureLib.main.entity.fArmorStand; - -public class mailBox extends Furniture implements Listener { - List blockList = new ArrayList(); - UUID uuid; - - public mailBox(ObjectID id){ - super(id); - setBlock(); - if(isFinish()){ - Bukkit.getPluginManager().registerEvents(this, main.getInstance()); - return; - } - spawn(id.getStartLocation()); - } - - public void spawn(Location location){ - List aspList = new ArrayList(); - Location middle = getLutil().getCenter(getLocation()); - middle.add(0, -1.4, 0); - - switch (getBlockFace()) { - case NORTH:middle = getLutil().getRelativ(middle, getBlockFace(), 0D, 0.03D);break; - case EAST:middle = getLutil().getRelativ(middle, getBlockFace(), 0D, 0.03D);break; - default:break; - } - - fArmorStand as = getManager().createArmorStand(getObjID(), middle); - as.getInventory().setHelmet(new ItemStack(Material.STONE)); - as.setSmall(true); - aspList.add(as); - - for(int i = 0; i<=1;i++){ - Location loc = getLutil().getRelativ(middle.clone(), getBlockFace(), .47, .38).add(0, .88*i, 0); - fArmorStand packet = getManager().createArmorStand(getObjID(), loc); - packet.getInventory().setItemInMainHand(new ItemStack(Material.STICK)); - packet.setPose(new EulerAngle(1.39, 0, 0), BodyPart.RIGHT_ARM); - aspList.add(packet); - } - - as = getManager().createArmorStand(getObjID(), getLutil().getRelativ(middle.clone().add(0, 1.25, 0), getBlockFace(), -.21, -.0D)); - as.getInventory().setHelmet(new ItemStack(Material.SMOOTH_BRICK, 1, (short) 0)); - as.setSmall(true); - aspList.add(as); - - as = getManager().createArmorStand(getObjID(), getLutil().getRelativ(middle.clone().add(0, 1.25, 0), getBlockFace(), .21, 0D)); - as.getInventory().setHelmet(new ItemStack(Material.SMOOTH_BRICK, 1, (short) 0)); - as.setSmall(true); - aspList.add(as); - - for(int i = 0; i<=4;i++){ - Location loc = getLutil().getRelativ(middle.clone().add(0, 1.898, 0), getBlockFace(), -.44+.165*i, .462D); - fArmorStand packet = getManager().createArmorStand(getObjID(), loc); - packet.setSmall(true); - //x z y - //-.7 .73 -.3 - packet.setPose(new EulerAngle(-.716D, .71D, -.32D), BodyPart.RIGHT_ARM); - packet.getInventory().setItemInMainHand(new ItemStack(Material.SMOOTH_STAIRS)); - aspList.add(packet); - - loc = getLutil().getRelativ(middle.clone().add(0, 1.898, 0), getBlockFace().getOppositeFace(), -.44+.165*i, .462D); - packet = getManager().createArmorStand(getObjID(), loc); - packet.setSmall(true); - //x z y - //-.7 .73 -.3 - packet.setPose(new EulerAngle(-.716D, .71D, -.32D), BodyPart.RIGHT_ARM); - packet.getInventory().setItemInMainHand(new ItemStack(Material.SMOOTH_STAIRS)); - aspList.add(packet); - - - loc = getLutil().getRelativ(middle.clone().add(0, 1.898, 0), getBlockFace().getOppositeFace(), -.44+.165*i, .362D); - packet = getManager().createArmorStand(getObjID(), loc); - packet.setSmall(true); - //x z y - //-.7 .73 -.3 - packet.setPose(new EulerAngle(-.716D, .71D, -.32D), BodyPart.RIGHT_ARM); - packet.getInventory().setItemInMainHand(new ItemStack(Material.SMOOTH_BRICK, 1 ,(short) 0)); - aspList.add(packet); - } - - BlockFace face = getBlockFace(); - face = getLutil().yawToFace(getLutil().FaceToYaw(getBlockFace()) + 90); - as = getManager().createArmorStand(getObjID(), getLutil().getRelativ(middle.clone().add(0, 1.5, 0), face, -.04, -.55D)); - as.getInventory().setHelmet(new ItemStack(Material.REDSTONE_TORCH_ON, 1, (short) 0)); - as.setPose(getLutil().degresstoRad(new EulerAngle(0, 0, 90)), BodyPart.HEAD); - as.setName("#ELEMENT#"); - as.setSmall(true); - aspList.add(as); - - as = getManager().createArmorStand(getObjID(), getLutil().getRelativ(middle.clone().add(0, 1.10, 0), face.getOppositeFace(), -.0, .31D)); - as.getInventory().setItemInMainHand(new ItemStack(Material.PAPER, 1, (short) 0)); - as.setPose(getLutil().degresstoRad(new EulerAngle(0, -120, -90)), BodyPart.RIGHT_ARM); - as.setSmall(true); - aspList.add(as); - - as = getManager().createArmorStand(getObjID(), getLutil().getRelativ(middle.clone().add(0, 1.40, 0), face.getOppositeFace(), -.15, .33D)); - as.getInventory().setItemInMainHand(new ItemStack(Material.WOOD_BUTTON, 1, (short) 0)); - as.setPose(getLutil().degresstoRad(new EulerAngle(-15,-67, -90)), BodyPart.RIGHT_ARM); - as.setSmall(true); - aspList.add(as); - - as = getManager().createArmorStand(getObjID(), getLutil().getRelativ(middle.clone().add(0, 1.2, 0), getBlockFace(), .2, .07D)); - as.getInventory().setItemInMainHand(new ItemStack(Material.EMPTY_MAP, 1, (short) 0)); - as.setPose(getLutil().degresstoRad(new EulerAngle(0, -120, -90)), BodyPart.RIGHT_ARM); - as.setSmall(true); - aspList.add(as); - - - for(fArmorStand asp : aspList){ - asp.setInvisible(true); - asp.setBasePlate(false); - } - send(); - Bukkit.getPluginManager().registerEvents(this, getPlugin()); - } - - public void setBlock(){ - for(int i = 0; i<=1;i++){ - Block b = getLocation().clone().add(0, i, 0).getBlock(); - b.setType(Material.BARRIER); - blockList.add(b); - } - getObjID().addBlock(blockList); - } - - /*public void addMailbox(Player p){ - if(Bukkit.getPluginManager().isPluginEnabled("PostalService")){ - try { - PostalService.getMailboxManager().addMailboxAtLoc(blockList.get(1).getLocation(), p); - this.uuid = p.getUniqueId(); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - - public void setSendet(Boolean b){ - for(fArmorStand packet : getManager().getfArmorStandByObjectID(getObjID())){ - if(packet!=null&&packet.getName().equalsIgnoreCase("#ELEMENT#")){ - if(b){ - packet.setPose(getLutil().degresstoRad(new EulerAngle(0, 0, 0)), BodyPart.HEAD); - getManager().updateFurniture(getObjID()); - return; - } - packet.setPose(getLutil().degresstoRad(new EulerAngle(0, 0, 90)), BodyPart.HEAD); - getManager().updateFurniture(getObjID()); - return; - } - } - } - - @EventHandler - private void onMove(PlayerSendMailEvent e){ - if(!Bukkit.getPluginManager().isPluginEnabled("PostalService")){return;} - UUID p1 = this.uuid; - UUID p2 = e.getRecipient().getUUID(); - if(!p1.equals(p2)){return;} - setSendet(true); - }*/ - - @EventHandler - public void onFurnitureBreak(FurnitureBreakEvent e){ - if(e.getID() == null || getObjID() == null) return; - if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} - if(!e.getID().equals(getObjID())) return; - if(!e.canBuild()){return;} - - for(Block b : blockList){ - b.setType(Material.AIR); - } - blockList.clear(); - e.remove(); - delete(); - } - - public void onFurnitureClick(FurnitureClickEvent e){} - - @EventHandler - private void onInteract(PlayerInteractEvent e){ - if(getObjID()==null){return;} - if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} - if(e.isCancelled()){return;} - if(e.getAction()==null){return;} - if(e.getClickedBlock()==null){return;} - if(!blockList.contains(e.getClickedBlock())){return;} - if(!getLib().canBuild(e.getPlayer(), getObjID(), EventType.INTERACT)){return;} - if(e.getAction().equals(Action.LEFT_CLICK_BLOCK)){ - e.setCancelled(true); - for(Block b : blockList){ - b.setType(Material.AIR); - } - blockList.clear(); - this.getObjID().remove(e.getPlayer()); - delete(); - } - } -} diff --git a/src/de/Ste3et_C0st/Furniture/Objects/garden/sunshade.java b/src/de/Ste3et_C0st/Furniture/Objects/garden/sunshade.java index ec93d8f..3dcafce 100644 --- a/src/de/Ste3et_C0st/Furniture/Objects/garden/sunshade.java +++ b/src/de/Ste3et_C0st/Furniture/Objects/garden/sunshade.java @@ -1,299 +1,30 @@ package de.Ste3et_C0st.Furniture.Objects.garden; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - import org.bukkit.Bukkit; -import org.bukkit.DyeColor; -import org.bukkit.GameMode; -import org.bukkit.Location; import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.banner.Pattern; -import org.bukkit.block.banner.PatternType; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.BannerMeta; import org.bukkit.util.EulerAngle; import de.Ste3et_C0st.Furniture.Main.main; -import de.Ste3et_C0st.FurnitureLib.Events.FurnitureBlockBreakEvent; -import de.Ste3et_C0st.FurnitureLib.Events.FurnitureBlockClickEvent; -import de.Ste3et_C0st.FurnitureLib.Events.FurnitureBreakEvent; -import de.Ste3et_C0st.FurnitureLib.Events.FurnitureClickEvent; -import de.Ste3et_C0st.FurnitureLib.main.Furniture; -import de.Ste3et_C0st.FurnitureLib.main.FurnitureLib; +import de.Ste3et_C0st.FurnitureLib.ShematicLoader.Events.ProjectBreakEvent; +import de.Ste3et_C0st.FurnitureLib.ShematicLoader.Events.ProjectClickEvent; +import de.Ste3et_C0st.FurnitureLib.main.FurnitureHelper; import de.Ste3et_C0st.FurnitureLib.main.ObjectID; import de.Ste3et_C0st.FurnitureLib.main.Type.BodyPart; -import de.Ste3et_C0st.FurnitureLib.main.Type.EventType; -import de.Ste3et_C0st.FurnitureLib.main.Type.SQLAction; import de.Ste3et_C0st.FurnitureLib.main.entity.fArmorStand; import de.Ste3et_C0st.FurnitureLib.main.entity.fEntity; -public class sunshade extends Furniture implements Listener{ - List matList = Arrays.asList( - Material.SPRUCE_FENCE, - Material.BIRCH_FENCE, - Material.JUNGLE_FENCE, - Material.DARK_OAK_FENCE, - Material.ACACIA_FENCE, - Material.COBBLE_WALL, - Material.NETHER_FENCE); - Material m; +public class sunshade extends FurnitureHelper implements Listener{ + + public boolean isRunning = false; Integer timer; - Block block; - public sunshade(ObjectID id){ + public sunshade(ObjectID id) { super(id); - if(isFinish()){ - setblock(); - Bukkit.getPluginManager().registerEvents(this, main.getInstance()); - return; - } - setblock(); - spawn(id.getStartLocation()); - } - - private void setblock(){ - Location loc = getLocation().clone(); - loc.add(0, 2, 0); - block = loc.getBlock(); - block.setType(Material.BARRIER); - getObjID().addBlock(Arrays.asList(block)); - } - - public void spawn(Location location){ - Location center = getLutil().getCenter(location).clone(); - List asList = new ArrayList(); - center.add(0, -1.1, 0); - - for(int i = 0; i<=2;i++){ - Location loc = getLutil().getRelativ(center.clone(), getBlockFace(), .47, .38).add(0, .88*i, 0); - fArmorStand packet = getManager().createArmorStand(getObjID(), loc); - packet.getInventory().setItemInMainHand(new ItemStack(Material.STICK)); - packet.setPose(new EulerAngle(1.39, 0, 0), BodyPart.RIGHT_ARM); - asList.add(packet); - } - - center.add(0, 1.758, 0); - fArmorStand aspacket = getManager().createArmorStand(getObjID(), center); - aspacket.getInventory().setHelmet(new ItemStack(Material.CARPET)); - aspacket.setName("#TOP#"); - asList.add(aspacket); - - Location loc = center.clone(); - loc.add(0, 0.3, 0); - ItemStack is = new ItemStack(Material.BANNER); - BannerMeta banner = (BannerMeta) is.getItemMeta(); - banner.setBaseColor(DyeColor.LIME); - banner.addPattern(new Pattern(DyeColor.YELLOW, PatternType.TRIANGLE_BOTTOM)); - banner.addPattern(new Pattern(DyeColor.WHITE, PatternType.TRIANGLE_BOTTOM)); - is.setItemMeta(banner); - - for(int i = 0; i<=17; i++){ - loc.setYaw(i*21); - fArmorStand packet = getManager().createArmorStand(getObjID(), loc.clone()); - packet.getInventory().setHelmet(is); - packet.setPose(new EulerAngle(-3.054, 0, 0), BodyPart.HEAD); - packet.setName("#ELEMENT#" + i); - asList.add(packet); - } - - for(fArmorStand packet : asList){ - packet.setInvisible(true); - packet.setBasePlate(false); - } - send(); - Bukkit.getPluginManager().registerEvents(this, getPlugin()); - } - - @EventHandler - public void onFurnitureClick(FurnitureClickEvent e){ - if(e.getID() == null || getObjID() == null) return; - if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} - if(!e.getID().equals(getObjID())){return;} - if(!e.canBuild()){return;} - Player p = e.getPlayer(); - ItemStack is = p.getInventory().getItemInMainHand(); - if(!getLib().canBuild(e.getPlayer(), getObjID(), EventType.INTERACT)){return;} - if(is.getType().equals(Material.BANNER)){ - if(isRunning()){return;} - for(fEntity packet : getManager().getfArmorStandByObjectID(getObjID())){ - if(packet.getInventory().getHelmet()!=null&&packet.getInventory().getHelmet().getType().equals(Material.BANNER)){ - packet.getInventory().setHelmet(is); - }else if(packet.getInventory().getHelmet()!=null&&packet.getInventory().getHelmet().getType().equals(Material.CARPET)){ - ItemStack item = new ItemStack(Material.CARPET); - item.setDurability(getLutil().getFromDey((short) is.getDurability())); - packet.getInventory().setHelmet(item); - } - } - removeItem(p); - update(); - }else{ - if(isRunning()){return;} - if(!isOpen()){ - open(); - }else{ - close(); - } - } - } - - private boolean isRunning(){ - if(timer!=null)return true; - return false; - } - - @EventHandler - public void onBlockBreak(FurnitureBlockBreakEvent e){ - if(e.getID() == null || getObjID() == null) return; - if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} - if(!e.getID().equals(getObjID())){return;} - if(!e.canBuild()){return;} - stopTimer(); - for(fEntity packet : getManager().getfArmorStandByObjectID(getObjID())){ - if(packet.getName().equalsIgnoreCase("#ITEM#")){ - if(packet.getInventory().getItemInMainHand()!=null&&!packet.getInventory().getItemInMainHand().getType().equals(Material.AIR)){ - ItemStack is = packet.getInventory().getItemInMainHand(); - getWorld().dropItem(getLocation(), is); - } - } - } - getObjID().remove(e.getPlayer()); - delete(); - } - - @EventHandler - public void onBlockBreak(FurnitureBlockClickEvent e){ - if(e.getID() == null || getObjID() == null) return; - if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} - if(!e.getID().equals(getObjID())){return;} - if(!e.canBuild()){return;} - Player p = e.getPlayer(); - ItemStack is = p.getInventory().getItemInMainHand(); - if(is.getType().equals(Material.BANNER)){ - if(isRunning()){return;} - for(fEntity packet : getManager().getfArmorStandByObjectID(getObjID())){ - if(packet.getInventory().getHelmet()!=null&&packet.getInventory().getHelmet().getType().equals(Material.BANNER)){ - packet.getInventory().setHelmet(is); - }else if(packet.getInventory().getHelmet()!=null&&packet.getInventory().getHelmet().getType().equals(Material.CARPET)){ - ItemStack item = new ItemStack(Material.CARPET); - item.setDurability(getLutil().getFromDey((short) is.getDurability())); - packet.getInventory().setHelmet(item); - } - } - removeItem(p); - update(); - }else{ - if(isRunning()){return;} - if(!isOpen()){ - open(); - }else{ - close(); - } - } - } - - public void removeItem(Player p){ - Boolean useGameMode = FurnitureLib.getInstance().useGamemode(); - if(useGameMode&&p.getGameMode().equals(GameMode.CREATIVE)){return;} - Integer slot = p.getInventory().getHeldItemSlot(); - ItemStack itemStack = p.getInventory().getItemInMainHand().clone(); - itemStack.setAmount(itemStack.getAmount()-1); - p.getInventory().setItem(slot, itemStack); - p.updateInventory(); - } - - @EventHandler - public void onFurnitureBreak(FurnitureBreakEvent e){ - if(e.getID() == null || getObjID() == null) return; - if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} - if(!e.getID().equals(getObjID())){return;} - if(!e.canBuild()){return;} - stopTimer(); - for(fEntity packet : getManager().getfArmorStandByObjectID(getObjID())){ - if(packet.getName().equalsIgnoreCase("#ITEM#")){ - if(packet.getInventory().getItemInMainHand()!=null&&!packet.getInventory().getItemInMainHand().getType().equals(Material.AIR)){ - ItemStack is = packet.getInventory().getItemInMainHand(); - getWorld().dropItem(getLocation(), is); - } - } - } - e.remove(); - this.block.setType(Material.AIR); - this.block = null; - getManager().remove(getObjID()); - delete(); - } - - private void close(){ - timer = Bukkit.getScheduler().scheduleSyncRepeatingTask(getPlugin(), new Runnable() { - @Override - public void run() { - try{ - for(fEntity packet : getManager().getfArmorStandByObjectID(getObjID())){ - if(packet.getName().startsWith("#ELEMENT#")){ - if(!isClose((fArmorStand) packet)){ - Double x = ((fArmorStand) packet).getPose(BodyPart.HEAD).getX(); - ((fArmorStand) packet).setPose(new EulerAngle(x-.32, 0, 0), BodyPart.HEAD); - }else{ - stopTimer(); - return; - } - getManager().updateFurniture(getObjID()); - } - } - }catch(Exception e){ - stopTimer();reset(); - } - - - } - }, 0, 10); - } - - private void open(){ - timer = Bukkit.getScheduler().scheduleSyncRepeatingTask(getPlugin(), new Runnable() { - @Override - public void run() { - try{ - for(fEntity packet : getManager().getfArmorStandByObjectID(getObjID())){ - if(packet.getName().startsWith("#ELEMENT#")){ - if(!isOpen((fArmorStand) packet)){ - Double x = ((fArmorStand) packet).getPose(BodyPart.HEAD).getX(); - ((fArmorStand) packet).setPose(new EulerAngle(x+.32, 0, 0), BodyPart.HEAD); - }else{ - stopTimer(); - return; - } - getManager().updateFurniture(getObjID()); - } - } - }catch(Exception e){ - stopTimer();reset(); - } - - - } - }, 0, 10); - } - - private void reset(){ - for(fEntity packet : getManager().getfArmorStandByObjectID(getObjID())){ - if(!isOpen((fArmorStand) packet)){ - ((fArmorStand) packet).setPose(new EulerAngle(-3.054, 0, 0), BodyPart.HEAD); - } - } - update(); - } - - private boolean isClose(fArmorStand packet){ - if(packet.getPose(BodyPart.HEAD).getX()> -3.054){ - return false; - }return true; + Bukkit.getPluginManager().registerEvents(this, main.instance); } private boolean isOpen(fArmorStand packet){ @@ -302,8 +33,97 @@ public class sunshade extends Furniture implements Listener{ }return true; } + private boolean isClose(fArmorStand packet){ + if(packet.getPose(BodyPart.HEAD).getX()> -3.054){ + return false; + }return true; + } + + @EventHandler + public void onClick(ProjectClickEvent e){ + if(e.getID() == null || getObjID() == null) return; + if(!e.getID().equals(getObjID())){return;} + if(!e.canBuild()){return;} + Player p = e.getPlayer(); + ItemStack is = p.getInventory().getItemInMainHand(); + if(is.getType().equals(Material.BANNER)){ + for(fEntity packet : getfAsList()){ + if(packet.getInventory().getHelmet()!=null&&packet.getInventory().getHelmet().getType().equals(Material.BANNER)){ + packet.getInventory().setHelmet(is.clone()); + }else if(packet.getInventory().getHelmet()!=null&&packet.getInventory().getHelmet().getType().equals(Material.CARPET)){ + ItemStack item = new ItemStack(Material.CARPET); + item.setDurability(getLutil().getFromDey((short) is.getDurability())); + packet.getInventory().setHelmet(item); + } + } + update(); + consumeItem(p); + }else{ + if(!isOpen()){ + open(); + }else{ + close(); + } + } + + } + + @EventHandler + public void onBreak(ProjectBreakEvent e){ + if(e.getID() == null || getObjID() == null) return; + if(!e.getID().equals(getObjID())){return;} + if(!e.canBuild()){return;} + if(isRunning){ + stopTimer(); + } + } + + private void open() { + if(isRunning) return; + this.isRunning = true; + timer = Bukkit.getScheduler().scheduleSyncRepeatingTask(getPlugin(), new Runnable() { + @Override + public void run() { + for(fEntity packet : getfAsList()){ + if(packet.getName().startsWith("#ELEMENT#")){ + if(!isOpen((fArmorStand) packet)){ + Double x = ((fArmorStand) packet).getPose(BodyPart.HEAD).getX(); + ((fArmorStand) packet).setPose(new EulerAngle(x+.02, 0, 0), BodyPart.HEAD); + }else{ + stopTimer(); + return; + } + } + } + update(); + } + }, 0, 1); + } + + private void close() { + if(isRunning) return; + this.isRunning = true; + timer = Bukkit.getScheduler().scheduleSyncRepeatingTask(getPlugin(), new Runnable() { + @Override + public void run() { + for(fEntity packet : getfAsList()){ + if(packet.getName().startsWith("#ELEMENT#")){ + if(!isClose((fArmorStand) packet)){ + Double x = ((fArmorStand) packet).getPose(BodyPart.HEAD).getX(); + ((fArmorStand) packet).setPose(new EulerAngle(x-.02, 0, 0), BodyPart.HEAD); + }else{ + stopTimer(); + return; + } + } + } + update(); + } + }, 0, 1); + } + private boolean isOpen(){ - for(fEntity packet : getManager().getfArmorStandByObjectID(getObjID())){ + for(fEntity packet : getfAsList()){ if(packet.getName().startsWith("#ELEMENT#")){ if(((fArmorStand) packet).getPose(BodyPart.HEAD).getX()< -1.85){ return false; @@ -317,6 +137,7 @@ public class sunshade extends Furniture implements Listener{ if(timer!=null){ Bukkit.getScheduler().cancelTask(timer); timer=null; + isRunning = false; } } -} +} \ No newline at end of file diff --git a/src/de/Ste3et_C0st/Furniture/Objects/indoor/largeTable.java b/src/de/Ste3et_C0st/Furniture/Objects/indoor/largeTable.java index e3d133f..7dc11f1 100644 --- a/src/de/Ste3et_C0st/Furniture/Objects/indoor/largeTable.java +++ b/src/de/Ste3et_C0st/Furniture/Objects/indoor/largeTable.java @@ -238,7 +238,11 @@ public class largeTable extends Furniture implements Listener{ } ItemStack IS = is.clone(); - IS.setAmount(1); + if(IS.getAmount()<=0){ + IS.setAmount(0); + }else{ + IS.setAmount(1); + } as.getInventory().setItemInMainHand(IS); update(); diff --git a/src/de/Ste3et_C0st/Furniture/Objects/outdoor/hammock.java b/src/de/Ste3et_C0st/Furniture/Objects/outdoor/hammock.java index 0cb93ed..14e539f 100644 --- a/src/de/Ste3et_C0st/Furniture/Objects/outdoor/hammock.java +++ b/src/de/Ste3et_C0st/Furniture/Objects/outdoor/hammock.java @@ -1,66 +1,61 @@ package de.Ste3et_C0st.Furniture.Objects.outdoor; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Location; import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.inventory.ItemStack; -import org.bukkit.util.EulerAngle; import de.Ste3et_C0st.Furniture.Main.main; -import de.Ste3et_C0st.FurnitureLib.Events.FurnitureBlockBreakEvent; -import de.Ste3et_C0st.FurnitureLib.Events.FurnitureBlockClickEvent; -import de.Ste3et_C0st.FurnitureLib.Events.FurnitureBreakEvent; -import de.Ste3et_C0st.FurnitureLib.Events.FurnitureClickEvent; -import de.Ste3et_C0st.FurnitureLib.main.Furniture; -import de.Ste3et_C0st.FurnitureLib.main.FurnitureLib; +import de.Ste3et_C0st.FurnitureLib.ShematicLoader.Events.ProjectClickEvent; +import de.Ste3et_C0st.FurnitureLib.main.FurnitureHelper; import de.Ste3et_C0st.FurnitureLib.main.ObjectID; -import de.Ste3et_C0st.FurnitureLib.main.Type.BodyPart; -import de.Ste3et_C0st.FurnitureLib.main.Type.EventType; import de.Ste3et_C0st.FurnitureLib.main.Type.SQLAction; -import de.Ste3et_C0st.FurnitureLib.main.entity.fArmorStand; import de.Ste3et_C0st.FurnitureLib.main.entity.fEntity; -public class hammock extends Furniture implements Listener{ - +public class hammock extends FurnitureHelper implements Listener{ + public hammock(ObjectID id) { super(id); - setBlock(); - if(isFinish()){ - Bukkit.getPluginManager().registerEvents(this, main.getInstance()); - return; + Bukkit.getPluginManager().registerEvents(this, main.getInstance()); + } + + @EventHandler(priority = EventPriority.LOW) + public void onClick(ProjectClickEvent e){ + if(e.getID() == null || getObjID() == null) return; + if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} + if(!e.getID().equals(getObjID())){return;} + Player p = e.getPlayer(); + ItemStack stack = p.getInventory().getItemInMainHand(); + if(stack!=null){ + if(isMaterial(stack.getType())){ + if(stack.getType().equals(Material.BANNER)){ + for(fEntity entity : getfAsList()){ + if(entity.getHelmet()!=null){ + if(entity.getHelmet().getType().equals(Material.BANNER)){ + entity.setHelmet(stack.clone()); + } + } + } + e.setCancelled(true); + consumeItem(p); + update(); + }else{ + for(fEntity entity : getfAsList()){ + if(entity.getHelmet()!=null){ + if(entity.getHelmet().getType().toString().toLowerCase().startsWith("log")){ + entity.setHelmet(stack.clone()); + } + } + } + e.setCancelled(true); + consumeItem(p); + update(); + } + } } - spawn(id.getStartLocation()); - } - - private void setBlock(){ - BlockFace Right = getLutil().yawToFace(getLutil().FaceToYaw(getBlockFace())+90); - Location center2 = getLutil().getRelativ(getLocation(), Right, 6D, 0D); - Block b1 = getLocation().getBlock(); - Block b2 = getLocation().getBlock().getRelative(BlockFace.UP); - Block b3 = center2.getBlock(); - Block b4 = center2.getBlock().getRelative(BlockFace.UP); - - if(!isFence(b1.getType())) b1.setType(Material.FENCE); - if(!isFence(b2.getType())) b2.setType(Material.FENCE); - if(!isFence(b3.getType())) b3.setType(Material.FENCE); - if(!isFence(b4.getType())) b4.setType(Material.FENCE); - - getObjID().addBlock(Arrays.asList(b1,b2,b3,b4)); - } - - private boolean isFence(Material m){ - if(m==null){return false;} - return m.toString().toLowerCase().endsWith("fence"); } private boolean isMaterial(Material m){ @@ -75,229 +70,4 @@ public class hammock extends Furniture implements Listener{ return b; } - @EventHandler - public void onFurnitureBreak(FurnitureBreakEvent e) { - if(e.getID() == null || getObjID() == null) return; - if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} - if(e.getID() == null || getObjID() == null) return; - if(!e.getID().equals(getObjID())){return;} - if(!e.canBuild()){return;} - e.remove(); - delete(); - } - - @EventHandler - public void onFurnitureBreak(FurnitureBlockBreakEvent e) { - if(e.getID() == null || getObjID() == null) return; - if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} - if(!e.getID().equals(getObjID())){return;} - if(!e.canBuild()){return;} - e.remove(); - delete(); - } - - @EventHandler - public void onFurnitureClick(FurnitureClickEvent e) { - if(e.getID() == null || getObjID() == null) return; - if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} - if(!e.getID().equals(getObjID())){return;} - List aspList = getManager().getfArmorStandByObjectID(getObjID()); - Player p = e.getPlayer(); - ItemStack stack = p.getInventory().getItemInMainHand(); - - if(stack!=null){ - if(isMaterial(stack.getType())){ - if(setColor(p,stack, getLib().canBuild(e.getPlayer(), getObjID(), EventType.INTERACT), aspList)){return;} - } - } - - for(fEntity packet : aspList){ - if(packet.getName().equalsIgnoreCase("#SITZ#")){ - if(packet.getPassanger()==null){ - packet.setPassanger(e.getPlayer()); - return; - } - } - } - } - - public void removeItem(Player p){ - Boolean useGameMode = FurnitureLib.getInstance().useGamemode(); - if(useGameMode&&p.getGameMode().equals(GameMode.CREATIVE)){return;} - Integer slot = p.getInventory().getHeldItemSlot(); - ItemStack itemStack = p.getInventory().getItemInMainHand().clone(); - itemStack.setAmount(itemStack.getAmount()-1); - p.getInventory().setItem(slot, itemStack); - p.updateInventory(); - } - - @EventHandler - public void onFurnitureClick(FurnitureBlockClickEvent e) { - if(e.getID() == null || getObjID() == null) return; - if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} - if(!e.getID().equals(getObjID())){return;} - List aspList = getManager().getfArmorStandByObjectID(getObjID()); - Player p = e.getPlayer(); - ItemStack stack = p.getInventory().getItemInMainHand(); - if(stack!=null){ - if(isMaterial(stack.getType())){ - if(setColor(p,stack, e.canBuild(), aspList)){return;} - } - } - - for(fEntity packet : aspList){ - if(packet.getName().equalsIgnoreCase("#SITZ#")){ - if(packet.getPassanger()==null){ - packet.setPassanger(e.getPlayer()); - return; - } - } - } - } - - private boolean setColor(Player p,ItemStack stack, Boolean canbuild, List aspList){ - if(!canbuild){return true;} - if(stack!=null){ - switch (stack.getType()) { - case BANNER: - for(fEntity packet : aspList){ - if(packet.getInventory().getHelmet()!=null&&packet.getInventory().getHelmet().getType().equals(Material.BANNER)){ - packet.getInventory().setHelmet(stack); - } - } - removeItem(p); - getManager().updateFurniture(getObjID()); - return true; - case LOG: - for(fEntity packet : aspList){ - if(packet.getName().equalsIgnoreCase("#PILLAR#")){ - packet.getInventory().setHelmet(stack); - } - } - setPillar(stack.getDurability()); - removeItem(p); - getManager().updateFurniture(getObjID()); - return true; - case LOG_2: - for(fEntity packet : aspList){ - if(packet.getName().equalsIgnoreCase("#PILLAR#")){ - packet.getInventory().setHelmet(stack); - } - } - setPillar(4 + stack.getDurability()); - removeItem(p); - getManager().updateFurniture(getObjID()); - return true; - default: break; - } - } - return false; - } - - private void setPillar(int i){ - Material m = null; - switch (i) { - case 0: m = Material.FENCE;break; - case 1: m = Material.SPRUCE_FENCE;break; - case 2: m = Material.BIRCH_FENCE;break; - case 3: m = Material.JUNGLE_FENCE;break; - case 4: m = Material.ACACIA_FENCE;break; - case 5: m = Material.DARK_OAK_FENCE;break; - } - if(m!=null){ - for(Location b : getObjID().getBlockList()){ - getWorld().getBlockAt(b).setType(m); - } - } - } - - - public void spawn(Location location) { - Location center1 = getLutil().getCenter(location); - center1 = center1.add(0, -1.9, 0); - - BlockFace Right = getLutil().yawToFace(getLutil().FaceToYaw(getBlockFace())+90); - Location center2 = getLutil().getRelativ(center1, Right, 6D, 0D); - List aspList = new ArrayList(); - - fArmorStand packet = getManager().createArmorStand(getObjID(), center1); - packet.getInventory().setHelmet(new ItemStack(Material.LOG)); - packet.setName("#PILLAR#"); - aspList.add(packet); - - packet = getManager().createArmorStand(getObjID(), center2); - packet.getInventory().setHelmet(new ItemStack(Material.LOG)); - packet.setName("#PILLAR#"); - aspList.add(packet); - - Location middle = getLutil().getRelativ(center1, Right, 2.85D, 0D); - middle = middle.add(0, .75, 0); - packet = getManager().createArmorStand(getObjID(), middle); - packet.getInventory().setHelmet(new ItemStack(Material.BANNER, 1, (short) 0)); - packet.setPose(getLutil().degresstoRad(new EulerAngle(-69f,0f,0f)), BodyPart.HEAD); - aspList.add(packet); - - Location middle2 = getLutil().getRelativ(middle, Right, 1.5D, 0D); - middle2 = middle2.add(0, .23, 0); - packet = getManager().createArmorStand(getObjID(), middle2); - packet.getInventory().setHelmet(new ItemStack(Material.BANNER, 1, (short) 0)); - packet.setPose(getLutil().degresstoRad(new EulerAngle(-90f,0f,0f)), BodyPart.HEAD); - aspList.add(packet); - - Location sitz = getLutil().getRelativ(center1, Right, 3D, 0D).add(0, .6, 0); - sitz.setYaw(getLutil().FaceToYaw(getBlockFace().getOppositeFace())); - packet = getManager().createArmorStand(getObjID(), sitz); - packet.setName("#SITZ#"); - aspList.add(packet); - - middle = getLutil().getRelativ(middle, Right, .3D, 0D); - middle.setYaw(middle.getYaw()+180); - packet = getManager().createArmorStand(getObjID(), middle); - packet.getInventory().setHelmet(new ItemStack(Material.BANNER, 1, (short) 0)); - packet.setPose(getLutil().degresstoRad(new EulerAngle(-69f,0f,0f)), BodyPart.HEAD); - aspList.add(packet); - - Location stick = getLutil().getRelativ(center1, Right, 4.6d, .5d); - stick = stick.add(0, 1.7, 0); - stick.setYaw(getLutil().FaceToYaw(getBlockFace())); - packet = getManager().createArmorStand(getObjID(), stick); - packet.getInventory().setItemInMainHand(new ItemStack(Material.STICK)); - packet.setPose(getLutil().degresstoRad(new EulerAngle(-40f,110f,0f)), BodyPart.RIGHT_ARM); - aspList.add(packet); - - stick = getLutil().getRelativ(center1, Right, 4.6d, -.335d); - stick = stick.add(0, 1.7, 0); - stick.setYaw(getLutil().FaceToYaw(getBlockFace())); - packet = getManager().createArmorStand(getObjID(), stick); - packet.getInventory().setItemInMainHand(new ItemStack(Material.STICK)); - packet.setPose(getLutil().degresstoRad(new EulerAngle(-40f,73f,0f)), BodyPart.RIGHT_ARM); - packet.setArms(true); - aspList.add(packet); - - stick = getLutil().getRelativ(center1, Right.getOppositeFace(), -1.37d, -.335d); - stick = stick.add(0, 1.7, 0); - stick.setYaw(getLutil().FaceToYaw(getBlockFace().getOppositeFace())); - packet = getManager().createArmorStand(getObjID(), stick); - packet.getInventory().setItemInMainHand(new ItemStack(Material.STICK)); - packet.setPose(getLutil().degresstoRad(new EulerAngle(-40f,73f,0f)), BodyPart.RIGHT_ARM); - packet.setArms(true); - aspList.add(packet); - - stick = getLutil().getRelativ(center1, Right.getOppositeFace(), -1.37d, .5d); - stick = stick.add(0, 1.7, 0); - stick.setYaw(getLutil().FaceToYaw(getBlockFace().getOppositeFace())); - packet = getManager().createArmorStand(getObjID(), stick); - packet.getInventory().setItemInMainHand(new ItemStack(Material.STICK)); - packet.setPose(getLutil().degresstoRad(new EulerAngle(-40f,110f,0f)), BodyPart.RIGHT_ARM); - packet.setArms(true); - aspList.add(packet); - - for(fArmorStand pack : aspList){ - pack.setInvisible(true); - pack.setBasePlate(false); - } - - send(); - Bukkit.getPluginManager().registerEvents(this, getPlugin()); - } } diff --git a/src/de/Ste3et_C0st/Furniture/Objects/outdoor/tent_1.java b/src/de/Ste3et_C0st/Furniture/Objects/outdoor/tent_1.java index 5bd4b82..fe51869 100644 --- a/src/de/Ste3et_C0st/Furniture/Objects/outdoor/tent_1.java +++ b/src/de/Ste3et_C0st/Furniture/Objects/outdoor/tent_1.java @@ -1,264 +1,35 @@ package de.Ste3et_C0st.Furniture.Objects.outdoor; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - import org.bukkit.Bukkit; -import org.bukkit.Location; import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.util.EulerAngle; - import de.Ste3et_C0st.Furniture.Main.main; -import de.Ste3et_C0st.FurnitureLib.Events.FurnitureBreakEvent; -import de.Ste3et_C0st.FurnitureLib.Events.FurnitureClickEvent; -import de.Ste3et_C0st.FurnitureLib.main.Furniture; +import de.Ste3et_C0st.FurnitureLib.ShematicLoader.Events.ProjectClickEvent; +import de.Ste3et_C0st.FurnitureLib.main.FurnitureHelper; import de.Ste3et_C0st.FurnitureLib.main.ObjectID; -import de.Ste3et_C0st.FurnitureLib.main.Type.BodyPart; import de.Ste3et_C0st.FurnitureLib.main.Type.ColorType; -import de.Ste3et_C0st.FurnitureLib.main.Type.EventType; import de.Ste3et_C0st.FurnitureLib.main.Type.SQLAction; -import de.Ste3et_C0st.FurnitureLib.main.entity.fArmorStand; -public class tent_1 extends Furniture implements Listener{ +public class tent_1 extends FurnitureHelper implements Listener{ - Block block; public tent_1(ObjectID id){ super(id); - Location loc = id.getStartLocation(); - if(getBlockFace().equals(BlockFace.WEST)){loc=getLutil().getRelativ(loc, getBlockFace(), 1D, 0D);} - if(getBlockFace().equals(BlockFace.NORTH)){loc=getLutil().getRelativ(loc, getBlockFace(), 1D, 1D);} - if(getBlockFace().equals(BlockFace.EAST)){loc=getLutil().getRelativ(loc, getBlockFace(), 0D, 1D);} - if(id.isFinish()){ - setblock(); - Bukkit.getPluginManager().registerEvents(this, main.getInstance()); - return; - } - spawn(loc); - } - - public void setblock(){ - Location blockLocation = new Location(getWorld(), getLocation().getBlockX(), getLocation().getBlockY(), getLocation().getBlockZ()); - if(getBlockFace().equals(BlockFace.SOUTH)){ - this.block = blockLocation.getWorld().getBlockAt(getLutil().getRelativ(blockLocation, getBlockFace(), 2D, -2D)); - this.block.setType(Material.WORKBENCH); - }else if(getBlockFace().equals(BlockFace.WEST)){ - this.block = blockLocation.getWorld().getBlockAt(getLutil().getRelativ(blockLocation, getBlockFace(), 2D, -2D)); - this.block.setType(Material.WORKBENCH); - }else if(getBlockFace().equals(BlockFace.NORTH)){ - this.block = blockLocation.getWorld().getBlockAt(getLutil().getRelativ(blockLocation, getBlockFace(), 2D, -2D)); - this.block.setType(Material.WORKBENCH); - }else if(getBlockFace().equals(BlockFace.EAST)){ - this.block = blockLocation.getWorld().getBlockAt(getLutil().getRelativ(blockLocation, getBlockFace(), 2D, -2D)); - this.block.setType(Material.WORKBENCH); - } - getObjID().addBlock(Arrays.asList(block)); - } - - public void spawn(Location loc){ - List aspList = new ArrayList(); - Location loc_1 = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); - Location loc_2 = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); - Location loc_3 = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); - - Location karabine1 = getLutil().getRelativ(loc, getBlockFace(), -.5D, -.7D); - Location karabine2 = getLutil().getRelativ(loc, getBlockFace(), 2.5D, -.7D); - Location karabine3 = getLutil().getRelativ(loc, getBlockFace(), 2.5D, -4.8D); - Location karabine4 = getLutil().getRelativ(loc, getBlockFace(), -.5D, -4.8D); - - karabine1.setYaw(getYaw()+90); - karabine2.setYaw(getYaw()+90); - karabine3.setYaw(getYaw()+90); - karabine4.setYaw(getYaw()+90); - - Location saveLoc = getLutil().getRelativ(loc_1, getBlockFace(), -.55D, -0.6); - saveLoc.add(0,-1.25,0); - saveLoc.setYaw(getLutil().FaceToYaw(getBlockFace()) -90); - - Location saveLoc2 = getLutil().getRelativ(loc_2, getBlockFace(), -4.27, -4.4); - saveLoc2.add(0,-1.25,0); - saveLoc2.setYaw(getLutil().FaceToYaw(getBlockFace()) -90); - - Location saveLoc3 = getLutil().getRelativ(loc_3, getBlockFace(), -8D, -2.5D); - saveLoc3.add(0,.64,0); - saveLoc3.setYaw(getLutil().FaceToYaw(getBlockFace()) -90); - Double d = .0; - - setblock(); - - double offsetY = .02; - - for(int i = 0; i<=5;i++){ - Location loc1= getLutil().getRelativ(saveLoc, getBlockFace(), d, 0D); - Location loc2= getLutil().getRelativ(saveLoc, getBlockFace(), d, -.48).add(0,.3,0); - Location loc3= getLutil().getRelativ(saveLoc, getBlockFace(), d, -.86).add(0,.81,0); - Location loc4= getLutil().getRelativ(saveLoc, getBlockFace(), d, -1.08).add(0,1.33,0); - Location loc5= getLutil().getRelativ(saveLoc, getBlockFace(), d, -1.38).add(0,1.86,0); - - loc1.setYaw(getLutil().FaceToYaw(getBlockFace().getOppositeFace())); - loc2.setYaw(getLutil().FaceToYaw(getBlockFace().getOppositeFace())); - loc3.setYaw(getLutil().FaceToYaw(getBlockFace().getOppositeFace())); - loc4.setYaw(getLutil().FaceToYaw(getBlockFace().getOppositeFace())); - loc5.setYaw(getLutil().FaceToYaw(getBlockFace().getOppositeFace())); - - loc.add(loc1); - loc.add(loc2); - loc.add(loc3.subtract(0,offsetY,0)); - loc.add(loc4.subtract(0,offsetY,0)); - loc.add(loc5.subtract(0,offsetY,0)); - - fArmorStand asp = getManager().createArmorStand(getObjID(), loc1); - asp.getInventory().setHelmet(new ItemStack(Material.CARPET)); - asp.setPose(new EulerAngle(0, 0, -.2), BodyPart.HEAD); - aspList.add(asp); - asp = getManager().createArmorStand(getObjID(), loc2); - asp.getInventory().setHelmet(new ItemStack(Material.CARPET)); - asp.setPose(new EulerAngle(0, 0, -7.2), BodyPart.HEAD); - aspList.add(asp); - asp = getManager().createArmorStand(getObjID(), loc3); - asp.getInventory().setHelmet(new ItemStack(Material.CARPET)); - asp.setPose(new EulerAngle(0, 0, -7.2), BodyPart.HEAD); - aspList.add(asp); - asp = getManager().createArmorStand(getObjID(), loc4); - asp.getInventory().setHelmet(new ItemStack(Material.CARPET)); - asp.setPose(new EulerAngle(0, 0, -7.7), BodyPart.HEAD); - aspList.add(asp); - asp = getManager().createArmorStand(getObjID(), loc5); - asp.getInventory().setHelmet(new ItemStack(Material.CARPET)); - asp.setPose(new EulerAngle(0, 0, -.7), BodyPart.HEAD); - aspList.add(asp); - d+=.62; - } - - for(int i = 0; i<=5;i++){ - Location loc1= getLutil().getRelativ(saveLoc2, getBlockFace(), d, .02D); - Location loc2= getLutil().getRelativ(saveLoc2, getBlockFace(), d, .48).add(0,.3,0); - Location loc3= getLutil().getRelativ(saveLoc2, getBlockFace(), d, .86).add(0,.81,0); - Location loc4= getLutil().getRelativ(saveLoc2, getBlockFace(), d, 1.08).add(0,1.33,0); - Location loc5= getLutil().getRelativ(saveLoc2, getBlockFace(), d, 1.38).add(0,1.86,0); - - loc1.setYaw(getLutil().FaceToYaw(getBlockFace())); - loc2.setYaw(getLutil().FaceToYaw(getBlockFace())); - loc3.setYaw(getLutil().FaceToYaw(getBlockFace())); - loc4.setYaw(getLutil().FaceToYaw(getBlockFace())); - loc5.setYaw(getLutil().FaceToYaw(getBlockFace())); - - loc.add(loc1); - loc.add(loc2); - loc.add(loc3.subtract(0,offsetY,0)); - loc.add(loc4.subtract(0,offsetY,0)); - loc.add(loc5.subtract(0,offsetY,0)); - - fArmorStand asp = getManager().createArmorStand(getObjID(), loc1); - asp.getInventory().setHelmet(new ItemStack(Material.CARPET)); - asp.setPose(new EulerAngle(0, 0, -.2), BodyPart.HEAD); - aspList.add(asp); - asp = getManager().createArmorStand(getObjID(), loc2); - asp.getInventory().setHelmet(new ItemStack(Material.CARPET)); - asp.setPose(new EulerAngle(0, 0, -7.2), BodyPart.HEAD); - aspList.add(asp); - asp = getManager().createArmorStand(getObjID(), loc3); - asp.getInventory().setHelmet(new ItemStack(Material.CARPET)); - asp.setPose(new EulerAngle(0, 0, -7.2), BodyPart.HEAD); - aspList.add(asp); - asp = getManager().createArmorStand(getObjID(), loc4); - asp.getInventory().setHelmet(new ItemStack(Material.CARPET)); - asp.setPose(new EulerAngle(0, 0, -7.7), BodyPart.HEAD); - aspList.add(asp); - asp = getManager().createArmorStand(getObjID(), loc5); - asp.getInventory().setHelmet(new ItemStack(Material.CARPET)); - asp.setPose(new EulerAngle(0, 0, -.7), BodyPart.HEAD); - aspList.add(asp); - d+=.62; - } - - //middle - for(int i = 0; i<=5;i++){ - Location loc1= getLutil().getRelativ(saveLoc3, getBlockFace(), d, 0D); - loc1.setYaw(getLutil().FaceToYaw(getBlockFace().getOppositeFace())); - loc.add(loc1); - - fArmorStand asp = getManager().createArmorStand(getObjID(), loc1); - asp.getInventory().setHelmet( new ItemStack(Material.WOOD_STEP)); - aspList.add(asp); - - d+=.62; - } - - fArmorStand asp = getManager().createArmorStand(getObjID(), karabine1.add(0,-1.9,0)); - asp.getInventory().setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); - aspList.add(asp); - asp = getManager().createArmorStand(getObjID(), karabine2.add(0,-1.9,0)); - asp.getInventory().setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); - aspList.add(asp); - asp = getManager().createArmorStand(getObjID(), karabine3.add(0,-1.9,0)); - asp.getInventory().setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); - aspList.add(asp); - asp = getManager().createArmorStand(getObjID(), karabine4.add(0,-1.9,0)); - asp.getInventory().setHelmet(new ItemStack(Material.TRIPWIRE_HOOK)); - aspList.add(asp); - - Location crafting = getRelative(getLutil().getCenter(block.getLocation()), getBlockFace(), 0, -.27).add(0, -.5, 0); - crafting.setYaw(getYaw()+90); - - asp = getManager().createArmorStand(getObjID(), crafting.add(0,-1,0).clone()); - asp.getInventory().setHelmet(new ItemStack(Material.LADDER)); - aspList.add(asp); - - asp = getManager().createArmorStand(getObjID(), crafting.add(0,.62,0).clone()); - asp.getInventory().setHelmet(new ItemStack(Material.LADDER)); - aspList.add(asp); - - for(fArmorStand packet : aspList){ - packet.setInvisible(true); - } - send(); - Bukkit.getPluginManager().registerEvents(this, getPlugin()); + Bukkit.getPluginManager().registerEvents(this, main.getInstance()); } @EventHandler - public void onFurnitureBreak(FurnitureBreakEvent e){ - if(getObjID()==null||e.getID()==null) return; - if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} - if(!e.getID().equals(getObjID())){return;} - if(!e.canBuild()){return;} - block.setType(Material.AIR); - e.remove(); - delete(); - } - - @EventHandler - public void onFurnitureClick(FurnitureClickEvent e){ + public void onFurnitureClick(ProjectClickEvent e){ if(e.getID() == null || getObjID() == null) return; if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} if(!e.getID().equals(getObjID())){return;} if(!e.canBuild()){return;} final Player p = e.getPlayer(); if(!p.getInventory().getItemInMainHand().getType().equals(Material.INK_SACK)){ - p.openWorkbench(this.block.getLocation(), true); + p.openWorkbench(null, true); }else{ getLib().getColorManager().color(p, e.canBuild(), Material.CARPET, getObjID(), ColorType.BLOCK, 1); } } - - @EventHandler - private void onBlockBreak(BlockBreakEvent e){ - if(getObjID()==null){return;} - if(getObjID().getSQLAction().equals(SQLAction.REMOVE)){return;} - if(e.isCancelled()){return;} - if(e.getBlock()==null){return;} - if(block==null){return;} - if(!e.getBlock().equals(block)){return;} - if(!getLib().canBuild(e.getPlayer(), getObjID(), EventType.BREAK)){return;} - if(this.block!=null&&e.getBlock().equals(block)){this.block.setType(Material.AIR);this.block=null;} - this.getObjID().remove(e.getPlayer()); - delete(); - } } diff --git a/src/plugin.yml b/src/plugin.yml index 16a6624..cd88ae3 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,5 +1,5 @@ name: DiceFurniture -version: 3.1 +version: 3.2.0.2 description: Add some new Objects to the Server author: Ste3et_C0st website: http://dicecraft.de