minecraft-renderer 0.1.97 → 0.1.98
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/threeWorker.js
CHANGED
|
@@ -29377,8 +29377,8 @@ f 67/200/50 68/199/50 66/198/50 65/197/50
|
|
|
29377
29377
|
f 72/204/51 67/203/51 65/202/51 70/201/51
|
|
29378
29378
|
f 71/208/52 72/207/52 70/206/52 69/205/52
|
|
29379
29379
|
f 70/212/53 65/211/53 66/210/53 69/209/53
|
|
29380
|
-
f 71/216/54 68/215/54 67/214/54 72/213/54`;var MP={allay:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAV1BMVEUAAAA4jNkuh9Ypg9FBnNpCm9r///+c/P+A/P9k+/9N8/hM6f9Q2f8+5eo94PdG0P821+4s1ewiz/8syf8ox/8bxPNNq+wQwf8os+hCnNpCm9oep9s0h8D7j8AOAAAABnRSTlMAoKCg3PODq/XXAAAA60lEQVR42tWP0W7DIAxFb9OtwdA6xQ3rzZL//84BD0nRljzsZdqxZCx8hLio3Lz4GwtYMWLDi4jnPM+vwogNKTTC43Elr6vgRMQ1wvM5ktsbvRPXN38wGxKHMmnI9M65vgxavwsg2WCpCvlSg6iqlCF4ceKbFEGZVC+5NFFXYUtxZzILl1xmiffoxUcA5DUHKULZp6iqsQzU6KNWYcxBUMnp8A2mwWxAhTPR0qRYFs6sDT+zTMZpWj5pO8L0wamexJ9xXvm10J27rrQ94dSdOqC0PSFXPV4JRuwRzIxGHMB38O14j4N9Wf4/vgDzpRGDwkNeQQAAAABJRU5ErkJggg==",axolotl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAP1BMVEUAAACvsv+zsPmmqv+nn/+GkPXWhCt+iOyBb+d1b/9odutodOyTWuRbb+NlZfS0W0xsV+JpVuNNWc82QZ86AGw+Ir4cAAAAAXRSTlMAQObYZgAAAUdJREFUeNrtk9FugzAMRXG4twFS1jbl/791cbJUQnuAmE2VKk5cKpDukeNA9zeAhP4mwDlgahdAEoDm1dAukIzmlXaB/HBcUGbQJCBkBejgkMrt3j5WeYGD0iAglkXkehVZFlBQ2b0FkKjtE2CjIIYEUfIhESdMCUyWoyBFZPZI+Nks8OUs/f7kXSsLgCxwiRbBl9YRgddazcC5lhnc/T1VFdQObDMIwdJBRQQhYNWBTTCXYzR0AMZIyOy9c373FuQFGXLJLzYFEJQvQSHKgwKwJQAF1BWqIBC6hNlKbAg0GPXyjDHkeqoj6iVAn4DdP/NQhuHxsAr6HroAswB52QUcySTgeGQGg3J8lPY55h7Q9705XQdpEgwaHXVhtHZQX6Whew+X+mfldsn5W3fEYM9fVjfm/pXShd1g38UrdvuIGZycnJy8kW/CDQ5IMRlUUgAAAABJRU5ErkJggg==",blaze:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAJ1BMVEUAAAD//////4T/+Ef/1Sj8shf8lgDReACrdQGLNAFsMQBfAgExDgs044iSAAAAAXRSTlMAQObYZgAAAPdJREFUeNrdzzFuAjEQheH3vNR4xtCkibyQA4CSCyAlfZocIjdKm4sFxAHwGKVmQo21Ts9X//IbE1evBfpBjG9ozXDlJZkKTkAr4IpShNVkMjiJ7wuUkwEJhcAmAzFGNcTJoFisJZph6heJiG7xDLT4XKRC4KiubvSf24kY6hiLnVPMVfE+NhPbo2Y3YVBfPA2/Q3PkchGGx++H4yZvd3GdNrjBr32FeDzPUdN88Mvn7QRHHiSX9SkMwnxYNTdkq7sDlMsLkZHRBEwBGaBpKnQ6GqsVegLIfrDOfOkGI0W7gQTN6JhJQlcYCOm+oJyjHyD+F7jg7v0B5TtIgi1mkx4AAAAASUVORK5CYII=",boat:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABABAMAAAAg+GJMAAAAG1BMVEX///8AAADCbT+6YzetXTKgVjCZUCuPTCqIRyg96zNeAAAAAnRSTlMAAHaTzTgAAAPOSURBVHja7VTLbus2EBX6XOcPimGzL3jG7rbIzChdFjap3GUB65Fl0ZtY/oFr67NLqoljFVDkRXFXOZZnQI/nmOYcnqL4se/7U59xyGGy+qtI+OanHDdWvOLmEkXxnWp1DKZqj43mVB2jakiroH+8EfhZgu8t2BdVC/opWCbKq6hppfbbG8F2juApxqp9RRPDp+G0f112hyF9/9tfxr+wmiF4NvZE6VmNMdyfWoAB3oHRHs4ENrsDgzYChcYc4/3eHhq1YFWOXfr+D3/mrjueIdhHgVgVhMcYu2c1a/dRY473ZwKPGYLh6Df0MzndjvFxeFoDW1glOT4Q2n6/81TcydwOyqHvhqHfH3I6NN3jcBoSDmM6Oq2GUxAqUM5OQTjEIGBhtm28b7Sq2pgnGWJbslWJ/cnP6+C5jGKKlUXvaePrh7axJmjT1ow1r7ns0kZOvpAwt4PSOyFHxBpFtL6vYQIBx6oxq1zZJ4IvVGy2s2NkgEO0ynYcY7yvg2pVNe1zp0lh+RD7/u9EMDvGath3w6k7jOkxH2I/5AMc0/HcJavZMToLEI0rckSrx+GztcGsqncQcHfuWtmskG69c3TriDlaFbvPNUSwEw5V0/bnLtLZMSqiCrOM2wgP+1A2eYSat/G2A8YcgVngChaj5G3kyxSqJ2vbRrBrD+cux7O3cXKd4+/T69z4HZFLj3u5tGvXTwmKuEXGCv0rLn9COELBlfqXSxvlvwS0oYxbGl5xSbDsieS33hP8ypG/cyBP7C/qy54I2TFUsE5xJyrKpVzUlz0RWgsEWiprrQLWUi/qy57Y79Ohp6frcsro2ov6sidSAI8GagJhAURxUV/2RG1ijM/pXcUzLurLnlhgOyeDjGVPzDqYymBSd/owHM+eOKMDAmHlHYknELtJnfvDcIz6jici7FjApQlqQGUtk/qv2RFbfccTEWqooDRkGUxUkHGbCfYyeuK8DrqzDCYqyKC+Hw9x3hMpMNYKmIIFIuBJfdkTsw4eJjKY1Jc9sQBGJbykfoJUX/TEgjw2BHKgjSM/TJDqi55I3rmNzwyUkvPkSQj5gzvv6GbZEzH6ADgK1xCDCtISlhJUbpY9EVFWdVSwxUY4WgDXMQgHrsHxCk9sX+ygzcjpctneLCL7gVhAaRaE2QRQBpeM8TXfOPWDf6VwVsN5GRe6l3VwDYHztElvuJQchgmuIaCEDdFForu3dAUBtpIHBnAevKmkzAJAa6heRTB2ytgBE6juFGBBLSwzXf+zDsaBrwUQiAnALChFwIB+DR28X/4g+CD4ILgW/wAFIWww3uybGQAAAABJRU5ErkJggg==",camel:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAATlBMVEUAAAD8w2n1ul3prUrbnz3xi1ywmYjLkzfrdTmoilu4gieqg0Scf1DaZiyMcEV/b2OnTiFtX0h3XTNfUj5VSENfSCN/ORlJPzBRIQwvKBwTHWK4AAAAAXRSTlMAQObYZgAACApJREFUeNrtmItiqzYMho2kE7VeKbRJGX3/F110sQ0xlNC0y85Z/6aJLwJ92EYWhBC6U4iil5fjy0uYCppGPmEiRIyRtSBFkVVYC66maQCbs8JH+iuYDgngeDxuAwAwovQhInA0GpAazwAauBbgcAgGcBTNAUBOBLPrB0A+awrAaADMMwDYAkjmXQb4+wIAFQDDkgAQHKCWHnYNgGsdABpYBXgCYI58K0BUMRMicTRlAAQAXAbAx8dHfGLmpxUAaK4D4OwfkLkCwBpAqZ6ezgBPT1Iu/fsXoQOwAAAgOYH6yLeZFKQOJut8fX17ent9XQcAhD0ARAhYAAQH3t7ftfb+/gZClwHwTZgeXx8RpfxpgOcCQITqQ1YBJ4DJCCQAdIDz9aukgPjZNWBBJ68AI5DpiIEIVFEEKmEUFAyAKCswf8PyGsAtgBeLu+5fgG0VEHEQbwXA2QhFFNbUFBkANHMB6HVlgGMGkHa3YDIAZUKKMZIUzL+OwToAFE+N/+UmrQBOASTurgGgE5Ao+Qe7F8KaAJNrkTlzlLME3ucwE4QMgJCngIg5gBO4Y/sxrQMgpqtEQkLU7wwiVflUQ8h2E6iIWKRxAI1A/8mmAUQY1qReHbdIWmDWWgGwDjupSVQFVIfyXQq4FBdXMok9Nub+LPk2AA4I6ZILCC7dBSuZxB4b88zEImIDELcZIJWJkJAqgKVMYo+N+0ciGwsFmM5ALhLLnwJsbeQ7bAyAAIGYMgAnAiz+mVj11QDqH4EsCjrAljYziWJj3RyLagAktI8RMIUtbWQSRZHZt9lVAGZxTc+EhEZA2wBLmQQvAcy7DbkGiM9Hfubjc0S3C5uqMwmRpjIi9Hs7+AAROYAQ14P0fDw+H+XrYiAbFTBYQc/pIqLLTEIVfBNSC+JQ+tVadX2sUvcKAAbARUQXmYRfMjg0s1bNf14FeuD1sUq2J2iQUH8b4qnoMpMg8RIaE5OIA3m3E7AYXR+rfGdH39fTNfjv5UaOZxUAJhuB1A0GIEbboaIApG1U3bh/MoIagAjnI7AEQLQHAETEBCIFiHJmKyxlEgVANJkCQAMQo+tjlR+ZvHjcIbddzCTyIiRi4ckGnnCL0YeximcAlkawpRWN+08El5mENTqAj1SIeiw5tk3iZqwqAN7MYuMAZQSWMwmPAzGyAzAno+VoWcWq2RSgYzFj0/gApDNVmYSYCTSILZtN7k0cXAPMY5V8pgBGpABGkgGqTIItnRWB+YuBrBOdwGxmmscq8zGZAo4mRmjm/mOVSVhCb4rmTwDIbdhBLwDqWGWMDhCTHIBUalllEjOAyOs2M1WhQk1qgPouWM4kygjYFPDEhsxmH8D6CCxmEtMRiGs2M63HqnoNlEUgzcuZBJp0KtdsZlqPVfVd4P6dYDmTQJPBrtjMNI9VVSByaPYRyABmVCsDmMK2qlhVRULzawCRZkbogvwE0yBKgeQ3Nc9VAUxiVQ3gCbcGy2ozcgDKTzBi5G8TGqloq1mU73ChKlaJlwwAYHcOAfgUuOYAVN4IEBIgkdZUVACkWAOUWFUBgG2HbJsh1GtAz5sB0F9pIBFpbQ7gPVc/GdUJSfJfRiCfFwHBLpKJDZkQtZUEUcTWVwOsxyqwlIwtJQOOsQxAAdA29a5dFEk5jcHaDICjnfv6JyN7s4SMoIk5c0kIHIAFwNeQHipOSBxZFcVWARij7bY1wHqsUv+AhKAEpH3qRWTH6hVb3GPx7GKeNiMjl8fXfU9GnhVL0c5WQvEXyV+q6o8WSoMWbQq0XDq1Vo5LQv/dCeDnqAWz54LKJru/GcCvL6uUPVsldD+1XTm4AEDYI7DrnF0hpjKQrzzKLTgbIRsbx4MI+wHyO8lyJSAVL4p/JQD3KJ354ss7TDsuWh/uBGgAmTC/1wWgNOeAFE2EkNYEJTutMEKzC2BcADACBPRNldK6xwkApnuCiqH5NwABjwSwBTDUAHIK9sQIPLpaK6ImSfKFmJ9Bix0xa6t2ap8W9gHYhHuMRf2j6GsCiSPbh9DnPLqVZyZgrQAOJwUK6+pXXrJH4pxykzqBRgGSCHWWtS9bMkWwPduWMpMVkrP24eGh7YfhQwDf6/NG6/Eb9cxS1T9m5UTpy3Zi6f49qfWJrC67d79tGyrZLehZrCgngQAYI6f9V+v5CTbb6wSopO5coVb7IAr/ltqhFw1t+D7p/I6iUGsYx2GQr3A/Cdmt8on73DgO/RDuqr7t/1yAdq3WnSqAr/dSolldO5xuXgPbXsqOWtcOh677srtgWK2N7sTVjaXYnU5fEwfavu+G3gdRCl3ft63GnrYagTtEwjVqL/SC+uvXL8Gt274PSgfMh6w19Uttfy7AMPbmYRyG3jQstX3n9jOI9Ne11BZ+9KMf/eh30tj37XkLa/t+vBdAa7oXwJABhh+A/yVAOw69J3L9MPbjXGFRnrkmm9t0dpnTmHFsLxKNsKgzrxCb5a0AYXKGuzzq3x+gHwpL/wPwA/AD8F+OA22/0fW7ArTTveCjzait6KquT6mf7oYfbUb9sLGMvjsfuD/AuNH13QDDuNF1f4D7Pxd0J1F3pycjf4vbHQ4b8aKqjEPvMzDus9zWNoCfd7C3bTst9wMMVWWv5e37Xl3ZtvxjAA790FWn3WN5O8DYySry17ujlK0STKk+mqUbjl/22qAbxlM57eTNbnKQ62JZUL3/9kDUnfur8LnD8vZANI5V/L7J0r12G4XqtFXFtd/Sx32j8N0Ap9N24R/eOq3aGiGdPwAAAABJRU5ErkJggg==",cat:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAATlBMVEXv9O3r8Oj72bPW1sz71Wf2ymD1yF7ywFnxv1jvt1Pqq0uvdh57bWJjSy9KMBc6Kh0RDxgAAADq6urOzs6vr7C+c3NanRJWU18kJDEcGCdfq47cAAAAEnRSTlMAAAAAAAAAAAAAAAAAAAAAAACVcz0/AAABUUlEQVR42t3T3VrCMAyA4Yi1SmtlSxSS+79Rkz6R0dEywTO/0rPyPst+IFhiMSJyAW+amJBFA08EEWBeBQtQ/1BKuRuY5yAusACo4ABSBUpFxbsCPkJKDgiLgAktANYYOFhyDlxQgFCFbUA6VaGg9lsAj3LExmBCi1i8MdDNBWJ5GBDmFmBhFuE7ANQWgInVY+q8B8wh58w8gy2rBxASIRJ2gVwBOOf3oAFQ6wL1kP0QeQU0AhRdIb5eAe+15V1vAWqB/X4E2PgrADtA3O/XgJ3WTSDeCJi8zcc4eAo+QroBsC7hC4AMOAspxGQNAUZdTDwAtkdAQrTdALQAMYX4FkIYA1VwoNZ+CynqCLeuIOSkAYyAqRZjFyDNAe8FytIOLuoCNv3hkLPtkP3k8xNc1RthZ6YiPwAMmmoAHUC028DGCKevkwg8DnxafwDmO/uHwDebkIAap1EwrQAAAABJRU5ErkJggg==",chicken:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAALVBMVEUAAAD////i4uL85XDT09PhzGLGxsbgu2nTrlrQqT/Bk0OWcjRjVkH/AAAAAADtfCsnAAAAAXRSTlMAQObYZgAAAO9JREFUeNrtzMFJxFAQxvFZrGAewaMwwxQg2IA7fMzZElQecxZswHZc7CAd2MM72IlJVoXEbATP+7998OMj2kmHW6LXQ9/T0AUt25UuB/D+dgQ317+AXLZ7OgxN4vmJ5vGxforGXhbgSj9ElFqjrxYXomN+GriqmqG1H3E3B7DmQN0A0Wpk0laqKlw2gKv9AdycbRNE1dgA1SOy0hTWQCIrgqaUlnGBqkLY4aeAq0FYfT/OFRBQVGERWQddAKh7ZuFVUCwqorow8166jgVzoBaZWV2FRZS5iM2BYwKwBzEfjJSYg/zOIx7hDk86948+AcUmS5dD8ZFCAAAAAElFTkSuQmCC",cod:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAJFBMVEX///8AAADr2sPWxa3KtJXCqIW2lmusiVmScVqEZVEiHyYAAAB2QJV6AAAAAnRSTlMAAHaTzTgAAACbSURBVHja7coxCsJAEIXh5w18RSRiZQT7sAS8Rgyz2kbYIN5CiDBbx8CewHM6QS3sLf1hivl4yMc626+ZCgKQzENVF6eSsaCVkRCRfCiZhFYwcM4t+13SqFdOwS6/Vw+5HA3qFyz7beOqriX9ezFsKmlcySn4lFKMMQiJGYWwR9VQyTnGmggh3M7eeyGBQ0u4TwZkR/C7P/weVk/OOkCzBdD8ogAAAABJRU5ErkJggg==",creeper:"data:image/png;base64,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",dolphin:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAP1BMVEX///+wwc2In7V8gp1ZV3NXVHBIRWP////D0uO/0Nu9y92wxNmwwc2lutCmuc2dssmSo7qKmrGAhqJrcY4ICR+8V/49AAAAB3RSTlMAAAAAAAAAVWTqWAAAAc1JREFUeNrt1GGPokAMxvFRz9sd2+kz5fb7f9ZrmYECnuDmkn3FL0oaSf8RJaT7iB6Pz8/Hg3J3u91+mzRCITtVIJwNS3JcUzMHSlkErtfr3fQAPQxB8uhVYPAA5xHf3fQNSguU6eSLwJ9hHXBpROTXR5S7F4GcLTBd5ioQP9BuwJF4gWU/wAt2tumBpnQRINoEhGUORIHeDggE0gJlWgLKPHUvLkEEqLUCIhZAVQXsaCoAP2q38yMG1Y8vdcOg7utD9VsBFgNf9zfEcO7eCuTMvdG3bb0X+K3AL3sDzGmlFNpVZskB22xxR9sRENkGUAqA4rDWPoqPk+OngIaKWdVnaVAVo2pDBKotGl+KQhurUa1zQAQjMRHICywCE3/vSrq2h0+/8KnDvC5s95m5D6ntR4BZLpfL+BgRv7WEKKY0Y03d3UWALZ5GlLMAkjPFdBQgskCOQKbl4ThQiEoEQHlEiGkRwItA3OsKalsa07cCg+/51hBTBGQvIIJxTWHUJ0Bk/V8AEXsKpD3M8Ux1ywCI8F5AwJD/CAhUtBUkFYeNMvlXQABVf3kCHgBq1YVagQgcid2N6tIxEWGXZ+ykScdie4En6XQ6nU6n00/7C3s4RNq7Xn9vAAAAAElFTkSuQmCC",ender_dragon:"data:image/png;base64,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",enderman:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAABGdBTUEAALGPC/xhBQAAAY5JREFUaN7lWNESgzAI8yv8/z/tXjZPHSShYitb73rXedo1AQJ0WchY17WhudQZ7TS18Qb5AXtY/yUBO8tXIaCRqRNwXlcgwDJgmAALfBUP8AjYEdHnAZUIAGdvPy+CnobJIVw9DVIPEABawuEyyvYx1sMIMP8fAbUO7ukBImZmCCEP2AhglnRip8vio7MIxYEsaVkdeYNjYfbN/BBA1twP9AxpB0qlMwj48gBP5Ji1rXc8nfBImk6A5+KqShNwdTwgKy0xYRzdS4yoY651W8EDRwGVJEDVITGtjiEAaEBq3o4SwGqRVAKsdVYIsAzDCACV6VwCFMBCpqLvgudzQ6CnjL5afmeX4pdE0LIQuYCBzZbQfT4rC6COUQGn9B3MQ28pSIxDSDdNrKdQSZJ7lDurMeZm6iEjKVENh8cQgBowBFK5gEHhsO3xFA/oKXp6vg8RoHaD2QRkiaDnAYcZAcB+E6GTRVAhQCVJyVImKOUiBLW3KL4jzU2POHp64RIQ/ADO6D6Ry1gl9tlN1Xm+AK8s2jHadDijAAAAAElFTkSuQmCC",endermite:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAADR0lEQVRo3u2Y61ITQRCF5wGsEhESCrkloiEhITctQG4xiQQRuRuIKPrH93+Etr8OHQOloPyQbJKu6prNzu5mz+nuMz0bwpWtL+7LVqkl69lzWU5tS3IiJ9NjL+TZ0+cyF89I6LJ66di8+qoZ5mLpkIhnuqfD6KO4+e/stvse1OqFc9EXk1rpSCAD4G1Pysx46hoBq4Vv5mvZZpifzBuYvyXgtvseDHi9qF44k7N4yXwzeyicf1dsaTY0ZDW9K5WlExvVw1buOOg1YS2zF/TeUM03yaDwdun0Gvju47vuezDTP5dq/pMBfZP+YOPyy4bsvv5u55mnJJhTANKzQO5rRBaQ5fmqFBKbUkxWZGXhvUW/VmgaaH5TFmTGXFfd3kzz21K/501T3qKoGWCCSCbUVBNUtKwcOKeiJRNPZiU+MmOORiS6BDKSBADcvHjeIcEBVwqnspE9MgIgBLCTowkjITYyLVNj8zIbW2D+j7Xf80bd4lrvDv6fMyCSte/WKH0xEfMRcXPA1Hwlf3JnBiCKCOLG4kHnOZExIs8L+0gpAN6WR40+vQHgOefNEeBjj6esR/AMWEvvGQn+nChlgC53TfGRqOOoP/2BAlMCdkTB6crwWbZLF7Y6+HWsIlzLvGZA5zlRygB7YR8BbYAU+Eb2wIBxjHMe8FzD0klvwDzHdo0e+3MiQwAR5YV99PpfvVr7iaodZz7K/soP6w+cAL8G4LaXUIL8OZEigKj62O78diy9yQCAA5RmiPTmOgjgHPNEnBaZ+5wAnhMlAtidtZc7dYRONynmCjIoAUEjHzTyJpAInp3XJRPRY2QViKwRsc3cUafOKQGEDWdOI29LG0RBAOA18qb27AsgJNIEmKJfEcCIOwnUsjY7oa+NKLt6m+Jn2moPAZBDc0Oa9zMBmtotaZS/At7qmpRWAsgOAx+pxuY+GWDKXbwwEm7u7yHCxY7a7zv7BbxljupbVuimiBECEDxteoyIvrOd8qUBZROk67+pPEABTjZo+9sBjx70tfnX3tRUOSQnsmHgbCV/aV9t+Vw9M54aPAL4Xk8GaDfYG5+s/1MjZILHqE2Q7ev53Ra/Zuj7PgDxAyhC6B80BqoPGNrQhja0Qbaf/P4PM3XaxMkAAAAASUVORK5CYII=",fox:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAgBAMAAACm+uYvAAAAJ1BMVEWAgIAAAAD59PTn2dPVtp/nj0G0j4PifCHMaSCwUSKOPyRWPzQGBA4kh8LGAAAAAnRSTlMAAHaTzTgAAAGUSURBVHjahdAxb9NAFAfw8wRIDLkFEsSCG4kMHVAzwAiV5W9gXUdA1omugPWOEdpwzxthaP2qLhnrD9ClHaKuvQ/Vv2OnrZuhf1myrJ/+vvdO6YcZ8p/4jdZqoKLB87AchKCQqA9X2+F1HJa3sNuCUv/3ZfRV/q3hMP4E0A8DSABN46knV1prUYm4FJGK/d4KyJgyTfP74FZQZOZvkiSfG2AA86xYwyHg4x0U9AgUtAlDZiYibvN7Mknyb5PJeKxGVQelIPM4RjVG1Ahl7CF41XU9j8e3IG77bfb9yssJYKHXAWCf5kctoIwnArySra3pdLqzI3UD7RwK0f0cTD/cAS7rwL5TK0D5HjzJfmK7TYhedoBPDCsiHfgf4b0LQWvnOE9S9n5WuAaSXazVgO/AFRn1piIuARUTGQNQEtTg2ekyAghAmAz1wXXgjSGAVFwPWU4WOPyXTeyx95R1cAaQhSZyNrWeiIoWShkB5gDObcpEM9qEfAXG9MC50ua2whlmD3ARzu2Ly+vzL5pZjuy+MPvC3QC9wfXEFSoo+QAAAABJRU5ErkJggg==",frog:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAQlBMVEUAAAD9trb/ioq+rWqxnl+mkE9/oFjlXl5zlktjkC6NdEVWgCLMPj5NgDBGaypJax46Whk3VBkxRhRGKiktJi0uHRCwcSzMAAAAAXRSTlMAQObYZgAAAadJREFUeNrFleFShDAMhBEoZ1x1Qz3f/1VtQm9qgVoZf7h0pqWXr2k2M8eQJMBwSSJSvStpow0sUmdgCHMIbEQTIgCo5CMkzNM0zaEBgPf7x0SNUfUBhHmeQwOoiq4zTPOUhk32BF+VomvAlDAPT1jY+LRxXrQlqA638G3lHkKQxFL0i501vxzus2WIyunjfidUYwb8uClU98mr7CyRFGwrh4ecUwABj61Iwlt15zcwSeHjAGgS379fILxTk+I2mt0gCRmyXpNs5qeJZ4BQKQW43ToABITgEgAU4DaOt58Bwp/fAxChlAzj0zj2gOcKGK8Brh6wyBmw6bv9SCMpAybfy408ZPB4UlUpAp/pBAEbBTiqZO7V4Nm1NESU/BFYdsDSBaQCpAvIDpAWUOwnSBDwSSTt2foUICT7SqVPjx3qaeOUsHBTjOoiAdrr0BCEGK5Ilg7wtwwgrEj3ZKXscnM9AFRCBO5JZE0IGc/+xbIpCV53v8eVjQ9K3qdgV1zro8hrtuIKkC3Cr53dPFIqcxG9EjaPTIPb1DGpVmlEaUNHa924dfgHfQFwmyc0LyT5NwAAAABJRU5ErkJggg==",ghast:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAIVBMVEUAAAD////5+fnw8PDl5OTk4uLd2trYzMydmZlzc3NLSkr5ldknAAAAAXRSTlMAQObYZgAAAYdJREFUeNp9ksGN2zAQRdmDO5iBfN95JlWAgeRuAkLOZuRNzgrcQYLdBoJVOoirjCmRYDYy8i//wIc/n+Q4J7gs6YgdJxFRBBNXVQENRE8yZZG187sKkEIGLi/z/HL5D/Blvt3mH+8Ay044ZgBeb3e90QDVCkz94QFgpbGugOmvDPy2vxNYgMPnDFCAloCoLgDXqf9wfJBgKwAfU/+M8S9AGQH9MXzDSskGYJQRgcMEurkmDSCxfSiABtCeegsssuJbQETFTKS6q6r/v/FOl/1wXSrRtQOESDh1F6aeZG12mKBvC6N9Bq6nBtA8xApM5vCJRxpXAAdgEfg6f/80/wS8wggrMCwjbCl33T09Zw+6dqolB5/Yw45p9xRAORMiaB2hQLTRlLSWHNTXBHICwD6Jv0Qg3E3CGTDWLffOJ7B9NFkTRP1ZYbTRkyCaUxiS6TCyaBhNwwgoOQGcMsp+RBRe38CE4axrhxhKAlYqALmEEqIpRA9D+SwTikQpt1n93R5IcTOKi/wBKsTOnkkgxrkAAAAASUVORK5CYII=",goat:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABABAMAAABYR2ztAAAAMFBMVEUAAAD////6+vrw7+zq597b1cLArJCenp6ciHaDg4OFcmF0c3NXV1dNTU1APj40MzImjJ+xAAAAAXRSTlMAQObYZgAAA5JJREFUeNqNk71u7EQUx0eb9YqKZ4jOeFPchjAze4s0rObDQrcy9ngU3QKixDNaueAFaChIFFHQR4IGci2078ADoER5g0g8ANqKHs7YeONsyIqf5HP88fP5j3dt8r+ZAAOokPxVQaDgvc/J9Q8bgsQ24oCnlFehfVWYUMrAuT0CMAZVE8JpCFer8O1HfRtFCKVUFdbeVRVuZ7O+jSfQOGEdqkrHKwm2XQHAhRYFaYzOk76Nn0Kg0GCEBW2O8lnfxk8hMCK0rjJSSrNM+razBtc0vtAppOnhpG9PQlJFmjbYAiTY5bRvO4IL+BS1qWqXJ33bFVzjv7z//f5h88fHfXsREXxOxuwKIbhd4YDSyiDaDpQUAXb4TNAaBdxiQQGQ4+H5U7CZ1kbXeL0rRQqAznZCFDDC1tZWOpbzFCPE0wQKtdHZ5/H277pSUEjnczYIBxSsMVGwUbBRoGNhmrLaZeZdVdf2g4mlECk9eiuXg7Dg/tQZ8+Gytu+rWC4WgtIL9SRIu3KZD5d1cFkshRGpkmqISLLitlmFq6v2arXKYvk5M9qWehBmzrbfN6v21za2WG5xSbW3+fN3nkrgez9Myrgkw9DQ/c3h681WONCCA+wRJlQoyvcJAJwPE3zmry79zIbTlcuHCEbVdpE2tb62iTSZM8ttBJdCkZ4UZG3lRKZHRh+OItgQYebSGj0t7Fzb5RAhmIRBcM464xPvTf20BsqVGtbw5/2P95vN8NoPEamiQP4TCsAAIMUe97oXmo/d7rQCzijITq2QYiSkwAAFilWim9LT6+vrchwRBd7BUKAvBQZM/itIBhyi8CyCoUGV4lwA7okXE1IZ71NKCRFn6fnuBCrRUFpbISSTUnUTKoA363Uv8KKUkluFApOqKBcVMhbUpCykKpVdCCnL4sAQJKF8K9hJXZbleSEW87K059OcRIQ+GYR8mkxre14sjua2TqakF7R+txVwYELK6fz4GDseJwhRNApbEjIlx8tlMhwlREIU9sDYyX4B2Jsd4eGGjPnk79eF7v1N/+oaQnpuvrm5ITPnvD9be8Uov+DATXMLKem5++nujiSZ83W+/oqDMJVm9LP3t1yMJySLrC5z/wUHjjD6aeX5gvQ8/vb4SMjbk18u4mdhBLLQzjmddZ9dTvBTuCekyZOWtHi+MsY4pLWOEGqEJJuHzYaQszyZkbZFpaNt16EhhLuFIhuEoDF78ZP9A0Obf2KBegjhAAAAAElFTkSuQmCC",guardian:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAhFBMVEX///+rjEZQjnQtWUcAAADX1c/Y1cvX1czX1MzX08vW083X08rW08vX0snW0snV0crAuq7Auq3Auaq+ua3dkET/gi+DpZy5k2Syk0/wdyjecipqlYPsZCqFhmBmiYDLZSNdf3XeSSh4dVCmXCxOeWbUQSDKPBxBcVpkW1BgVko5ZVJ5CxKoxgN0AAAABXRSTlMAAAAAAMJrBrEAAAOASURBVHjapZaJcttIDAW5lvfIHtnLYiLDee4kzwsL+///F45I66AkW467akSoIHRhhjOkuq5bLper4fL/wHAhiscBItiMIYSgm+j76GOga1xdXXWD4PNy2epHQ9q1HrAz0+mneCswfeB+K/i8Wi6HsZoEA4vFojtP4E1vO8GmvvWw5QUBEd4TrFabBj53F9LbEfZOcLt8WN2ubi8WTEu7J1g9DPUPt5cLPBM83N3e3g2C6+tu4PqYmaCPxk5w99/9XRsvCaLR9+G0Y8ID3f3916/DuO8azwmMgTA4WuQWp7uvEy8KYFObOQpsR4K7S4kJ7Izod1MYaSvwetoivk2wWAyCGR4PUNmZbawHnOWLBTQeqxgZj3PBWQEHbhPRD2TfrlNuOqCmPQs2I6M/I0hCAleAgtwKNrmeMhIux1lBLwklknpy1l0rbfXinMD0SEDTxDwXLlVt2tubwrrbY02fNZFxlEMoKpB2gsfDHz2G/fev735+/6/NcU6yC0lxVtDbv7z78aff39s6EiRylRFxdgoB//z25x/v/kKa5ygD0T778/tAYMCS5rmKsoTKz9wFYRc4kee3OBU0byJtBZr9SFkViAqsnG8yQGpDz0whWqmi0DynPU4eJmy6xUDLffz06UueP+xnBMkueXPz4UvW9ws+thZEveaBkmV2325ubj59gXqFgPV6r4OhhQ9DD4cCIZ0XPK7Xj/MO8lDgFwWzNcjZDBC6cArddBcOkcyld6Htgx+6GXq+g2z6Z8HivEDPCSyxGchInN3K50A22Iim8ZNAESnFgKTjg5URaEyiAZA4mEK4CtPcCs97rngqEukcW5gJsgzGZTEThBKaYaynEjutQ0FRxs4T5z8kmbGF5nJVumYCtdo28NFDVEjpafZ22lQWsw5Mtmo4fg8IcE6fzjKm8EwALrBPvQckV1S5QrgYMDYHAoHBzjqeQogKRVRIY49ZTjQT2K288NEiQiE1C5AeV6o83wdNXRiYC4KUhFNIZELl0SLKgKn2oflG0saaaMCYsdOZYCQlceo9gJTQrttvB4JdOAVItCcTgl0sYIqRnuKUOBJk2i1pp/fi9BS3a/va4nK6uxqReqHFq7naCix5X3B9kiNB9yToUzJvEVi8SSBDvlXwpjVAAl19h6BX3wNm2ng4/SqB3MCVU5T1OgGokfb0/LVpczpVfuqPyjdt8tQvCjuwWwAAAABJRU5ErkJggg==",horse:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAh1BMVEUAAAD///+lpaWGhoareS2nbh92dnZxcXGPaR1jY2OKVS6AXCJyVBp2SShRUVFvQh9hOh1FPC9ZMxc2NDdOLBM2MCZTJQ5OIgsrKi1JHwkqJR0/Gwg6GAUhHiEfHBcuEwQpDwMjEQcmDQEiDgMbDQUcCAAZBgAPBwMNBgMQAgAIAAABAQEAAAAaegGbAAAAAXRSTlMAQObYZgAABHpJREFUeNqllouaojgQhTOzuurYitKsNCS7pR1lF2fe//n21CUBvMznN3MISYVQP5VKEN0LKitT6Z6rKovNZlMUm6KsnCtgVlVRpbFduYMw8qIKq0zlDkAgd+WrgNKqDNiIilcBmwXXi6rAPARQKOD1CCqroNVWAd++IYJfBVQ7+IOwq55M+PmF1WKLUlRlWRRlWRUPAbufXNiutihlIRE8m8KiwjLxQqHCWVaLtJgFlr6sxqtfoYstURQvRQBgwcAxgB/GusvY8wvVo8HX9Tog+IASRTfbetp9Dqjr3wL4+nCofYxEU8BisX3anQLgf/CRoOjqEELycCuzcvex6voARKQQKGImaPJWUmPoPpb41xQgIplJ3jvuJQXOQTAAKcCErTdspPtljMT5R+w1/CPbZB03SPfv47cRLl9+IHYR1T++AKEdDO7/Ev2TWqci6G8U7XiJAM6ASASeuKOA5Xw2my/b1I4AHyjaCd5z1BFCg04g7WCwnWoCiNEAsnJZ3LPufgh9ZCbA+8fH+yQRCB1Rj7Wftfv5DKHP25Hpa68FHnzYLmDdAdoW5etXhD4yzZGLVAZgZFAAP2e5tAiW6z//WC/bkalugpDWpnA6Se7uALP523qmUzDT3P10CieIRi/yev325vZwBA2lHZleUiA1ceN42U7fz+fvJ1kPKAN0/RFPOzLFjbimyC0DTud/z+f/zifyQnCm9qE83EicI/lIEQA6nUUAgKAAn0VpfxiY/YiiFhwOPichIAuyMl4BbB/QC1GVART1iAQBENAogOS9NACccaCPYQtBAeFGznSAyBLQNPIDpYBAcQLYrlar7Ttqad+3E0CMY4AiAKABcDwenQn29YrmBgAnTgNcFZEB4RlA36JHABQFxEcR9N3n8fjZ9RNAfpsBgIQShEB3EbA/E6QT4x0gzyFQAlxVvZYLnAG5TACQ8Q2AIhEIub/KgdKhvly6z8/ucuFbWYEoeC/mQWQNACFCaDq4dz28u65Hm3IgN3ueqnxf1c8A0wjgBoB4d5DlIEWARFoEYwQ6CMAAcNPH94zIOZBlgz8RI2ALoc4QW0YMX3sGcLniHHIAwS2IP9zNURGyjBkAP10CnNMcjJJoADFqi0AUCF62kHzc5MBLEjUJFoFUDEhz0EejdGxMc+DtwyxmbRGg4CAK9tGSh+dqkgOLIJg3BAMCwFNMe/k60ZCDNIc8AwPAm68TO0O3gCEH+isfIEFoIoM0zKXhbcTbi9OanIMUAE2SCJjNLAPIwdFOFOSg7zkHtvJp8sZLyyjmeEwb7/PX0Y23b9PoLmzYsMVoGrXQGgMyf4/Dwc67rpGmwc2ocBm12kIffic9hEpax3Zjg3Kr5L6BakHZ7jSKAOEScGraXEAl4UkcHDp8feOZYIZctBswPV0ye/0AgDSGPMXGs4TTsKFJys8PqvRXLAihEQQqGPII8UTRAGVA86H+pAcMRyR7WEOGPGTQZECNDcsgsYJVLnLrs9hBx1hqycUkHrUvqxgONt9iUv+p7ocjlD66/wNdcSNfhkmkngAAAABJRU5ErkJggg==",llama:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABACAMAAADlCI9NAAAAVFBMVEUAAAD868b14rjx3K/v2anr057jypXMqX7EonmlpaW6mnOvkW2liWaGhoareS2nbh92dnaiayOPaR2AXCJyVBpjUT1FPC9BOy82MCYzKSMqJR0fHBcP+iOkAAAAAXRSTlMAQObYZgAAA3lJREFUeNrtV0t22zAMJDAg+0ulxm7URr3/PYsPmUiMXja0vPJYJMbyAiOAGjynN7ACCmVkPO0AButlC1ueRnEkgBydAHBA45afIICJ8bEG/htvdhHRcI4APIGU7wVAauUB4wJiUX6OgAIymjaACLNLEBjPxJRZTjkDh4Ag5EHEuCUvym8pgOgTAZFWdw3Gc4EU3LQCpPhEQJbs2TXGpxTbbyygKNIhcom8UpRVbiwNQxS0AytEuvaqMs+YlWz4jQQwMdEL8wuRUgaaAIFyhkjN27ILwgvcjIhsx5AAZiL+8kWDUiiqAHddAL0AAM2TiWvVBgXw9x9PTz++814Ac61H2SFMUAFiplq2dAaYTctRC/RCawCFbQ1B4oFaopwC4OZ9uwJ49+HpowWg0QqAHCgVKdCsf18CEYn7cWbIdx61QQf3AhQQRc67FrgEA9roHK0AVXQCwIAAbj8NSt2R2xvC8R6eI6COYOwFZEEMZmlngGm0BYi3Gf0hjFZDcu58KH7xJhA5GRmCBLCjFpRqTGK3cHgEAGZhrkYA8Fjx+etXIl1MtaDOkgCsS7JsBcRcZF+ul2ngDEROejUBrxTgGuMQKnojMgAMRdWMsRYwRSt1cSy/m9gSSVbsBCjEhHH1oiEfgCVn9h3vb3bMl3oCvABdE9pAYpACAxUAwTP7jhbIQvJBAM3fIfttqS4wZkQIv4+AoI0nWP2lHEDCDaoCDAgQ1ONskQXuL4ibSRD171sQXYCA6ykEBgRYqpAB1tWiHD/U8tfxr8U0imimeNoMiImp3+VtIG3cebnM0zRf1hbTKCQjQ0R0N6Iri4SoQwFrhzSKLJLjgywwgqzL4wcBy3vplf65SRcsP8xbxFjRLS7lBwKmdZknLf28bmgaQv2H4SEr8Ri8pN6ZlnXV69u31eNyky54Ul1xOQ1eckm9M9ljX66/fl4vq9Hn5+d5uAKezD7FVv1W99Q7k2Wd5t/XaV6DXqZpVEDpbCZvQuqdabHE02xZGx0X8AlS70xLvP/zrPGdpvPQO9N6hFMF9M50bxw4033RO9PRMDoVvTMdDaNT0TvT0TA6Fb0zbSbQcpcu9M7kE8hH0LqhZwrosJlAm7mU7od47FmH0Bpz6eev6+XuAqbpMmt0ev2t9J4CZheg17qh6X6ICTSHDzR6TwHrIdIDDzzwwAMPjOA/NfpDB1xAY2EAAAAASUVORK5CYII=",minecart:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAAM1BMVEUAAADBxMW2ubqvsrOprq+epKaUl5iMkJKFiYt1g4ludXlsdHhham5SVVZNUVI/QkMaGx04QmSDAAAAAXRSTlMAQObYZgAAATFJREFUeNrtk9FuwyAMRVMa7jWzwf3/rx3QLmsiOlpV2lOPk+BYypFRzLIs53A6hXA617sSzsurEABTSkRPsLxGAIEYI0ACiCAC4tqp5fbARGApJavRsLoggLHGyrWvmAoOIPSWtiamgmw7MgIhcQuAM0G+U+TcBERcY+wNgJwJPO9wBAq3Blo+E+wM7ghSIRqkVGaCPV3w9RsTQUVAMRMC+MlkUHusISVfLlkoW8ZRbRmTRFXNTG9YZ1wdCoTqXsy8dNysuJtQ7Z6JoBTV0rlmrk3gB0zHW2gCU7XS6ZlrugrKxp+Ccuyg3ATljscC0eLtM/d+aX+tVfOy46GAQwGfFsiwA5HnBRwK+O4W/k/w/m+U4SDJ84MkMhxlmY7y8TCVGy8fpsR+WnXDGuPq8mHIN8fuL8tkDiT4AAAAAElFTkSuQmCC",parrot:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAP1BMVEUAAAD/////7nn/6j3/5TPGxsa7u7vZra23t7ewsLCoqKienp6ZmZmWlpaRkZGQkJD3cwmGhoYlJSUPDw8AAAD7udxiAAAAAXRSTlMAQObYZgAAANJJREFUeNrN0tEKwjAMBdDGxpnbZqtx/v+32jYMN9QKPnkhYdBDk0EDHSIQ0CGBDkEV/pFgahtgBhxEZu7nSGj1Ajg6SAmpVQe4M98hgHCMVUAgqklbObgyXwGhXczUWlXg10Z+bj/4i3X19gra1KJrDfVGakcARdFyqyEHS353w35J2oGiBRO8++miqrU2MJdZIN6pJy+Lz3Cgs04yeaees6qeByMypZQo548jLDdl9mnE8D18B+EyBiG4+AGMduBwCi2/g+BiAAJ/BTwEW/4XPABsMA1LwNN2rAAAAABJRU5ErkJggg==",piglin:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAWlBMVEUAAAD/gID/////7aj/5bX12iryuobMzIPCwnTooHTVlXreihzJgmWHh1e6ZkWtVTKiWTplXEOhPjiESzOXQyKNNQ1rOSR6JiF2Kw08OS5TKxpgIwo6GgwhHhyEOBusAAAAAnRSTlMABHH+CSEAAAKgSURBVHja7ZZxU9swDMXDWAMSRspwYiDQ7/81pyd5Vzzf3Oz4t78GRU2kF9m5Hm8y7h8sMM34zMQrcKZj3BvTRHMVoHVVJwRm41n1eSDwYFSB2QW0AoG4psY0JgRAK5BeiV7TWCD2wLt7AXkhehE1Du1BL6CPKT0quL4HgMgFxIBAy6xt3hICsYniHBRIzET+6Ij1jxg3/NUyXxEwiK0wiITZBJC3And3d10uzCzKjOkNOzGrX6wKJoUVpiTJQ5MbVseyqpX9SEQWmHUV+4obhI8LQCd5aHJDBALCRLIaQuRfWSRhBK51M7bKQ5MbqwpLjAyB5Kmw6AoFToZAgNCE0OQQMIXEGHkFtU3UUsUU9XX6DnlocgNNql4HvEuRAzWO/Kx342xMFXbibWwb81TJOS+oOyQg9reK8mafqbLkJR8UEFEW3nRjzDBV8nJwAgGs1qoY5DKB0QrEukrJZc9BcXz7S6AiolspC8AMIJeLQME9xC9JJppL3FmKen/J1moPsOhFzfi4gXNZvMuKdiL0xmPLVjBaHTBiK1DQH8lealfyB1mIsbEqIABcBETQKjiDYsRi84I0WwYp6yeilFgSp/iFBgJVSMchBeTsR82RVgFiCIAJgMRkihBn/w0XI9ZS+/GxtK1LXyaQVnkHn3acLDhlh6TIkQms6s05/Tw9vQUfJzs+3v45Aa4mXCTCCnh3nj73T0wQOY6oQyT080WAqcKO70H2F9tsQq3zpzdLOJ/P7+/nX+84I8SqvT//2QKEv+umGzdu3ABH/cLAFxwVGPuC4xMs353AGAmM/ELvC8b0fqHzBUN6v9D7gjG9X+h8wZjeL3S+YEzvFzpfMKb3C91/5TG9XxD5zgTy3xP0fqHzBWN6v9D5gjG9X7jmC34DNs5yRa6KJBYAAAAASUVORK5CYII=",pillager:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAflBMVEWnra0CAgIAAAD////Hzs6Trq2VoKCVnJyVm5uTmZmQlpaOk5OLkZGKkJCIjo6EiYlmh4VzeXlwdXVobm5nbm5SWFhQVlYyZjx2QypfNiEmR0daLzg5Ojk5OTlPKxlLJi0fNjYqKikeKio+Hg8lJSU2GB4yFwkeHRwjEBQUFBN24XvqAAAAA3RSTlMAAAD6dsTeAAACP0lEQVR42u2VYZOaMBCG1TOCDUYQemeqRDEq8v//YN9laQYckaAzbT/ckyPEmXsfdhlnnUwbwlBKGS7CBjmZfn6m6WQ6G2DiBHUegrTmFUHIpGeQSorT9fcEixANvCt4rwVm4V5ig7/AvQRJ+AuQQPOSgjjwzYHPw4Im267AnaW3wIXbdxINC9zDZUPbADwEHMnztZTrPOc467wEa+SJc54vl3l+bgqADPgJJHf78SXl1wd/oDgb1sMCeg4yifqxXC5Vwk93DAsSMoBE/QQqkZxPEvrDNSxIWJGyIOW4Y1gwG+BfCS4Nt4YXBJso2ngLTsBe7bUlQB6GMQLkrYfAvwJq4Z0KYEDeR3C6QzOGBEb/wQCtRwjMZbVabQ7G5Qk/weFCa3fYIb874Nxa/YLj0QkuN1r49/0eEZxbq1dw/AWDp8C/haLwbMGa7XarjTa2UwGWXwXNW7a6Zqu7EQ8BPfoKDDSEfcJDAYWtIQlTMBVvXR4KIDaoHApotLmWTFWUZVGVXXoEhquHgS4nAF6C2Qi+Bd8CYi60ibIoe1mAvAmy4C2BzWB4XSCszdDDaAGHxVzE2jCxGC2IYyHimAcOBPFoAWY34MFJuxMU+5pyPhei5PPDCcRD9niiHaP34AQlJg+oRFGIqgA9A6Q9XGlrC0oSxKCi/FiBfcJdC27R5gQ49662gN8VV0ibE7jCUOWzH5KiNrgOuwJXEZ7aJ7jd4QT3pfa1oJTKAqWCDPcsU9noL5IKAhUFUaRqAvX/TKTfnHu1gRak8lQAAAAASUVORK5CYII=",rabbit:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAMFBMVEUAAAD02ezy2Ovx1unxzue0pZSkjXOUgWKUfWKLdVp7aUpqWUFjVENhU0NZTDtSSDkNYhzDAAAAAXRSTlMAQObYZgAAAYBJREFUeNp10L1uE0EUxfERBdhQ0PAivAFPgUJHFT5ewC7TBJ8LBW4i3TM0VEgz09B6ptiOV+ARkjJt5GJyNbubtZLdv7zro52fJWtdq5aqENe3prV37vl2v959dK2SCsERQBrYwtoNwOdAP4AVrAsDZ7iUAWSG6B/AZtsAvsgl6VqBjGkEL84/NcAPvBoBlSnFfmL37z/Exxi/xj8x9kBVUsptBsX1DRjtCIAbUkjqSptZYflSyikA0HVdm8dM0pdaK87x7WwC9qTNZ+/ckH7G1Xv7RVCIj+3emXrzdgT0geJczaH9JcKnarlHGSDhoynOg2PJQYUqPpVuDtRjUVGIip3PAedrf7kVLtz0NYXarkUAEBBgGQgVBBeBMlKC+kUQfLQPEyGK3WYLi3RT2adDyr7kYAAbWD6dgpJKLnYr2UBfKqegDh0jx2JH96TVz9tpzLX+MYJf8+Bl+juNuV7FEeQFcPg9jbleH/YDuNvPA3s+jcd9L+1FqEiqVlZMZ/eZmCL8uK8JdAAAAABJRU5ErkJggg==",shulker:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAzFBMVEWOYI4AAAD////m8K3h6KjT1ZrHw426tnmzr3GsqGujdqOjdKOjcqOec56ecp6ecZ6ecJ6ebp6ebZ6Xa5eXapeXaZeXZ5eXZpeXZZePZ4+PZo+PZY+PZI+OZI6PY4+OY46OYY6OYI6MYYyMYIyMXoyJYImHYYeJX4mHYIeHX4eHXoeHXIeHW4d/XH+BWoF/W3+BWYF/Wn9/WX9/WH9/V39/Vn93V3d3VXd3VHd3Und3UHdwUHBwT3BwTnBuT25wTHBuTG5uS25uSm4AAADM1DMFAAAAAnRSTlMAAHaTzTgAAASDSURBVHja5ZN/e5s2EMdpk2Xrthg8dKfYuMVet4U7sTr86CRskuL2/b+nnUiN/Xh7nhT2574guNOdPjoJEby6ULFYlEWSbGtp5Sr5ayM6xnr7QsFlR9I4JtswuYbZunITBOc5LwMWlhGZpOUKjK1HAwpCpTWAQq2U4v1oQM3gpQBiRMzay/iLgJUlRAWAKBi2xWjA0rGK1R2AFga5ajSgYI34fAMCP44H0B0opTQqQEQevweJywCw3wJUxpWjAe8aAwBKAfR7UE/YAwC8Q+URCBOWUFKMKlaACCJqzw+SmJtv+Iy50szSSEPWlKMBya5h43ZM1nJmXTEaYIu6bauybevicV9V7Yu/c7EMk+JduCyW0bJIwmybhCtvl8l8IbGsTEKxZ6tiEa2KJJK45C3mSz9uu5xlwdKxJUeWHTnecbtyxpkdu9yxv/ZLlzXkjDXea8w+OeY6FovaYE6NQdMwsDOKXBlJBMUG6t/lTOiaLSuWnMyVoXEEvS9viQeJ7Q8/+AuQWqkIUWkQyYPalTWAIF3gZSSegyiOAaVTKiiNQp+qfBa7emsQlEIEgdyxqwqGGJWSBNCKmqrIUAN6Oorv6iBxJI4IY60cp0njfQ+RHsebd45RpMUFbWm9sKRVjH4IgvhBRE5s6YoRFdsqMo1CD9DyMk01zy0o6NNjJFuGPl8jgC+LXOUrSDdp2jdQ1EoF6dr78lTQ70mart9u0rdpisD7lSXx5ZIbNbfB1sBwOEK/5uzkz8X/kzE9+rfUFIWBwZ/5Cu6dSQeAy9f3jk6+zHYvbQBak0r+egA43gRzY0/E3FUh2VMCuTLkZohHZMsod+sBmLsy+N09nBJ+/dDeu4chIfztw/7efThN8P7h031zlv/+YR9441Kbr/L2oTscum64uxf/xkt1xCLKmTNmw58nALr80PX6fOj4MAXAncmNlxgvL2Fz4XZ5ZwTiJSR+Gg/gjg7S2AjniSdUIOP6S9afT1qCr5sOxhdiDjQNcJDLc7ibAqDOPLEcJpnfs0YDpOp+C5npMKkCX7c/SE9yC2LCUc46zpmIc8PUTQHQ8U96kuckALHpb5GhlwGXv3Mnkqll+v7570d5dhtGURRGx85ZeBvezue3Rz+chdE8nIdDfC7ZMmQAhICgENNhACoFZ/6tUggAp3iM+hgPnhMkrPTwBSONWqtzICAinIAQK1QDwBMV4NkMMwRBxCfAnfZTDBP8on3B6hmwXcoKNUAMAD8nW1Mns9DPqATy07L4Y5tE8xkoP0D9uCqzIpHFgxaiBolnQWIpZkdgHGtyvF5YFtsAO5ZG6dLbO4O0Y2QrccnLXQ7kqI8HBTfsZIQ8M0u23LKTniZrSHrJlaWxfUTiufRVEheW5R1Jy3ZlsEyrtkzL9mNayPvjp9W6eqylr07rtko/7pO0fpT4XmJttSnbZVpLbvlYie/7vh6k6+urq+vrm5s3b25uXo3SEXAl+i+Aq17/V4Df/3Ndf9W3A64uNBbw/T/0Q68RS/B6/eXq6svrZ/u7XiMBNzd+CycDjhs5BfA3y7f3PUOzujsAAAAASUVORK5CYII=",sniffer:"data:image/png;base64,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",spider:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAKlBMVEUAAACSiX+MgndgVEhPRTxHPjWoDg49NC0yKyYmIBsmHxoaFA88AgIiAADotIQjAAAAAXRSTlMAQObYZgAAAgpJREFUeNp10rFu1EAQBuB7B8RDUCIs0tB5rUuUNAivfBKvkI5b/eNLyVkzg6hQYGfyAkn6oDwAFUUqUvA4rHTGthTlb7b4P+3urHZV4uqqsuKbHdNNz3S9A5V1NUVIVW0leQfOCuQvhNzTDJhF3W6RlUvJV5R7przjBSBxu5KbHmV73OJaUc7DBDIVIKs5zuSU4nSIkYotgSUox25z0GAtfe+qk+GWN0PCARhI1fgwyJhjpOb7QDQBN0DVJ9BRiJmhB8CQAlhlAfZNaxAfb8ziwuSLQeqmrdx8BMJi0qsvBrms6hP3AuZIFxNYRJBj6L5W9d8UYg8SGcGmjSlRFuOB1/vqz7v6mLYbcscIEoYOAjNLoB+/6urtbwarGabB2q4juBnR5dnj+fnZ4wlDM2QEbQhdVHXOoLr69PBwVFfM0sNmgEE9g5Ve34U3dTh9IcZu/0Gsw2atboDL6f37u48vL+7E4c4jaD80YU2ult0v/NvP01d+707CGMG2DVVH5uNrPk0a2oog7vYM4G1qgN6FngEAgZmc8aQKMTSBgY62KbShCwIKaTODGPhztU6csA11FTgJQhNpBuGoNM2QIGDsQx0ktfF4ARKDIiKYmUAhdMZtxzIDYN+g5xLJVO4Aw8BYAG9L7waQeiaQGwlIZ5ARu9g7a9Yc0wYFK+kCeAbgDvfegdK7qyy+4z9b0kGP3NmJngAAAABJRU5ErkJggg==",tadpole:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEUAAABtUz1jSTNTOSNJLxlEKhQWCgDfr9AwAAAAAXRSTlMAQObYZgAAADdJREFUeNpjYGAyCglgAAFGRVcHMINNzMgARBuliSUZGQEZzkZGxsHODNiAs6KwA5RlYsBAOQAAqGUGQPKmAvcAAAAASUVORK5CYII=",turtle:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABABAMAAAAg+GJMAAAAMFBMVEUAAAD////K0JHCt4ComnNHv0qUi2OCiFQ/pEI4jTopfUkwcj8gakMlZDMbWzExMTA/pVLKAAAAAXRSTlMAQObYZgAABDNJREFUeNqd1s9r40YUB/DAZr1Z3JT+By2S6XnRiJyD9ZjmtBRSUbWnQITMQlgKXeJL6aGxlpltD2VZjKY2uRW2JodAlxAxm9DD4satYnKuI7OH0qUkEfQ/6Iwk/7isrNnvSUb2h5n3pHlekqkG9AVC60vvnLuEPJsCDxMRL01pYIWQ1hRwo+T6leeBixUA234MsJV98Cxdxx5YFuDSwG3b/tzFX8nLigtoDZngpdlSAHYbOYCMmoZMBaAa+LaIQ0/i+GKpsm1ouqYhFYARCRCWAZamGcLACkD4ITn+nvzXyQCUAWvlgdWQBQGlrBNLYFn8WO7BVABGTQ/Aa56kQAUAtBoAzgHl3DI0rV4XVVQDVvyWtT4FdE0dcDbr9yaAbiJ1wN80Pkqv7riWoWsIGmrAXX9Py4BbKN2CjhQBsolmQE0dWAlaZlaDZWTUTFNDpirwDNazGnhQr2mAVWsQMjf7cgWQ2IJuYjWgGoZTwHIxbIMqwHl7AmCrpmMFYBkAHhx5YfpSt971ZL7tt8yC35Y5Vfdq97JLxoiFkNwBqJyq5Ds9B8IgIIQ89lzLQGZ5wHmqTQBGbZ+0AOmarius4CnKAR4y33E+Qyapm6R8DeietZ4DzJft2CAy5YcjbYEEKp5nU992GKEAIMu4VRLotPGP2aWF0AZlbQCsMl2rnaMJQEQC9gIZCFQAfvTgMAd8/wvKfpU9MKHkXCSs7fE2iGx8uuQ4NmX8uGVstJA5edpNE0q/W7IHtHNMZPIVpPMaewtr8tYuWHJezwD1pPN6rRiocnbm22TQ4SPO/2XsivOLOcAwFgNhNyBdxnnMTznrnPITNWCV8796vd6IixE75pyfxvEMSOf1x8XAe6PLg2ESHYwuo+RG7CJOrn+b3kznNS4G7kT9YZIk/eh3r/FtEg2T5lzT5bxetIJlgETkbxDBjWbTA1ifA3StEKiOX0H28oDIcMSvB75t0+jqMAd0ExUC798IADdFdgVwniSsG9hOl+2/zu6n8xoXrSDuAzSaMi7g81HI6B+93oCyw5IPUvXkDVgZsA2f3PAwePLcdnpkBtQWAWNAzTRfm/djzsgvsgbPaX5EyHm9CHCnwMOYd3uB/Ov600EOuHJee4VFvGx4GbDb2ImTq5eBWAHp8kkR5bzGBcDqOJqtYGcYhzSSXRjQvAbpvMaFW7h8NAW+kTVwRBfOnEkN0nldCPB5YCQAW3Th5ylQcQGKpr0EmtMapMCXogZPJFCQghXsR2kbD4blANmFeUB0IRgQ26FnndclAdkFKwdAdiH44YyQSD6JpSK70NjNa9DciTlnpBtFAe2UB8YwXcF9CTCxggErD8RvADLgkXiZRjzsMkK7jJcFVuN/5l7nm3icRCFjL4fJRdkuXPfngCi54uxP1hEzonQX4v7sRMLnMefhfpIwXrAFhXyw4P7/kgmYSeJwxJwAAAAASUVORK5CYII=",vex:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAMFBMVEUAAABthJtgeY9Ta4H////z+Pzg6fHG2eqivNWUrMOGn7eCl6t5kqp6j6RthJtgcoMKluMvAAAABHRSTlMAoKCgEjok+wAAAPlJREFUeNq1yL1Kw1AAhuE3hxYrRYm5gmivQL0Hwa1LnAtCFpdOjuKY4KBjfnYhIUPWEnIBhgxZRSjHC8hp3KWxkg5ndfD5pu8FDqNAKQkwKXIE9Fuj3zCQjECYDCaPs4tOQP9pDME4B1MAbIwTgJEwv2yixPcCPw2igGkcljlZ3YfP33WSJTB9yhG25HaJPLUBtkCdvl5fpVlVVRy3ntdQZW+eX6e77UIcNqAke0eq+JCgGvam4apoUGqtHtC067K9Q1O+l2WMJl9RvPAnl7+0L5Ao9NBB16GxZpZloTGFeWYC47l7DzrXcUF3sHTQjW9YoHMW4zn/5QeNK1xt8XQSVQAAAABJRU5ErkJggg==",villager:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAbFBMVEX///++iGy3gnKze2J6enpra2thYWFUVFRUU1NISElMODM9LSkAAAD///++iGy3gnKUj4m1e2eze2KBfXl/e3eja01vbWqQXkNjYmAAlhFUU1N1Ry93QjVcQjpISElMODM9LSkzJBEjIyMjGBTjk4HHAAAADXRSTlMAAAAAAAAAAAAAAAAA7Uh4SAAAAn9JREFUeNrtlN1ymzAQRm3cuG5C9oMFJIW0idu+/zt2/wieiTNAk0ufgdEKs0cryWJXB0RguUEO1/Xzc871Irs3AViTQdnYLgAzGfmPkFnT9V4tiAI+IyCB/19AVgA+KyCaF9FZL3iDlfUCAl0AjpYmFgWagjkJfjNCtCwgml7niyrmcJ0gho7mQkDrBJALsAhwyYY1IAP4bahgdmKFgBme8PjE/PRI3mMGG1gWxMpnE3GetmFiWQA/yJl/CpzJutggYAYYIjAyQfu8XlAv8DWCb5sFqW2Btk2llJSKctwqIAFJ8oVFQRL+ChcCEKGlKwJSQLRfENBHFYCMZYG+2F6tAOauFgRtC8K1RYSdVqhgd6eCUmIUxTtdKknySXchOYOQEhkAmNmm4YJ5FPWM0nRdbKNGZRxHH2KElx8CRmWCvu+7roxd17nADE1qhdR0RfP1mQZMbAqwnxcT9KnYS5Lc903Tq0U6jVTt+Xo5SesWCUMvIheUMvh5GnwqqpKUJPU0jUSik57jnyswABWgitMYU2MjZlw0X9ppDbpOTMSkwCCQCXw+FBe4uGGUdehGy3950ScaEC4/duwCaWHPorEdGSM/0mMRRlKYogD2bZzGZvuJIa+/SFIQYfCjqvb7w6EKDiYAGe5h4DU4/3o9ezSzF94JGK4IC84Tr+d3PHzwTbTqvQVkqjMlSEa5KjhYLUElPJxOD8r9/cmjGQJxJmMgQVN2B0UCbUxxPJ2+OyI4BnfKEcAwxF95mARL1BcAnJmcTIRqq0DzQsCZwJsEUIgGFUCIKmiTQEceZsGwRlBPQGHY3EOQB2Jalz9XAB11crFWUH+Sm+AmuAlugi8T/AM2/NtEbUTDnAAAAABJRU5ErkJggg==",warden:"data:image/png;base64,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",witch:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAACACAMAAACMX59YAAAAmVBMVEUAAAD///+2qJWrn42rnYmmmoijlIOgkoCPj4+YiXeWdliWdFcltDWUc1Z6d3eAcl6PbFNra2uQXkN6XnBhYWFoWUwMixp1Ry8vaDVaTTZMTExHT0hQQy0/Pz9IPCc6OjpANSQkQCg1Lh0dPAkxKRwoKCgsKRg2F1guJxonJiYwFE0YKRoTLgEeHh4oEEIdCy8REREVByUKDAvCurIkAAAAAXRSTlMAQObYZgAAA1lJREFUeNrtloFS2kAQhiPphVJbKVq10XDG2Ba4mjvx/R+u/+5yR1U0d2SqYyefgcuO+T/2NoYxyw4PMyLPlVL5KN+gsuz8/Pg46+bw65dPtEoeginjBdFAkAvTEkwVxen1eoJRjg30FfTbgjAKQ0wlD0NQTEKQNq98ntcANhU3fQkVile1talogRJBkQsiIFG3QPnrVQHkNBhAt8BHCgKFxBURJSh8/hcjFeULECXwMzs4KYqTAwpLXgxFtwBXkWM6/gDGU0kHugUTMoDpeHx6Oh5PleQnExy0dAsmrICAmUp8S/ZeKQum/BFIFUyYWIEGP0GMYAEM+OeCgnkVQQNqCJrlcqlBDXBWqVGuKlSE1lVZVpW2wAtoeSxoWEB1XZVaKV2WqEBVleCBwNEaBFoEsm4Epaa3RgQlTvHmSGCQdxCYIKglWEOAbpdNAxclaoR8hWZwOGedgcABWkVQe0ENFY4lIIFmgVQaabw4CPzKglrX/MkNTuigAJpmQaUbrl4WIMXD07JKhHagMfiGigYmHFXVIahl9UNssANUAGdIw7FTgMslSAMAItAiCDpsCT/ZLubzppHcfD4D4tFVSV1UGwHycOwWXMwR/Hg0w3JBAuwaR83AQhORHtDjbgGYHc1mtH4DMjbN1DpUPKnseRZ+eRFjrbPWGKx88vev4gQGOQPYZJIFoQO7swNZXsSGLTzpYNEpcIA7gEHOxRY7RBFgBs4L/BycW6P0HaBar52VLxz7tAMJiUC6ySwiEBiZMucd8oR5IkAqCMS1EVi+2iwMFw5hEUTAAkuC2xsIaENUCdEC9EICRGy6wPEMsGkvWKcK1jKDrcAlbmENgoArt7/A7CFwDwRuDwFP0W+BJ5J+GyEwj+6CSRQYEZitgH6iBU4ExgtMssAaayCgR5QqK/8B2PgtWMsCePhhIB+wCX8H4PYGQdKJAG9JHYjAypNhKQ0ShshXs8DtIXCISMECrliYpbEK3AcSBS2zv6C9Y9pB8IaC/rfRkyZYRfKsoI0kspGOzrtuQdtHcEe8R0H/GfS/C23gd/uYNMH19+u9BFcbLs8+n11ePSSpgxU6WLUeea6TJsiz2xd88tsJ+m8h9osj+gvl3QnA6j7rBQ+uD9z2wMDAwMDAwH/EH571WWMJHeH4AAAAAElFTkSuQmCC",wolf:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAAw1BMVEXt5+jk3t/c3Nzf2dnW0NHKxsfIwsO3t7ferIWzs7Nu1Je3q6WhoaGdnU10oIaBgYEatVh+dnBegyJlZi1iWkAodi5WVlZUVFRERERHQjs+PTBENiY5ODVDNSWAAHY/MCQzMzMtLSg1Kh8sLCo0KR4ZGRkAAAD////k2Nnd2tvV0NDTz8/Kx8jJwcLBvr7UtaTOr5bEq5ywqqefmpaalZGnj36ajIiVhnmheFuUe2iBdm2Mb1JJQjk5PD85ODUtLSgSFBY76smzAAAAJ3RSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAi/HzzAAADR0lEQVR42s2UbXfbNgyF6Wli41WZqm3NtkQOZ3ZVwwCFbShO6r6k/v+/ahdwtjOp/dJvvZT5gqP7HAC2GYZhWFDBYBIilsvLy5Ty8HsPiY4yirIQBgtfX1/HLlbD/xUcQIXh51JI1ut1TumiXyz6SKKkAi4AzEQGCLH7AhCpFDxMmBmAlNIffYw9MlMgPewrAPDHKWCxiAtmEFjYyogIrNd//frixU8/lyKIF4htdUAIsxIETiEAfMPGQRmDC0HzGt1Xz6AKUwAXJxC8VAgkb+TgIgIacV//7UE1K8Fsb477/fGN+Q1HAFw9e5auErZi5KcVANcsA+D3H+7vP+yFvA9CvBZhr8qmU4dP9Ukx3AzABP/DAwjE9hbGb1TcYnYCynCOksJYpwCR/cM9QfcPe3lSApWwAgJ5AbazPhhqCkgpvdwddnjOzlLKOZnEatH/CKKEgJ0w5CuA7WHrgL8dkNMVLMKj18BWxegBIgVHZQrIOb/cHDYO+CGfAIl1VMHjDYRvFATYQ9hMAb9Am08bJHF2dg6Z/wqq+9j3nf3wYmhjFWOoY+xirOowBWw3Nzc3R3w22+1utz0fHqFl09Z919e1WAqS61hBDsA6B4Bg/g36cNidP5bySKVtYmeDCkSr6nl8jiy6PkYsU8Dh+Omk4+EEIHosVFV17LouFhKlEioQapj7LoZYTwE2NaucXl9cvLa9XwSLUHW9DaERDayRd4ghdH++whzngM+f373LKwA+fnz/dvCLIIaqRgv6qGKAEJxQhVcd0ghfBSQHvH2P0I8h4O3Tt6Cqo+riZK8i9MV98HThcVZMQsyDiLVO7CjYEGYqSlSFAABYUwDx6T/YwEesTANWOIRxNCuRFLZWLtGqpmmW7QxAzGZdqllUDFBOAMvA9pgVuTRt2yyXmOYZCDOsjYqjeGAqEBPEBSIERkCaJue2BWbeA7jwcYACMbAl4CWI+NYBVAyQVmkOuNPxTvVubAUWJZQAJxh2ZAD8RKNyaVv7r+c5AH6MUbMKwW5NZKtamP26RgiPjkwruLMxpgBhvr29ZTEAmwsAtq3gMdbpNDIjfSBWaTUFrFJOVlvGQHrAm9XNPmEAwCqc7UWbpoDh2/WdAf4B+LQj08eGOFAAAAAASUVORK5CYII=",zombie:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAclBMVEUAAAAAzMyPj495nGVxlVtvlVxtlVtnkFYAr69ph1Z6d3cAqKgAnp5ae0gAmZlra2tXdUdOezZhYWFIdTJJcTVWScwAf39KaS0+aS07Yi9MTExGOqU2WiUAaGg4UiYAW1s/Pz86MYkwKHImIVsoKCgaGho5R/XAAAAAAXRSTlMAQObYZgAAAkJJREFUeNrtk2FzmzAMhpPNm+0akmjVqFRGEsPy///iXtnlml27laRfeWwswZ0eI3NsZkRFVWwUdHMrIqzKitKC3C4gVjhgOQLVOwQEAcvdAmViwZQiuKOFsj2J3i1gZWEVrAqEbxaIlkHMAni5QK15VRSpwTI/UFuYFnx/q2ZCQYyMEq5PSKWMJW8gZSv//av75rneqcJFxMqLemdiiq1zLraR6llimEtk2fdnpvZycfFyaeGScggkqKclLQjqWShG1RhR/XIKCEgWtCByLJs96tOTPiIROoogMhEvO0QWqf+AWqXdsQIEWfhP/AS/wXy//VXYji/Mz8N2G5iIPxYcC28EW0CsnxOwqnyqhTf/yQhy3/fjNE096Lru1CRl0dR0oGlSCAn5bteZYI7vCcYiGIYuhUa1CQH5kFIAVRbAHP8S9FeCoQhC2XgAKSDB8h9BroIMQc79aRhOwQwoqzkyTMt3Ke3m+CrIVWAxwzacTiZIRQBCgwyXgAgEtGAzk/tcdh6R2ETNkEyAOSCfBcykLjovyuy9j68CVPUAS4lWZB3AkQa8b1WlJMzqW9eykvhD9O8IkM1foR5Bg3wwlzlQJ967loQ0Ru+vD7EKMjJggnJsuKosYZpA2TsXiVnjdQvnsxVa+fm8B93QdbanlRUBkoBFWMk574RF/PUbPJ9R+OVhj/BsgnEap1xIoZsmyO1EcyYI0IFXQTz4+CoA+4f93uIPAMHYF3JTcyRokkmodbFVEo6HeNisrKysrKysrPyDP68WY0lh7YK7AAAAAElFTkSuQmCC",zombie_villager:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAt1BMVEVskkNwbWdVczVjW1tWYC5jVC9IYC4/WChUSSg4TSM4OyExPSUuNyQAAAD///+Iqlt3oEd2kk9skkOCe3RyhFFmij9ffzdwbWdedUVXdUdVczVjW1tUZkBOazBgXjhOaC1HZTdQVzdUTU1PUTNBWSiZKys/WChcQjpURypDTCQ4TSNKPj42TCpJQSRMODNCNzcxRB8vQh44OyExPSUsPRw7MTEyNyQqOSE9LSk2MiAzJBEgKxgjIyNApSiHAAAADnRSTlMAAAAAAAAAAAAAAAAAAKroblcAAAMeSURBVHja7dF/X9s2EMfxrGs3oGtxHXTSztIuE+mtyG1+2HNKxp7/49pXIoHSUhxe65/52E6cmHs7MpMXuxxR3p0iFF6+3Gz+vPztlxdP9AZN9h8IfQ1c/vEMgMkgItV/kYbN5upys/nw4dWhAOarGkS4Ay6vthmYfL8HAHNViD2w3VxdbbfPAGoMV1VVuz2w/fTpeUBt6ro6r4yWwtnZycnJ2dmrgwHMwqjODbmADgeIqrx6Q5XBKvALSlRyOCZjAJM5ZyJig0dgKkN3sw4HjwMEwTAFNlRfuIpDnkIF4DAOMAsRgGAMuYvzEBwmQRTG0SGAGlYX5hfv8AjfzYMT54QzwJ4OAkRFHc//Kc2ZhJQ9xvHCBwDCAkGE3r4P4f1bkuxB9ThRFR4FNCVFqQ9zFHp8wr7OX616XBsFUt+vUwbmf6M5ZtI6rYHgwqpfrQ4BUhb6eanv0rpba5dS32G8GwdOT1+f5iYjjQG/PvmHTwE/o5/Q5EFWhVnUNnc9FxBCfChgUd91/et7gDGu9AjgyNHnm8833wIQvgDoe7+A6to9CnQQvgQYgDwCmLqmGwhjS1Bh4scAMiQPgCZnse2zdmqbiHkS2Qm2URG11iEict47T6gAbRObaNvYNjhpbIyxzIsw42War8a4U/M8Nod5vQdibNs4DC0MGzNgpzGlJEiTLfMQUIwYNo68I3WexO2BdgCgQ3awNVlJuzrcGpP5FVkhckCIRLGLuwVaTaopJLyBGuK9gPmptRbfNFMc1qozZfFCglQKoIgDOeagA7Ym3zEOXa7MN1gASBBRlQwZQ96JOBwF4MCeidg5puQ4YMELPNgO5UeXsWVEgAYVJlMALkIBKIAAwHnH0SI8FE2xybddYr5tmzZFJAwAeWYIorcACzE5KC4wBwDLYVgu24gwPeR57KlFHpN1XRsiZgehACKz2wUJ+xnOF7uu/1pcL77Kq6caZUD2/0ZFAk9zM9XrfYvrb1L1TPXvNbFnhwqQEPOKZbVKaZW0aWIpvy+bZVOypUYT7vFx9tGz9zOcFuDN/+gIHIEjcASOwBH44cB/1lQM4ZNhKecAAAAASUVORK5CYII="};f();m();h();Pt();var TP=class{constructor(e,t){this.object=e;this.animations=t}timer=new qs;animatedObjects=new Set;state;createAnimationState(){let e=new Zf(this.object),t=new Map;for(let n of this.animations)t.set(n.name,e.clipAction(n));return this.state={mixer:e,animations:this.animations,actions:t,speed:1,loop:!0},this.object.traverse(n=>{if(n instanceof Ke||n instanceof Di||n instanceof yr||n instanceof Zi){let i=n.onBeforeRender;n.onBeforeRender=(s,a,o,l,c,u)=>{this.timer.update(performance.now());let d=this.timer.getDelta();e.update(d),i?.(s,a,o,l,c,u)}}}),this.animatedObjects.add(this.object),this.state}playAnimation(e,t,n){let i=this.state.actions.get(e);if(!i)return console.warn(`Animation "${e}" not found`),!1;this.state.mixer.stopAllAction();let s=t??this.state.loop;return i.setLoop(s?h1:f1,1/0),i.clampWhenFinished=!s,n===void 0?i.timeScale=this.state.speed:i.timeScale=n,i.reset().fadeIn(.1).play(),!0}updateAnimationParams(e,t){e!==void 0&&(this.state.speed=e),t!==void 0&&(this.state.loop=t);for(let n of this.state.actions.values())e!==void 0&&(n.timeScale=e),t!==void 0&&(n.setLoop(t?h1:f1,1/0),n.clampWhenFinished=!t)}stopAnimations(){this.state.mixer.stopAllAction()}getDelta(){return this.timer.update(performance.now()),this.timer.getDelta()}};function l7e(r,e){let t=new TP(r,e);return t.createAnimationState(),t}f();m();h();Pt();f();m();h();var c7e=-Math.PI/2;function $o(r){if(!r)return!1;let e=r.toLowerCase();return e==="boat"||e==="chest_boat"?!0:e.endsWith("_boat")||e.endsWith("_raft")}function u7e(r){return $o(r)?c7e:null}var cJe=28/16,uJe=3/16,dJe=16/16,h7e=-1.125,fJe=1.59375,hJe=0;var mJe=0,pJe=1,IP="boat_water_patch",m7e="boat_paddle_pivot_left",p7e="boat_paddle_pivot_right",vJe=new W(3/16,28/16,9/16),gJe=new W(3/16,28/16,-9/16),l6n=new W(-6/16,1/16,0),_Je=new W(-3/16,29/16,9/16),yJe=new W(-3/16,29/16,-9/16);var kP=new W;function bJe(r,e){kP.set(0,0,0);let t=r;for(;t&&t!==e;)kP.add(t.position),t=t.parent;return kP}function d7e(r,e,t,n,i){if(i.length===0)return;let s=new Ot;s.name=e,s.position.copy(n),r.add(s);for(let a of i){let o=a.parent;if(!o)continue;let l=bJe(a,r);o.remove(a),a.position.copy(l).sub(t),s.add(a)}return s}function f7e(r,e){let t=[];return r.traverse(n=>{n!==r&&n.name!==IP&&(n.name===m7e||n.name===p7e||n.name===e&&t.push(n))}),t}function xJe(r){if(r.userData.boatPaddleLeftPivot||r.userData.boatPaddleRightPivot)return{leftPivot:r.userData.boatPaddleLeftPivot,rightPivot:r.userData.boatPaddleRightPivot};let e=d7e(r,m7e,vJe,_Je,f7e(r,"paddle_left")),t=d7e(r,p7e,gJe,yJe,f7e(r,"paddle_right"));return e&&(r.userData.boatPaddleLeftPivot=e),t&&(r.userData.boatPaddleRightPivot=t),{leftPivot:e,rightPivot:t}}function wJe(){return new pn(cJe,uJe,dJe)}function SJe(){return new pt({colorWrite:!1,depthWrite:!0,depthTest:!0})}function EJe(){let r=new Ke(wJe(),SJe());return r.name=IP,r.position.set(0,fJe,hJe),r.renderOrder=pJe,r}function AJe(r){r.traverse(e=>{if(!(e instanceof Ke)||e.name===IP)return;let t=Array.isArray(e.material)?e.material:[e.material];for(let n of t)n instanceof mn&&(n.transparent=!1,n.depthWrite=!0,n.depthTest=!0,"alphaTest"in n&&(n.alphaTest=Math.max(n.alphaTest??0,.1)),n.needsUpdate=!0);e.renderOrder=mJe})}function v7e(r){AJe(r),xJe(r);let e=r.userData.boatWaterPatch;return e||(e=EJe(),e.visible=!1,r.add(e),r.userData.boatWaterPatch=e),{waterPatch:e}}function g7e(r){let e=r.userData.boatWaterPatch;e&&(e.geometry.dispose(),e.material instanceof mn&&e.material.dispose(),delete r.userData.boatWaterPatch)}f();m();h();var _7e={horse:1.1,donkey:.87,mule:.92,skeleton_horse:1,zombie_horse:1};f();m();h();Pt();var RP={x:0,y:1.25,z:-.75},y7e=Lt.degToRad(20),sg=.05,MJe=new Set(["Head","UMouth","Ear1","Ear2","MuleEarL","MuleEarR","Neck","Mane","SaddleMouthL","SaddleMouthR","SaddleMouthLine","SaddleMouthLineR","HeadSaddle"]),Yc="_horseHeadRig",ag="_horseHeadAnimation";function b7e(r){let e=r.userData[Yc];if(e)return e;let t=[];r.traverse(i=>{i!==r&&MJe.has(i.name)&&t.push(i)});let n=new yt;n.name="horse_head_rig",n.position.set(RP.x,RP.y,RP.z),n.userData.horseHeadParts=t,r.add(n);for(let i of t)n.attach(i);return r.userData[Yc]=n,n}function TJe(r,e){let t=Math.PI*2,n=((e-r+Math.PI)%t+t)%t-Math.PI;return n===-Math.PI?Math.PI:n}function x7e(r){let{entityPitch:e,headYaw:t,bodyYaw:n,limbSwing:i,limbSwingAmount:s}=r,a=Number.isFinite(s)?Math.max(0,s):0,o=a>.2?Math.cos(i*.4)*.15*a:0,l=Lt.clamp(TJe(n,t),-y7e,y7e);return{pitch:(Number.isFinite(e)?e:0)-o,yaw:l}}function w7e(){return{prevLimbSwing:0,limbSwing:0,prevLimbSwingAmount:0,limbSwingAmount:0,elapsedSeconds:sg,tickAccumulatorSeconds:0}}function S7e(r,e){r.pendingPosition={x:e.x,z:e.z}}function kJe(r,e){r.prevLimbSwing=r.limbSwing,r.prevLimbSwingAmount=r.limbSwingAmount;let t=r.lastPosition==null?0:Math.hypot(e.x-r.lastPosition.x,e.z-r.lastPosition.z),n=Math.min(1,t*4);r.limbSwingAmount+=(n-r.limbSwingAmount)*.4,r.limbSwing+=r.limbSwingAmount,r.lastPosition={x:e.x,z:e.z}}function IJe(r,e){let t=Lt.clamp(e,0,1);return{limbSwing:r.prevLimbSwing+(r.limbSwing-r.prevLimbSwing)*t,limbSwingAmount:r.prevLimbSwingAmount+(r.limbSwingAmount-r.prevLimbSwingAmount)*t}}function E7e(r,e){let t=Math.max(0,e);for(r.elapsedSeconds=Math.min(sg,r.elapsedSeconds+t),r.tickAccumulatorSeconds+=t;r.tickAccumulatorSeconds>=sg;){let n=r.pendingPosition??r.lastPosition;n&&kJe(r,n),r.pendingPosition=void 0,r.tickAccumulatorSeconds-=sg}return r.elapsedSeconds=r.tickAccumulatorSeconds,IJe(r,r.elapsedSeconds/sg)}function A7e(r,e){r.rotation.set(e.pitch,e.yaw,0)}function RJe(r){return"parts"in r&&Array.isArray(r.parts)?r.parts:[r]}var CJe={up:{dir:[0,1,0],u0:[0,0,1],v0:[0,0,0],u1:[1,0,1],v1:[0,0,1],corners:[[0,1,1,0,0],[1,1,1,1,0],[0,1,0,0,1],[1,1,0,1,1]]},down:{dir:[0,-1,0],u0:[1,0,1],v0:[0,0,0],u1:[2,0,1],v1:[0,0,1],corners:[[1,0,1,0,0],[0,0,1,1,0],[1,0,0,0,1],[0,0,0,1,1]]},east:{dir:[1,0,0],u0:[0,0,0],v0:[0,0,1],u1:[0,0,1],v1:[0,1,1],corners:[[1,1,1,0,0],[1,0,1,0,1],[1,1,0,1,0],[1,0,0,1,1]]},west:{dir:[-1,0,0],u0:[1,0,1],v0:[0,0,1],u1:[1,0,2],v1:[0,1,1],corners:[[0,1,0,0,0],[0,0,0,0,1],[0,1,1,1,0],[0,0,1,1,1]]},north:{dir:[0,0,-1],u0:[0,0,1],v0:[0,0,1],u1:[1,0,1],v1:[0,1,1],corners:[[1,0,0,0,1],[0,0,0,1,1],[1,1,0,0,0],[0,1,0,1,0]]},south:{dir:[0,0,1],u0:[1,0,2],v0:[0,0,1],u1:[2,0,2],v1:[0,1,1],corners:[[0,0,1,0,1],[1,0,1,1,1],[0,1,1,0,0],[1,1,1,1,0]]}};function M7e(r,e){return r[0]*e[0]+r[1]*e[1]+r[2]*e[2]}function PJe(r,e,t,n,i=!1,s=64,a=64,o=!1,l=[]){let c=new or(0,0,0);n.rotation&&(c.x=-n.rotation[0]*Math.PI/180,c.y=-n.rotation[1]*Math.PI/180,c.z=-n.rotation[2]*Math.PI/180);for(let{dir:u,corners:d,u0:p,v0:v,u1:g,v1:b}of Object.values(CJe)){let y=Math.floor(r.positions.length/3),_=u[0]!==0,x=[];for(let w of d){let S,M;i?(S=(n.uv[0]+w[3]*n.size[0])/s,M=(n.uv[1]+w[4]*n.size[1])/a):(S=(n.uv[0]+M7e(w[3]?g:p,n.size))/s,M=(n.uv[1]+M7e(w[4]?b:v,n.size))/a);let T=_&&o?w[0]^1:w[0],C=w[1],I=_&&o?w[2]^1:w[2],k=n.inflate??0,L=new W(n.origin[0]+T*n.size[0]+(T?k:-k),n.origin[1]+C*n.size[1]+(C?k:-k),n.origin[2]+I*n.size[2]+(I?k:-k));L=L.applyEuler(c),L=L.sub(t.position),L=L.applyEuler(t.rotation),L=L.add(t.position),r.positions.push(L.x,L.y,L.z),r.normals.push(u[0],u[1],u[2]),x.push(S,M),r.skinIndices.push(e,0,0,0),r.skinWeights.push(1,0,0,0)}if(o)for(let w=0;w+1<d.length;w+=2){let S=w*2,M=x.slice(S,S+4);x[S]=M[2],x[S+1]=M[_?1:3],x[S+2]=M[0],x[S+3]=M[_?3:1]}r.uvs.push(...x),r.indices.push(y,y+1,y+2,y+2,y+1,y+3)}}function Jc(r,e,t,n={},i={}){let s=t.texturewidth??64,a=t.textureheight??64,o,l=e.startsWith("block:"),c=r?.material.map;if(l){if(!r)throw new Error("worldRenderer is required for block textures");let x=e.slice(6),w=r.resourcesManager.currentResources.blocksAtlasJson.textures[x];w?(s=c?.image.width??s,a=c?.image.height??a,o=[w.u,w.v]):console.error(`Unknown block ${x}`)}let u={},d={positions:[],normals:[],uvs:[],indices:[],skinIndices:[],skinWeights:[]},p=0;for(let x of t.bones){let w=new ho;if(x.pivot&&(w.position.x=x.pivot[0],w.position.y=x.pivot[1],w.position.z=x.pivot[2]),x.bind_pose_rotation?(w.rotation.x=-x.bind_pose_rotation[0]*Math.PI/180,w.rotation.y=-x.bind_pose_rotation[1]*Math.PI/180,w.rotation.z=-x.bind_pose_rotation[2]*Math.PI/180):x.rotation&&(w.rotation.x=-x.rotation[0]*Math.PI/180,w.rotation.y=-x.rotation[1]*Math.PI/180,w.rotation.z=-x.rotation[2]*Math.PI/180),n.rotation?.[x.name]&&(w.rotation.x-=(n.rotation[x.name].x??0)*Math.PI/180,w.rotation.y-=(n.rotation[x.name].y??0)*Math.PI/180,w.rotation.z-=(n.rotation[x.name].z??0)*Math.PI/180),w.name=`bone_${x.name}`,u[x.name]=w,x.cubes)for(let S of x.cubes){let M=[];PJe(d,p,w,S,l,s,a,x.mirror,M),M.length&&(i.errors??=[],i.errors.push(...M.map(T=>`Bone ${x.name}: ${T}`)))}p++}let v=[];for(let x of t.bones)x.parent&&u[x.parent]?u[x.parent].add(u[x.name]):v.push(u[x.name]);let g=new cl(Object.values(u)),b=new dt;b.setAttribute("position",new Je(d.positions,3)),b.setAttribute("normal",new Je(d.normals,3)),b.setAttribute("uv",new Je(d.uvs,2)),b.setAttribute("skinIndex",new B0(d.skinIndices,4)),b.setAttribute("skinWeight",new Je(d.skinWeights,4)),b.setIndex(d.indices);let y=new Ss({transparent:!0,alphaTest:.1,side:Cn}),_=new va(b,y);if(_.add(...v),_.bind(g),_.scale.set(1/16,1/16,1/16),o){let x=c.clone();x.offset.set(o[0],o[1]),x.needsUpdate=!0,y.map=x}else v4(e,x=>{y.map||(x.magFilter=ct,x.minFilter=ct,x.flipY=!1,x.wrapS=bs,x.wrapT=bs,y.map=x)},()=>{let x=y.map;if(!x)return;let w=x.image.width;w&&s!==w&&(x.repeat.x=s/w);let S=x.image.height;S&&a!==S&&(x.repeat.y=a/S),y.needsUpdate=!0});return _}var LJe=[{pattern:"furnace_minecart",target:"minecart"},{pattern:"spawner_minecart",target:"minecart"},{pattern:"chest_minecart",target:"minecart"},{pattern:"hopper_minecart",target:"minecart"},{pattern:"command_block_minecart",target:"minecart"},{pattern:"tnt_minecart",target:"minecart"},{pattern:"glow_item_frame",target:"item_frame"},{pattern:"glow_squid",target:"squid"},{pattern:"trader_llama",target:"llama"},{pattern:"chest_boat",target:"boat"},{pattern:"spectral_arrow",target:"arrow"},{pattern:"husk",target:"zombie"},{pattern:"zombie_horse",target:"horse"},{pattern:"donkey",target:"horse"},{pattern:"skeleton_horse",target:"horse"},{pattern:"mule",target:"horse"},{pattern:"ocelot",target:"cat"},{pattern:/_minecraft$/,target:"minecraft"},{pattern:/_boat$/,target:"boat"},{pattern:/_raft$/,target:"boat"},{pattern:/_horse$/,target:"horse"},{pattern:/_zombie$/,target:"zombie"},{pattern:/_arrow$/,target:"zombie"}];function T7e(r){for(let e of LJe)if(typeof e.pattern=="string"){if(e.pattern===r)return e.target}else if(e.pattern.test(r))return e.target}var k7e=r=>E_e[r],I7e={..._7e,zombie:1.85,husk:1.85,arrow:.0025},R7e={zombie:new Mt(0,1,0),husk:new Mt(0,1,0),boat:new Mt(0,h7e,0),arrow:new Mt(0,-.9,0)},l0=class{mesh;animations;animationControllers=[];constructor(e,t,n,i={},s={}){let a=t,o=T7e(t);if(o&&(t=o,s.tempMap=o),i.customModel){let c=RJe(i.customModel);this.mesh=new Ot;for(let u=0;u<c.length;u++){let{modelPath:d,modelType:p,metadata:v}=c[u],g=new Ot;switch(g.name=`custom_part_${u}`,p){case"gltf":{new Ob().parseAsync(d,"").then(y=>{if(g.add(y.scene),v?.scale){let _=v.scale;g.scale.set(_,_,_)}if(v?.offset){let{x:_=0,y:x=0,z:w=0}=v.offset;g.position.set(_,x,w)}if(v?.texture){let _=xh(v.texture);g.traverse(x=>{x instanceof Ke&&(x.material=new pt({map:_,transparent:!0,alphaTest:.1}))})}if(y.animations?.length){this.animations=[...this.animations??[],...y.animations];let _=l7e(g,y.animations);this.animationControllers.push(_);let x=v?.animation,w=v?.animationLoop??!0;x?_.playAnimation(x,w):_.playAnimation(y.animations[0].name,w)}}).catch(y=>{console.error("Failed to load GLTF model:",y)});break}case"obj":{let y=new Um().parse(d);if(v?.scale){let{scale:_}=v;y.scale.set(_,_,_)}if(v?.offset){let{x:_=0,y:x=0,z:w=0}=v.offset;y.position.set(_,x,w)}if(v?.texture){let _=xh(v.texture),x=new pt({map:_,transparent:!0,alphaTest:.1});y.traverse(w=>{w instanceof Ke&&(w.material=x)})}g.add(y);break}case"bedrock":{let b=JSON.parse(d);if(v?.scale&&g.scale.set(v.scale,v.scale,v.scale),v?.offset){let{x:y=0,y:_=0,z:x=0}=v.offset;g.position.set(y,_,x)}for(let[y,_]of Object.entries(b.geometry)){let x=v?.textures?.[y]??b.textures?.[y];if(!x)continue;let w=Jc(n,x.endsWith(".png")||x.startsWith("data:image/")||x.startsWith("block:")?x:x+".png",_,i,s);w.name=`geometry_${y}`,g.add(w)}break}}this.mesh.add(g)}s.type=c.length===1?c[0].modelType:"special";return}if($d[t]){let c=new Um,u={zombie_horse:`textures/${e}/entity/horse/horse_zombie.png`,husk:y_e,skeleton_horse:`textures/${e}/entity/horse/horse_skeleton.png`,donkey:`textures/${e}/entity/horse/donkey.png`,mule:`textures/${e}/entity/horse/mule.png`,ocelot:b_e,arrow:x_e,spectral_arrow:w_e,tipped_arrow:S_e},d=u[a]||u[t];d&&(s.textureMap=!0);let p=d||MP[t];if(MP[t]&&(s.isHardcodedTexture=!0),!p)throw new Error(`No texture for ${t}`);let v=xh(p),g=new pt({map:v,transparent:!0,alphaTest:.1}),b=c.parse($d[t]),y=I7e[a]||I7e[t];y&&b.scale.set(y,y,y);let _=R7e[a]??R7e[t];_&&b.position.set(_.x,_.y,_.z),b.traverse(x=>{x instanceof Ke&&(x.material=g,x.name==="Head layer"&&(x.visible=!1),t!=="horse"&&x.name==="Head"&&i.rotation?.head&&(x.rotation.x-=(i.rotation.head.x??0)*Math.PI/180,x.rotation.y-=(i.rotation.head.y??0)*Math.PI/180,x.rotation.z-=(i.rotation.head.z??0)*Math.PI/180))}),t==="horse"&&b7e(b),this.mesh=b,s.type="obj";return}let l=k7e(t);if(l){this.mesh=new Ot;for(let[c,u]of Object.entries(l.geometry)){let d=i.textures?.[c]??l.textures[c];if(!d)continue;let p=Jc(n,d.endsWith(".png")||d.startsWith("data:image/")||d.startsWith("block:")?d:d+".png",u,i,s);p.name=`geometry_${c}`,this.mesh.add(p)}s.type="bedrock"}}playAnimation(e,t=!1){if(!this.animationControllers.length){console.warn("No animation controller available");return}let n=!1;for(let i of this.animationControllers)i.playAnimation(e,t)&&(n=!0);n||console.warn(`Animation "${e}" not found on any custom model part`)}update(e){}static getStaticData(e){if(e=T7e(e)||e,$d[e])return{boneNames:[]};let t=k7e(e);if(!t)throw new Error(`Unknown entity ${e}`);return{boneNames:Object.values(t.geometry).flatMap(n=>n.name)}}};globalThis.EntityMesh=l0;f();m();h();var C7e=105*Math.PI/180;function P7e(r,e){let t=e-r;for(;t>Math.PI;)t-=Math.PI*2;for(;t<-Math.PI;)t+=Math.PI*2;return t}function DJe(r){return P7e(0,r)}function OJe(r){return Math.max(-C7e,Math.min(C7e,r))}function Ub(r){let{cameraYaw:e,cameraPitch:t,vehicleYaw:n}=r,i=P7e(n,e),s=OJe(i),a=DJe(n+s);return{bodyYaw:n,headYaw:s,headPitch:-t,effectiveCameraYaw:a}}function CP(r){return r.isAnchoredPassenger&&$o(r.vehicleName)&&typeof r.vehicleYaw=="number"&&Number.isFinite(r.vehicleYaw)}function L7e(r){return r.isThirdPerson&&CP(r)}f();m();h();Pt();var NJe=Math.PI/8,VJe=20,UJe=NJe*VJe;function U7e(){return{current:new Dt,rest:new Dt,delta:new Dt,euler:new or(0,0,0,"ZYX")}}function F7e(){return{leftActive:!1,rightActive:!1,leftPhase:0,rightPhase:0}}function B7e(r,e,t){return r+(e-r)*t}function D7e(r,e,t){if(!e)return 0;let n=Number.isFinite(t)&&t>=0?t:0,i=Math.PI*2;return(r+n*UJe)%i}function O7e(r,e){let t=B7e(-Math.PI/3,-Math.PI/12,(Math.sin(-r)+1)/2),n=B7e(-Math.PI/4,Math.PI/4,(Math.sin(-r+1)+1)/2);e===1&&(n=Math.PI-n);let i=Math.PI/16;return{xRot:t,yRot:n,zRot:i}}function N7e(r,e,t){return t.set(-r.xRot,r.yRot,-r.zRot,"ZYX"),e.setFromEuler(t)}function FJe(r,e,t){return r===0?t.delta.identity():(N7e(O7e(r,e),t.current,t.euler),N7e(O7e(0,e),t.rest,t.euler),t.delta.copy(t.current).multiply(t.rest.invert()))}function V7e(r,e,t,n){r.quaternion.copy(FJe(e,t,n))}function z7e(r,e,t){r.leftActive!==e&&(r.leftActive=e,r.leftPhase=0),r.rightActive!==t&&(r.rightActive=t,r.rightPhase=0)}function H7e(r,e,t,n,i){r.leftPhase=D7e(r.leftPhase,r.leftActive,e),r.rightPhase=D7e(r.rightPhase,r.rightActive,e),t&&V7e(t,r.leftPhase,0,i),n&&V7e(n,r.rightPhase,1,i)}f();m();h();function q7e(r){return r==="horse"}function Fb(r){return r!=null&&Number.isFinite(r.x)&&Number.isFinite(r.y)&&Number.isFinite(r.z)}function G7e(r,e,t){Fb(e)&&(r.userData._posTween?.stop(),r.userData._posTween=void 0,r.userData._tweenTarget??={...e},Object.assign(r.userData._tweenTarget,e),r.position.set(e.x,e.y,e.z),r.userData._passengerVehicleId=t,delete r.userData._boatPassengerVehicleId)}function zb(r,e,t){return(r.userData._passengerVehicleId??r.userData._boatPassengerVehicleId)!==e?!1:(r.userData._posTween?.stop(),r.userData._posTween=void 0,t&&(r.userData._tweenTarget??={...t},Object.assign(r.userData._tweenTarget,t)),delete r.userData._passengerVehicleId,delete r.userData._boatPassengerVehicleId,!0)}f();m();h();f();m();h();var zJe=50,PP=120,HJe=150,qJe=1e-4;function LP(r){return!!r?.renderHints?.localVehicle}function W7e(r){return r?.localVehicleYawLock==="horse"}function j7e(r,e){return Number.isFinite(e)?(r.rotation.y=e,r.userData._horseBodyYaw=e,r.userData._horseHeadYaw=e,!0):!1}function BP(r,e){return e||LP(r)?0:PP}function X7e(r,e){return BP(r,e)}function GJe(r,e,t=qJe){return Math.abs(r.x-e.x)<t&&Math.abs(r.y-e.y)<t&&Math.abs(r.z-e.z)<t}function $7e(r,e=!1){if(e)return 0;switch(r){case"spectating":return HJe;case"server-vehicle":return PP;case"local-player":default:return zJe}}function Y7e(r){return r.instant||r.currentTarget==null||r.movementMode!==r.previousMovementMode?!0:!GJe(r.target,r.currentTarget)}function WJe(r,e){return{x:r.x,y:e,z:r.z}}function J7e(r){let{cameraWorldPos:e,rawVehicleY:t,eyeHeight:n,vehicleName:i,vehicleHeight:s,verticalCameraLock:a}=r;if(a==="horse"){let o=e.y-n-t4e(i,s);if(Number.isFinite(o))return{x:e.x,y:o,z:e.z}}return WJe(e,t)}var jJe=new Set(["minecart","chest_minecart","furnace_minecart","hopper_minecart","tnt_minecart","spawner_minecart","command_block_minecart"]),XJe=new Set(["horse","donkey","mule","skeleton_horse","zombie_horse"]);function K7e(r){return r?XJe.has(r):!1}function Hb(r){return r?jJe.has(r):!1}function $Je(r,e){return e<=1?0:r===0?.2:-.6}var YJe=.5625,JJe=.7,KJe=-.35,ZJe=-.1,QJe=0,eKe=-.6,tKe=.1875,nKe=1/3,rKe=.8888889;function Z7e(r,e,t,n){let i=Number.isFinite(n)?n:r==="boat"?YJe:JJe;if(dA(e)>=dA("1.20.2")){let a=typeof t=="string"&&t.toLowerCase().endsWith("_raft");return(r==="boat"?i*(a?rKe:nKe):tKe)+eKe}return(r==="boat"?ZJe:QJe)+KJe}function Q7e(r,e,t,n,i,s,a){let o=$Je(t,n);return{x:r.x-Math.sin(e)*o,y:r.y+Z7e("boat",i,s,a),z:r.z+Math.cos(e)*o}}function e4e(r,e,t,n){return{x:r.x,y:r.y+Z7e("minecart",e,t,n),z:r.z}}function t4e(r,e){let t=0;return r==="donkey"||r==="mule"?t=.25:r==="skeleton_horse"&&(t=.1875),e*.75-t-.35}function n4e(r,e,t=1.6){return{x:r.x,y:r.y+t4e(e,t),z:r.z}}function r4e(r){let e=new Set;for(let t of Object.values(r.entities)){let n=t,i=n.userData.renderHints,s=i?.passengerIds??i?.boatPassengerIds;if(!Array.isArray(s)||s.length===0)continue;let a=n.realName??n.originalEntity.name,o=i?.passengerLayout??($o(a)?"boat":void 0);if(o!=="boat"&&o!=="minecart"&&o!=="horse"||o==="boat"&&!$o(a)||o==="minecart"&&!Hb(a)||o==="horse"&&!K7e(a))continue;let l=r.getWorldPosition(n);if(!Fb(l))continue;let c=String(n.originalEntity.id);for(let[u,d]of s.entries()){let v=d===r.localPlayer?.originalEntity.id?r.localPlayer:r.entities[d];if(!v?.playerObject||v===r.localPlayer&&q7e(o))continue;let g=o==="minecart"?e4e(l,r.version,a,n.originalEntity.height):o==="horse"?n4e(l,a,n.originalEntity.height??1.6):Q7e(l,n.rotation.y,u,s.length,r.version,a,n.originalEntity.height);Fb(g)&&(G7e(v,g,c),e.add(v))}}for(let t of[...Object.values(r.entities),...r.localPlayer?[r.localPlayer]:[]]){let n=t.userData._passengerVehicleId??t.userData._boatPassengerVehicleId;n===void 0||e.has(t)||zb(t,n,r.getWorldPosition(t))}return e}f();m();h();function i4e(r,e){typeof e=="number"&&Number.isFinite(e)&&(r._networkHeadPitch=e)}function DP(r,e,t){if(typeof e=="number"&&Number.isFinite(e)){r._networkHeadYaw=e;return}typeof t=="number"&&Number.isFinite(t)&&(r._networkHeadYaw=t)}function s4e(r){let e=r._networkHeadPitch;return typeof e=="number"&&Number.isFinite(e)?e:0}function qb(r,e){let t=e._networkHeadPitch;typeof t!="number"||!Number.isFinite(t)||(r.skin.head.rotation.y=0,r.skin.head.rotation.x=-t)}function a4e(r,e){r.skin.head.rotation.y=0,qb(r,e)}f();m();h();function o4e(r){return r._passengerVehicleId??r._boatPassengerVehicleId}function l4e(r){r._rotTween?.stop(),r._rotTween=void 0}function iKe(r){let{passenger:e,networkHeadYaw:t,vehicleYaw:n}=r,i=e.playerObject;if(!i)return;l4e(e.userData);let s=Ub({cameraYaw:t,cameraPitch:s4e(e.userData),vehicleYaw:n});e.rotation.set(0,s.bodyYaw,0),i.skin.head.rotation.set(s.headPitch,s.headYaw,0),e.userData._remoteBoatRotationApplied=!0}function sKe(r){let e=r.playerObject;if(!e)return;l4e(r.userData);let t=r.userData._networkHeadYaw;typeof t=="number"&&Number.isFinite(t)&&r.rotation.set(0,t,0),a4e(e,r.userData),r.userData._remoteBoatRotationApplied=!1}function aKe(r){let{passenger:e,vehicle:t,syncArmor:n}=r;if(!e.playerObject)return;let i=e.userData,s=i._remoteBoatRotationApplied===!0,a=o4e(i),o=t?.realName??t?.originalEntity.name,l=t?.rotation.y;if(!CP({isAnchoredPassenger:a!=null&&t!=null,vehicleName:o,vehicleYaw:l})){s&&(sKe(e),n?.());return}let u=i._networkHeadYaw;typeof u!="number"||!Number.isFinite(u)||(iKe({passenger:e,vehicle:t,vehicleYaw:l,networkHeadYaw:u}),n?.())}function c4e(r){for(let e of Object.values(r.entities)){if(!e?.playerObject)continue;let t=o4e(e.userData),n=t!=null?r.entities[t]:void 0;aKe({passenger:e,vehicle:n,syncArmor:e.visible?()=>r.syncArmor(e):void 0})}}f();m();h();f();m();h();var u4e="";f();m();h();var d4e="";f();m();h();var f4e="";f();m();h();var h4e="";f();m();h();var m4e="";f();m();h();var p4e="";f();m();h();var v4e="";f();m();h();var g4e="";f();m();h();var _4e="";f();m();h();var y4e="";f();m();h();var b4e="";f();m();h();var x4e="";f();m();h();var w4e="";f();m();h();var S4e="";f();m();h();var E4e="";f();m();h();var OP="";var Kc={skull:{bones:[{name:"head",pivot:[0,12,0],cubes:[{origin:[-4,0,-4],size:[8,8,8],uv:[0,0],inflate:1}]},{name:"overlay",parent:"head",pivot:[0,12,0],cubes:[{origin:[-4,0,-4],size:[8,8,8],uv:[32,0],inflate:1.2}]}],visible_bounds_width:1.5,visible_bounds_offset:[0,.5,0],texturewidth:64,textureheight:32},head:{bones:[{name:"armor",pivot:[0,12,0]},{name:"head",parent:"armor",pivot:[0,12,0],cubes:[{origin:[-4,23,-4],size:[8,8,8],uv:[0,0],inflate:1}]},{name:"overlay",parent:"head",pivot:[0,12,0],cubes:[{origin:[-4,23,-4],size:[8,8,8],uv:[32,0],inflate:1.2}]}],visible_bounds_width:1.5,visible_bounds_offset:[0,.5,0],texturewidth:64,textureheight:32},chest:{bones:[{name:"armor",pivot:[0,12,0]},{name:"body",parent:"armor",pivot:[0,13,0],cubes:[{origin:[-4,12,-2],size:[8,12,4],uv:[16,16],inflate:1}]},{name:"leftarm",parent:"armor",pivot:[5,10,0],cubes:[{origin:[4,12,-2],size:[4,12,4],uv:[40,16],inflate:.85}]},{name:"rightarm",parent:"armor",pivot:[-5,10,0],cubes:[{origin:[-8,12,-2],size:[4,12,4],uv:[40,16],inflate:.85}],mirror:!0}],visible_bounds_width:1.5,visible_bounds_offset:[0,.5,0],texturewidth:64,textureheight:32},legs:{bones:[{name:"armor",pivot:[0,12,0]},{name:"body",parent:"armor",pivot:[0,13,0],cubes:[{origin:[-4,12,-2],size:[8,12,4],uv:[16,16],inflate:.5}]},{name:"leftleg",parent:"armor",pivot:[1.9,1,0],cubes:[{origin:[-.1,0,-2],size:[4,12,4],uv:[0,16],inflate:.5}]},{name:"rightleg",parent:"armor",pivot:[-1.9,1,0],cubes:[{origin:[-3.9,0,-2.01],size:[4,12,4],uv:[0,16],inflate:.5}],mirror:!0}],visible_bounds_width:1.5,visible_bounds_offset:[0,.5,0],texturewidth:64,textureheight:32},feet:{bones:[{name:"armor",pivot:[0,12,0]},{name:"leftleg",parent:"armor",pivot:[1.9,1,0],cubes:[{origin:[-.1,0,-2],size:[4,12,4],uv:[0,16],inflate:.8}]},{name:"rightleg",parent:"armor",pivot:[-1.9,1,0],cubes:[{origin:[-3.9,.01,-2.01],size:[4,12,4],uv:[0,16],inflate:.8}],mirror:!0}],visible_bounds_width:1.5,visible_bounds_offset:[0,.5,0],texturewidth:64,textureheight:32}};var A4e={leather_layer_1:_4e,leather_layer_1_overlay:y4e,leather_layer_2:b4e,leather_layer_2_overlay:x4e,chainmail_layer_1:u4e,chainmail_layer_2:d4e,iron_layer_1:v4e,iron_layer_2:g4e,diamond_layer_1:f4e,diamond_layer_2:h4e,golden_layer_1:m4e,golden_layer_2:p4e,netherite_layer_1:w4e,netherite_layer_2:S4e,turtle_layer_1:E4e};var C4e=bh(is);var NP=r=>r*(Math.PI/180);function lKe(r){return r<0&&(r=4294967295+r+1>>>0),r.toString(16)}function cKe(r){if(r===void 0)return;if(parseInt(r,10)===0)return"rgba(0, 0, 0, 0)";let e=lKe(parseInt(r,10));return e.length===8?`#${e.slice(2,8)}${e.slice(0,2)}`:`#${e}`}function M4e(r,e){return r===void 0?e:r instanceof Dt?r:Array.isArray(r)?new Dt(r[0],r[1],r[2],r[3]):new Dt(r.x,r.y,r.z,r.w)}function Yo(r,e){return r===void 0?e??new or:r instanceof or?r:r.yaw!==void 0&&r.pitch!==void 0&&r.roll!==void 0?new or(-NP(r.pitch),-NP(r.yaw),NP(r.roll),"ZYX"):r.x!==void 0&&r.y!==void 0&&r.z!==void 0?new or(r.z,r.y,r.x,"ZYX"):Array.isArray(r)?new or(r[0],r[1],r[2]):e??new or}var Gb=Math.PI*2;function uKe(r,e){let t=((e-r)%Gb+Gb)%Gb;return t>Math.PI?t-Gb:t}function dKe(r,e,t,n,i){let s=e==="speaking"?"#3ddc47":e==="muted"?"#ff5555":"#cfcfcf";r.save(),r.translate(t,n),e==="speaking"&&(r.beginPath(),r.arc(0,0,i*.62,0,Math.PI*2),r.strokeStyle="rgba(61, 220, 71, 0.55)",r.lineWidth=Math.max(1,i*.08),r.stroke()),r.fillStyle=s,r.strokeStyle=s,r.lineWidth=Math.max(1,i*.12);let a=i*.34,o=i*.55,l=a/2;r.beginPath(),r.moveTo(-l,-o/2+l),r.arcTo(-l,-o/2,0,-o/2,l),r.arcTo(l,-o/2,l,-o/2+l,l),r.lineTo(l,o/2-l),r.arcTo(l,o/2,0,o/2,l),r.arcTo(-l,o/2,-l,o/2-l,l),r.closePath(),r.fill(),r.beginPath(),r.arc(0,o/2-l/2,i*.32,Math.PI*.15,Math.PI*.85,!1),r.stroke(),r.beginPath(),r.moveTo(0,i*.5),r.lineTo(0,i*.62),r.stroke(),e==="muted"&&(r.beginPath(),r.moveTo(-i*.42,-i*.42),r.lineTo(i*.42,i*.42),r.stroke()),r.restore()}function P4e({username:r,nameTagBackgroundColor:e="rgba(0, 0, 0, 0.3)",nameTagTextOpacity:t=255,voiceState:n},{fontFamily:i="mojangles"},s){let a=$r(64,64),o=(0,UP.default)(s),l=a.getContext("2d");if(!l)throw new Error("Could not get 2d context");let c=48,u=5;l.font=`${c}px ${i}`;let d=String(typeof r=="string"?r:new o(r).toString()).split(`
|
|
29381
|
-
`),p=0;for(let M of d){let T=l.measureText(M).width+u*2;T>p&&(p=T)}let v=(c+u)*d.length,g=$r(p,v),b=g.getContext("2d");if(!b)throw new Error("Could not get 2d context");if(b.fillStyle=e,b.fillRect(0,0,g.width,g.height),b.globalAlpha=t/255,!XC(r,o,g,c,"white",-u+c))return;if(b.globalAlpha=1,!n)return g;let _=c*.55,x=_+u*2,w=$r(x+p,v),S=w.getContext("2d");if(!S)throw new Error("Could not get 2d context");return S.fillStyle=e,S.fillRect(0,0,w.width,w.height),dKe(S,n,x/2,w.height/2,_),S.drawImage(g,x,0),w}globalThis.getUsernameTexture=P4e;var cg=(r,e,t,n)=>{for(let l of t.children)l.name==="nametag"&&l.removeFromParent();if(r.username===void 0||r.username===null||(typeof r.username=="string"?r.username:new((0,UP.default)(n))(r.username).toString()).startsWith("EMPTY"))return;let s=P4e(r,e,n);if(!s)return;let a=new sn(s);a.needsUpdate=!0;let o;if(r.nameTagFixed){let l=new qn,c=new pt({map:a});c.transparent=!0,o=new Ke(l,c),o.rotation.set(r.pitch,Lt.degToRad(r.yaw+180),0),o.position.y+=r.height+.3}else{let l=new xs({map:a});o=new Zi(l),o.position.y+=r.height+.6}return o.renderOrder=1e3,o.scale.set(s.width*.005,s.height*.005,1),r.nameTagRotationRight&&o.applyQuaternion(r.nameTagRotationRight),r.nameTagScale&&o.scale.multiply(r.nameTagScale),r.nameTagRotationLeft&&o.applyQuaternion(r.nameTagRotationLeft),r.nameTagTranslation&&o.position.add(r.nameTagTranslation),o.name="nametag",t.add(o),o};function T4e(r,e){r&&(r.position.y=e.position.y+e.scale.y*16+3,r.scale.multiplyScalar(12))}var k4e={},fKe=r=>r.charAt(0)===r.charAt(0).toUpperCase();function I4e(r){if(r!=null){if(Array.isArray(r))return r;if(typeof r=="object"){let e=r,t=Object.keys(e).filter(n=>/^\d+$/.test(n)).map(Number).sort((n,i)=>n-i);if(t.length&&t[0]===0&&t.every((n,i)=>n===i))return t.map(n=>e[String(n)])}}}function hKe(r,e,t,n,i){if(e.name)try{let c=(fKe(e.name)?WC(e.name):e.name).toLowerCase(),u=new l0("1.16.4",c,t,i);if(u.mesh)return cg(e,n,u.mesh,t.version),u.mesh}catch(c){reportError?.(c)}if(!r||!(0,R4e.isEntityAttackable)(r,e))return;let s=new pn(e.width,e.height,e.width);s.translate(0,e.height/2,0);let a=new pt({color:16711935}),o=new Ke(s,a);return(k4e[e.name]=(k4e[e.name]||0)+1)<6&&cg({username:e.name,height:e.height},n,o,t.version),o}var Xb=class{constructor(e,t){this.worldRenderer=e;this.mcData=t;this.debugMode="none",this.onSkinUpdate=()=>{},this.watchResourcesUpdates()}entities={};playerEntity=null;entitiesOptions={fontFamily:"mojangles"};debugMode;onSkinUpdate;clock=new qs;currentlyRendering=!0;cachedMapsImages={};itemFrameMaps={};pendingModelOverrides=new Map;boatPaddleScratch=U7e();get entitiesByName(){let e={};for(let t of Object.values(this.entities))t.realName&&(e[t.realName]=e[t.realName]||[],e[t.realName].push(t));return e}get entitiesRenderingCount(){return Object.values(this.entities).filter(e=>e.visible).length}getDebugString(){let e=Object.keys(this.entities).length,t=this.entitiesRenderingCount,n=Object.values(this.entities).filter(s=>s.playerObject),i=n.filter(s=>s.visible);return`${t}/${e} ${i.length}/${n.length}`}handlePlayerEntity(e){if(this.isRenderingAllowed()){if(!this.playerEntity){let t=new yt;t.originalEntity={...e,name:"player"};let n=new yt,i=this.setupPlayerObject(e,n,{});t.playerObject=i,t.add(n),t.name="player_entity",this.playerEntity=t,this.syncSceneAttachment(t),this.updatePlayerSkin(e.id,e.username,e.uuid??void 0,is)}this.playerEntity.originalEntity={...e,name:"player"},e.position&&(this.worldRenderer.sceneOrigin.getWorldPosition(this.playerEntity)||this.worldRenderer.sceneOrigin.track(this.playerEntity),this.playerEntity.position.set(e.position.x,e.position.y,e.position.z)),e.yaw!==void 0&&(this.playerEntity.rotation.y=e.yaw),this.updateEntityEquipment(this.playerEntity,e)}}clear(){for(let e of Object.values(this.entities))this.worldRenderer.sceneOrigin.removeAndUntrack(e),mr(e);this.entities={},this.currentSkinUrls={},this.playerVoiceStates={},this.playerEntity&&(this.worldRenderer.sceneOrigin.removeAndUntrack(this.playerEntity),mr(this.playerEntity),this.playerEntity=null)}reloadEntities(){for(let e of Object.values(this.entities))this.update({...e.originalEntity,delete:!0},{}),this.update(e.originalEntity,{})}watchResourcesUpdates(){this.worldRenderer.resourcesManager.on("assetsTexturesUpdated",()=>this.reloadEntities()),this.worldRenderer.resourcesManager.on("assetsInventoryReady",()=>this.reloadEntities())}setDebugMode(e,t=null){this.debugMode=e;for(let n of t?[t]:Object.values(this.entities)){let i=n.children.find(s=>s.name==="debug");i.visible=!1,this.debugMode==="basic"&&(i.visible=!0)}}setRendering(e,t=null){this.currentlyRendering=e&&this.isRenderingAllowed(),this.setSceneAttached(this.currentlyRendering,t)}isRenderingAllowed(){return this.worldRenderer.worldRendererConfig.renderEntities!==!1&&!this.worldRenderer.reactiveDebugParams.disableEntities}syncSceneAttachment(e=null){let t=this.isRenderingAllowed();this.currentlyRendering=t,this.setSceneAttached(t,e)}setSceneAttached(e,t=null){let n=t?[t]:[...Object.values(this.entities),...this.playerEntity?[this.playerEntity]:[]];for(let i of n)e?this.worldRenderer.scene.children.includes(i)||this.worldRenderer.scene.add(i):this.worldRenderer.scene.remove(i)}playEntityModelAnimation(e,t,n=!1){let i=this.entities[e];i&&i.traverse(s=>{s instanceof l0&&s.playAnimation(t,n)})}render(){if(this.syncSceneAttachment(),!this.isRenderingAllowed())return;this.clock.update(performance.now());let e=Math.min(this.clock.getDelta(),1/30),t=this.worldRenderer.viewerChunkPosition,n=10*10;for(let[i,s]of[...Object.entries(this.entities),["player_entity",this.playerEntity]]){if(!s)continue;let a=i==="player_entity";if(a){let u=this.worldRenderer.playerStateUtils.isThirdPerson();s.visible=u;let d=s.userData._passengerVehicleId!=null||s.userData._boatPassengerVehicleId!=null;if(u&&!d){let p=this.worldRenderer.playerStateReactive.eyeHeight;s.position.set(this.worldRenderer.cameraWorldPos.x,this.worldRenderer.cameraWorldPos.y-p,this.worldRenderer.cameraWorldPos.z)}}let{playerObject:o}=s;if(o?.animation&&o.animation.update(o,e),!a){let u=s.userData.renderHints;W7e(u)&&j7e(s,this.worldRenderer.cameraShake.getBaseRotation().yaw)}let l=s.userData[Yc],c=s.userData[ag];if(l&&c){let u=E7e(c,e),d=x7e({entityPitch:s.userData._horseHeadPitch??0,headYaw:s.userData._horseHeadYaw??s.userData._horseBodyYaw??0,bodyYaw:s.userData._horseBodyYaw??0,limbSwing:u.limbSwing,limbSwingAmount:u.limbSwingAmount});A7e(l,d)}if(!a&&o&&qb(o,s.userData),s.traverse(u=>{u instanceof l0&&u.update(e)}),!a&&t&&s.position){let u=s.position.x-t.x,d=s.position.y-t.y,p=s.position.z-t.z,v=u*u+d*d+p*p,g=this.worldRenderer.entitySectionKey(s.position.x,s.position.y,s.position.z),b=this.worldRenderer.isSectionOcclusionVisible(g);s.visible=!!((v<n||this.worldRenderer.shouldObjectVisible(s))&&b),this.maybeRenderPlayerSkin(i)}if(s.userData.renderHints?.localVehicle){let u=this.resolveLocalVehicleRenderWorldPos(s);s.position.set(u.x,u.y,u.z)}s.visible&&!a&&this.syncArmorPositions(s)}this.updateVehiclePassengerPositions(),this.applyRemoteBoatPassengerRotations(),this.applyLocalThirdPersonPlayerRotation(),this.updateBoatPaddleAnimations(e)}applyRemoteBoatPassengerRotations(){c4e({entities:this.entities,syncArmor:e=>this.syncArmorPositions(e)})}updateBoatPaddleAnimations(e){for(let t of Object.values(this.entities)){if(!t||!$o(t.realName))continue;let n=t.children.find(s=>s.name==="mesh");if(!n)continue;let i=n.userData.boatPaddleAnimation;i&&H7e(i,e,n.userData.boatPaddleLeftPivot,n.userData.boatPaddleRightPivot,this.boatPaddleScratch)}}applyLocalThirdPersonPlayerRotation(){let e=this.playerEntity;if(!e?.visible||!e.playerObject)return;let t=this.worldRenderer.cameraShake.getBaseRotation(),n=e.userData._passengerVehicleId!=null||e.userData._boatPassengerVehicleId!=null,i=e.userData._passengerVehicleId??e.userData._boatPassengerVehicleId,s=i!=null?this.entities[i]:void 0,a=s?.realName??s?.originalEntity.name,o=s?.rotation.y;if(L7e({isThirdPerson:!0,isAnchoredPassenger:n,vehicleName:a,vehicleYaw:o})){let l=Ub({cameraYaw:t.yaw,cameraPitch:t.pitch,vehicleYaw:o});e.rotation.set(0,l.bodyYaw,0),e.traverse(c=>{c.name==="head"&&c.rotation.set(l.headPitch,l.headYaw,0)})}else e.rotation.set(0,t.yaw,0),e.traverse(l=>{l.name==="head"&&l.rotation.set(-t.pitch,0,0)});this.syncArmorPositions(e)}resolvePassengerEntity(e){return this.playerEntity?.originalEntity.id===e?this.playerEntity:this.entities[e]}resolveLocalVehicleRenderWorldPos(e){let t=e.originalEntity,n=e.userData.renderHints,i=e.userData._localVehicleY??t.position?.y??e.position.y;return J7e({cameraWorldPos:this.worldRenderer.cameraWorldPos,rawVehicleY:i,eyeHeight:this.worldRenderer.playerStateReactive.eyeHeight,vehicleName:e.realName??t.name,vehicleHeight:t.height??1.6,verticalCameraLock:n?.localVehicleVerticalCameraLock})}updateVehiclePassengerPositions(){r4e({entities:this.entities,localPlayer:this.playerEntity,getWorldPosition:e=>this.worldRenderer.sceneOrigin.getWorldPosition(e),version:this.worldRenderer.version})}updateBoatPassengerPositions(){this.updateVehiclePassengerPositions()}syncArmorPositions(e){e.playerObject&&e.traverse(t=>{if(!t.name.startsWith("geometry_armor_"))return;let{skin:n}=e.playerObject;switch(t.name){case"geometry_armor_head":t.children[0]?.children[0]&&t.children[0].children[0].rotation.set(-n.head.rotation.x,n.head.rotation.y,n.head.rotation.z,n.head.rotation.order);break;case"geometry_armor_legs":t.children[0]&&(t.children[0].children[2]&&t.children[0].children[2].rotation.set(-n.leftLeg.rotation.x,n.leftLeg.rotation.y,n.leftLeg.rotation.z,n.leftLeg.rotation.order),t.children[0].children[1]&&t.children[0].children[1].rotation.set(-n.rightLeg.rotation.x,n.rightLeg.rotation.y,n.rightLeg.rotation.z,n.rightLeg.rotation.order));break;case"geometry_armor_feet":t.children[0]&&(t.children[0].children[0]&&t.children[0].children[0].rotation.set(-n.rightLeg.rotation.x,n.rightLeg.rotation.y,n.rightLeg.rotation.z,n.rightLeg.rotation.order),t.children[0].children[1]&&t.children[0].children[1].rotation.set(-n.leftLeg.rotation.x,n.leftLeg.rotation.y,-n.leftLeg.rotation.z,n.leftLeg.rotation.order));break}})}getPlayerObject(e){return this.playerEntity?.originalEntity.id===e?this.playerEntity?.playerObject:this.entities[e]?.playerObject}playerVoiceStates={};setPlayerVoiceState(e,t,n){let i=String(e);n?this.playerVoiceStates[i]=n:delete this.playerVoiceStates[i];let s=this.entities[e],a=s?.playerObject;if(!s||!a)return;let o=s.children.find(c=>c.name==="mesh");if(!o)return;let l=cg({username:t,voiceState:n},this.entitiesOptions,o,this.worldRenderer.version);T4e(l,a)}uuidPerSkinUrlsCache={};currentSkinUrls={};isCanvasBlank(e){return!e.getContext("2d")?.getImageData(0,0,e.width,e.height).data.some(n=>n!==0)}async updatePlayerSkin(e,t,n,i,s=void 0){i!==is&&this.loadedSkinEntityIds.add(String(e)),n&&((typeof i=="string"||typeof s=="string")&&(this.uuidPerSkinUrlsCache[n]={}),typeof i=="string"&&(this.uuidPerSkinUrlsCache[n].skinUrl=i),typeof s=="string"&&(this.uuidPerSkinUrlsCache[n].capeUrl=s),i===!0&&(i=this.uuidPerSkinUrlsCache[n]?.skinUrl??i),s??=this.uuidPerSkinUrlsCache[n]?.capeUrl);let o=this.getPlayerObject(e);if(!o)return;if(i===!0){if(!t)return;let c=await dc(t,"skin");if(!this.getPlayerObject(e)||!c)return;i=c}if(typeof i!="string")throw new Error("Invalid skin url");if(this.currentSkinUrls[String(e)]===i){if(s){if(s===!0&&t){let c=await dc(t,"cape");if(!this.getPlayerObject(e)||!c)return;s=c}typeof s=="string"&&this.loadAndApplyCape(e,s)}return}i!==is&&(this.currentSkinUrls[String(e)]=i);let l=this.worldRenderer.worldRendererConfig.renderEars||t==="deadmau5";this.loadAndApplySkin(e,i,l).then(async()=>{if(s){if(s===!0&&t){let c=await dc(t,"cape");if(!this.getPlayerObject(e)||!c)return;s=c}typeof s=="string"&&this.loadAndApplyCape(e,s)}}),o.cape.visible=!1,s||(o.backEquipment=null,o.elytra.map=null,o.cape.map&&o.cape.map.dispose(),o.cape.map=null)}async applyTemporaryPlayerSkinOverride(e,t,n,i){this.worldRenderer.playerStateReactive.playerSkin=e,await this.updatePlayerSkin(t,n,i,e,void 0)}async loadAndApplySkin(e,t,n){let i=this.getPlayerObject(e);if(i)try{let s;if(i=this.getPlayerObject(e),!i)return;let a,o;if(t===is){let c=await Ro(is);s=c.image,a=new Nn(c.canvas),o=c.canvas}else{let{canvas:c,image:u}=await Ro(t);s=u,a=new Nn(c),o=c}a.magFilter=ct,a.minFilter=ct,a.needsUpdate=!0,i.skin.map=a,i.skin.modelType=cA(o),i.skin.isCustom=t!==is,$C(i);let l;if(s?n&&(l=$r(64,64),uA(l,s),n=!this.isCanvasBlank(l)):n=!1,n){let c=new Nn(l);c.magFilter=ct,c.minFilter=ct,c.needsUpdate=!0,i.ears.map=c,i.ears.visible=!0}else i.ears.map=null,i.ears.visible=!1;this.onSkinUpdate?.()}catch(s){console.error("Error loading skin:",s)}}async loadAndApplyCape(e,t){let n=this.getPlayerObject(e);if(n)try{let{canvas:i,image:s}=await Ro(t);if(n=this.getPlayerObject(e),!n)return;lA(i,s);let a=new Nn(i);a.magFilter=ct,a.minFilter=ct,a.needsUpdate=!0,n.cape.map=a,n.cape.visible=!0,n.elytra.map=a,this.onSkinUpdate?.(),n.backEquipment||(n.backEquipment="cape")}catch(i){console.error("Error loading cape:",i)}}debugSwingArm(){let e=Object.values(this.entities).find(n=>n.playerObject?.animation);if(!e||!e.playerObject?.animation)return;let t=e.playerObject.animation;t.swingArm&&t.swingArm()}applyMovementAnimation(e,t){let n=e.animation;if(n){if(t==="oneSwing"){n.swingArm();return}if(n.switchAnimationCallback=null,t==="riding"){n.isMoving=!1,n.isRunning=!1,n.isCrouched=!1,n.isRiding=!0;return}n.isRiding=!1,n.isMoving=t==="walking"||t==="running"||t==="crouchWalking",n.isRunning=t==="running",n.isCrouched=t==="crouch"||t==="crouchWalking"}}playAnimation(e,t){let n=e==="player_entity"?this.playerEntity?.playerObject:this.getPlayerObject(e)??this.playerEntity?.playerObject;n&&this.applyMovementAnimation(n,t)}parseEntityLabel(e){if(e)try{if(e.type==="string")return e.value;let t=typeof e=="string"?og.default.simplify(og.default.parse(e)):jb.default.simplify(e);return HC(t).map(this.textFromComponent).join("")}catch{return e}}textFromComponent(e){return typeof e=="string"?e:e.text??""}getItemMesh(e,t,n=!1,i){!e.nbt&&e.nbtData&&(e.nbt=e.nbtData);let s=this.worldRenderer.getItemRenderData(e,t);if(!(i&&i===s?.modelName)){if(s&&"resolvedModel"in s){let a=nge(this.worldRenderer.material,s.resolvedModel,s.modelName,this.worldRenderer.resourcesManager.currentResources.worldBlockProvider,this.worldRenderer.resourcesManager.currentResources.mcData),o=1;t["minecraft:display_context"]==="ground"?o=.5:t["minecraft:display_context"]==="thirdperson"&&(o=6),a.scale.set(o,o,o);let l=new yt;return l.add(a),{mesh:l,isBlock:!0,modelName:s.modelName}}if(s){let a=s.renderInfo?.texture==="blocks"?this.worldRenderer.material.map:this.worldRenderer.itemsTexture,{u:o,v:l,su:c,sv:u}=s,v=i_e(a,{u:o,v:l,sizeX:c??1,sizeY:u??1},{faceCamera:n,use3D:!n}),g=1;return t["minecraft:display_context"]==="ground"?g=.5:t["minecraft:display_context"]==="thirdperson"&&(g=6),v.mesh.scale.set(g,g,g),{mesh:v.mesh,isBlock:!1,modelName:s.modelName,cleanup:v.cleanup}}}}setVisible(e,t){t?e.scale.set(1,1,1):e.scale.set(0,0,0)}update(e,t){let n=e.name==="player";(e.name==="zombie_villager"||e.name==="husk")&&(t.texture=`textures/1.16.4/entity/${e.name==="zombie_villager"?"zombie_villager/zombie_villager.png":`zombie/${e.name}.png`}`),e.name==="glow_item_frame"&&(t.textures||(t.textures=[]),t.textures.background="block:glow_item_frame");let i=this.entities[e.id],s=!i;if(e.delete){if(!i)return;i.userData._posTween?.stop(),i.userData._rotTween?.stop(),i.userData[ag]=void 0,i.userData[Yc]=void 0;let g=i.children.find(b=>b.name==="mesh");g&&g7e(g),i.additionalCleanup&&i.additionalCleanup(),i.traverse(b=>{b.additionalCleanup&&b.additionalCleanup()}),this.onRemoveEntity(e),this.worldRenderer.sceneOrigin.removeAndUntrack(i),mr(i),delete this.entities[e.id],delete this.playerVoiceStates[String(e.id)];return}if(!this.isRenderingAllowed())return;let a;if(i===void 0){this.beforeEntityAdded(e);let g=new yt;if(g.originalEntity=e,e.name==="item"||e.name==="tnt"||e.name==="falling_block"||e.name==="snowball"||e.name==="egg"||e.name==="ender_pearl"||e.name==="experience_bottle"||e.name==="splash_potion"||e.name==="lingering_potion"){let w=e.name==="tnt"||e.type==="projectile"?{name:e.name}:e.name==="falling_block"?{blockState:e.objectData}:I4e(e.metadata)?.find(S=>typeof S=="object"&&S?.itemCount);if(w){let S=this.getItemMesh(w,{"minecraft:display_context":"ground"},e.type==="projectile");if(S){if(a=S.mesh,e.name==="item"||e.type==="projectile"?(a.scale.set(.5,.5,.5),a.position.set(0,e.name==="item"?.2:.1,0)):(a.scale.set(2,2,2),a.position.set(0,.5,0)),e.name==="item"){let M=new qs;a.onBeforeRender=()=>{M.update(performance.now());let T=M.getDelta();a.rotation.y+=T}}g.additionalCleanup=()=>{S.cleanup&&S.cleanup()}}}}else if(n){let w=new yt,S=this.setupPlayerObject(e,w,t);if(g.playerObject=S,a=w,e.username){let M=cg({...e,voiceState:this.playerVoiceStates[e.id]},{fontFamily:"mojangles"},w,this.worldRenderer.version);T4e(M,S)}}else a=hKe(this.mcData,e,this.worldRenderer,this.entitiesOptions,{...t,customModel:e.customModel});if(!a)return;a.name="mesh";let b=u7e(e.name);b!=null&&(a.rotation.y=b,v7e(a));let y=e.pos??e.position;this.worldRenderer.sceneOrigin.track(g),g.position.set(y.x,y.y,y.z);let _=new Aa(a,e.type==="hostile"?16711680:e.type==="mob"?65280:e.type==="player"?255:16753920);_.name="debug",g.add(a),g.add(_),_.visible=!1,i=g,i.name="entity",i.realName=e.name,this.entities[e.id]=i,n&&this.updatePlayerSkin(e.id,e.username,t?.texture?e.uuid:void 0,t?.texture||is),this.setDebugMode(this.debugMode,g),this.syncSceneAttachment(g),this.afterAddEntity(e);let x=a.userData[Yc];x&&(i.userData[Yc]=x,i.userData[ag]=w7e())}else a=i.children.find(g=>g.name==="mesh"),e.renderHints&&(i.originalEntity.renderHints=e.renderHints);this.applyEntityRenderHints(i,e),this.updateEntityEquipment(i,e);let o=L4e(e,this.mcData),c=(I4e(e.metadata)?.[0]??e.metadata?.[0]??0)&32||this.worldRenderer.playerStateReactive.cameraSpectatingEntity===e.id&&this.worldRenderer.playerStateUtils.isSpectator();for(let g of a.children??[])g.name!=="nametag"&&(g.visible=!c);o.baby?i.scale.set(.5,.5,.5):i.scale.set(1,1,1);let u=Wb("text_display",e,this.mcData),d=u?.text||o.custom_name_visible&&o.custom_name;if(e.name!=="player"&&d){let g=u&&(u.billboard_render_constraints==="fixed"||!u.billboard_render_constraints),b=u&&!(parseInt(u.style_flags,10)&4)?cKe(u.background_color):void 0,y;if(u?.text_opacity){let _=parseInt(u?.text_opacity,10);y=_>0?_:256-_}cg({...e,username:typeof d=="string"?og.default.simplify(og.default.parse(d)):jb.default.simplify(d),nameTagBackgroundColor:b,nameTagTextOpacity:y,nameTagFixed:g,nameTagScale:u?.scale,nameTagTranslation:u&&(u.translation||new W(0,0,0)),nameTagRotationLeft:M4e(u?.left_rotation),nameTagRotationRight:M4e(u?.right_rotation)},this.entitiesOptions,a,this.worldRenderer.version)}let p=Wb("armor_stand",e,this.mcData);if(p){let g=(parseInt(p.client_flags,10)&1)!==0,b=(parseInt(p.client_flags,10)&4)!==0,y=(parseInt(p.client_flags,10)&8)===0,_=(parseInt(p.client_flags,10)&16)!==0;a.castShadow=!_,a.receiveShadow=!_,g?i.scale.set(.5,.5,.5):i.scale.set(1,1,1),i.traverse(x=>{switch(x.name){case"bone_baseplate":this.setVisible(x,y),x.rotation.y=-i.rotation.y;break;case"bone_head":p.head_pose&&x.setRotationFromEuler(Yo(p.head_pose));break;case"bone_body":p.body_pose&&x.setRotationFromEuler(Yo(p.body_pose));break;case"bone_rightarm":x.parent?.name!=="bone_armor"&&this.setVisible(x,b),p.left_arm_pose?x.setRotationFromEuler(Yo(p.left_arm_pose)):x.setRotationFromEuler(Yo({yaw:-10,pitch:-10,roll:0}));break;case"bone_leftarm":x.parent?.name!=="bone_armor"&&this.setVisible(x,b),p.right_arm_pose?x.setRotationFromEuler(Yo(p.right_arm_pose)):x.setRotationFromEuler(Yo({yaw:10,pitch:-10,roll:0}));break;case"bone_rightleg":p.left_leg_pose?x.setRotationFromEuler(Yo(p.left_leg_pose)):x.setRotationFromEuler(Yo({yaw:-1,pitch:-1,roll:0}));break;case"bone_leftleg":p.right_leg_pose?x.setRotationFromEuler(Yo(p.right_leg_pose)):x.setRotationFromEuler(Yo({yaw:1,pitch:1,roll:0}));break}})}let v=Wb("item_frame",e,this.mcData);if(v||(v=Wb("glow_item_frame",e,this.mcData)),v){let g=v?.item??e.metadata?.[8];if(a.scale.set(1,1,1),a.position.set(0,0,-.5),i.rotation.x=-e.pitch,i.children.find(b=>{if(b.name.startsWith("map_")){mr(b);let y=parseInt(b.name.split("_")[1],10);return this.itemFrameMaps[y]=this.itemFrameMaps[y]?.filter(_=>_!==b),b instanceof Ke&&b.material?.map?.dispose(),!0}else if(b.name==="item")return mr(b),!0;return!1})?.removeFromParent(),g&&(g.itemId??g.blockId??0)!==0){let b=v.rotation??0,y=g.nbtData?.value?.map?.value??g.components?.find(_=>_.type==="map_id")?.data;if(y)a.scale.set(16/12,16/12,1),this.addMapModel(i,y,b);else{let _=this.getItemMesh(g,{"minecraft:display_context":"fixed"});_&&(_.mesh.position.set(0,0,-.05),_.isBlock?_.mesh.scale.set(.25,.25,.25):_.mesh.scale.set(.5,.5,.5),_.mesh.rotateY(Math.PI),_.mesh.rotateZ(-b*Math.PI/4),_.mesh.name="item",i.add(_.mesh))}}}e.username!==void 0&&(i.username=e.username),this.updateNameTagVisibility(i),this.updateEntityPosition(e,s,t)}applyEntityRenderHints(e,t){if(t.renderHints){let c=t.renderHints,u=new Set(c.passengerIds??c.boatPassengerIds??[]),d=e.userData.renderHints?.passengerIds??e.userData.renderHints?.boatPassengerIds??[];if($o(t.name)||Hb(t.name))for(let v of d){if(u.has(v))continue;let g=this.resolvePassengerEntity(v);g&&zb(g,String(t.id),this.worldRenderer.sceneOrigin.getWorldPosition(g))}e.userData.renderHints=t.renderHints}if(!$o(t.name))return;let n=e.children.find(c=>c.name==="mesh");if(!n)return;let i=n.userData.boatWaterPatch;i&&(i.visible=t.renderHints?.boatWaterPatchVisible===!0);let s=e.userData.renderHints??t.renderHints,a=s?.boatPaddleLeft===!0,o=s?.boatPaddleRight===!0,l=n.userData.boatPaddleAnimation;l||(l=F7e(),n.userData.boatPaddleAnimation=l),z7e(l,a,o)}updateEntityPosition(e,t,n,i=!1){let s=this.entities[e.id];if(!s)return;if(this.applyEntityRenderHints(s,e),s.userData[Yc]){s.userData._horseHeadPitch=typeof e.pitch=="number"&&Number.isFinite(e.pitch)?e.pitch:0;let c=e.headYaw;s.userData._horseHeadYaw=typeof c=="number"&&Number.isFinite(c)?c:e.yaw,s.userData._horseBodyYaw=typeof e.yaw=="number"&&Number.isFinite(e.yaw)?e.yaw:0}let a=LP(e);if(e.position){if(a){s.userData._localVehicleY=e.position.y,s.userData._posTween?.stop(),s.userData._posTween=void 0;let u=this.resolveLocalVehicleRenderWorldPos(s);s.position.set(u.x,u.y,u.z)}else{let u=BP(e,t),d=this.worldRenderer.sceneOrigin.getWorldPosition(s)??{x:e.position.x,y:e.position.y,z:e.position.z};s.userData._tweenTarget||(s.userData._tweenTarget={x:d.x,y:d.y,z:d.z}),s.userData._posTween?.stop(),s.userData._posTween=new Xr(s.userData._tweenTarget).to({x:e.position.x,y:e.position.y,z:e.position.z},u).onUpdate(()=>{s.position.set(s.userData._tweenTarget.x,s.userData._tweenTarget.y,s.userData._tweenTarget.z)}).start()}let c=s.userData[ag];!i&&c&&Number.isFinite(e.position.x)&&Number.isFinite(e.position.z)&&S7e(c,e.position)}let o=X7e(e,t),l;if(s.playerObject&&n?.rotation?.head){let c=n.rotation.head.y,u=typeof c=="number"&&Number.isFinite(c)?c:e.yaw;typeof u=="number"&&Number.isFinite(u)&&(l=u)}else typeof e.yaw=="number"&&Number.isFinite(e.yaw)&&(l=e.yaw);if(typeof l=="number"&&Number.isFinite(l)){s.userData._rotTween?.stop(),s.userData._rotTween=void 0;let c=Number.isFinite(s.rotation.y)?s.rotation.y:0,u=uKe(c,l);o===0?s.rotation.y=c+u:s.userData._rotTween=new Xr(s.rotation).to({y:c+u},o).start()}if(s?.playerObject&&n?.rotation?.head){let{playerObject:c}=s,u=n.rotation.head.y;DP(s.userData,u,e.yaw),c.skin.head.rotation.y=0;let d=n.rotation.head.x;i4e(s.userData,d),qb(c,s.userData)}else s?.playerObject&&typeof e.yaw=="number"&&Number.isFinite(e.yaw)&&DP(s.userData,void 0,e.yaw)}afterAddEntity(e){}beforeEntityAdded(e){let t=this.pendingModelOverrides.get(e.id.toString());if(t){let{parts:n}=t;e.customModel=n.length===1?n[0]:{parts:n},this.pendingModelOverrides.delete(e.id.toString())}}loadedSkinEntityIds=new Set;maybeRenderPlayerSkin(e){let t=this.entities[e];if(e==="player_entity"&&(t=this.playerEntity,e=this.playerEntity?.originalEntity.id),!t||!t.playerObject||!t.visible)return;let n=128,i=this.worldRenderer.getCameraPosition(),s=this.worldRenderer.sceneOrigin.getWorldPosition(t),o=(s?new W(s.x,s.y,s.z):t.position.clone().add(new W(this.worldRenderer.sceneOrigin.x,this.worldRenderer.sceneOrigin.y,this.worldRenderer.sceneOrigin.z))).distanceTo(i);if(o<n&&o<this.worldRenderer.viewDistance*16){if(this.loadedSkinEntityIds.has(String(e)))return;this.updatePlayerSkin(e,t.playerObject.realUsername,t.playerObject.realPlayerUuid,!0,!0)}}onRemoveEntity(e){this.loadedSkinEntityIds.delete(e.id.toString()),delete this.currentSkinUrls[e.id.toString()]}updateMap(e,t){this.cachedMapsImages[e]=t;let n=this.itemFrameMaps[e];if(n&&(n=n.filter(i=>i.parent),this.itemFrameMaps[e]=n,n))for(let i of n)i.material.map=this.loadMap(t),i.material.needsUpdate=!0,i.visible=!0}updateNameTagVisibility(e){let t=this.worldRenderer.playerStateReactive.team,n=e.originalEntity.team,i=n?.nameTagVisibility||"always",s=i==="always"||i==="hideForOwnTeam"&&n?.team!==t?.team||i==="hideForOtherTeams"&&(n?.team===t?.team||t===void 0);e.traverse(a=>{a.name==="nametag"&&(a.visible=s)})}addMapModel(e,t,n){let i=this.cachedMapsImages?.[t],s=null;i&&(s=this.loadMap(i));let a={transparent:!0,alphaTest:.1};s&&(a.map=s);let o=new Ss(a),l=new Ke(new qn(1,1),o);l.rotation.set(0,Math.PI,0),e.add(l);let c=!0;e.traverseVisible(u=>{u.name==="geometry_frame"&&(c=!1)}),c?l.position.set(0,0,.499):l.position.set(0,0,.437),l.rotateZ(Math.PI*2-n*Math.PI/2),l.name=`map_${t}`,s||(l.visible=!1),this.itemFrameMaps[t]||(this.itemFrameMaps[t]=[]),this.itemFrameMaps[t].push(l)}loadMap(e){let t=xh(e);return t.needsUpdate=!0,t}addItemModel(e,t,n,i=!1){let s=`bone_${t}item`,a=`custom_item_${t}`;if(e.traverse(l=>{l.name===a&&(l.removeFromParent(),l.additionalCleanup&&l.additionalCleanup())}),!n)return;let o=this.getItemMesh(n,{"minecraft:display_context":"thirdperson"});o?.mesh&&e.traverse(l=>{if(l.name.toLowerCase()===s||l.name===`${t}Arm`){let c=new Ot;c.additionalCleanup=()=>{o.cleanup&&o.cleanup()};let u=o.mesh;c.rotation.z=-Math.PI/16,o.isBlock?c.rotation.y=Math.PI/4:(u.rotation.z=-Math.PI/4,c.rotation.y=Math.PI/2,c.scale.multiplyScalar(2)),i&&(c.position.y=-8,c.position.z=5,c.position.x=t==="left"?1:-1,c.rotation.x=Math.PI),c.add(u),c.name=a,l.add(c)}})}handleDamageEvent(e,t){let n=this.entities[e]?.children.find(i=>i.name==="mesh");n&&n.traverse(i=>{if(i instanceof Ke&&i.material.clone){i.material.clone().dispose(),i.material=i.material.clone();let a=i.material.color.clone();i.material.color.set(16711680),new Xr(i.material.color).to(a,500).start()}})}raycastSceneDebug(){let e=new U0;return e.setFromCamera(new ze(0,0),this.worldRenderer.camera),e.intersectObjects(this.worldRenderer.scene.children)[0]?.object}updateEntityModel(e,t,n,i){let s=Array.isArray(t)?t:[{modelPath:t,modelType:n,metadata:i}];this.pendingModelOverrides.set(e,{parts:s});let a=this.entities[e];a&&(this.update({...a.originalEntity,delete:!0},{}),this.update(a.originalEntity,{}))}setupPlayerObject(e,t,n){let i=new Om;i.realPlayerUuid=e.uuid??"",i.realUsername=e.username??"",i.position.set(0,16,0),$C(i),t.add(i);let s=1/16;return t.scale.set(s,s,s),t.rotation.set(0,Math.PI,0),i.animation=new ng,i.animation.isMoving=!1,i}updateEntityEquipment(e,t){if(!e||!t.equipment)return;let n=t.type==="player";if(this.addItemModel(e,n?"right":"left",t.equipment[0],n),this.addItemModel(e,n?"left":"right",t.equipment[1],n),lg(this.worldRenderer,e,"feet",t.equipment[2]),lg(this.worldRenderer,e,"legs",t.equipment[3],2),lg(this.worldRenderer,e,"chest",t.equipment[4]),lg(this.worldRenderer,e,"head",t.equipment[5]),n&&e.playerObject){let{playerObject:i}=e;i.backEquipment=t.equipment.some(s=>s?.name==="elytra")?"elytra":"cape",i.backEquipment==="elytra"&&this.loadAndApplyCape(t.id,OP),i.cape.map===null&&(i.cape.visible=!1)}}};function L4e(r,e){let t=e?.entitiesByName[r.name];return new Proxy({},{get(n,i,s){if(typeof i!="string"||!t)return;let a=t.metadataKeys?.indexOf(i);return r.metadata?.[a??-1]}})}function Wb(r,e,t){if(e.name===r)return L4e(e,t)}function lg(r,e,t,n,i=1,s=!1){if(!n){VP(e,t);return}let a=n.name.split("_"),o,l=t==="head"&&n.name==="player_head";if(l)if(VP(e,t),n.nbt){let g=jb.default.simplify(n.nbt);try{let b;if(g.SkullOwner?b=g.SkullOwner.Properties.textures[0]?.Value:b=g["minecraft:profile"]?.Properties?.find(y=>y.name==="textures")?.value,b){o=JSON.parse(Buffer.from(b,"base64").toString()).textures?.SKIN?.url;let{skinTexturesProxy:_}=r.worldRendererConfig;_&&(o=o?.replace("http://textures.minecraft.net/",_).replace("https://textures.minecraft.net/",_))}}catch(b){console.error("Error decoding player head texture:",b)}}else o=is;let c=a[0];if(!o){let g=`${c}_layer_${i}${s?"_overlay":""}`;o=r.resourcesManager.currentResources.customTextures.armor?.textures[g]?.src??A4e[g]}if(!o||!Kc[t]){VP(e,t);return}let u=`geometry_armor_${t}${s?"_overlay":""}`,d=e.children.findLast(g=>g.name===u),p;if(d?(p=d.material,v4(o,g=>{g.magFilter=ct,g.minFilter=ct,g.flipY=!1,g.wrapS=ma,g.wrapT=ma,p.map=g})):(d=Jc(r,o,Kc[t]),t==="head"&&(d.children[0].position.y+=.01),d.name=u,p=d.material,l||(p.side=Cn)),c==="leather"&&!s){let g=n.nbt?.value?.display?.value?.color?.value;if(g){let b=g>>16&255,y=g>>8&255,_=g&255;p.color.setRGB(b/255,y/255,_/255)}else p.color.setHex(11890001);lg(r,e,t,n,i,!0)}else p.color.setHex(16777215);let v=new Ot;v.name=`armor_${t}${s?"_overlay":""}`,v.add(d),e.add(d)}function VP(r,e){for(let t of r.children)(t.name===`geometry_armor_${e}`||t.name===`geometry_armor_${e}_overlay`)&&t.removeFromParent()}var FP=async(r,e)=>{let t;if(!r&&!e)t=await C4e;else{if(r||(r=await dc(e,"skin")),!r)return;let{canvas:l}=await Ro(r);t=new Nn(l)}t.magFilter=ct,t.minFilter=ct;let n=new pn,i=new Qr,s=!1,a=new Ke(n,i);a.scale.x=s?3:4,a.scale.y=12,a.scale.z=4,pKe(n,40,16,s?3:4,12,4),i.map=t,i.needsUpdate=!0;let o=new yt;return o.add(a),o.scale.set(.1,.1,.1),a.rotation.z=Math.PI,o};function mKe(r,e,t,n,i,s,a,o){let l=(C,I,k,L)=>[new ze(C/a,1-L/o),new ze(k/a,1-L/o),new ze(k/a,1-I/o),new ze(C/a,1-I/o)],c=l(e+s,t,e+n+s,t+s),u=l(e+n+s,t,e+n*2+s,t+s),d=l(e,t+s,e+s,t+s+i),p=l(e+s,t+s,e+n+s,t+s+i),v=l(e+n+s,t+s,e+n+s*2,t+i+s),g=l(e+n+s*2,t+s,e+n*2+s*2,t+i+s),b=r.attributes.uv,y=[v[3],v[2],v[0],v[1]],_=[d[3],d[2],d[0],d[1]],x=[c[3],c[2],c[0],c[1]],w=[u[0],u[1],u[3],u[2]],S=[p[3],p[2],p[0],p[1]],M=[g[3],g[2],g[0],g[1]],T=[];for(let C of[y,_,x,w,S,M])for(let I of C)T.push(I.x,I.y);b.set(new Float32Array(T)),b.needsUpdate=!0}function pKe(r,e,t,n,i,s){mKe(r,e,t,n,i,s,64,64)}var B4e={itemRight:{rotation:[0,-90,25],translation:[1.13,3.2,1.13],scale:[.68,.68,.68]},itemLeft:{rotation:[0,90,-25],translation:[1.13,3.2,1.13],scale:[.68,.68,.68]},blockRight:{rotation:[0,45,0],translation:[0,0,0],scale:[.4,.4,.4]},blockLeft:{rotation:[0,225,0],translation:[0,0,0],scale:[.4,.4,.4]}},ug=class{constructor(e,t=!1){this.worldRenderer=e;this.offHand=t;this.initCameraGroup(),this.unsubs.push(El(this.worldRenderer.playerStateReactive,"heldItemMain",()=>{this.offHand||this.updateItem()})),this.unsubs.push(El(this.worldRenderer.playerStateReactive,"heldItemOff",()=>{this.offHand&&this.updateItem()})),this.config=e.displayOptions.inWorldRenderingConfig,this.offHandDisplay=this.offHand,this.offHand||FP().then(n=>{this.disposed||(this.playerHand=n,this.updateItem())}).then(()=>{if(this.disposed)return;let n=Gy(async()=>FP(this.worldRenderer.playerStateReactive.playerSkin,this.worldRenderer.playerStateReactive.onlineMode?this.worldRenderer.playerStateReactive.username:void 0),this.worldRenderer.playerStateReactive,"playerSkin",i=>{i&&(this.playerHand=i,this.updateItem())},i=>{mr(i,!0)});this.unsubs.push(n)})}holdingBlock=void 0;blockSwapAnimation=void 0;cameraGroup=new Ke;objectOuterGroup=new yt;objectInnerGroup=new yt;holdingBlockInnerGroup=new yt;camera=new fn(75,1,.1,100);stopUpdate=!1;lastHeldItem;lastHeldItemRenderKey;isSwinging=!1;nextIterStopCallbacks;idleAnimator;ready=!1;lastUpdate=0;playerHand;offHandDisplay=!1;offHandModeLegacy=!1;swingAnimator;config;disposed=!1;unsubs=[];updateItem(){if(!this.ready)return;let e=this.offHand?this.worldRenderer.playerStateReactive.heldItemOff:this.worldRenderer.playerStateReactive.heldItemMain;e?this.setNewItem(e):this.offHand?this.setNewItem():this.setNewItem({type:"hand"})}initCameraGroup(){this.cameraGroup=new Ke}startSwing(){this.swingAnimator?.startSwing()}stopSwing(){this.swingAnimator?.stopSwing()}render(e,t,n,i){if(!this.lastHeldItem)return;let s=performance.now();this.lastUpdate&&s-this.lastUpdate>50&&this.replaceItemModel(this.lastHeldItem),this.swingAnimator?.isCurrentlySwinging()||this.swingAnimator?.debugParams.animationStage?this.swingAnimator?.update():this.idleAnimator?.update(),this.blockSwapAnimation?.switcher.update();let a=new Cr;a.add(this.cameraGroup),this.updateCameraGroup(),a.add(n.clone()),a.add(i.clone());let o=t.getSize(new ze),l=Math.min(o.width,o.height),c=o.width-l,{offHandDisplay:u}=this;if(u&&(this.cameraGroup.scale.x=-1),t.autoClear=!1,t.clearDepth(),this.offHandDisplay)t.setViewport(0,0,l,l);else{let d=o.width-l;t.setViewport(d,0,l,l)}t.render(a,this.camera),t.setViewport(0,0,o.width,o.height),u&&(this.cameraGroup.scale.x=1)}async playBlockSwapAnimation(e){this.blockSwapAnimation??={switcher:new kd(()=>({y:this.objectInnerGroup.position.y}),(s,a)=>{s==="y"&&(this.objectInnerGroup.position.y=a)},{y:16})};let t=e,n=this.objectInnerGroup.position.y+this.objectInnerGroup.scale.y*1.5*(t==="appeared"?1:-1),i=!1;return new Promise(s=>{this.blockSwapAnimation.switcher.transitionTo({y:n},t,()=>{i||s(!0)},()=>{i=!0,s(!1)})})}isDifferentItem(e){return this.lastHeldItemRenderKey!==om(this.worldRenderer,e)}updateCameraGroup(){if(this.stopUpdate)return;let{camera:e}=this;this.cameraGroup.position.copy(e.position),this.cameraGroup.rotation.copy(e.rotation);let t=1,{position:n,scale:i}=this.getHandHeld3d(),s=-n.z,a=this.offHandModeLegacy?-1:1;this.objectOuterGroup.position.set(s*n.x*t*a,s*n.y,-s);let o=i*2.22*.2;this.objectOuterGroup.scale.set(o,o,o)}lastItemModelName;async createItemModel(e){if(this.lastUpdate=performance.now(),!e||e.type==="hand"&&!this.playerHand)return;let t;if(e.type==="item"||e.type==="block"){let i=this.worldRenderer.entities.getItemMesh({...e.fullItem,itemId:e.id},jy(this.worldRenderer),!1,this.lastItemModelName);if(i){let{mesh:s,isBlock:a,modelName:o}=i;a?(t=s,e.type="block"):(s.position.set(.5,.5,.5),t=s,e.type="item"),this.lastItemModelName=o}}else t=this.playerHand;if(!t)return;t.name="holdingBlock";let n=this.getHandHeld3d().rotation;return t.rotation.x=Lt.degToRad(n.x),t.rotation.y=Lt.degToRad(n.y),t.rotation.z=Lt.degToRad(n.z),{model:t,type:e.type}}async replaceItemModel(e){if(this.blockSwapAnimation?.switcher.isTransitioning)return;if(!e){this.holdingBlock?.removeFromParent(),this.holdingBlock=void 0,this.swingAnimator?.stopSwing(),this.swingAnimator=void 0,this.idleAnimator=void 0;return}let t=await this.createItemModel(e);t&&(this.holdingBlock?.removeFromParent(),this.holdingBlock=t.model,this.holdingBlockInnerGroup.add(t.model))}testUnknownBlockSwitch(){this.setNewItem({type:"item",name:"minecraft:some-unknown-block",id:0,fullItem:{}})}switchRequest=0;async setNewItem(e){let t=om(this.worldRenderer,e),n=this.lastHeldItemRenderKey!==t;if(this.lastHeldItem=e,!n)return;this.lastHeldItemRenderKey=t,this.lastItemModelName=void 0;let i=++this.switchRequest,s=!1;if(this.holdingBlock){if(s=!0,!await this.playBlockSwapAnimation("disappeared"))return;this.holdingBlock?.removeFromParent(),this.holdingBlock=void 0}if(!e){this.swingAnimator?.stopSwing(),this.swingAnimator=void 0,this.idleAnimator=void 0,this.blockSwapAnimation=void 0;return}if(i!==this.switchRequest)return;let a=await this.createItemModel(e);if(!a||i!==this.switchRequest)return;let o=new yt;this.holdingBlockInnerGroup.removeFromParent(),this.holdingBlockInnerGroup=new yt,this.holdingBlockInnerGroup.add(a.model),o.add(this.holdingBlockInnerGroup),this.holdingBlock=a.model,this.objectInnerGroup=new yt,this.objectInnerGroup.add(o),this.objectInnerGroup.position.set(-.5,-.5,-.5),s&&(this.objectInnerGroup.position.y-=this.objectInnerGroup.scale.y*1.5),Object.assign(o.position,{x:.5,y:.5,z:.5}),this.objectOuterGroup=new yt,this.objectOuterGroup.add(this.objectInnerGroup),this.cameraGroup.add(this.objectOuterGroup);let l=this.getHandHeld3d().rotation;this.objectOuterGroup.rotation.y=Lt.degToRad(l.yOuter),s&&await this.playBlockSwapAnimation("appeared"),this.swingAnimator??=new HP(this.holdingBlockInnerGroup),this.swingAnimator.setHandMesh(this.holdingBlockInnerGroup),this.swingAnimator.type=a.type,this.config.viewBobbing&&(this.idleAnimator=new zP(this.holdingBlockInnerGroup,this.worldRenderer.playerStateReactive))}getHandHeld3d(){let e=this.lastHeldItem?.type??"hand",t=this.offHandModeLegacy?"Left":"Right",n=.8*1.15,i={x:.4,y:-.7,z:-.45},s={x:-32.4,y:42.8,z:-41.3,yOuter:0};if(e==="item"){let a=B4e[`item${t}`];i={x:-.05,y:-.7,z:-.45},s={x:a.rotation[0],y:a.rotation[1],z:a.rotation[2],yOuter:0},n=a.scale[0]*1.15}else if(e==="block"){let a=B4e[`block${t}`];i={x:.4,y:-.7,z:-.45},s={x:a.rotation[0],y:a.rotation[1],z:a.rotation[2],yOuter:0},n=a.scale[0]*1.15}return{rotation:s,position:i,scale:n}}dispose(){this.disposed=!0,this.ready=!1,this.unsubs.forEach(e=>e()),this.unsubs=[],this.idleAnimator?.destroy(),this.idleAnimator=void 0,this.swingAnimator?.stopSwing(),this.swingAnimator=void 0,this.blockSwapAnimation?.switcher.forceFinish(),this.blockSwapAnimation=void 0,mr(this.cameraGroup,!0),mr(this.objectOuterGroup,!0),mr(this.objectInnerGroup,!0),mr(this.holdingBlockInnerGroup,!0),this.holdingBlock=void 0,this.playerHand&&(mr(this.playerHand,!0),this.playerHand=void 0)}},zP=class{constructor(e,t){this.handMesh=e;this.playerState=t;this.handMesh=e,this.globalTime=0,this.currentState="NOT_MOVING",this.targetState="NOT_MOVING",this.defaultPosition={x:e.position.x,y:e.position.y,z:e.position.z,rotationX:e.rotation.x,rotationY:e.rotation.y,rotationZ:e.rotation.z},this.stateSwitcher=new kd(()=>({x:this.handMesh.position.x,y:this.handMesh.position.y,z:this.handMesh.position.z,rotationX:this.handMesh.rotation.x,rotationY:this.handMesh.rotation.y,rotationZ:this.handMesh.rotation.z}),(n,i)=>{switch(n){case"x":this.handMesh.position.x=i;break;case"y":this.handMesh.position.y=i;break;case"z":this.handMesh.position.z=i;break;case"rotationX":this.handMesh.rotation.x=i;break;case"rotationY":this.handMesh.rotation.y=i;break;case"rotationZ":this.handMesh.rotation.z=i;break}},{x:2,y:2,z:2,rotation:Math.PI}),this.debugGui=new $l("idle_animator",this.debugParams)}globalTime=0;lastTime=0;currentState;targetState;defaultPosition;idleOffset={y:0,rotationZ:0};tween=new yh;idleTween=null;stateSwitcher;debugParams={walkingSpeed:8,sprintingSpeed:16,walkingAmplitude:{x:1/30,y:1/10,rotationZ:.25},sprintingAmplitude:{x:1/30,y:1/10,rotationZ:.4}};debugGui;startIdleAnimation(){this.idleTween&&this.idleTween.stop(),this.idleOffset.y=this.handMesh.position.y-this.defaultPosition.y,this.idleOffset.rotationZ=this.handMesh.rotation.z-this.defaultPosition.rotationZ,this.idleTween=new Xr(this.idleOffset,this.tween).to({y:.05,rotationZ:.05},3e3).easing(Dr.Sinusoidal.InOut).yoyo(!0).repeat(1/0).start()}stopIdleAnimation(){this.idleTween&&(this.idleTween.stop(),this.idleOffset.y=0,this.idleOffset.rotationZ=0)}getStateTransform(e,t){switch(e){case"NOT_MOVING":case"SNEAKING":return{x:this.defaultPosition.x,y:this.defaultPosition.y,z:this.defaultPosition.z,rotationX:this.defaultPosition.rotationX,rotationY:this.defaultPosition.rotationY,rotationZ:this.defaultPosition.rotationZ};case"WALKING":case"SPRINTING":{let n=e==="SPRINTING"?this.debugParams.sprintingSpeed:this.debugParams.walkingSpeed,i=e==="SPRINTING"?this.debugParams.sprintingAmplitude:this.debugParams.walkingAmplitude;return{x:this.defaultPosition.x+Math.sin(t*n)*i.x,y:this.defaultPosition.y-Math.abs(Math.cos(t*n))*i.y,z:this.defaultPosition.z,rotationX:this.defaultPosition.rotationX,rotationY:this.defaultPosition.rotationY,rotationZ:this.defaultPosition.rotationZ}}}}setState(e){if(e===this.targetState)return;this.targetState=e;let t=!1;if(this.currentState!==e){if(this.stopIdleAnimation(),!t){let n=this.getStateTransform(e,this.globalTime);this.stateSwitcher.transitionTo(n,e)}this.currentState=e}}updated=!1;update(){this.stateSwitcher.update();let e=performance.now(),t=(e-this.lastTime)/1e3;if(this.lastTime=e,!this.stateSwitcher.isTransitioning)switch(this.currentState){case"NOT_MOVING":case"SNEAKING":this.globalTime=Math.PI/4;break;case"SPRINTING":case"WALKING":this.globalTime+=t;break}if(this.playerState){let n=this.playerState.movementState;n!==this.targetState&&this.setState(n)}if(!this.stateSwitcher.isTransitioning&&(this.currentState==="NOT_MOVING"||this.currentState==="SNEAKING")&&(this.idleTween?.isPlaying()||this.startIdleAnimation(),this.tween.update(),this.handMesh.position.y=this.defaultPosition.y+this.idleOffset.y,this.handMesh.rotation.z=this.defaultPosition.rotationZ+this.idleOffset.rotationZ),!this.stateSwitcher.isTransitioning&&(this.currentState==="WALKING"||this.currentState==="SPRINTING")){let n=this.getStateTransform(this.currentState,this.globalTime);Object.assign(this.handMesh.position,n),Object.assign(this.handMesh.rotation,{x:n.rotationX,y:n.rotationY,z:n.rotationZ})}}getCurrentState(){return this.currentState}destroy(){this.stopIdleAnimation(),this.stateSwitcher.forceFinish()}},HP=class{constructor(e){this.handMesh=e;this.handMesh=e,this.originalRotation=e.rotation.clone(),this.originalPosition=e.position.clone(),this.originalScale=e.scale.clone(),this.debugGui=new $l("hand_animator",this.debugParams,void 0,{animationStage:{min:0,max:1,step:.01},itemSwingXPosScale:{min:-2,max:2,step:.1},itemSwingYPosScale:{min:-2,max:2,step:.1},itemSwingZPosScale:{min:-2,max:2,step:.1},itemHeightScale:{min:-2,max:2,step:.1},itemPreswingRotY:{min:-180,max:180,step:5},itemSwingXRotAmount:{min:-180,max:180,step:5},itemSwingYRotAmount:{min:-180,max:180,step:5},itemSwingZRotAmount:{min:-180,max:180,step:5},armSwingXPosScale:{min:-2,max:2,step:.1},armSwingYPosScale:{min:-2,max:2,step:.1},armSwingZPosScale:{min:-2,max:2,step:.1},armSwingYRotAmount:{min:-180,max:180,step:5},armSwingZRotAmount:{min:-180,max:180,step:5},armHeightScale:{min:-2,max:2,step:.1}})}PI=Math.PI;animationTimer=0;lastTime=0;isAnimating=!1;stopRequested=!1;originalRotation;originalPosition;originalScale;debugParams={animationTime:250,animationStage:0,useClassicSwing:!0,itemSwingXPosScale:-.8,itemSwingYPosScale:.2,itemSwingZPosScale:-.2,itemHeightScale:-.6,itemPreswingRotY:45,itemSwingXRotAmount:-30,itemSwingYRotAmount:-35,itemSwingZRotAmount:-5,armSwingXPosScale:-.3,armSwingYPosScale:.4,armSwingZPosScale:-.4,armSwingYRotAmount:70,armSwingZRotAmount:-20,armHeightScale:-.6};debugGui;type="hand";setHandMesh(e){this.handMesh=e,this.originalRotation.copy(e.rotation),this.originalPosition.copy(e.position),this.originalScale.copy(e.scale)}update(){if(!this.isAnimating&&!this.debugParams.animationStage){this.handMesh.rotation.copy(this.originalRotation),this.handMesh.position.copy(this.originalPosition),this.handMesh.scale.copy(this.originalScale);return}let e=performance.now(),t=(e-this.lastTime)/1e3;this.lastTime=e,this.animationTimer+=t*1e3;let n=this.debugParams.animationStage||Math.min(this.animationTimer/this.debugParams.animationTime,1);if(n>=1){if(this.stopRequested){this.isAnimating=!1,this.stopRequested=!1,this.animationTimer=0,this.handMesh.rotation.copy(this.originalRotation),this.handMesh.position.copy(this.originalPosition),this.handMesh.scale.copy(this.originalScale);return}this.animationTimer=0;return}this.handMesh.rotation.copy(this.originalRotation),this.handMesh.position.copy(this.originalPosition),this.handMesh.scale.copy(this.originalScale);let i=n,s=Math.sqrt(i),a=Math.sin(i*this.PI),o=Math.sin(s*this.PI);if(this.type==="hand"){let l=this.debugParams.armSwingXPosScale*o,c=this.debugParams.armSwingYPosScale*Math.sin(s*this.PI*2),u=this.debugParams.armSwingZPosScale*a;this.handMesh.position.x+=l,this.handMesh.position.y+=c+this.debugParams.armHeightScale*i,this.handMesh.position.z+=u,this.handMesh.rotation.y+=Lt.degToRad(this.debugParams.armSwingYRotAmount*o),this.handMesh.rotation.z+=Lt.degToRad(this.debugParams.armSwingZRotAmount*a)}else{let l=this.debugParams.itemSwingXPosScale*o,c=this.debugParams.itemSwingYPosScale*Math.sin(s*this.PI*2),u=this.debugParams.itemSwingZPosScale*a;this.handMesh.position.x+=l,this.handMesh.position.y+=c+this.debugParams.itemHeightScale*i,this.handMesh.position.z+=u,this.handMesh.rotation.y+=Lt.degToRad(this.debugParams.itemPreswingRotY),this.handMesh.rotation.x+=Lt.degToRad(this.debugParams.itemSwingXRotAmount*a),this.handMesh.rotation.y+=Lt.degToRad(this.debugParams.itemSwingYRotAmount*o),this.handMesh.rotation.z+=Lt.degToRad(this.debugParams.itemSwingZRotAmount*a)}}startSwing(){this.stopRequested=!1,!this.isAnimating&&(this.isAnimating=!0,this.animationTimer=0,this.lastTime=performance.now())}stopSwing(){this.isAnimating&&(this.stopRequested=!0)}isCurrentlySwinging(){return this.isAnimating}};function dg(r,e=!1){return r.displayOptions.inWorldRenderingConfig.handRenderer==="legacy"?new ug(r,e):new Vv(r,e)}f();m();h();function D4e(r){let e=typeof r.pitch=="number"&&Number.isFinite(r.pitch)?r.pitch:0,t=typeof r.headYaw=="number"&&Number.isFinite(r.headYaw)?r.headYaw:typeof r.yaw=="number"&&Number.isFinite(r.yaw)?r.yaw:0;return{pitch:e,headYaw:t}}f();m();h();Pt();var O4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAALUlEQVR42mP4//8/IyWYYdSAwW6Ara3tf4oMmD179n9ChhD0AsiQ0Wgc7AYAAOqH+zNQ3r9kAAAAAElFTkSuQmCC";var N4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAOklEQVR42mP4//8/IyWYYdQA3AbY2tr+H1gDZs+e/R9mCD7D8IYBzBAQTXYgEvIKQQPw2T6aEqlkAADEA/W3ycLXvwAAAABJRU5ErkJggg==";var V4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAQklEQVR42mP4//8/IyWYYRgbYGtr+39wGQDiYzMUpwGzZ8+GawDRID4IkxSIMEOwaSQ6FgiFBW0NIOR8osJgBOQFALo37sVTOo/LAAAAAElFTkSuQmCC";var U4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAWElEQVR42mP4//8/IyWYYXAbYGtr+59sA0CaZ8+eTZkBhNg4DQApQlYIcglMDN1VWA0AKYJpQvYONi/hDUSYIfjCgmA0EooJ2hmAK9CINgBXoA2xvEAMBgBGPud3dYZtOQAAAABJRU5ErkJggg==";var F4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAYklEQVR42r1TQQrAMAxyD8tL89iMHgQJoQxHewi0UsWYFFX1/CkcF4iIsgUWOTM9ASV3F3rHF+v9rK4wEVnEFoFYbwmTbRZFFN9m0B9QZBfk2THaAhqktQdTkHYL9iZe+40vs7nda+BuVOMAAAAASUVORK5CYII=";var z4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAcElEQVR42rWTWwpAIQhEbWGu1MUaXRgQcXpyP8SIPI1jibu3l5DfAKrqyFgfAczsKxx5xJUCFGYFUZXMpOe9CAa8BOS+0U5UVbYQ6Siqbi0BFT0auTSRHZqNkE6BGXgEYKYtAczIbQAz8ukzXT3l3egz49IXvXQCVAAAAABJRU5ErkJggg==";var H4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAeElEQVQ4jaWSQQ4AIQgD9WG8tI/tnkgaUgmuBw8YHcqERXK/nOUuI4JPAABMSESwA1qAQgAQwBygnfNjTaCpWoBzUlNZQJ07x9FUdgSlV5FaW4Cjq8isW8BJ2GgPtEuVdr0HKvLXHjiRI0An8jTKqo9dF000cnBzPgKuxXtbq/m1AAAAAElFTkSuQmCC";var q4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhUlEQVR42qWTSRKAMAgE8WF5KY/FygEL2yEp9cAhCz0wJBYRx58wbowxYsZngLvHjITsgNYpJySBrPIBUMqZSHhdSw+oQlgVa01U7VRQ7huTk67aUWZaVyaNZFsSQBCTVBW3KahLyo/lQ6KR1Y+2BTUyGqke1AXoxsSzpYlU3FW0/Exv1ie0hq53Bf15aAAAAABJRU5ErkJggg==";var G4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAmklEQVR42o2SYQ6FMAiDeQfbSXdYXjSpqd869QeZQiilpbr7l2KM0cc75+xUV77YpGCjAPUqitMU3uCAXrsAlPSCcgJMbG4M0mQ1Etz/i0KlXQnmwyqpv1uH4h7fiws7ISneTYNEk0ImCxcAArGJrE4AXhypPtl7AqTdeJG8k3gHb0L6QfmK9WQTa59cSFdHRssKFHHngteV/wPDepaHIu0QVAAAAABJRU5ErkJggg==";var W4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAoUlEQVR42n2Tyw3AIAxD3cGYlGFTUSmV+2o4IEEAf2JQVV1rjDGq576ec5avWVdfWIW12aMPEJBEImoPv+CAvvcCODsVNWBS8wA4A5ndv1/ytciQvBLMyeTSHD3ZYXPXXH7Y0ZMdJvCxQJls5O6tKHlPPWGEfU58WZR6ive1kKSleFNC2kXGRnrcDqhTTOmPeP3pAZnTq6Oin4X0oXbfnNZu626Io6lqGCwAAAAASUVORK5CYII=";var $b=class{constructor(e){this.worldRenderer=e;let t=[O4e,N4e,V4e,U4e,F4e,z4e,H4e,q4e,G4e,W4e];for(let i=0;i<10;i++)bh(t[i]).then(s=>{s.magFilter=ct,s.minFilter=ct,this.breakTextures.push(s)});let n=new pt({transparent:!0,blending:t1,premultipliedAlpha:!0,alphaTest:.5});this.blockBreakMesh=new Ke(new pn(1,1,1),n),this.blockBreakMesh.visible=!1,this.blockBreakMesh.renderOrder=999,this.blockBreakMesh.name="blockBreakMesh",this.worldRenderer.sceneOrigin.addAndTrack(this.blockBreakMesh),this.worldRenderer.onReactivePlayerStateUpdated("gameMode",()=>{this.updateLineMaterial()}),setTimeout(()=>{this.updateLineMaterial(),this.interactionLines&&this.setHighlightCursorBlock(this.interactionLines.blockPos,this.interactionLines.shapePositions,!0)})}_cursorLinesHidden=!1;get cursorLinesHidden(){return this._cursorLinesHidden}set cursorLinesHidden(e){this.interactionLines&&(this.interactionLines.mesh.visible=!e),this._cursorLinesHidden=e}cursorLineMaterial;interactionLines=null;prevColor;blockBreakMesh;breakTextures=[];updateLineMaterial(){let e=this.worldRenderer.playerStateReactive.gameMode==="creative",t=this.worldRenderer.renderer.getPixelRatio();this.cursorLineMaterial&&this.cursorLineMaterial.dispose(),this.cursorLineMaterial=new jd({color:(()=>{switch(this.worldRenderer.worldRendererConfig.highlightBlockColor){case"blue":return 4227327;case"classic":return 0;default:return e?4227327:0}})(),linewidth:Math.max(t*.7,1)*2}),this.prevColor=this.worldRenderer.worldRendererConfig.highlightBlockColor}updateBreakAnimation(e,t,n){if(this.hideBreakAnimation(),t===null||!e||!n)return;let{position:i,width:s,height:a,depth:o}=n,l=new Mt(i.x,i.y,i.z);this.blockBreakMesh.scale.set(s*1.001,a*1.001,o*1.001),l.add(new Mt(e.x,e.y,e.z)),this.blockBreakMesh.position.set(l.x,l.y,l.z),this.blockBreakMesh.visible=!0,this.blockBreakMesh.material.map=this.breakTextures[t]??this.breakTextures.at(-1),this.blockBreakMesh.material.needsUpdate=!0}hideBreakAnimation(){this.blockBreakMesh&&(this.blockBreakMesh.visible=!1)}updateDisplay(){if(this.cursorLineMaterial){let{renderer:e}=this.worldRenderer;this.cursorLineMaterial.resolution.set(e.domElement.width,e.domElement.height),this.cursorLineMaterial.dashOffset=performance.now()/750}}setHighlightCursorBlock(e,t,n=!1){if(e&&this.interactionLines&&e.equals(this.interactionLines.blockPos)&&MKe(t??[],this.interactionLines.shapePositions??[])&&!n||(this.interactionLines!==null&&(this.worldRenderer.sceneOrigin.removeAndUntrack(this.interactionLines.mesh),this.interactionLines=null),e===null))return;let i=new yt;for(let{position:s,width:a,height:o,depth:l}of t??[]){let c=new Mt(s.x,s.y,s.z),u=[1.0001*a,1.0001*o,1.0001*l],d=new pn(...u),p=new Wd().fromEdgesGeometry(new fl(d)),v=new rg(p,this.cursorLineMaterial);v.position.set(c.x,c.y,c.z),v.computeLineDistances(),i.add(v)}this.worldRenderer.sceneOrigin.addAndTrack(i),i.position.set(e.x,e.y,e.z),i.visible=!this.cursorLinesHidden,this.interactionLines={blockPos:e,mesh:i,shapePositions:t}}render(){this.prevColor!==this.worldRenderer.worldRendererConfig.highlightBlockColor&&this.updateLineMaterial(),this.updateDisplay()}},MKe=(r,e)=>{if(r.length!==e.length)return!1;for(let[t,n]of r.entries())if(n!==e[t])return!1;return!0};f();m();h();f();m();h();var IKe=Kr(lv(),1),qP=Kr(ss(),1);f();m();h();var j4e=(r,e,t)=>({...e,"minecraft:date":new Date});f();m();h();var TKe=(r,e)=>{let t=(r.getMonth()+1).toString().padStart(2,"0"),n=r.getDate().toString().padStart(2,"0");return e.replace("MM",t).replace("dd",n)},kKe=(r,e,t,n)=>{switch(e){case"daytime":return n["minecraft:time"];case"random":return Math.random();default:let i=n[r];return typeof i=="number"?i:void 0}},zm=(r,e)=>{switch(r.type){case"minecraft:model":return{model:r.model,...r.tints&&{tints:r.tints}};case"minecraft:empty":return{model:"minecraft:builtin/empty"};case"minecraft:select":{let t=e[r.property],n=t;r.pattern&&(r.property==="minecraft:local_time"||r.property==="minecraft:date")&&t&&(n=TKe(t,r.pattern));let s=r.cases.find(o=>Array.isArray(o.when)?o.when.some(l=>l===n):o.when===n)?.model??r.fallback;if(!s)throw new Error(`No matching case for ${r.property}=${n}`);let a=zm(s,e);return{...a,watchProperties:[...a.watchProperties||[],{property:r.property,type:"select",currentValue:n}]}}case"minecraft:range_dispatch":{let t=kKe(r.property,r.source,r.target,e);if(typeof t!="number")return zm(r.fallback??r.entries[0].model,e);let n=r.scale?t*r.scale:t,s=r.entries.sort((o,l)=>l.threshold-o.threshold).find(o=>n>=o.threshold)?.model??r.fallback,a=zm(s,e);return{...a,watchProperties:[...a.watchProperties||[],{property:r.property,type:"range",currentValue:t,source:r.source,...r.target&&{target:r.target}}]}}case"minecraft:condition":{let t=e[r.property],n=t?r.on_true:r.on_false,i=zm(n,e);return{...i,watchProperties:[...i.watchProperties||[],{property:r.property,type:"condition",currentValue:t}]}}case"minecraft:composite":{for(let t of r.models)try{return zm(t,e)}catch{continue}throw new Error("No resolvable model found in composite")}case"minecraft:special":return{model:"minecraft:special",special:r.model};default:throw new Error(`Unknown model type: ${r.type}`)}},X4e=(r,e)=>{let{version:t,name:n,properties:i}=e;if(i.use_duration_ms!==void 0){let a=Math.floor(i.use_duration_ms/50);i["minecraft:use_duration"]=a}let s=r.get(t,n);if(s)try{return zm(s.model,i)}catch(a){console.warn(`Error resolving model for ${n} in version ${t}:`,a);return}};var RKe=(r,e)=>{let t,n,i=r.name;i.includes(":")||(i=`minecraft:${i}`);let s=e.currentResources?.customItemModelNames[i];if(r.components){let a=new Map;for(let u of r.components)a.set(u.type,u);let o=a.get("custom_name")||a.get("item_name");o&&(t=typeof o.data=="string"?o.data:qP.default.simplify(o.data));let l=a.get("item_model");if(l&&(n=l.data),s){let u=a.get("custom_model_data");if(u?.data){let d;typeof u.data=="number"?d=u.data:typeof u.data=="object"&&"floats"in u.data&&Array.isArray(u.data.floats)&&u.data.floats.length>0&&(d=u.data.floats[0]),d&&s[d]&&(n=s[d])}}let c=a.get("lore");c&&(t??=r.displayName??r.name,t+=`
|
|
29380
|
+
f 71/216/54 68/215/54 67/214/54 72/213/54`;var MP={allay:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAV1BMVEUAAAA4jNkuh9Ypg9FBnNpCm9r///+c/P+A/P9k+/9N8/hM6f9Q2f8+5eo94PdG0P821+4s1ewiz/8syf8ox/8bxPNNq+wQwf8os+hCnNpCm9oep9s0h8D7j8AOAAAABnRSTlMAoKCg3PODq/XXAAAA60lEQVR42tWP0W7DIAxFb9OtwdA6xQ3rzZL//84BD0nRljzsZdqxZCx8hLio3Lz4GwtYMWLDi4jnPM+vwogNKTTC43Elr6vgRMQ1wvM5ktsbvRPXN38wGxKHMmnI9M65vgxavwsg2WCpCvlSg6iqlCF4ceKbFEGZVC+5NFFXYUtxZzILl1xmiffoxUcA5DUHKULZp6iqsQzU6KNWYcxBUMnp8A2mwWxAhTPR0qRYFs6sDT+zTMZpWj5pO8L0wamexJ9xXvm10J27rrQ94dSdOqC0PSFXPV4JRuwRzIxGHMB38O14j4N9Wf4/vgDzpRGDwkNeQQAAAABJRU5ErkJggg==",axolotl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAP1BMVEUAAACvsv+zsPmmqv+nn/+GkPXWhCt+iOyBb+d1b/9odutodOyTWuRbb+NlZfS0W0xsV+JpVuNNWc82QZ86AGw+Ir4cAAAAAXRSTlMAQObYZgAAAUdJREFUeNrtk9FugzAMRXG4twFS1jbl/791cbJUQnuAmE2VKk5cKpDukeNA9zeAhP4mwDlgahdAEoDm1dAukIzmlXaB/HBcUGbQJCBkBejgkMrt3j5WeYGD0iAglkXkehVZFlBQ2b0FkKjtE2CjIIYEUfIhESdMCUyWoyBFZPZI+Nks8OUs/f7kXSsLgCxwiRbBl9YRgddazcC5lhnc/T1VFdQObDMIwdJBRQQhYNWBTTCXYzR0AMZIyOy9c373FuQFGXLJLzYFEJQvQSHKgwKwJQAF1BWqIBC6hNlKbAg0GPXyjDHkeqoj6iVAn4DdP/NQhuHxsAr6HroAswB52QUcySTgeGQGg3J8lPY55h7Q9705XQdpEgwaHXVhtHZQX6Whew+X+mfldsn5W3fEYM9fVjfm/pXShd1g38UrdvuIGZycnJy8kW/CDQ5IMRlUUgAAAABJRU5ErkJggg==",blaze:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAJ1BMVEUAAAD//////4T/+Ef/1Sj8shf8lgDReACrdQGLNAFsMQBfAgExDgs044iSAAAAAXRSTlMAQObYZgAAAPdJREFUeNrdzzFuAjEQheH3vNR4xtCkibyQA4CSCyAlfZocIjdKm4sFxAHwGKVmQo21Ts9X//IbE1evBfpBjG9ozXDlJZkKTkAr4IpShNVkMjiJ7wuUkwEJhcAmAzFGNcTJoFisJZph6heJiG7xDLT4XKRC4KiubvSf24kY6hiLnVPMVfE+NhPbo2Y3YVBfPA2/Q3PkchGGx++H4yZvd3GdNrjBr32FeDzPUdN88Mvn7QRHHiSX9SkMwnxYNTdkq7sDlMsLkZHRBEwBGaBpKnQ6GqsVegLIfrDOfOkGI0W7gQTN6JhJQlcYCOm+oJyjHyD+F7jg7v0B5TtIgi1mkx4AAAAASUVORK5CYII=",boat:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABABAMAAAAg+GJMAAAAG1BMVEX///8AAADCbT+6YzetXTKgVjCZUCuPTCqIRyg96zNeAAAAAnRSTlMAAHaTzTgAAAPOSURBVHja7VTLbus2EBX6XOcPimGzL3jG7rbIzChdFjap3GUB65Fl0ZtY/oFr67NLqoljFVDkRXFXOZZnQI/nmOYcnqL4se/7U59xyGGy+qtI+OanHDdWvOLmEkXxnWp1DKZqj43mVB2jakiroH+8EfhZgu8t2BdVC/opWCbKq6hppfbbG8F2juApxqp9RRPDp+G0f112hyF9/9tfxr+wmiF4NvZE6VmNMdyfWoAB3oHRHs4ENrsDgzYChcYc4/3eHhq1YFWOXfr+D3/mrjueIdhHgVgVhMcYu2c1a/dRY473ZwKPGYLh6Df0MzndjvFxeFoDW1glOT4Q2n6/81TcydwOyqHvhqHfH3I6NN3jcBoSDmM6Oq2GUxAqUM5OQTjEIGBhtm28b7Sq2pgnGWJbslWJ/cnP6+C5jGKKlUXvaePrh7axJmjT1ow1r7ns0kZOvpAwt4PSOyFHxBpFtL6vYQIBx6oxq1zZJ4IvVGy2s2NkgEO0ynYcY7yvg2pVNe1zp0lh+RD7/u9EMDvGath3w6k7jOkxH2I/5AMc0/HcJavZMToLEI0rckSrx+GztcGsqncQcHfuWtmskG69c3TriDlaFbvPNUSwEw5V0/bnLtLZMSqiCrOM2wgP+1A2eYSat/G2A8YcgVngChaj5G3kyxSqJ2vbRrBrD+cux7O3cXKd4+/T69z4HZFLj3u5tGvXTwmKuEXGCv0rLn9COELBlfqXSxvlvwS0oYxbGl5xSbDsieS33hP8ypG/cyBP7C/qy54I2TFUsE5xJyrKpVzUlz0RWgsEWiprrQLWUi/qy57Y79Ohp6frcsro2ov6sidSAI8GagJhAURxUV/2RG1ijM/pXcUzLurLnlhgOyeDjGVPzDqYymBSd/owHM+eOKMDAmHlHYknELtJnfvDcIz6jici7FjApQlqQGUtk/qv2RFbfccTEWqooDRkGUxUkHGbCfYyeuK8DrqzDCYqyKC+Hw9x3hMpMNYKmIIFIuBJfdkTsw4eJjKY1Jc9sQBGJbykfoJUX/TEgjw2BHKgjSM/TJDqi55I3rmNzwyUkvPkSQj5gzvv6GbZEzH6ADgK1xCDCtISlhJUbpY9EVFWdVSwxUY4WgDXMQgHrsHxCk9sX+ygzcjpctneLCL7gVhAaRaE2QRQBpeM8TXfOPWDf6VwVsN5GRe6l3VwDYHztElvuJQchgmuIaCEDdFForu3dAUBtpIHBnAevKmkzAJAa6heRTB2ytgBE6juFGBBLSwzXf+zDsaBrwUQiAnALChFwIB+DR28X/4g+CD4ILgW/wAFIWww3uybGQAAAABJRU5ErkJggg==",camel:"data:image/png;base64,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",cat:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAATlBMVEXv9O3r8Oj72bPW1sz71Wf2ymD1yF7ywFnxv1jvt1Pqq0uvdh57bWJjSy9KMBc6Kh0RDxgAAADq6urOzs6vr7C+c3NanRJWU18kJDEcGCdfq47cAAAAEnRSTlMAAAAAAAAAAAAAAAAAAAAAAACVcz0/AAABUUlEQVR42t3T3VrCMAyA4Yi1SmtlSxSS+79Rkz6R0dEywTO/0rPyPst+IFhiMSJyAW+amJBFA08EEWBeBQtQ/1BKuRuY5yAusACo4ABSBUpFxbsCPkJKDgiLgAktANYYOFhyDlxQgFCFbUA6VaGg9lsAj3LExmBCi1i8MdDNBWJ5GBDmFmBhFuE7ANQWgInVY+q8B8wh58w8gy2rBxASIRJ2gVwBOOf3oAFQ6wL1kP0QeQU0AhRdIb5eAe+15V1vAWqB/X4E2PgrADtA3O/XgJ3WTSDeCJi8zcc4eAo+QroBsC7hC4AMOAspxGQNAUZdTDwAtkdAQrTdALQAMYX4FkIYA1VwoNZ+CynqCLeuIOSkAYyAqRZjFyDNAe8FytIOLuoCNv3hkLPtkP3k8xNc1RthZ6YiPwAMmmoAHUC028DGCKevkwg8DnxafwDmO/uHwDebkIAap1EwrQAAAABJRU5ErkJggg==",chicken:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAALVBMVEUAAAD////i4uL85XDT09PhzGLGxsbgu2nTrlrQqT/Bk0OWcjRjVkH/AAAAAADtfCsnAAAAAXRSTlMAQObYZgAAAO9JREFUeNrtzMFJxFAQxvFZrGAewaMwwxQg2IA7fMzZElQecxZswHZc7CAd2MM72IlJVoXEbATP+7998OMj2kmHW6LXQ9/T0AUt25UuB/D+dgQ317+AXLZ7OgxN4vmJ5vGxforGXhbgSj9ElFqjrxYXomN+GriqmqG1H3E3B7DmQN0A0Wpk0laqKlw2gKv9AdycbRNE1dgA1SOy0hTWQCIrgqaUlnGBqkLY4aeAq0FYfT/OFRBQVGERWQddAKh7ZuFVUCwqorow8166jgVzoBaZWV2FRZS5iM2BYwKwBzEfjJSYg/zOIx7hDk86948+AcUmS5dD8ZFCAAAAAElFTkSuQmCC",cod:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAJFBMVEX///8AAADr2sPWxa3KtJXCqIW2lmusiVmScVqEZVEiHyYAAAB2QJV6AAAAAnRSTlMAAHaTzTgAAACbSURBVHja7coxCsJAEIXh5w18RSRiZQT7sAS8Rgyz2kbYIN5CiDBbx8CewHM6QS3sLf1hivl4yMc626+ZCgKQzENVF6eSsaCVkRCRfCiZhFYwcM4t+13SqFdOwS6/Vw+5HA3qFyz7beOqriX9ezFsKmlcySn4lFKMMQiJGYWwR9VQyTnGmggh3M7eeyGBQ0u4TwZkR/C7P/weVk/OOkCzBdD8ogAAAABJRU5ErkJggg==",creeper:"data:image/png;base64,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",dolphin:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAP1BMVEX///+wwc2In7V8gp1ZV3NXVHBIRWP////D0uO/0Nu9y92wxNmwwc2lutCmuc2dssmSo7qKmrGAhqJrcY4ICR+8V/49AAAAB3RSTlMAAAAAAAAAVWTqWAAAAc1JREFUeNrt1GGPokAMxvFRz9sd2+kz5fb7f9ZrmYECnuDmkn3FL0oaSf8RJaT7iB6Pz8/Hg3J3u91+mzRCITtVIJwNS3JcUzMHSlkErtfr3fQAPQxB8uhVYPAA5xHf3fQNSguU6eSLwJ9hHXBpROTXR5S7F4GcLTBd5ioQP9BuwJF4gWU/wAt2tumBpnQRINoEhGUORIHeDggE0gJlWgLKPHUvLkEEqLUCIhZAVQXsaCoAP2q38yMG1Y8vdcOg7utD9VsBFgNf9zfEcO7eCuTMvdG3bb0X+K3AL3sDzGmlFNpVZskB22xxR9sRENkGUAqA4rDWPoqPk+OngIaKWdVnaVAVo2pDBKotGl+KQhurUa1zQAQjMRHICywCE3/vSrq2h0+/8KnDvC5s95m5D6ntR4BZLpfL+BgRv7WEKKY0Y03d3UWALZ5GlLMAkjPFdBQgskCOQKbl4ThQiEoEQHlEiGkRwItA3OsKalsa07cCg+/51hBTBGQvIIJxTWHUJ0Bk/V8AEXsKpD3M8Ux1ywCI8F5AwJD/CAhUtBUkFYeNMvlXQABVf3kCHgBq1YVagQgcid2N6tIxEWGXZ+ykScdie4En6XQ6nU6n00/7C3s4RNq7Xn9vAAAAAElFTkSuQmCC",ender_dragon:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAMAAABrrFhUAAAAdVBMVEUAAADgefqKioqFhYV9fX17e3t2dnZ0dHRwcHBpaWliYmJdXV3MAPpXV1dNTU1LS0tHR0eWALwjIyMiIiIhISEgICAcHBwbGxsaGhoYGBgXFxcWFhYREREQEBAPDw8ODg4NDQ0MDAwLCwsKCgoJCQkICAgDAwM0IucAAAAAAXRSTlMAQObYZgAAEQRJREFUeNrtXYt22ygTdm13JSVxnKa/XQsS+1/U7fs/4goj9AkNFyFF9lqHOWcOFwFWycx8DAzqStHb2/5N5Rjn3Mfh9uH+GAc0rG+YRvZ92+/3zQCMH49HyadjnWfgaz2zt1dt6j4MZcknlT82KVP9rykI46g+jKlx9JhH/WzQBOBdkdYcmoDX11eVK0v5spp52S+72/v6oV71USmIjiPbkL4+ouOU5fC++7e3RqQ5/3U6nTQz3i+T9u0zVz/an3OZmkTac0b7DiDefYfhfZ+f3/bNAJhzLXxG2dPe7Mdc9eAViI7DWL8/GzQB5B0G9f3+/e0VAxiC2Ct72qMt6ddpU5aSf/9Tp9YXhxKRvkMnAL+FvFf493me/yXTmk3B47xftrRHW+7oB3aKIhX4vnINRQH8FvKevvvn3fPzfves0rc96wsi65Y5c7fnui0sP2Xmtt4hJRqKAuTd/X1fX9+enl53T69Pu9c6/xpCAdKetoUAU4YozoUCx0gUkIK8e3veve32V6EOoQBpT9oSAQ5bcqAAVSgw6RsYh3PaN0yc+VFgqNV1oYP/d8F8LAqopRQQB78bohgUAPHSKrTIe/rTcaajgEIZyquhRFAgYMUNy08t8GBLjvZQqDCCjPRHfMT8gmhZw6OtzQIPteSkPeMsqq8UeL3+N/0T7WMcdbvAWroVvkZ4ugLuWMNTxHD5AmEUgBKRvnGW/0RQaRCahASItrcKrdMX8K7hz5+y3fmslAh5WR/qSy1/D5WQJ1ZzGjtQgEWigHz++SnbfZ6hRDIv67197ejDnPm+1WyEBRZTCxKHEnTL2sqr8iAUQL13Aj4+ZJuPMwRY5mV9AEF8/git91hfziPKsPbUgY32BajAc24ohacv8UGQD/sFjBGr7y8zj68AjvcFjn2B56yvFGEE4SyQp+OUPUsbLJe+8iRfAAIPhYJSDEOQkuYpQlELCuZmmYXLHGV3u/Ca3BB4KNsgFHCgD3chFDU+YBbaEXK297YLr+cNgdfLGCgF42wYCtjzzMj7JqAcXSY+RBwKGAIPxPk4y/TjQ+aHoIADlcoACritN6fP3eVwvW+JRVFgOFutvQuhIlCAWnn6PJSnKKLGNPf9+8se9RwCDAe3aav3/Hvv7LT8zIVEAatOygQVSF/aDsx99UABn3JBsPFbkXnfTgyPKMPaU0sbjQ4WX4AHlAt9I/O+nRgWUYa1j/AFOEMf3jkEO/z8+fPw+fmzTj/PMv9TtjMPyGQf9Ee9f/1PEcG3E1OS8jH0fJgvgDZ2Pry/vx8+Pt7r9OMs8+94FmSMH3wfigJEwMaiAicWeIgv8CUnwp73CfsC/jV8EBWmngswhrbmya4qrwaQC4kGnRGUx5CVD6BCOe1cwIoy4NizAIJEwR0hzkO+QBgVgALxvgDHb3KO8azto30BO1qFUCBq7U9QINYX4F1rzsjvk/ZhXyCICBEoAKvqKyNfxvsC2FWSqf8cItoXsL93wBfg5FzAW55yOgwU0P1Jv0koQPNhX4BY+cCOUSQKcCsKYIlDfn8CCnDkZ/cFqNUdfC5Q6rYqlTwWBfA+9N2G7gixoC/gbR+upyig26oU449BgbBvQscM7viwAAqwqBghigIYkyEfiwK+9T9Fq8Bp8CTfgCJCwKqT8caiAP1dZz7mNDiqDOaDT4cZ6TcuLkhxB0lUvlUAKJr/XGC8L0DahX2BMApFRIdGMEEB/9o/phyut59GXwUUB3NN3oYa1v6aL79fvtX08vuCfmELGtr3D5V9J7OE+dTTaEv/E9fvggmIiAnCDg22HM2yFmpSPsWcDmPMSez1Ay6/f9Qz8PLj9wXt4mJq4tlhgX2Rosdmza9OpOXuT9O33g1SYzZl/RtqPFX2IsDl95+Xmv5ABeYnxuN8AXraXPNB5g8HxsOn097fryfgz48ff/5ABeanoC8QRBFZdzgef177hHwRf4ySnABJUIH5KTJSFKEYunz89vKtrCfgndeZkxGfZEMd724QJuB2KhARKQp0gDLU7b69vHxjdVmmsmwokM83wO8DBRTdUgVid4QCvkew7PMDMAE3VIHoc4H6Gay7HVXa/KBIVTjTnQkorZeCZqDoSFEWPC0m7QMogDU+IypALgVNp6mRojTmqM9xkarGCbNHBfb7t/08KFCOOh3WbenSCu08t9ZAxpbqpaXSci9iBhXwRIp6bpOZVp6zv1++XenlbziwQAke9iVaZcIEoJ1xNXQGIrsuodghRnyD/7cTwGzPwyjQKgEmgFmvhs5BFmsfE95wFdx2AkrynJQH+jI3RYH4GCFttS0ogOcnLtsj5UphRvLMKECtvbt+KlPnupeXKcrN786IAlxbc2LZ4QCjfvLveeKDfM9mQ4FYYfwK1OEaLbhCCSgVFFKVgSi7nQMFIFzL5vwvoIBzLQ22L2/6yxXkewrQllEPNhQETBSIXN6x+wLYByQoIC1/w9/z799l2jKx4kGO3P8fOW58jBEmQCpCixby2X632z0rllc9ZaoYiIAdnTDHWfsZxrX7AtgINU+A9b1oxfv6wr9MFQMRYFXjOLzzM8O4dl8AG6GGsrb3op92kl+fnpA3EIFHCGZ05Od4Hnz3mGMj1NiR0uv/mq9Cv9upVNZJJhsakRze+WFjxou/e8yxD0iiQeX6/8r6wr/MNzx5AsL7/5PGDZ8u0wnovkvkXeHx7LLWI1Eg/u5xdxeIRZwqT0WB8K0xNse4nHkmgESDRuzoRHH86XA8D480xQQQFIg/HY7nQIxQNMdHmmICjLV/5I5OPIdjhOZBF88E4Ddxihymuaz1SHSJjzS9tIQ+ZXkrFOCc+erH8/BIU0wA+vDZUSAcEToZXRz1ngnAVyJiUOD+vsD0GCPKYRS4my8wHV3GsedwcwYUwFp+RnRB3FIvL1OUm34zTABQ4Ia+AE6PZblU7ciuFNqGUYHx/6gv4KgfqwSeff15doQmjutEgTn29WGxSaiCbzuzbdf202M0ZYwJwcT4qMNYxju0bQ3hn2Vf/5F4tRQq8jy/Jbtf5F4TkGVZsV5nRbZeb400U7yuy0hlXf1cporrtiiD67p2PFlux1y5KF/dh/Jiu91sY7koxvZzv8j5cp8J2Gw3m2gucvSLYvffObvTBChhjeZsbD+3Ll7uMwNFAQGN4KLYjuvnfhFxPt8PBa4CmteMNM9VCguuhF/mNyhL1v2R5i33FCf3TsDlTihwIw6gQHW5qRLkRVHckakqbPLL+ZYykOcFEVZVhjDX9aYAq7LuhzpDYVR7jKvHqp/pvpuCqsI6u07AzeyAWsJgKRPF6De2P1WFbSEuUgluJQOFtuajUCAvSP+paLDNxVnJwG2EQAuzSuMY/fLR/ekEZGoCbmUJCr1WHyHA8Bmy0f2pESwqqQAt3wAF1JoeKeWu0KKueV6nqp9uo/2DXh2UBfVWFKjU3x88Nwrk92MrCmACuiyyOR1lup8/th1o3CfVgQImVxCWeYhzXGr3neaq57gY4z3kwyV6FUXqaU1RwGRR5Le4bIVQ57HtQKwTJh0Ik6AoQBVgK2aERZxKt1ue4XYq9YZ6tFu07jAJLwqAi21ezWsMGfb/h/y/A1y3DyoV2loVxo8CUIBNLmaeAOz/D/lqNGNBoeb4PwY8n2DxokCrDFmRiZn9A4Ro+4XVvEXmRQFczm8mIBYFKq0AVaEUYzUjDd3v56fP0+nMuEoDKMBlO8QnxaKAAALM5yTHfyHi83j6lNZdpj4UkG0YMz7CG4kCmIB1pvJzWf/eF+RUeiy59W7wx/H0IZ+pNLy0AkeiQNVRgKK65me2/jTlnLY/n36dT1ynY/+HmQEo0KY56mb74gSzp5zR9ufj8fPEdEqe98Mh8OFeogwBFKhaBUDdbF+c6N8Ndlr5o/yHf5yOOqWC3wusM1AAS6IwClTnJs23SgHmUQJ8PxQRpShTK3+6Wn/5TKVkPBKSwTinF2+4BwVyZQTFWaVy61DnZxABXHbvpviiHJkAZf2POiXjkfBqxjgNtmMeFMhEdwKqrFaAJi95FhSAcJKUTICy/keVuifACPMgwXoe9NAWX7QK0HOQ57hrDOG0pNzgX8r6OwPkIPhUGRBs50WBQnSWwUIqgMzPJQP4fqghpCgz8zulR2X9G8FGvSqbH/6iyqDrvCjQnYAq0+UOz+cDQEibMvmwbvn+fn5//zi805giy9VNxCupZ1AwDwps8wp+gCi2hWjy4Bm+OGFYf5SpgB8On4fD+X+H2WKLtptcSPTXCmDdIfpSFIDAQrBRXt2atutMQAGyNSxAl79wAmCpCRrAgb0hba7LnkohQNEoxIXwl/oCuE9A0eD2E4BlDxTAwnPtBDFmpqtb03otJ4AoAOUZfAFYf6SrGxJQwKUAMxyaEetPfIFbEVBAI0C+zYXKO/gLUQDWH+X7oYBWAHJGMIMlcPkAGh3uggJOBai+XhFg9a07QvdCgSrPN9oxBtvl4ct8AaAByndCAYUAPQWoxHkGRMA9gM7llxLpXVDAqgAV8hae6X7CfVBAK0AXAUSFvJUXcFcAKFBk6x4CIO/iL70rsJYp4v91GQFx9rsCTRtLH5nirkAIBVRMTgHhh0Ps5i++K1D062Q8EOoQF4Tn6Icx0Eazjg51nhGokGMshwSEf7YVwT3ignBoxlkPBZQCZLAAs04ABPm2XGK5VfZRYFszwiQG8mj9b4QbAq7TDRXg4vq8fdYKOSJF0V6PSxRL/fu4Wm5Rf2Obb4AA4NmMoD/mX+fRRrMZAm0wqeu1y+VvKuFXitBDASBADE9BgHswCZ6bSMXqYWiWJdclXz0AwQHXwo/8NMf7XGWrhyGOHaiym5/y97+IB1IB1u44cY78pO3Xy1k8hgpgG7YRfuQnbL+qSNLVw1DZuXyP/PjtVxVH9Ego0J4/MI78r5EqoDdLHh4Fjmyk8Csu1quHoc7/VgNFsKFAXvgPwbq+QL5dPQx1LT/jyNvcdGHf+dN14HyzegwCCjQHcMjTlhkOxgIssgdSgXYJBEVwBM5Vg53iqnggFYAjjAs69kM4kefYCveyKB5DBXAY16IA8rSlvCk2cAIeDQUQko38ilJVbYYpQfVQKMAh/MhbD+EuQ5VAPBQKsDYWyVgOWScASrAsFEDgnPejXLgsQ4X+cVEAjjAzlkP2pa5UAuvf/IFRABGprJt3TEC2tiqBiECBx90R6t4Y84ZKVA/qC4R2hJSji8C5LlcPjgLUKXZMwEXYY4Wqx0OB+A/v6ltjuDQDFgQFFkjN39oaMSoeDgUm7PhcQxKEdwLWqyVS5+6wvjgDrggKLI4MK69DJlBHUGBxZH5CZZ1lFVUCoMACqbfU2RZm4Fy1eBQw/975dtPzC8TSUYDs+vRukImFo0DfAaaxQ9WyUYB8Skd9+lB0jd+iUcCy9ZnJIDohMAGLRgG6CySaL74JKMGCUcD2PSlRIIiuKwP5ElHAuv9fNZ8nr4SxHMq2C1QB6xmAqAoVrVlV3fpiszwVcG2BV81HaSvRrdssRgXCEyD0h3AF6rL18lTAfRBWVSqcGbtEoi6vFkbecyDRfM1ZwE9YhAqEJwBwqC6piKa8PBSA1ZepfUmEXaJqcShgGD0hnEuiTS6qhaEAJiAwCXpJVIgFooB9CVSZdZW+pFJVS0MBt/UX5pKouZAiFoYCDutP7w8LfNt/USjgjweqKlGRJdECUMCvANQoYkmk0GABKhAxAdRBXgIKhBXA6yCvFkDYCYxhoRzkVaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQo0X+M/gVoPrkgKWtroAAAAABJRU5ErkJggg==",enderman:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAABGdBTUEAALGPC/xhBQAAAY5JREFUaN7lWNESgzAI8yv8/z/tXjZPHSShYitb73rXedo1AQJ0WchY17WhudQZ7TS18Qb5AXtY/yUBO8tXIaCRqRNwXlcgwDJgmAALfBUP8AjYEdHnAZUIAGdvPy+CnobJIVw9DVIPEABawuEyyvYx1sMIMP8fAbUO7ukBImZmCCEP2AhglnRip8vio7MIxYEsaVkdeYNjYfbN/BBA1twP9AxpB0qlMwj48gBP5Ji1rXc8nfBImk6A5+KqShNwdTwgKy0xYRzdS4yoY651W8EDRwGVJEDVITGtjiEAaEBq3o4SwGqRVAKsdVYIsAzDCACV6VwCFMBCpqLvgudzQ6CnjL5afmeX4pdE0LIQuYCBzZbQfT4rC6COUQGn9B3MQ28pSIxDSDdNrKdQSZJ7lDurMeZm6iEjKVENh8cQgBowBFK5gEHhsO3xFA/oKXp6vg8RoHaD2QRkiaDnAYcZAcB+E6GTRVAhQCVJyVImKOUiBLW3KL4jzU2POHp64RIQ/ADO6D6Ry1gl9tlN1Xm+AK8s2jHadDijAAAAAElFTkSuQmCC",endermite:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAADR0lEQVRo3u2Y61ITQRCF5wGsEhESCrkloiEhITctQG4xiQQRuRuIKPrH93+Etr8OHQOloPyQbJKu6prNzu5mz+nuMz0bwpWtL+7LVqkl69lzWU5tS3IiJ9NjL+TZ0+cyF89I6LJ66di8+qoZ5mLpkIhnuqfD6KO4+e/stvse1OqFc9EXk1rpSCAD4G1Pysx46hoBq4Vv5mvZZpifzBuYvyXgtvseDHi9qF44k7N4yXwzeyicf1dsaTY0ZDW9K5WlExvVw1buOOg1YS2zF/TeUM03yaDwdun0Gvju47vuezDTP5dq/pMBfZP+YOPyy4bsvv5u55mnJJhTANKzQO5rRBaQ5fmqFBKbUkxWZGXhvUW/VmgaaH5TFmTGXFfd3kzz21K/501T3qKoGWCCSCbUVBNUtKwcOKeiJRNPZiU+MmOORiS6BDKSBADcvHjeIcEBVwqnspE9MgIgBLCTowkjITYyLVNj8zIbW2D+j7Xf80bd4lrvDv6fMyCSte/WKH0xEfMRcXPA1Hwlf3JnBiCKCOLG4kHnOZExIs8L+0gpAN6WR40+vQHgOefNEeBjj6esR/AMWEvvGQn+nChlgC53TfGRqOOoP/2BAlMCdkTB6crwWbZLF7Y6+HWsIlzLvGZA5zlRygB7YR8BbYAU+Eb2wIBxjHMe8FzD0klvwDzHdo0e+3MiQwAR5YV99PpfvVr7iaodZz7K/soP6w+cAL8G4LaXUIL8OZEigKj62O78diy9yQCAA5RmiPTmOgjgHPNEnBaZ+5wAnhMlAtidtZc7dYRONynmCjIoAUEjHzTyJpAInp3XJRPRY2QViKwRsc3cUafOKQGEDWdOI29LG0RBAOA18qb27AsgJNIEmKJfEcCIOwnUsjY7oa+NKLt6m+Jn2moPAZBDc0Oa9zMBmtotaZS/At7qmpRWAsgOAx+pxuY+GWDKXbwwEm7u7yHCxY7a7zv7BbxljupbVuimiBECEDxteoyIvrOd8qUBZROk67+pPEABTjZo+9sBjx70tfnX3tRUOSQnsmHgbCV/aV9t+Vw9M54aPAL4Xk8GaDfYG5+s/1MjZILHqE2Q7ev53Ra/Zuj7PgDxAyhC6B80BqoPGNrQhja0Qbaf/P4PM3XaxMkAAAAASUVORK5CYII=",fox:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAgBAMAAACm+uYvAAAAJ1BMVEWAgIAAAAD59PTn2dPVtp/nj0G0j4PifCHMaSCwUSKOPyRWPzQGBA4kh8LGAAAAAnRSTlMAAHaTzTgAAAGUSURBVHjahdAxb9NAFAfw8wRIDLkFEsSCG4kMHVAzwAiV5W9gXUdA1omugPWOEdpwzxthaP2qLhnrD9ClHaKuvQ/Vv2OnrZuhf1myrJ/+vvdO6YcZ8p/4jdZqoKLB87AchKCQqA9X2+F1HJa3sNuCUv/3ZfRV/q3hMP4E0A8DSABN46knV1prUYm4FJGK/d4KyJgyTfP74FZQZOZvkiSfG2AA86xYwyHg4x0U9AgUtAlDZiYibvN7Mknyb5PJeKxGVQelIPM4RjVG1Ahl7CF41XU9j8e3IG77bfb9yssJYKHXAWCf5kctoIwnArySra3pdLqzI3UD7RwK0f0cTD/cAS7rwL5TK0D5HjzJfmK7TYhedoBPDCsiHfgf4b0LQWvnOE9S9n5WuAaSXazVgO/AFRn1piIuARUTGQNQEtTg2ekyAghAmAz1wXXgjSGAVFwPWU4WOPyXTeyx95R1cAaQhSZyNrWeiIoWShkB5gDObcpEM9qEfAXG9MC50ua2whlmD3ARzu2Ly+vzL5pZjuy+MPvC3QC9wfXEFSoo+QAAAABJRU5ErkJggg==",frog:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAQlBMVEUAAAD9trb/ioq+rWqxnl+mkE9/oFjlXl5zlktjkC6NdEVWgCLMPj5NgDBGaypJax46Whk3VBkxRhRGKiktJi0uHRCwcSzMAAAAAXRSTlMAQObYZgAAAadJREFUeNrFleFShDAMhBEoZ1x1Qz3f/1VtQm9qgVoZf7h0pqWXr2k2M8eQJMBwSSJSvStpow0sUmdgCHMIbEQTIgCo5CMkzNM0zaEBgPf7x0SNUfUBhHmeQwOoiq4zTPOUhk32BF+VomvAlDAPT1jY+LRxXrQlqA638G3lHkKQxFL0i501vxzus2WIyunjfidUYwb8uClU98mr7CyRFGwrh4ecUwABj61Iwlt15zcwSeHjAGgS379fILxTk+I2mt0gCRmyXpNs5qeJZ4BQKQW43ToABITgEgAU4DaOt58Bwp/fAxChlAzj0zj2gOcKGK8Brh6wyBmw6bv9SCMpAybfy408ZPB4UlUpAp/pBAEbBTiqZO7V4Nm1NESU/BFYdsDSBaQCpAvIDpAWUOwnSBDwSSTt2foUICT7SqVPjx3qaeOUsHBTjOoiAdrr0BCEGK5Ilg7wtwwgrEj3ZKXscnM9AFRCBO5JZE0IGc/+xbIpCV53v8eVjQ9K3qdgV1zro8hrtuIKkC3Cr53dPFIqcxG9EjaPTIPb1DGpVmlEaUNHa924dfgHfQFwmyc0LyT5NwAAAABJRU5ErkJggg==",ghast:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAIVBMVEUAAAD////5+fnw8PDl5OTk4uLd2trYzMydmZlzc3NLSkr5ldknAAAAAXRSTlMAQObYZgAAAYdJREFUeNp9ksGN2zAQRdmDO5iBfN95JlWAgeRuAkLOZuRNzgrcQYLdBoJVOoirjCmRYDYy8i//wIc/n+Q4J7gs6YgdJxFRBBNXVQENRE8yZZG187sKkEIGLi/z/HL5D/Blvt3mH+8Ay044ZgBeb3e90QDVCkz94QFgpbGugOmvDPy2vxNYgMPnDFCAloCoLgDXqf9wfJBgKwAfU/+M8S9AGQH9MXzDSskGYJQRgcMEurkmDSCxfSiABtCeegsssuJbQETFTKS6q6r/v/FOl/1wXSrRtQOESDh1F6aeZG12mKBvC6N9Bq6nBtA8xApM5vCJRxpXAAdgEfg6f/80/wS8wggrMCwjbCl33T09Zw+6dqolB5/Yw45p9xRAORMiaB2hQLTRlLSWHNTXBHICwD6Jv0Qg3E3CGTDWLffOJ7B9NFkTRP1ZYbTRkyCaUxiS6TCyaBhNwwgoOQGcMsp+RBRe38CE4axrhxhKAlYqALmEEqIpRA9D+SwTikQpt1n93R5IcTOKi/wBKsTOnkkgxrkAAAAASUVORK5CYII=",goat:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABABAMAAABYR2ztAAAAMFBMVEUAAAD////6+vrw7+zq597b1cLArJCenp6ciHaDg4OFcmF0c3NXV1dNTU1APj40MzImjJ+xAAAAAXRSTlMAQObYZgAAA5JJREFUeNqNk71u7EQUx0eb9YqKZ4jOeFPchjAze4s0rObDQrcy9ngU3QKixDNaueAFaChIFFHQR4IGci2078ADoER5g0g8ANqKHs7YeONsyIqf5HP88fP5j3dt8r+ZAAOokPxVQaDgvc/J9Q8bgsQ24oCnlFehfVWYUMrAuT0CMAZVE8JpCFer8O1HfRtFCKVUFdbeVRVuZ7O+jSfQOGEdqkrHKwm2XQHAhRYFaYzOk76Nn0Kg0GCEBW2O8lnfxk8hMCK0rjJSSrNM+razBtc0vtAppOnhpG9PQlJFmjbYAiTY5bRvO4IL+BS1qWqXJ33bFVzjv7z//f5h88fHfXsREXxOxuwKIbhd4YDSyiDaDpQUAXb4TNAaBdxiQQGQ4+H5U7CZ1kbXeL0rRQqAznZCFDDC1tZWOpbzFCPE0wQKtdHZ5/H277pSUEjnczYIBxSsMVGwUbBRoGNhmrLaZeZdVdf2g4mlECk9eiuXg7Dg/tQZ8+Gytu+rWC4WgtIL9SRIu3KZD5d1cFkshRGpkmqISLLitlmFq6v2arXKYvk5M9qWehBmzrbfN6v21za2WG5xSbW3+fN3nkrgez9Myrgkw9DQ/c3h681WONCCA+wRJlQoyvcJAJwPE3zmry79zIbTlcuHCEbVdpE2tb62iTSZM8ttBJdCkZ4UZG3lRKZHRh+OItgQYebSGj0t7Fzb5RAhmIRBcM464xPvTf20BsqVGtbw5/2P95vN8NoPEamiQP4TCsAAIMUe97oXmo/d7rQCzijITq2QYiSkwAAFilWim9LT6+vrchwRBd7BUKAvBQZM/itIBhyi8CyCoUGV4lwA7okXE1IZ71NKCRFn6fnuBCrRUFpbISSTUnUTKoA363Uv8KKUkluFApOqKBcVMhbUpCykKpVdCCnL4sAQJKF8K9hJXZbleSEW87K059OcRIQ+GYR8mkxre14sjua2TqakF7R+txVwYELK6fz4GDseJwhRNApbEjIlx8tlMhwlREIU9sDYyX4B2Jsd4eGGjPnk79eF7v1N/+oaQnpuvrm5ITPnvD9be8Uov+DATXMLKem5++nujiSZ83W+/oqDMJVm9LP3t1yMJySLrC5z/wUHjjD6aeX5gvQ8/vb4SMjbk18u4mdhBLLQzjmddZ9dTvBTuCekyZOWtHi+MsY4pLWOEGqEJJuHzYaQszyZkbZFpaNt16EhhLuFIhuEoDF78ZP9A0Obf2KBegjhAAAAAElFTkSuQmCC",guardian:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAhFBMVEX///+rjEZQjnQtWUcAAADX1c/Y1cvX1czX1MzX08vW083X08rW08vX0snW0snV0crAuq7Auq3Auaq+ua3dkET/gi+DpZy5k2Syk0/wdyjecipqlYPsZCqFhmBmiYDLZSNdf3XeSSh4dVCmXCxOeWbUQSDKPBxBcVpkW1BgVko5ZVJ5CxKoxgN0AAAABXRSTlMAAAAAAMJrBrEAAAOASURBVHjapZaJcttIDAW5lvfIHtnLYiLDee4kzwsL+///F45I66AkW467akSoIHRhhjOkuq5bLper4fL/wHAhiscBItiMIYSgm+j76GOga1xdXXWD4PNy2epHQ9q1HrAz0+mneCswfeB+K/i8Wi6HsZoEA4vFojtP4E1vO8GmvvWw5QUBEd4TrFabBj53F9LbEfZOcLt8WN2ubi8WTEu7J1g9DPUPt5cLPBM83N3e3g2C6+tu4PqYmaCPxk5w99/9XRsvCaLR9+G0Y8ID3f3916/DuO8azwmMgTA4WuQWp7uvEy8KYFObOQpsR4K7S4kJ7Izod1MYaSvwetoivk2wWAyCGR4PUNmZbawHnOWLBTQeqxgZj3PBWQEHbhPRD2TfrlNuOqCmPQs2I6M/I0hCAleAgtwKNrmeMhIux1lBLwklknpy1l0rbfXinMD0SEDTxDwXLlVt2tubwrrbY02fNZFxlEMoKpB2gsfDHz2G/fev735+/6/NcU6yC0lxVtDbv7z78aff39s6EiRylRFxdgoB//z25x/v/kKa5ygD0T778/tAYMCS5rmKsoTKz9wFYRc4kee3OBU0byJtBZr9SFkViAqsnG8yQGpDz0whWqmi0DynPU4eJmy6xUDLffz06UueP+xnBMkueXPz4UvW9ws+thZEveaBkmV2325ubj59gXqFgPV6r4OhhQ9DD4cCIZ0XPK7Xj/MO8lDgFwWzNcjZDBC6cArddBcOkcyld6Htgx+6GXq+g2z6Z8HivEDPCSyxGchInN3K50A22Iim8ZNAESnFgKTjg5URaEyiAZA4mEK4CtPcCs97rngqEukcW5gJsgzGZTEThBKaYaynEjutQ0FRxs4T5z8kmbGF5nJVumYCtdo28NFDVEjpafZ22lQWsw5Mtmo4fg8IcE6fzjKm8EwALrBPvQckV1S5QrgYMDYHAoHBzjqeQogKRVRIY49ZTjQT2K288NEiQiE1C5AeV6o83wdNXRiYC4KUhFNIZELl0SLKgKn2oflG0saaaMCYsdOZYCQlceo9gJTQrttvB4JdOAVItCcTgl0sYIqRnuKUOBJk2i1pp/fi9BS3a/va4nK6uxqReqHFq7naCix5X3B9kiNB9yToUzJvEVi8SSBDvlXwpjVAAl19h6BX3wNm2ng4/SqB3MCVU5T1OgGokfb0/LVpczpVfuqPyjdt8tQvCjuwWwAAAABJRU5ErkJggg==",horse:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAh1BMVEUAAAD///+lpaWGhoareS2nbh92dnZxcXGPaR1jY2OKVS6AXCJyVBp2SShRUVFvQh9hOh1FPC9ZMxc2NDdOLBM2MCZTJQ5OIgsrKi1JHwkqJR0/Gwg6GAUhHiEfHBcuEwQpDwMjEQcmDQEiDgMbDQUcCAAZBgAPBwMNBgMQAgAIAAABAQEAAAAaegGbAAAAAXRSTlMAQObYZgAABHpJREFUeNqllouaojgQhTOzuurYitKsNCS7pR1lF2fe//n21CUBvMznN3MISYVQP5VKEN0LKitT6Z6rKovNZlMUm6KsnCtgVlVRpbFduYMw8qIKq0zlDkAgd+WrgNKqDNiIilcBmwXXi6rAPARQKOD1CCqroNVWAd++IYJfBVQ7+IOwq55M+PmF1WKLUlRlWRRlWRUPAbufXNiutihlIRE8m8KiwjLxQqHCWVaLtJgFlr6sxqtfoYstURQvRQBgwcAxgB/GusvY8wvVo8HX9Tog+IASRTfbetp9Dqjr3wL4+nCofYxEU8BisX3anQLgf/CRoOjqEELycCuzcvex6voARKQQKGImaPJWUmPoPpb41xQgIplJ3jvuJQXOQTAAKcCErTdspPtljMT5R+w1/CPbZB03SPfv47cRLl9+IHYR1T++AKEdDO7/Ev2TWqci6G8U7XiJAM6ASASeuKOA5Xw2my/b1I4AHyjaCd5z1BFCg04g7WCwnWoCiNEAsnJZ3LPufgh9ZCbA+8fH+yQRCB1Rj7Wftfv5DKHP25Hpa68FHnzYLmDdAdoW5etXhD4yzZGLVAZgZFAAP2e5tAiW6z//WC/bkalugpDWpnA6Se7uALP523qmUzDT3P10CieIRi/yev325vZwBA2lHZleUiA1ceN42U7fz+fvJ1kPKAN0/RFPOzLFjbimyC0DTud/z+f/zifyQnCm9qE83EicI/lIEQA6nUUAgKAAn0VpfxiY/YiiFhwOPichIAuyMl4BbB/QC1GVART1iAQBENAogOS9NACccaCPYQtBAeFGznSAyBLQNPIDpYBAcQLYrlar7Ttqad+3E0CMY4AiAKABcDwenQn29YrmBgAnTgNcFZEB4RlA36JHABQFxEcR9N3n8fjZ9RNAfpsBgIQShEB3EbA/E6QT4x0gzyFQAlxVvZYLnAG5TACQ8Q2AIhEIub/KgdKhvly6z8/ucuFbWYEoeC/mQWQNACFCaDq4dz28u65Hm3IgN3ueqnxf1c8A0wjgBoB4d5DlIEWARFoEYwQ6CMAAcNPH94zIOZBlgz8RI2ALoc4QW0YMX3sGcLniHHIAwS2IP9zNURGyjBkAP10CnNMcjJJoADFqi0AUCF62kHzc5MBLEjUJFoFUDEhz0EejdGxMc+DtwyxmbRGg4CAK9tGSh+dqkgOLIJg3BAMCwFNMe/k60ZCDNIc8AwPAm68TO0O3gCEH+isfIEFoIoM0zKXhbcTbi9OanIMUAE2SCJjNLAPIwdFOFOSg7zkHtvJp8sZLyyjmeEwb7/PX0Y23b9PoLmzYsMVoGrXQGgMyf4/Dwc67rpGmwc2ocBm12kIffic9hEpax3Zjg3Kr5L6BakHZ7jSKAOEScGraXEAl4UkcHDp8feOZYIZctBswPV0ye/0AgDSGPMXGs4TTsKFJys8PqvRXLAihEQQqGPII8UTRAGVA86H+pAcMRyR7WEOGPGTQZECNDcsgsYJVLnLrs9hBx1hqycUkHrUvqxgONt9iUv+p7ocjlD66/wNdcSNfhkmkngAAAABJRU5ErkJggg==",llama:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABACAMAAADlCI9NAAAAVFBMVEUAAAD868b14rjx3K/v2anr057jypXMqX7EonmlpaW6mnOvkW2liWaGhoareS2nbh92dnaiayOPaR2AXCJyVBpjUT1FPC9BOy82MCYzKSMqJR0fHBcP+iOkAAAAAXRSTlMAQObYZgAAA3lJREFUeNrtV0t22zAMJDAg+0ulxm7URr3/PYsPmUiMXja0vPJYJMbyAiOAGjynN7ACCmVkPO0AButlC1ueRnEkgBydAHBA45afIICJ8bEG/htvdhHRcI4APIGU7wVAauUB4wJiUX6OgAIymjaACLNLEBjPxJRZTjkDh4Ag5EHEuCUvym8pgOgTAZFWdw3Gc4EU3LQCpPhEQJbs2TXGpxTbbyygKNIhcom8UpRVbiwNQxS0AytEuvaqMs+YlWz4jQQwMdEL8wuRUgaaAIFyhkjN27ILwgvcjIhsx5AAZiL+8kWDUiiqAHddAL0AAM2TiWvVBgXw9x9PTz++814Ac61H2SFMUAFiplq2dAaYTctRC/RCawCFbQ1B4oFaopwC4OZ9uwJ49+HpowWg0QqAHCgVKdCsf18CEYn7cWbIdx61QQf3AhQQRc67FrgEA9roHK0AVXQCwIAAbj8NSt2R2xvC8R6eI6COYOwFZEEMZmlngGm0BYi3Gf0hjFZDcu58KH7xJhA5GRmCBLCjFpRqTGK3cHgEAGZhrkYA8Fjx+etXIl1MtaDOkgCsS7JsBcRcZF+ul2ngDEROejUBrxTgGuMQKnojMgAMRdWMsRYwRSt1cSy/m9gSSVbsBCjEhHH1oiEfgCVn9h3vb3bMl3oCvABdE9pAYpACAxUAwTP7jhbIQvJBAM3fIfttqS4wZkQIv4+AoI0nWP2lHEDCDaoCDAgQ1ONskQXuL4ibSRD171sQXYCA6ykEBgRYqpAB1tWiHD/U8tfxr8U0imimeNoMiImp3+VtIG3cebnM0zRf1hbTKCQjQ0R0N6Iri4SoQwFrhzSKLJLjgywwgqzL4wcBy3vplf65SRcsP8xbxFjRLS7lBwKmdZknLf28bmgaQv2H4SEr8Ri8pN6ZlnXV69u31eNyky54Ul1xOQ1eckm9M9ljX66/fl4vq9Hn5+d5uAKezD7FVv1W99Q7k2Wd5t/XaV6DXqZpVEDpbCZvQuqdabHE02xZGx0X8AlS70xLvP/zrPGdpvPQO9N6hFMF9M50bxw4033RO9PRMDoVvTMdDaNT0TvT0TA6Fb0zbSbQcpcu9M7kE8hH0LqhZwrosJlAm7mU7od47FmH0Bpz6eev6+XuAqbpMmt0ev2t9J4CZheg17qh6X6ICTSHDzR6TwHrIdIDDzzwwAMPjOA/NfpDB1xAY2EAAAAASUVORK5CYII=",minecart:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAAM1BMVEUAAADBxMW2ubqvsrOprq+epKaUl5iMkJKFiYt1g4ludXlsdHhham5SVVZNUVI/QkMaGx04QmSDAAAAAXRSTlMAQObYZgAAATFJREFUeNrtk9FuwyAMRVMa7jWzwf3/rx3QLmsiOlpV2lOPk+BYypFRzLIs53A6hXA617sSzsurEABTSkRPsLxGAIEYI0ACiCAC4tqp5fbARGApJavRsLoggLHGyrWvmAoOIPSWtiamgmw7MgIhcQuAM0G+U+TcBERcY+wNgJwJPO9wBAq3Blo+E+wM7ghSIRqkVGaCPV3w9RsTQUVAMRMC+MlkUHusISVfLlkoW8ZRbRmTRFXNTG9YZ1wdCoTqXsy8dNysuJtQ7Z6JoBTV0rlmrk3gB0zHW2gCU7XS6ZlrugrKxp+Ccuyg3ATljscC0eLtM/d+aX+tVfOy46GAQwGfFsiwA5HnBRwK+O4W/k/w/m+U4SDJ84MkMhxlmY7y8TCVGy8fpsR+WnXDGuPq8mHIN8fuL8tkDiT4AAAAAElFTkSuQmCC",parrot:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAP1BMVEUAAAD/////7nn/6j3/5TPGxsa7u7vZra23t7ewsLCoqKienp6ZmZmWlpaRkZGQkJD3cwmGhoYlJSUPDw8AAAD7udxiAAAAAXRSTlMAQObYZgAAANJJREFUeNrN0tEKwjAMBdDGxpnbZqtx/v+32jYMN9QKPnkhYdBDk0EDHSIQ0CGBDkEV/pFgahtgBhxEZu7nSGj1Ajg6SAmpVQe4M98hgHCMVUAgqklbObgyXwGhXczUWlXg10Z+bj/4i3X19gra1KJrDfVGakcARdFyqyEHS353w35J2oGiBRO8++miqrU2MJdZIN6pJy+Lz3Cgs04yeaees6qeByMypZQo548jLDdl9mnE8D18B+EyBiG4+AGMduBwCi2/g+BiAAJ/BTwEW/4XPABsMA1LwNN2rAAAAABJRU5ErkJggg==",piglin:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAWlBMVEUAAAD/gID/////7aj/5bX12iryuobMzIPCwnTooHTVlXreihzJgmWHh1e6ZkWtVTKiWTplXEOhPjiESzOXQyKNNQ1rOSR6JiF2Kw08OS5TKxpgIwo6GgwhHhyEOBusAAAAAnRSTlMABHH+CSEAAAKgSURBVHja7ZZxU9swDMXDWAMSRspwYiDQ7/81pyd5Vzzf3Oz4t78GRU2kF9m5Hm8y7h8sMM34zMQrcKZj3BvTRHMVoHVVJwRm41n1eSDwYFSB2QW0AoG4psY0JgRAK5BeiV7TWCD2wLt7AXkhehE1Du1BL6CPKT0quL4HgMgFxIBAy6xt3hICsYniHBRIzET+6Ij1jxg3/NUyXxEwiK0wiITZBJC3And3d10uzCzKjOkNOzGrX6wKJoUVpiTJQ5MbVseyqpX9SEQWmHUV+4obhI8LQCd5aHJDBALCRLIaQuRfWSRhBK51M7bKQ5MbqwpLjAyB5Kmw6AoFToZAgNCE0OQQMIXEGHkFtU3UUsUU9XX6DnlocgNNql4HvEuRAzWO/Kx342xMFXbibWwb81TJOS+oOyQg9reK8mafqbLkJR8UEFEW3nRjzDBV8nJwAgGs1qoY5DKB0QrEukrJZc9BcXz7S6AiolspC8AMIJeLQME9xC9JJppL3FmKen/J1moPsOhFzfi4gXNZvMuKdiL0xmPLVjBaHTBiK1DQH8lealfyB1mIsbEqIABcBETQKjiDYsRi84I0WwYp6yeilFgSp/iFBgJVSMchBeTsR82RVgFiCIAJgMRkihBn/w0XI9ZS+/GxtK1LXyaQVnkHn3acLDhlh6TIkQms6s05/Tw9vQUfJzs+3v45Aa4mXCTCCnh3nj73T0wQOY6oQyT080WAqcKO70H2F9tsQq3zpzdLOJ/P7+/nX+84I8SqvT//2QKEv+umGzdu3ABH/cLAFxwVGPuC4xMs353AGAmM/ELvC8b0fqHzBUN6v9D7gjG9X+h8wZjeL3S+YEzvFzpfMKb3C91/5TG9XxD5zgTy3xP0fqHzBWN6v9D5gjG9X7jmC34DNs5yRa6KJBYAAAAASUVORK5CYII=",pillager:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAflBMVEWnra0CAgIAAAD////Hzs6Trq2VoKCVnJyVm5uTmZmQlpaOk5OLkZGKkJCIjo6EiYlmh4VzeXlwdXVobm5nbm5SWFhQVlYyZjx2QypfNiEmR0daLzg5Ojk5OTlPKxlLJi0fNjYqKikeKio+Hg8lJSU2GB4yFwkeHRwjEBQUFBN24XvqAAAAA3RSTlMAAAD6dsTeAAACP0lEQVR42u2VYZOaMBCG1TOCDUYQemeqRDEq8v//YN9laQYckaAzbT/ckyPEmXsfdhlnnUwbwlBKGS7CBjmZfn6m6WQ6G2DiBHUegrTmFUHIpGeQSorT9fcEixANvCt4rwVm4V5ig7/AvQRJ+AuQQPOSgjjwzYHPw4Im267AnaW3wIXbdxINC9zDZUPbADwEHMnztZTrPOc467wEa+SJc54vl3l+bgqADPgJJHf78SXl1wd/oDgb1sMCeg4yifqxXC5Vwk93DAsSMoBE/QQqkZxPEvrDNSxIWJGyIOW4Y1gwG+BfCS4Nt4YXBJso2ngLTsBe7bUlQB6GMQLkrYfAvwJq4Z0KYEDeR3C6QzOGBEb/wQCtRwjMZbVabQ7G5Qk/weFCa3fYIb874Nxa/YLj0QkuN1r49/0eEZxbq1dw/AWDp8C/haLwbMGa7XarjTa2UwGWXwXNW7a6Zqu7EQ8BPfoKDDSEfcJDAYWtIQlTMBVvXR4KIDaoHApotLmWTFWUZVGVXXoEhquHgS4nAF6C2Qi+Bd8CYi60ibIoe1mAvAmy4C2BzWB4XSCszdDDaAGHxVzE2jCxGC2IYyHimAcOBPFoAWY34MFJuxMU+5pyPhei5PPDCcRD9niiHaP34AQlJg+oRFGIqgA9A6Q9XGlrC0oSxKCi/FiBfcJdC27R5gQ49662gN8VV0ibE7jCUOWzH5KiNrgOuwJXEZ7aJ7jd4QT3pfa1oJTKAqWCDPcsU9noL5IKAhUFUaRqAvX/TKTfnHu1gRak8lQAAAAASUVORK5CYII=",rabbit:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAMFBMVEUAAAD02ezy2Ovx1unxzue0pZSkjXOUgWKUfWKLdVp7aUpqWUFjVENhU0NZTDtSSDkNYhzDAAAAAXRSTlMAQObYZgAAAYBJREFUeNp10L1uE0EUxfERBdhQ0PAivAFPgUJHFT5ewC7TBJ8LBW4i3TM0VEgz09B6ptiOV+ARkjJt5GJyNbubtZLdv7zro52fJWtdq5aqENe3prV37vl2v959dK2SCsERQBrYwtoNwOdAP4AVrAsDZ7iUAWSG6B/AZtsAvsgl6VqBjGkEL84/NcAPvBoBlSnFfmL37z/Exxi/xj8x9kBVUsptBsX1DRjtCIAbUkjqSptZYflSyikA0HVdm8dM0pdaK87x7WwC9qTNZ+/ckH7G1Xv7RVCIj+3emXrzdgT0geJczaH9JcKnarlHGSDhoynOg2PJQYUqPpVuDtRjUVGIip3PAedrf7kVLtz0NYXarkUAEBBgGQgVBBeBMlKC+kUQfLQPEyGK3WYLi3RT2adDyr7kYAAbWD6dgpJKLnYr2UBfKqegDh0jx2JH96TVz9tpzLX+MYJf8+Bl+juNuV7FEeQFcPg9jbleH/YDuNvPA3s+jcd9L+1FqEiqVlZMZ/eZmCL8uK8JdAAAAABJRU5ErkJggg==",shulker:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAzFBMVEWOYI4AAAD////m8K3h6KjT1ZrHw426tnmzr3GsqGujdqOjdKOjcqOec56ecp6ecZ6ecJ6ebp6ebZ6Xa5eXapeXaZeXZ5eXZpeXZZePZ4+PZo+PZY+PZI+OZI6PY4+OY46OYY6OYI6MYYyMYIyMXoyJYImHYYeJX4mHYIeHX4eHXoeHXIeHW4d/XH+BWoF/W3+BWYF/Wn9/WX9/WH9/V39/Vn93V3d3VXd3VHd3Und3UHdwUHBwT3BwTnBuT25wTHBuTG5uS25uSm4AAADM1DMFAAAAAnRSTlMAAHaTzTgAAASDSURBVHja5ZN/e5s2EMdpk2Xrthg8dKfYuMVet4U7sTr86CRskuL2/b+nnUiN/Xh7nhT2574guNOdPjoJEby6ULFYlEWSbGtp5Sr5ayM6xnr7QsFlR9I4JtswuYbZunITBOc5LwMWlhGZpOUKjK1HAwpCpTWAQq2U4v1oQM3gpQBiRMzay/iLgJUlRAWAKBi2xWjA0rGK1R2AFga5ajSgYI34fAMCP44H0B0opTQqQEQevweJywCw3wJUxpWjAe8aAwBKAfR7UE/YAwC8Q+URCBOWUFKMKlaACCJqzw+SmJtv+Iy50szSSEPWlKMBya5h43ZM1nJmXTEaYIu6bauybevicV9V7Yu/c7EMk+JduCyW0bJIwmybhCtvl8l8IbGsTEKxZ6tiEa2KJJK45C3mSz9uu5xlwdKxJUeWHTnecbtyxpkdu9yxv/ZLlzXkjDXea8w+OeY6FovaYE6NQdMwsDOKXBlJBMUG6t/lTOiaLSuWnMyVoXEEvS9viQeJ7Q8/+AuQWqkIUWkQyYPalTWAIF3gZSSegyiOAaVTKiiNQp+qfBa7emsQlEIEgdyxqwqGGJWSBNCKmqrIUAN6Oorv6iBxJI4IY60cp0njfQ+RHsebd45RpMUFbWm9sKRVjH4IgvhBRE5s6YoRFdsqMo1CD9DyMk01zy0o6NNjJFuGPl8jgC+LXOUrSDdp2jdQ1EoF6dr78lTQ70mart9u0rdpisD7lSXx5ZIbNbfB1sBwOEK/5uzkz8X/kzE9+rfUFIWBwZ/5Cu6dSQeAy9f3jk6+zHYvbQBak0r+egA43gRzY0/E3FUh2VMCuTLkZohHZMsod+sBmLsy+N09nBJ+/dDeu4chIfztw/7efThN8P7h031zlv/+YR9441Kbr/L2oTscum64uxf/xkt1xCLKmTNmw58nALr80PX6fOj4MAXAncmNlxgvL2Fz4XZ5ZwTiJSR+Gg/gjg7S2AjniSdUIOP6S9afT1qCr5sOxhdiDjQNcJDLc7ibAqDOPLEcJpnfs0YDpOp+C5npMKkCX7c/SE9yC2LCUc46zpmIc8PUTQHQ8U96kuckALHpb5GhlwGXv3Mnkqll+v7570d5dhtGURRGx85ZeBvezue3Rz+chdE8nIdDfC7ZMmQAhICgENNhACoFZ/6tUggAp3iM+hgPnhMkrPTwBSONWqtzICAinIAQK1QDwBMV4NkMMwRBxCfAnfZTDBP8on3B6hmwXcoKNUAMAD8nW1Mns9DPqATy07L4Y5tE8xkoP0D9uCqzIpHFgxaiBolnQWIpZkdgHGtyvF5YFtsAO5ZG6dLbO4O0Y2QrccnLXQ7kqI8HBTfsZIQ8M0u23LKTniZrSHrJlaWxfUTiufRVEheW5R1Jy3ZlsEyrtkzL9mNayPvjp9W6eqylr07rtko/7pO0fpT4XmJttSnbZVpLbvlYie/7vh6k6+urq+vrm5s3b25uXo3SEXAl+i+Aq17/V4Df/3Ndf9W3A64uNBbw/T/0Q68RS/B6/eXq6svrZ/u7XiMBNzd+CycDjhs5BfA3y7f3PUOzujsAAAAASUVORK5CYII=",sniffer:"data:image/png;base64,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",spider:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgBAMAAABQs2O3AAAAKlBMVEUAAACSiX+MgndgVEhPRTxHPjWoDg49NC0yKyYmIBsmHxoaFA88AgIiAADotIQjAAAAAXRSTlMAQObYZgAAAgpJREFUeNp10rFu1EAQBuB7B8RDUCIs0tB5rUuUNAivfBKvkI5b/eNLyVkzg6hQYGfyAkn6oDwAFUUqUvA4rHTGthTlb7b4P+3urHZV4uqqsuKbHdNNz3S9A5V1NUVIVW0leQfOCuQvhNzTDJhF3W6RlUvJV5R7przjBSBxu5KbHmV73OJaUc7DBDIVIKs5zuSU4nSIkYotgSUox25z0GAtfe+qk+GWN0PCARhI1fgwyJhjpOb7QDQBN0DVJ9BRiJmhB8CQAlhlAfZNaxAfb8ziwuSLQeqmrdx8BMJi0qsvBrms6hP3AuZIFxNYRJBj6L5W9d8UYg8SGcGmjSlRFuOB1/vqz7v6mLYbcscIEoYOAjNLoB+/6urtbwarGabB2q4juBnR5dnj+fnZ4wlDM2QEbQhdVHXOoLr69PBwVFfM0sNmgEE9g5Ve34U3dTh9IcZu/0Gsw2atboDL6f37u48vL+7E4c4jaD80YU2ult0v/NvP01d+707CGMG2DVVH5uNrPk0a2oog7vYM4G1qgN6FngEAgZmc8aQKMTSBgY62KbShCwIKaTODGPhztU6csA11FTgJQhNpBuGoNM2QIGDsQx0ktfF4ARKDIiKYmUAhdMZtxzIDYN+g5xLJVO4Aw8BYAG9L7waQeiaQGwlIZ5ARu9g7a9Yc0wYFK+kCeAbgDvfegdK7qyy+4z9b0kGP3NmJngAAAABJRU5ErkJggg==",tadpole:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEUAAABtUz1jSTNTOSNJLxlEKhQWCgDfr9AwAAAAAXRSTlMAQObYZgAAADdJREFUeNpjYGAyCglgAAFGRVcHMINNzMgARBuliSUZGQEZzkZGxsHODNiAs6KwA5RlYsBAOQAAqGUGQPKmAvcAAAAASUVORK5CYII=",turtle:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABABAMAAAAg+GJMAAAAMFBMVEUAAAD////K0JHCt4ComnNHv0qUi2OCiFQ/pEI4jTopfUkwcj8gakMlZDMbWzExMTA/pVLKAAAAAXRSTlMAQObYZgAABDNJREFUeNqd1s9r40YUB/DAZr1Z3JT+By2S6XnRiJyD9ZjmtBRSUbWnQITMQlgKXeJL6aGxlpltD2VZjKY2uRW2JodAlxAxm9DD4satYnKuI7OH0qUkEfQ/6Iwk/7isrNnvSUb2h5n3pHlekqkG9AVC60vvnLuEPJsCDxMRL01pYIWQ1hRwo+T6leeBixUA234MsJV98Cxdxx5YFuDSwG3b/tzFX8nLigtoDZngpdlSAHYbOYCMmoZMBaAa+LaIQ0/i+GKpsm1ouqYhFYARCRCWAZamGcLACkD4ITn+nvzXyQCUAWvlgdWQBQGlrBNLYFn8WO7BVABGTQ/Aa56kQAUAtBoAzgHl3DI0rV4XVVQDVvyWtT4FdE0dcDbr9yaAbiJ1wN80Pkqv7riWoWsIGmrAXX9Py4BbKN2CjhQBsolmQE0dWAlaZlaDZWTUTFNDpirwDNazGnhQr2mAVWsQMjf7cgWQ2IJuYjWgGoZTwHIxbIMqwHl7AmCrpmMFYBkAHhx5YfpSt971ZL7tt8yC35Y5Vfdq97JLxoiFkNwBqJyq5Ds9B8IgIIQ89lzLQGZ5wHmqTQBGbZ+0AOmarius4CnKAR4y33E+Qyapm6R8DeietZ4DzJft2CAy5YcjbYEEKp5nU992GKEAIMu4VRLotPGP2aWF0AZlbQCsMl2rnaMJQEQC9gIZCFQAfvTgMAd8/wvKfpU9MKHkXCSs7fE2iGx8uuQ4NmX8uGVstJA5edpNE0q/W7IHtHNMZPIVpPMaewtr8tYuWHJezwD1pPN6rRiocnbm22TQ4SPO/2XsivOLOcAwFgNhNyBdxnnMTznrnPITNWCV8796vd6IixE75pyfxvEMSOf1x8XAe6PLg2ESHYwuo+RG7CJOrn+b3kznNS4G7kT9YZIk/eh3r/FtEg2T5lzT5bxetIJlgETkbxDBjWbTA1ifA3StEKiOX0H28oDIcMSvB75t0+jqMAd0ExUC798IADdFdgVwniSsG9hOl+2/zu6n8xoXrSDuAzSaMi7g81HI6B+93oCyw5IPUvXkDVgZsA2f3PAwePLcdnpkBtQWAWNAzTRfm/djzsgvsgbPaX5EyHm9CHCnwMOYd3uB/Ov600EOuHJee4VFvGx4GbDb2ImTq5eBWAHp8kkR5bzGBcDqOJqtYGcYhzSSXRjQvAbpvMaFW7h8NAW+kTVwRBfOnEkN0nldCPB5YCQAW3Th5ylQcQGKpr0EmtMapMCXogZPJFCQghXsR2kbD4blANmFeUB0IRgQ26FnndclAdkFKwdAdiH44YyQSD6JpSK70NjNa9DciTlnpBtFAe2UB8YwXcF9CTCxggErD8RvADLgkXiZRjzsMkK7jJcFVuN/5l7nm3icRCFjL4fJRdkuXPfngCi54uxP1hEzonQX4v7sRMLnMefhfpIwXrAFhXyw4P7/kgmYSeJwxJwAAAAASUVORK5CYII=",vex:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAMFBMVEUAAABthJtgeY9Ta4H////z+Pzg6fHG2eqivNWUrMOGn7eCl6t5kqp6j6RthJtgcoMKluMvAAAABHRSTlMAoKCgEjok+wAAAPlJREFUeNq1yL1Kw1AAhuE3hxYrRYm5gmivQL0Hwa1LnAtCFpdOjuKY4KBjfnYhIUPWEnIBhgxZRSjHC8hp3KWxkg5ndfD5pu8FDqNAKQkwKXIE9Fuj3zCQjECYDCaPs4tOQP9pDME4B1MAbIwTgJEwv2yixPcCPw2igGkcljlZ3YfP33WSJTB9yhG25HaJPLUBtkCdvl5fpVlVVRy3ntdQZW+eX6e77UIcNqAke0eq+JCgGvam4apoUGqtHtC067K9Q1O+l2WMJl9RvPAnl7+0L5Ao9NBB16GxZpZloTGFeWYC47l7DzrXcUF3sHTQjW9YoHMW4zn/5QeNK1xt8XQSVQAAAABJRU5ErkJggg==",villager:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAbFBMVEX///++iGy3gnKze2J6enpra2thYWFUVFRUU1NISElMODM9LSkAAAD///++iGy3gnKUj4m1e2eze2KBfXl/e3eja01vbWqQXkNjYmAAlhFUU1N1Ry93QjVcQjpISElMODM9LSkzJBEjIyMjGBTjk4HHAAAADXRSTlMAAAAAAAAAAAAAAAAA7Uh4SAAAAn9JREFUeNrtlN1ymzAQRm3cuG5C9oMFJIW0idu+/zt2/wieiTNAk0ufgdEKs0cryWJXB0RguUEO1/Xzc871Irs3AViTQdnYLgAzGfmPkFnT9V4tiAI+IyCB/19AVgA+KyCaF9FZL3iDlfUCAl0AjpYmFgWagjkJfjNCtCwgml7niyrmcJ0gho7mQkDrBJALsAhwyYY1IAP4bahgdmKFgBme8PjE/PRI3mMGG1gWxMpnE3GetmFiWQA/yJl/CpzJutggYAYYIjAyQfu8XlAv8DWCb5sFqW2Btk2llJSKctwqIAFJ8oVFQRL+ChcCEKGlKwJSQLRfENBHFYCMZYG+2F6tAOauFgRtC8K1RYSdVqhgd6eCUmIUxTtdKknySXchOYOQEhkAmNmm4YJ5FPWM0nRdbKNGZRxHH2KElx8CRmWCvu+7roxd17nADE1qhdR0RfP1mQZMbAqwnxcT9KnYS5Lc903Tq0U6jVTt+Xo5SesWCUMvIheUMvh5GnwqqpKUJPU0jUSik57jnyswABWgitMYU2MjZlw0X9ppDbpOTMSkwCCQCXw+FBe4uGGUdehGy3950ScaEC4/duwCaWHPorEdGSM/0mMRRlKYogD2bZzGZvuJIa+/SFIQYfCjqvb7w6EKDiYAGe5h4DU4/3o9ezSzF94JGK4IC84Tr+d3PHzwTbTqvQVkqjMlSEa5KjhYLUElPJxOD8r9/cmjGQJxJmMgQVN2B0UCbUxxPJ2+OyI4BnfKEcAwxF95mARL1BcAnJmcTIRqq0DzQsCZwJsEUIgGFUCIKmiTQEceZsGwRlBPQGHY3EOQB2Jalz9XAB11crFWUH+Sm+AmuAlugi8T/AM2/NtEbUTDnAAAAABJRU5ErkJggg==",warden:"data:image/png;base64,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",witch:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAACACAMAAACMX59YAAAAmVBMVEUAAAD///+2qJWrn42rnYmmmoijlIOgkoCPj4+YiXeWdliWdFcltDWUc1Z6d3eAcl6PbFNra2uQXkN6XnBhYWFoWUwMixp1Ry8vaDVaTTZMTExHT0hQQy0/Pz9IPCc6OjpANSQkQCg1Lh0dPAkxKRwoKCgsKRg2F1guJxonJiYwFE0YKRoTLgEeHh4oEEIdCy8REREVByUKDAvCurIkAAAAAXRSTlMAQObYZgAAA1lJREFUeNrtloFS2kAQhiPphVJbKVq10XDG2Ba4mjvx/R+u/+5yR1U0d2SqYyefgcuO+T/2NoYxyw4PMyLPlVL5KN+gsuz8/Pg46+bw65dPtEoeginjBdFAkAvTEkwVxen1eoJRjg30FfTbgjAKQ0wlD0NQTEKQNq98ntcANhU3fQkVile1talogRJBkQsiIFG3QPnrVQHkNBhAt8BHCgKFxBURJSh8/hcjFeULECXwMzs4KYqTAwpLXgxFtwBXkWM6/gDGU0kHugUTMoDpeHx6Oh5PleQnExy0dAsmrICAmUp8S/ZeKQum/BFIFUyYWIEGP0GMYAEM+OeCgnkVQQNqCJrlcqlBDXBWqVGuKlSE1lVZVpW2wAtoeSxoWEB1XZVaKV2WqEBVleCBwNEaBFoEsm4Epaa3RgQlTvHmSGCQdxCYIKglWEOAbpdNAxclaoR8hWZwOGedgcABWkVQe0ENFY4lIIFmgVQaabw4CPzKglrX/MkNTuigAJpmQaUbrl4WIMXD07JKhHagMfiGigYmHFXVIahl9UNssANUAGdIw7FTgMslSAMAItAiCDpsCT/ZLubzppHcfD4D4tFVSV1UGwHycOwWXMwR/Hg0w3JBAuwaR83AQhORHtDjbgGYHc1mtH4DMjbN1DpUPKnseRZ+eRFjrbPWGKx88vev4gQGOQPYZJIFoQO7swNZXsSGLTzpYNEpcIA7gEHOxRY7RBFgBs4L/BycW6P0HaBar52VLxz7tAMJiUC6ySwiEBiZMucd8oR5IkAqCMS1EVi+2iwMFw5hEUTAAkuC2xsIaENUCdEC9EICRGy6wPEMsGkvWKcK1jKDrcAlbmENgoArt7/A7CFwDwRuDwFP0W+BJ5J+GyEwj+6CSRQYEZitgH6iBU4ExgtMssAaayCgR5QqK/8B2PgtWMsCePhhIB+wCX8H4PYGQdKJAG9JHYjAypNhKQ0ShshXs8DtIXCISMECrliYpbEK3AcSBS2zv6C9Y9pB8IaC/rfRkyZYRfKsoI0kspGOzrtuQdtHcEe8R0H/GfS/C23gd/uYNMH19+u9BFcbLs8+n11ePSSpgxU6WLUeea6TJsiz2xd88tsJ+m8h9osj+gvl3QnA6j7rBQ+uD9z2wMDAwMDAwH/EH571WWMJHeH4AAAAAElFTkSuQmCC",wolf:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAMAAACVQ462AAAAw1BMVEXt5+jk3t/c3Nzf2dnW0NHKxsfIwsO3t7ferIWzs7Nu1Je3q6WhoaGdnU10oIaBgYEatVh+dnBegyJlZi1iWkAodi5WVlZUVFRERERHQjs+PTBENiY5ODVDNSWAAHY/MCQzMzMtLSg1Kh8sLCo0KR4ZGRkAAAD////k2Nnd2tvV0NDTz8/Kx8jJwcLBvr7UtaTOr5bEq5ywqqefmpaalZGnj36ajIiVhnmheFuUe2iBdm2Mb1JJQjk5PD85ODUtLSgSFBY76smzAAAAJ3RSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAi/HzzAAADR0lEQVR42s2UbXfbNgyF6Wli41WZqm3NtkQOZ3ZVwwCFbShO6r6k/v+/ahdwtjOp/dJvvZT5gqP7HAC2GYZhWFDBYBIilsvLy5Ty8HsPiY4yirIQBgtfX1/HLlbD/xUcQIXh51JI1ut1TumiXyz6SKKkAi4AzEQGCLH7AhCpFDxMmBmAlNIffYw9MlMgPewrAPDHKWCxiAtmEFjYyogIrNd//frixU8/lyKIF4htdUAIsxIETiEAfMPGQRmDC0HzGt1Xz6AKUwAXJxC8VAgkb+TgIgIacV//7UE1K8Fsb477/fGN+Q1HAFw9e5auErZi5KcVANcsA+D3H+7vP+yFvA9CvBZhr8qmU4dP9Ukx3AzABP/DAwjE9hbGb1TcYnYCynCOksJYpwCR/cM9QfcPe3lSApWwAgJ5AbazPhhqCkgpvdwddnjOzlLKOZnEatH/CKKEgJ0w5CuA7WHrgL8dkNMVLMKj18BWxegBIgVHZQrIOb/cHDYO+CGfAIl1VMHjDYRvFATYQ9hMAb9Am08bJHF2dg6Z/wqq+9j3nf3wYmhjFWOoY+xirOowBWw3Nzc3R3w22+1utz0fHqFl09Z919e1WAqS61hBDsA6B4Bg/g36cNidP5bySKVtYmeDCkSr6nl8jiy6PkYsU8Dh+Omk4+EEIHosVFV17LouFhKlEioQapj7LoZYTwE2NaucXl9cvLa9XwSLUHW9DaERDayRd4ghdH++whzngM+f373LKwA+fnz/dvCLIIaqRgv6qGKAEJxQhVcd0ghfBSQHvH2P0I8h4O3Tt6Cqo+riZK8i9MV98HThcVZMQsyDiLVO7CjYEGYqSlSFAABYUwDx6T/YwEesTANWOIRxNCuRFLZWLtGqpmmW7QxAzGZdqllUDFBOAMvA9pgVuTRt2yyXmOYZCDOsjYqjeGAqEBPEBSIERkCaJue2BWbeA7jwcYACMbAl4CWI+NYBVAyQVmkOuNPxTvVubAUWJZQAJxh2ZAD8RKNyaVv7r+c5AH6MUbMKwW5NZKtamP26RgiPjkwruLMxpgBhvr29ZTEAmwsAtq3gMdbpNDIjfSBWaTUFrFJOVlvGQHrAm9XNPmEAwCqc7UWbpoDh2/WdAf4B+LQj08eGOFAAAAAASUVORK5CYII=",zombie:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAclBMVEUAAAAAzMyPj495nGVxlVtvlVxtlVtnkFYAr69ph1Z6d3cAqKgAnp5ae0gAmZlra2tXdUdOezZhYWFIdTJJcTVWScwAf39KaS0+aS07Yi9MTExGOqU2WiUAaGg4UiYAW1s/Pz86MYkwKHImIVsoKCgaGho5R/XAAAAAAXRSTlMAQObYZgAAAkJJREFUeNrtk2FzmzAMhpPNm+0akmjVqFRGEsPy///iXtnlml27laRfeWwswZ0eI3NsZkRFVWwUdHMrIqzKitKC3C4gVjhgOQLVOwQEAcvdAmViwZQiuKOFsj2J3i1gZWEVrAqEbxaIlkHMAni5QK15VRSpwTI/UFuYFnx/q2ZCQYyMEq5PSKWMJW8gZSv//av75rneqcJFxMqLemdiiq1zLraR6llimEtk2fdnpvZycfFyaeGScggkqKclLQjqWShG1RhR/XIKCEgWtCByLJs96tOTPiIROoogMhEvO0QWqf+AWqXdsQIEWfhP/AS/wXy//VXYji/Mz8N2G5iIPxYcC28EW0CsnxOwqnyqhTf/yQhy3/fjNE096Lru1CRl0dR0oGlSCAn5bteZYI7vCcYiGIYuhUa1CQH5kFIAVRbAHP8S9FeCoQhC2XgAKSDB8h9BroIMQc79aRhOwQwoqzkyTMt3Ke3m+CrIVWAxwzacTiZIRQBCgwyXgAgEtGAzk/tcdh6R2ETNkEyAOSCfBcykLjovyuy9j68CVPUAS4lWZB3AkQa8b1WlJMzqW9eykvhD9O8IkM1foR5Bg3wwlzlQJ967loQ0Ru+vD7EKMjJggnJsuKosYZpA2TsXiVnjdQvnsxVa+fm8B93QdbanlRUBkoBFWMk574RF/PUbPJ9R+OVhj/BsgnEap1xIoZsmyO1EcyYI0IFXQTz4+CoA+4f93uIPAMHYF3JTcyRokkmodbFVEo6HeNisrKysrKysrPyDP68WY0lh7YK7AAAAAElFTkSuQmCC",zombie_villager:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAt1BMVEVskkNwbWdVczVjW1tWYC5jVC9IYC4/WChUSSg4TSM4OyExPSUuNyQAAAD///+Iqlt3oEd2kk9skkOCe3RyhFFmij9ffzdwbWdedUVXdUdVczVjW1tUZkBOazBgXjhOaC1HZTdQVzdUTU1PUTNBWSiZKys/WChcQjpURypDTCQ4TSNKPj42TCpJQSRMODNCNzcxRB8vQh44OyExPSUsPRw7MTEyNyQqOSE9LSk2MiAzJBEgKxgjIyNApSiHAAAADnRSTlMAAAAAAAAAAAAAAAAAAKroblcAAAMeSURBVHja7dF/X9s2EMfxrGs3oGtxHXTSztIuE+mtyG1+2HNKxp7/49pXIoHSUhxe65/52E6cmHs7MpMXuxxR3p0iFF6+3Gz+vPztlxdP9AZN9h8IfQ1c/vEMgMkgItV/kYbN5upys/nw4dWhAOarGkS4Ay6vthmYfL8HAHNViD2w3VxdbbfPAGoMV1VVuz2w/fTpeUBt6ro6r4yWwtnZycnJ2dmrgwHMwqjODbmADgeIqrx6Q5XBKvALSlRyOCZjAJM5ZyJig0dgKkN3sw4HjwMEwTAFNlRfuIpDnkIF4DAOMAsRgGAMuYvzEBwmQRTG0SGAGlYX5hfv8AjfzYMT54QzwJ4OAkRFHc//Kc2ZhJQ9xvHCBwDCAkGE3r4P4f1bkuxB9ThRFR4FNCVFqQ9zFHp8wr7OX616XBsFUt+vUwbmf6M5ZtI6rYHgwqpfrQ4BUhb6eanv0rpba5dS32G8GwdOT1+f5iYjjQG/PvmHTwE/o5/Q5EFWhVnUNnc9FxBCfChgUd91/et7gDGu9AjgyNHnm8833wIQvgDoe7+A6to9CnQQvgQYgDwCmLqmGwhjS1Bh4scAMiQPgCZnse2zdmqbiHkS2Qm2URG11iEict47T6gAbRObaNvYNjhpbIyxzIsw42War8a4U/M8Nod5vQdibNs4DC0MGzNgpzGlJEiTLfMQUIwYNo68I3WexO2BdgCgQ3awNVlJuzrcGpP5FVkhckCIRLGLuwVaTaopJLyBGuK9gPmptRbfNFMc1qozZfFCglQKoIgDOeagA7Ym3zEOXa7MN1gASBBRlQwZQ96JOBwF4MCeidg5puQ4YMELPNgO5UeXsWVEgAYVJlMALkIBKIAAwHnH0SI8FE2xybddYr5tmzZFJAwAeWYIorcACzE5KC4wBwDLYVgu24gwPeR57KlFHpN1XRsiZgehACKz2wUJ+xnOF7uu/1pcL77Kq6caZUD2/0ZFAk9zM9XrfYvrb1L1TPXvNbFnhwqQEPOKZbVKaZW0aWIpvy+bZVOypUYT7vFx9tGz9zOcFuDN/+gIHIEjcASOwBH44cB/1lQM4ZNhKecAAAAASUVORK5CYII="};f();m();h();Pt();var TP=class{constructor(e,t){this.object=e;this.animations=t}timer=new qs;animatedObjects=new Set;state;createAnimationState(){let e=new Zf(this.object),t=new Map;for(let n of this.animations)t.set(n.name,e.clipAction(n));return this.state={mixer:e,animations:this.animations,actions:t,speed:1,loop:!0},this.object.traverse(n=>{if(n instanceof Ke||n instanceof Di||n instanceof yr||n instanceof Zi){let i=n.onBeforeRender;n.onBeforeRender=(s,a,o,l,c,u)=>{this.timer.update(performance.now());let d=this.timer.getDelta();e.update(d),i?.(s,a,o,l,c,u)}}}),this.animatedObjects.add(this.object),this.state}playAnimation(e,t,n){let i=this.state.actions.get(e);if(!i)return console.warn(`Animation "${e}" not found`),!1;this.state.mixer.stopAllAction();let s=t??this.state.loop;return i.setLoop(s?h1:f1,1/0),i.clampWhenFinished=!s,n===void 0?i.timeScale=this.state.speed:i.timeScale=n,i.reset().fadeIn(.1).play(),!0}updateAnimationParams(e,t){e!==void 0&&(this.state.speed=e),t!==void 0&&(this.state.loop=t);for(let n of this.state.actions.values())e!==void 0&&(n.timeScale=e),t!==void 0&&(n.setLoop(t?h1:f1,1/0),n.clampWhenFinished=!t)}stopAnimations(){this.state.mixer.stopAllAction()}getDelta(){return this.timer.update(performance.now()),this.timer.getDelta()}};function l7e(r,e){let t=new TP(r,e);return t.createAnimationState(),t}f();m();h();Pt();f();m();h();var c7e=-Math.PI/2;function $o(r){if(!r)return!1;let e=r.toLowerCase();return e==="boat"||e==="chest_boat"?!0:e.endsWith("_boat")||e.endsWith("_raft")}function u7e(r){return $o(r)?c7e:null}var cJe=28/16,uJe=3/16,dJe=16/16,h7e=-1.125,fJe=1.59375,hJe=0;var mJe=0,pJe=1,IP="boat_water_patch",m7e="boat_paddle_pivot_left",p7e="boat_paddle_pivot_right",vJe=new W(3/16,28/16,9/16),gJe=new W(3/16,28/16,-9/16),l6n=new W(-6/16,1/16,0),_Je=new W(-3/16,29/16,9/16),yJe=new W(-3/16,29/16,-9/16);var kP=new W;function bJe(r,e){kP.set(0,0,0);let t=r;for(;t&&t!==e;)kP.add(t.position),t=t.parent;return kP}function d7e(r,e,t,n,i){if(i.length===0)return;let s=new Ot;s.name=e,s.position.copy(n),r.add(s);for(let a of i){let o=a.parent;if(!o)continue;let l=bJe(a,r);o.remove(a),a.position.copy(l).sub(t),s.add(a)}return s}function f7e(r,e){let t=[];return r.traverse(n=>{n!==r&&n.name!==IP&&(n.name===m7e||n.name===p7e||n.name===e&&t.push(n))}),t}function xJe(r){if(r.userData.boatPaddleLeftPivot||r.userData.boatPaddleRightPivot)return{leftPivot:r.userData.boatPaddleLeftPivot,rightPivot:r.userData.boatPaddleRightPivot};let e=d7e(r,m7e,vJe,_Je,f7e(r,"paddle_left")),t=d7e(r,p7e,gJe,yJe,f7e(r,"paddle_right"));return e&&(r.userData.boatPaddleLeftPivot=e),t&&(r.userData.boatPaddleRightPivot=t),{leftPivot:e,rightPivot:t}}function wJe(){return new pn(cJe,uJe,dJe)}function SJe(){return new pt({colorWrite:!1,depthWrite:!0,depthTest:!0})}function EJe(){let r=new Ke(wJe(),SJe());return r.name=IP,r.position.set(0,fJe,hJe),r.renderOrder=pJe,r}function AJe(r){r.traverse(e=>{if(!(e instanceof Ke)||e.name===IP)return;let t=Array.isArray(e.material)?e.material:[e.material];for(let n of t)n instanceof mn&&(n.transparent=!1,n.depthWrite=!0,n.depthTest=!0,"alphaTest"in n&&(n.alphaTest=Math.max(n.alphaTest??0,.1)),n.needsUpdate=!0);e.renderOrder=mJe})}function v7e(r){AJe(r),xJe(r);let e=r.userData.boatWaterPatch;return e||(e=EJe(),e.visible=!1,r.add(e),r.userData.boatWaterPatch=e),{waterPatch:e}}function g7e(r){let e=r.userData.boatWaterPatch;e&&(e.geometry.dispose(),e.material instanceof mn&&e.material.dispose(),delete r.userData.boatWaterPatch)}f();m();h();var _7e={horse:1.1,donkey:.87,mule:.92,skeleton_horse:1,zombie_horse:1};f();m();h();Pt();var RP={x:0,y:1.25,z:-.75},y7e=Lt.degToRad(20),sg=.05,MJe=new Set(["Head","UMouth","Ear1","Ear2","MuleEarL","MuleEarR","Neck","Mane","SaddleMouthL","SaddleMouthR","SaddleMouthLine","SaddleMouthLineR","HeadSaddle"]),Yc="_horseHeadRig",ag="_horseHeadAnimation";function b7e(r){let e=r.userData[Yc];if(e)return e;let t=[];r.traverse(i=>{i!==r&&MJe.has(i.name)&&t.push(i)});let n=new yt;n.name="horse_head_rig",n.position.set(RP.x,RP.y,RP.z),n.userData.horseHeadParts=t,r.add(n);for(let i of t)n.attach(i);return r.userData[Yc]=n,n}function TJe(r,e){let t=Math.PI*2,n=((e-r+Math.PI)%t+t)%t-Math.PI;return n===-Math.PI?Math.PI:n}function x7e(r){let{entityPitch:e,headYaw:t,bodyYaw:n,limbSwing:i,limbSwingAmount:s}=r,a=Number.isFinite(s)?Math.max(0,s):0,o=a>.2?Math.cos(i*.4)*.15*a:0,l=Lt.clamp(TJe(n,t),-y7e,y7e);return{pitch:(Number.isFinite(e)?e:0)-o,yaw:l}}function w7e(){return{prevLimbSwing:0,limbSwing:0,prevLimbSwingAmount:0,limbSwingAmount:0,elapsedSeconds:sg,tickAccumulatorSeconds:0}}function S7e(r,e){r.pendingPosition={x:e.x,z:e.z}}function kJe(r,e){r.prevLimbSwing=r.limbSwing,r.prevLimbSwingAmount=r.limbSwingAmount;let t=r.lastPosition==null?0:Math.hypot(e.x-r.lastPosition.x,e.z-r.lastPosition.z),n=Math.min(1,t*4);r.limbSwingAmount+=(n-r.limbSwingAmount)*.4,r.limbSwing+=r.limbSwingAmount,r.lastPosition={x:e.x,z:e.z}}function IJe(r,e){let t=Lt.clamp(e,0,1);return{limbSwing:r.prevLimbSwing+(r.limbSwing-r.prevLimbSwing)*t,limbSwingAmount:r.prevLimbSwingAmount+(r.limbSwingAmount-r.prevLimbSwingAmount)*t}}function E7e(r,e){let t=Math.max(0,e);for(r.elapsedSeconds=Math.min(sg,r.elapsedSeconds+t),r.tickAccumulatorSeconds+=t;r.tickAccumulatorSeconds>=sg;){let n=r.pendingPosition??r.lastPosition;n&&kJe(r,n),r.pendingPosition=void 0,r.tickAccumulatorSeconds-=sg}return r.elapsedSeconds=r.tickAccumulatorSeconds,IJe(r,r.elapsedSeconds/sg)}function A7e(r,e){r.rotation.set(e.pitch,e.yaw,0)}function RJe(r){return"parts"in r&&Array.isArray(r.parts)?r.parts:[r]}var CJe={up:{dir:[0,1,0],u0:[0,0,1],v0:[0,0,0],u1:[1,0,1],v1:[0,0,1],corners:[[0,1,1,0,0],[1,1,1,1,0],[0,1,0,0,1],[1,1,0,1,1]]},down:{dir:[0,-1,0],u0:[1,0,1],v0:[0,0,0],u1:[2,0,1],v1:[0,0,1],corners:[[1,0,1,0,0],[0,0,1,1,0],[1,0,0,0,1],[0,0,0,1,1]]},east:{dir:[1,0,0],u0:[0,0,0],v0:[0,0,1],u1:[0,0,1],v1:[0,1,1],corners:[[1,1,1,0,0],[1,0,1,0,1],[1,1,0,1,0],[1,0,0,1,1]]},west:{dir:[-1,0,0],u0:[1,0,1],v0:[0,0,1],u1:[1,0,2],v1:[0,1,1],corners:[[0,1,0,0,0],[0,0,0,0,1],[0,1,1,1,0],[0,0,1,1,1]]},north:{dir:[0,0,-1],u0:[0,0,1],v0:[0,0,1],u1:[1,0,1],v1:[0,1,1],corners:[[1,0,0,0,1],[0,0,0,1,1],[1,1,0,0,0],[0,1,0,1,0]]},south:{dir:[0,0,1],u0:[1,0,2],v0:[0,0,1],u1:[2,0,2],v1:[0,1,1],corners:[[0,0,1,0,1],[1,0,1,1,1],[0,1,1,0,0],[1,1,1,1,0]]}};function M7e(r,e){return r[0]*e[0]+r[1]*e[1]+r[2]*e[2]}function PJe(r,e,t,n,i=!1,s=64,a=64,o=!1,l=[]){let c=new or(0,0,0);n.rotation&&(c.x=-n.rotation[0]*Math.PI/180,c.y=-n.rotation[1]*Math.PI/180,c.z=-n.rotation[2]*Math.PI/180);for(let{dir:u,corners:d,u0:p,v0:v,u1:g,v1:b}of Object.values(CJe)){let y=Math.floor(r.positions.length/3),_=u[0]!==0,x=[];for(let w of d){let S,M;i?(S=(n.uv[0]+w[3]*n.size[0])/s,M=(n.uv[1]+w[4]*n.size[1])/a):(S=(n.uv[0]+M7e(w[3]?g:p,n.size))/s,M=(n.uv[1]+M7e(w[4]?b:v,n.size))/a);let T=_&&o?w[0]^1:w[0],C=w[1],I=_&&o?w[2]^1:w[2],k=n.inflate??0,L=new W(n.origin[0]+T*n.size[0]+(T?k:-k),n.origin[1]+C*n.size[1]+(C?k:-k),n.origin[2]+I*n.size[2]+(I?k:-k));L=L.applyEuler(c),L=L.sub(t.position),L=L.applyEuler(t.rotation),L=L.add(t.position),r.positions.push(L.x,L.y,L.z),r.normals.push(u[0],u[1],u[2]),x.push(S,M),r.skinIndices.push(e,0,0,0),r.skinWeights.push(1,0,0,0)}if(o)for(let w=0;w+1<d.length;w+=2){let S=w*2,M=x.slice(S,S+4);x[S]=M[2],x[S+1]=M[_?1:3],x[S+2]=M[0],x[S+3]=M[_?3:1]}r.uvs.push(...x),r.indices.push(y,y+1,y+2,y+2,y+1,y+3)}}function Jc(r,e,t,n={},i={}){let s=t.texturewidth??64,a=t.textureheight??64,o,l=e.startsWith("block:"),c=r?.material.map;if(l){if(!r)throw new Error("worldRenderer is required for block textures");let x=e.slice(6),w=r.resourcesManager.currentResources.blocksAtlasJson.textures[x];w?(s=c?.image.width??s,a=c?.image.height??a,o=[w.u,w.v]):console.error(`Unknown block ${x}`)}let u={},d={positions:[],normals:[],uvs:[],indices:[],skinIndices:[],skinWeights:[]},p=0;for(let x of t.bones){let w=new ho;if(x.pivot&&(w.position.x=x.pivot[0],w.position.y=x.pivot[1],w.position.z=x.pivot[2]),x.bind_pose_rotation?(w.rotation.x=-x.bind_pose_rotation[0]*Math.PI/180,w.rotation.y=-x.bind_pose_rotation[1]*Math.PI/180,w.rotation.z=-x.bind_pose_rotation[2]*Math.PI/180):x.rotation&&(w.rotation.x=-x.rotation[0]*Math.PI/180,w.rotation.y=-x.rotation[1]*Math.PI/180,w.rotation.z=-x.rotation[2]*Math.PI/180),n.rotation?.[x.name]&&(w.rotation.x-=(n.rotation[x.name].x??0)*Math.PI/180,w.rotation.y-=(n.rotation[x.name].y??0)*Math.PI/180,w.rotation.z-=(n.rotation[x.name].z??0)*Math.PI/180),w.name=`bone_${x.name}`,u[x.name]=w,x.cubes)for(let S of x.cubes){let M=[];PJe(d,p,w,S,l,s,a,x.mirror,M),M.length&&(i.errors??=[],i.errors.push(...M.map(T=>`Bone ${x.name}: ${T}`)))}p++}let v=[];for(let x of t.bones)x.parent&&u[x.parent]?u[x.parent].add(u[x.name]):v.push(u[x.name]);let g=new cl(Object.values(u)),b=new dt;b.setAttribute("position",new Je(d.positions,3)),b.setAttribute("normal",new Je(d.normals,3)),b.setAttribute("uv",new Je(d.uvs,2)),b.setAttribute("skinIndex",new B0(d.skinIndices,4)),b.setAttribute("skinWeight",new Je(d.skinWeights,4)),b.setIndex(d.indices);let y=new Ss({transparent:!0,alphaTest:.1,side:Cn}),_=new va(b,y);if(_.add(...v),_.bind(g),_.scale.set(1/16,1/16,1/16),o){let x=c.clone();x.offset.set(o[0],o[1]),x.needsUpdate=!0,y.map=x}else v4(e,x=>{y.map||(x.magFilter=ct,x.minFilter=ct,x.flipY=!1,x.wrapS=bs,x.wrapT=bs,y.map=x)},()=>{let x=y.map;if(!x)return;let w=x.image.width;w&&s!==w&&(x.repeat.x=s/w);let S=x.image.height;S&&a!==S&&(x.repeat.y=a/S),y.needsUpdate=!0});return _}var LJe=[{pattern:"furnace_minecart",target:"minecart"},{pattern:"spawner_minecart",target:"minecart"},{pattern:"chest_minecart",target:"minecart"},{pattern:"hopper_minecart",target:"minecart"},{pattern:"command_block_minecart",target:"minecart"},{pattern:"tnt_minecart",target:"minecart"},{pattern:"glow_item_frame",target:"item_frame"},{pattern:"glow_squid",target:"squid"},{pattern:"trader_llama",target:"llama"},{pattern:"chest_boat",target:"boat"},{pattern:"spectral_arrow",target:"arrow"},{pattern:"husk",target:"zombie"},{pattern:"zombie_horse",target:"horse"},{pattern:"donkey",target:"horse"},{pattern:"skeleton_horse",target:"horse"},{pattern:"mule",target:"horse"},{pattern:"ocelot",target:"cat"},{pattern:/_minecraft$/,target:"minecraft"},{pattern:/_boat$/,target:"boat"},{pattern:/_raft$/,target:"boat"},{pattern:/_horse$/,target:"horse"},{pattern:/_zombie$/,target:"zombie"},{pattern:/_arrow$/,target:"zombie"}];function T7e(r){for(let e of LJe)if(typeof e.pattern=="string"){if(e.pattern===r)return e.target}else if(e.pattern.test(r))return e.target}var k7e=r=>E_e[r],I7e={..._7e,zombie:1.85,husk:1.85,arrow:.0025},R7e={zombie:new Mt(0,1,0),husk:new Mt(0,1,0),boat:new Mt(0,h7e,0),arrow:new Mt(0,-.9,0)},l0=class{mesh;animations;animationControllers=[];constructor(e,t,n,i={},s={}){let a=t,o=T7e(t);if(o&&(t=o,s.tempMap=o),i.customModel){let c=RJe(i.customModel);this.mesh=new Ot;for(let u=0;u<c.length;u++){let{modelPath:d,modelType:p,metadata:v}=c[u],g=new Ot;switch(g.name=`custom_part_${u}`,p){case"gltf":{new Ob().parseAsync(d,"").then(y=>{if(g.add(y.scene),v?.scale){let _=v.scale;g.scale.set(_,_,_)}if(v?.offset){let{x:_=0,y:x=0,z:w=0}=v.offset;g.position.set(_,x,w)}if(v?.texture){let _=xh(v.texture);g.traverse(x=>{x instanceof Ke&&(x.material=new pt({map:_,transparent:!0,alphaTest:.1}))})}if(y.animations?.length){this.animations=[...this.animations??[],...y.animations];let _=l7e(g,y.animations);this.animationControllers.push(_);let x=v?.animation,w=v?.animationLoop??!0;x?_.playAnimation(x,w):_.playAnimation(y.animations[0].name,w)}}).catch(y=>{console.error("Failed to load GLTF model:",y)});break}case"obj":{let y=new Um().parse(d);if(v?.scale){let{scale:_}=v;y.scale.set(_,_,_)}if(v?.offset){let{x:_=0,y:x=0,z:w=0}=v.offset;y.position.set(_,x,w)}if(v?.texture){let _=xh(v.texture),x=new pt({map:_,transparent:!0,alphaTest:.1});y.traverse(w=>{w instanceof Ke&&(w.material=x)})}g.add(y);break}case"bedrock":{let b=JSON.parse(d);if(v?.scale&&g.scale.set(v.scale,v.scale,v.scale),v?.offset){let{x:y=0,y:_=0,z:x=0}=v.offset;g.position.set(y,_,x)}for(let[y,_]of Object.entries(b.geometry)){let x=v?.textures?.[y]??b.textures?.[y];if(!x)continue;let w=Jc(n,x.endsWith(".png")||x.startsWith("data:image/")||x.startsWith("block:")?x:x+".png",_,i,s);w.name=`geometry_${y}`,g.add(w)}break}}this.mesh.add(g)}s.type=c.length===1?c[0].modelType:"special";return}if($d[t]){let c=new Um,u={zombie_horse:`textures/${e}/entity/horse/horse_zombie.png`,husk:y_e,skeleton_horse:`textures/${e}/entity/horse/horse_skeleton.png`,donkey:`textures/${e}/entity/horse/donkey.png`,mule:`textures/${e}/entity/horse/mule.png`,ocelot:b_e,arrow:x_e,spectral_arrow:w_e,tipped_arrow:S_e},d=u[a]||u[t];d&&(s.textureMap=!0);let p=d||MP[t];if(MP[t]&&(s.isHardcodedTexture=!0),!p)throw new Error(`No texture for ${t}`);let v=xh(p),g=new pt({map:v,transparent:!0,alphaTest:.1}),b=c.parse($d[t]),y=I7e[a]||I7e[t];y&&b.scale.set(y,y,y);let _=R7e[a]??R7e[t];_&&b.position.set(_.x,_.y,_.z),b.traverse(x=>{x instanceof Ke&&(x.material=g,x.name==="Head layer"&&(x.visible=!1),t!=="horse"&&x.name==="Head"&&i.rotation?.head&&(x.rotation.x-=(i.rotation.head.x??0)*Math.PI/180,x.rotation.y-=(i.rotation.head.y??0)*Math.PI/180,x.rotation.z-=(i.rotation.head.z??0)*Math.PI/180))}),t==="horse"&&b7e(b),this.mesh=b,s.type="obj";return}let l=k7e(t);if(l){this.mesh=new Ot;for(let[c,u]of Object.entries(l.geometry)){let d=i.textures?.[c]??l.textures[c];if(!d)continue;let p=Jc(n,d.endsWith(".png")||d.startsWith("data:image/")||d.startsWith("block:")?d:d+".png",u,i,s);p.name=`geometry_${c}`,this.mesh.add(p)}s.type="bedrock"}}playAnimation(e,t=!1){if(!this.animationControllers.length){console.warn("No animation controller available");return}let n=!1;for(let i of this.animationControllers)i.playAnimation(e,t)&&(n=!0);n||console.warn(`Animation "${e}" not found on any custom model part`)}update(e){}static getStaticData(e){if(e=T7e(e)||e,$d[e])return{boneNames:[]};let t=k7e(e);if(!t)throw new Error(`Unknown entity ${e}`);return{boneNames:Object.values(t.geometry).flatMap(n=>n.name)}}};globalThis.EntityMesh=l0;f();m();h();var C7e=105*Math.PI/180;function P7e(r,e){let t=e-r;for(;t>Math.PI;)t-=Math.PI*2;for(;t<-Math.PI;)t+=Math.PI*2;return t}function DJe(r){return P7e(0,r)}function OJe(r){return Math.max(-C7e,Math.min(C7e,r))}function Ub(r){let{cameraYaw:e,cameraPitch:t,vehicleYaw:n}=r,i=P7e(n,e),s=OJe(i),a=DJe(n+s);return{bodyYaw:n,headYaw:s,headPitch:-t,effectiveCameraYaw:a}}function CP(r){return r.isAnchoredPassenger&&$o(r.vehicleName)&&typeof r.vehicleYaw=="number"&&Number.isFinite(r.vehicleYaw)}function L7e(r){return r.isThirdPerson&&CP(r)}f();m();h();Pt();var NJe=Math.PI/8,VJe=20,UJe=NJe*VJe;function U7e(){return{current:new Dt,rest:new Dt,delta:new Dt,euler:new or(0,0,0,"ZYX")}}function F7e(){return{leftActive:!1,rightActive:!1,leftPhase:0,rightPhase:0}}function B7e(r,e,t){return r+(e-r)*t}function D7e(r,e,t){if(!e)return 0;let n=Number.isFinite(t)&&t>=0?t:0,i=Math.PI*2;return(r+n*UJe)%i}function O7e(r,e){let t=B7e(-Math.PI/3,-Math.PI/12,(Math.sin(-r)+1)/2),n=B7e(-Math.PI/4,Math.PI/4,(Math.sin(-r+1)+1)/2);e===1&&(n=Math.PI-n);let i=Math.PI/16;return{xRot:t,yRot:n,zRot:i}}function N7e(r,e,t){return t.set(-r.xRot,r.yRot,-r.zRot,"ZYX"),e.setFromEuler(t)}function FJe(r,e,t){return r===0?t.delta.identity():(N7e(O7e(r,e),t.current,t.euler),N7e(O7e(0,e),t.rest,t.euler),t.delta.copy(t.current).multiply(t.rest.invert()))}function V7e(r,e,t,n){r.quaternion.copy(FJe(e,t,n))}function z7e(r,e,t){r.leftActive!==e&&(r.leftActive=e,r.leftPhase=0),r.rightActive!==t&&(r.rightActive=t,r.rightPhase=0)}function H7e(r,e,t,n,i){r.leftPhase=D7e(r.leftPhase,r.leftActive,e),r.rightPhase=D7e(r.rightPhase,r.rightActive,e),t&&V7e(t,r.leftPhase,0,i),n&&V7e(n,r.rightPhase,1,i)}f();m();h();function q7e(r){return r==="horse"}function Fb(r){return r!=null&&Number.isFinite(r.x)&&Number.isFinite(r.y)&&Number.isFinite(r.z)}function G7e(r,e,t){Fb(e)&&(r.userData._posTween?.stop(),r.userData._posTween=void 0,r.userData._tweenTarget??={...e},Object.assign(r.userData._tweenTarget,e),r.position.set(e.x,e.y,e.z),r.userData._passengerVehicleId=t,delete r.userData._boatPassengerVehicleId)}function zb(r,e,t){return(r.userData._passengerVehicleId??r.userData._boatPassengerVehicleId)!==e?!1:(r.userData._posTween?.stop(),r.userData._posTween=void 0,t&&(r.userData._tweenTarget??={...t},Object.assign(r.userData._tweenTarget,t)),delete r.userData._passengerVehicleId,delete r.userData._boatPassengerVehicleId,!0)}f();m();h();f();m();h();var zJe=50,PP=120,HJe=150,qJe=1e-4;function LP(r){return!!r?.renderHints?.localVehicle}function W7e(r){return r?.localVehicleYawLock==="horse"}function j7e(r,e){return Number.isFinite(e)?(r.rotation.y=e,r.userData._horseBodyYaw=e,r.userData._horseHeadYaw=e,!0):!1}function BP(r,e){return e||LP(r)?0:PP}function X7e(r,e){return BP(r,e)}function GJe(r,e,t=qJe){return Math.abs(r.x-e.x)<t&&Math.abs(r.y-e.y)<t&&Math.abs(r.z-e.z)<t}function $7e(r,e=!1){if(e)return 0;switch(r){case"spectating":return HJe;case"server-vehicle":return PP;case"local-player":default:return zJe}}function Y7e(r){return r.instant||r.currentTarget==null||r.movementMode!==r.previousMovementMode?!0:!GJe(r.target,r.currentTarget)}function WJe(r,e){return{x:r.x,y:e,z:r.z}}function J7e(r){let{cameraWorldPos:e,rawVehicleY:t,eyeHeight:n,vehicleName:i,vehicleHeight:s,verticalCameraLock:a}=r;if(a==="horse"){let o=e.y-n-t4e(i,s);if(Number.isFinite(o))return{x:e.x,y:o,z:e.z}}return WJe(e,t)}var jJe=new Set(["minecart","chest_minecart","furnace_minecart","hopper_minecart","tnt_minecart","spawner_minecart","command_block_minecart"]),XJe=new Set(["horse","donkey","mule","skeleton_horse","zombie_horse"]);function K7e(r){return r?XJe.has(r):!1}function Hb(r){return r?jJe.has(r):!1}function $Je(r,e){return e<=1?0:r===0?.2:-.6}var YJe=.5625,JJe=.7,KJe=-.35,ZJe=-.1,QJe=0,eKe=-.6,tKe=.1875,nKe=1/3,rKe=.8888889;function Z7e(r,e,t,n){let i=Number.isFinite(n)?n:r==="boat"?YJe:JJe;if(dA(e)>=dA("1.20.2")){let a=typeof t=="string"&&t.toLowerCase().endsWith("_raft");return(r==="boat"?i*(a?rKe:nKe):tKe)+eKe}return(r==="boat"?ZJe:QJe)+KJe}function Q7e(r,e,t,n,i,s,a){let o=$Je(t,n);return{x:r.x-Math.sin(e)*o,y:r.y+Z7e("boat",i,s,a),z:r.z+Math.cos(e)*o}}function e4e(r,e,t,n){return{x:r.x,y:r.y+Z7e("minecart",e,t,n),z:r.z}}function t4e(r,e){let t=0;return r==="donkey"||r==="mule"?t=.25:r==="skeleton_horse"&&(t=.1875),e*.75-t-.35}function n4e(r,e,t=1.6){return{x:r.x,y:r.y+t4e(e,t),z:r.z}}function r4e(r){let e=new Set;for(let t of Object.values(r.entities)){let n=t,i=n.userData.renderHints,s=i?.passengerIds??i?.boatPassengerIds;if(!Array.isArray(s)||s.length===0)continue;let a=n.realName??n.originalEntity.name,o=i?.passengerLayout??($o(a)?"boat":void 0);if(o!=="boat"&&o!=="minecart"&&o!=="horse"||o==="boat"&&!$o(a)||o==="minecart"&&!Hb(a)||o==="horse"&&!K7e(a))continue;let l=r.getWorldPosition(n);if(!Fb(l))continue;let c=String(n.originalEntity.id);for(let[u,d]of s.entries()){let v=d===r.localPlayer?.originalEntity.id?r.localPlayer:r.entities[d];if(!v?.playerObject||v===r.localPlayer&&q7e(o))continue;let g=o==="minecart"?e4e(l,r.version,a,n.originalEntity.height):o==="horse"?n4e(l,a,n.originalEntity.height??1.6):Q7e(l,n.rotation.y,u,s.length,r.version,a,n.originalEntity.height);Fb(g)&&(G7e(v,g,c),e.add(v))}}for(let t of[...Object.values(r.entities),...r.localPlayer?[r.localPlayer]:[]]){let n=t.userData._passengerVehicleId??t.userData._boatPassengerVehicleId;n===void 0||e.has(t)||zb(t,n,r.getWorldPosition(t))}return e}f();m();h();function i4e(r,e){typeof e=="number"&&Number.isFinite(e)&&(r._networkHeadPitch=e)}function DP(r,e,t){if(typeof e=="number"&&Number.isFinite(e)){r._networkHeadYaw=e;return}typeof t=="number"&&Number.isFinite(t)&&(r._networkHeadYaw=t)}function s4e(r){let e=r._networkHeadPitch;return typeof e=="number"&&Number.isFinite(e)?e:0}function qb(r,e){let t=e._networkHeadPitch;typeof t!="number"||!Number.isFinite(t)||(r.skin.head.rotation.y=0,r.skin.head.rotation.x=-t)}function a4e(r,e){r.skin.head.rotation.y=0,qb(r,e)}f();m();h();function o4e(r){return r._passengerVehicleId??r._boatPassengerVehicleId}function l4e(r){r._rotTween?.stop(),r._rotTween=void 0}function iKe(r){let{passenger:e,networkHeadYaw:t,vehicleYaw:n}=r,i=e.playerObject;if(!i)return;l4e(e.userData);let s=Ub({cameraYaw:t,cameraPitch:s4e(e.userData),vehicleYaw:n});e.rotation.set(0,s.bodyYaw,0),i.skin.head.rotation.set(s.headPitch,s.headYaw,0),e.userData._remoteBoatRotationApplied=!0}function sKe(r){let e=r.playerObject;if(!e)return;l4e(r.userData);let t=r.userData._networkHeadYaw;typeof t=="number"&&Number.isFinite(t)&&r.rotation.set(0,t,0),a4e(e,r.userData),r.userData._remoteBoatRotationApplied=!1}function aKe(r){let{passenger:e,vehicle:t,syncArmor:n}=r;if(!e.playerObject)return;let i=e.userData,s=i._remoteBoatRotationApplied===!0,a=o4e(i),o=t?.realName??t?.originalEntity.name,l=t?.rotation.y;if(!CP({isAnchoredPassenger:a!=null&&t!=null,vehicleName:o,vehicleYaw:l})){s&&(sKe(e),n?.());return}let u=i._networkHeadYaw;typeof u!="number"||!Number.isFinite(u)||(iKe({passenger:e,vehicle:t,vehicleYaw:l,networkHeadYaw:u}),n?.())}function c4e(r){for(let e of Object.values(r.entities)){if(!e?.playerObject)continue;let t=o4e(e.userData),n=t!=null?r.entities[t]:void 0;aKe({passenger:e,vehicle:n,syncArmor:e.visible?()=>r.syncArmor(e):void 0})}}f();m();h();f();m();h();var u4e="";f();m();h();var d4e="";f();m();h();var f4e="";f();m();h();var h4e="";f();m();h();var m4e="";f();m();h();var p4e="";f();m();h();var v4e="";f();m();h();var g4e="";f();m();h();var _4e="";f();m();h();var y4e="";f();m();h();var b4e="";f();m();h();var x4e="";f();m();h();var w4e="";f();m();h();var S4e="";f();m();h();var E4e="";f();m();h();var OP="";var Kc={skull:{bones:[{name:"head",pivot:[0,12,0],cubes:[{origin:[-4,0,-4],size:[8,8,8],uv:[0,0],inflate:1}]},{name:"overlay",parent:"head",pivot:[0,12,0],cubes:[{origin:[-4,0,-4],size:[8,8,8],uv:[32,0],inflate:1.2}]}],visible_bounds_width:1.5,visible_bounds_offset:[0,.5,0],texturewidth:64,textureheight:32},head:{bones:[{name:"armor",pivot:[0,12,0]},{name:"head",parent:"armor",pivot:[0,12,0],cubes:[{origin:[-4,23,-4],size:[8,8,8],uv:[0,0],inflate:1}]},{name:"overlay",parent:"head",pivot:[0,12,0],cubes:[{origin:[-4,23,-4],size:[8,8,8],uv:[32,0],inflate:1.2}]}],visible_bounds_width:1.5,visible_bounds_offset:[0,.5,0],texturewidth:64,textureheight:32},chest:{bones:[{name:"armor",pivot:[0,12,0]},{name:"body",parent:"armor",pivot:[0,13,0],cubes:[{origin:[-4,12,-2],size:[8,12,4],uv:[16,16],inflate:1}]},{name:"leftarm",parent:"armor",pivot:[5,10,0],cubes:[{origin:[4,12,-2],size:[4,12,4],uv:[40,16],inflate:.85}]},{name:"rightarm",parent:"armor",pivot:[-5,10,0],cubes:[{origin:[-8,12,-2],size:[4,12,4],uv:[40,16],inflate:.85}],mirror:!0}],visible_bounds_width:1.5,visible_bounds_offset:[0,.5,0],texturewidth:64,textureheight:32},legs:{bones:[{name:"armor",pivot:[0,12,0]},{name:"body",parent:"armor",pivot:[0,13,0],cubes:[{origin:[-4,12,-2],size:[8,12,4],uv:[16,16],inflate:.5}]},{name:"leftleg",parent:"armor",pivot:[1.9,1,0],cubes:[{origin:[-.1,0,-2],size:[4,12,4],uv:[0,16],inflate:.5}]},{name:"rightleg",parent:"armor",pivot:[-1.9,1,0],cubes:[{origin:[-3.9,0,-2.01],size:[4,12,4],uv:[0,16],inflate:.5}],mirror:!0}],visible_bounds_width:1.5,visible_bounds_offset:[0,.5,0],texturewidth:64,textureheight:32},feet:{bones:[{name:"armor",pivot:[0,12,0]},{name:"leftleg",parent:"armor",pivot:[1.9,1,0],cubes:[{origin:[-.1,0,-2],size:[4,12,4],uv:[0,16],inflate:.8}]},{name:"rightleg",parent:"armor",pivot:[-1.9,1,0],cubes:[{origin:[-3.9,.01,-2.01],size:[4,12,4],uv:[0,16],inflate:.8}],mirror:!0}],visible_bounds_width:1.5,visible_bounds_offset:[0,.5,0],texturewidth:64,textureheight:32}};var A4e={leather_layer_1:_4e,leather_layer_1_overlay:y4e,leather_layer_2:b4e,leather_layer_2_overlay:x4e,chainmail_layer_1:u4e,chainmail_layer_2:d4e,iron_layer_1:v4e,iron_layer_2:g4e,diamond_layer_1:f4e,diamond_layer_2:h4e,golden_layer_1:m4e,golden_layer_2:p4e,netherite_layer_1:w4e,netherite_layer_2:S4e,turtle_layer_1:E4e};var C4e=bh(is);var NP=r=>r*(Math.PI/180);function lKe(r){return r<0&&(r=4294967295+r+1>>>0),r.toString(16)}function cKe(r){if(r===void 0)return;if(parseInt(r,10)===0)return"rgba(0, 0, 0, 0)";let e=lKe(parseInt(r,10));return e.length===8?`#${e.slice(2,8)}${e.slice(0,2)}`:`#${e}`}function M4e(r,e){return r===void 0?e:r instanceof Dt?r:Array.isArray(r)?new Dt(r[0],r[1],r[2],r[3]):new Dt(r.x,r.y,r.z,r.w)}function Yo(r,e){return r===void 0?e??new or:r instanceof or?r:r.yaw!==void 0&&r.pitch!==void 0&&r.roll!==void 0?new or(-NP(r.pitch),-NP(r.yaw),NP(r.roll),"ZYX"):r.x!==void 0&&r.y!==void 0&&r.z!==void 0?new or(r.z,r.y,r.x,"ZYX"):Array.isArray(r)?new or(r[0],r[1],r[2]):e??new or}var Gb=Math.PI*2;function uKe(r,e){let t=((e-r)%Gb+Gb)%Gb;return t>Math.PI?t-Gb:t}function dKe(r,e,t,n,i){let s=e==="speaking"?"#3ddc47":e==="muted"?"#ff5555":"#cfcfcf";r.save(),r.translate(t,n),r.fillStyle=s,r.strokeStyle=s,r.lineWidth=Math.max(1.5,i*.09),r.lineCap="round";let a=i*.22,o=i*.34,l=i*.24,c=-i*.44;r.beginPath(),r.moveTo(c,-o/2),r.lineTo(c+a,-o/2),r.lineTo(c+a+l,-i*.5),r.lineTo(c+a+l,i*.5),r.lineTo(c+a,o/2),r.lineTo(c,o/2),r.closePath(),r.fill();let u=c+a+l;e==="speaking"&&(r.beginPath(),r.arc(u+i*.06,0,i*.16,-Math.PI*.32,Math.PI*.32),r.stroke(),r.beginPath(),r.arc(u+i*.06,0,i*.28,-Math.PI*.28,Math.PI*.28),r.stroke()),e==="muted"&&(r.beginPath(),r.moveTo(-i*.46,-i*.46),r.lineTo(i*.46,i*.46),r.stroke()),r.restore()}function P4e({username:r,nameTagBackgroundColor:e="rgba(0, 0, 0, 0.3)",nameTagTextOpacity:t=255,voiceState:n},{fontFamily:i="mojangles"},s){let a=$r(64,64),o=(0,UP.default)(s),l=a.getContext("2d");if(!l)throw new Error("Could not get 2d context");let c=48,u=5;l.font=`${c}px ${i}`;let d=String(typeof r=="string"?r:new o(r).toString()).split(`
|
|
29381
|
+
`),p=0;for(let M of d){let T=l.measureText(M).width+u*2;T>p&&(p=T)}let v=(c+u)*d.length,g=$r(p,v),b=g.getContext("2d");if(!b)throw new Error("Could not get 2d context");if(b.globalAlpha=t/255,!XC(r,o,g,c,"white",-u+c))return;b.globalAlpha=1;let _=c*.85,x=n?_+u*2.5:0,w=$r(x+p,v),S=w.getContext("2d");if(!S)throw new Error("Could not get 2d context");return S.fillStyle=e,S.fillRect(0,0,w.width,w.height),n&&dKe(S,n,x/2,w.height/2,_),S.drawImage(g,x,0),w}globalThis.getUsernameTexture=P4e;var cg=(r,e,t,n)=>{for(let l of t.children)l.name==="nametag"&&l.removeFromParent();if(r.username===void 0||r.username===null||(typeof r.username=="string"?r.username:new((0,UP.default)(n))(r.username).toString()).startsWith("EMPTY"))return;let s=P4e(r,e,n);if(!s)return;let a=new sn(s);a.needsUpdate=!0;let o;if(r.nameTagFixed){let l=new qn,c=new pt({map:a});c.transparent=!0,o=new Ke(l,c),o.rotation.set(r.pitch,Lt.degToRad(r.yaw+180),0),o.position.y+=r.height+.3}else{let l=new xs({map:a});o=new Zi(l),o.position.y+=r.height+.6}return o.renderOrder=1e3,o.scale.set(s.width*.005,s.height*.005,1),r.nameTagRotationRight&&o.applyQuaternion(r.nameTagRotationRight),r.nameTagScale&&o.scale.multiply(r.nameTagScale),r.nameTagRotationLeft&&o.applyQuaternion(r.nameTagRotationLeft),r.nameTagTranslation&&o.position.add(r.nameTagTranslation),o.name="nametag",t.add(o),o};function T4e(r,e){r&&(r.position.y=e.position.y+e.scale.y*16+3,r.scale.multiplyScalar(12))}var k4e={},fKe=r=>r.charAt(0)===r.charAt(0).toUpperCase();function I4e(r){if(r!=null){if(Array.isArray(r))return r;if(typeof r=="object"){let e=r,t=Object.keys(e).filter(n=>/^\d+$/.test(n)).map(Number).sort((n,i)=>n-i);if(t.length&&t[0]===0&&t.every((n,i)=>n===i))return t.map(n=>e[String(n)])}}}function hKe(r,e,t,n,i){if(e.name)try{let c=(fKe(e.name)?WC(e.name):e.name).toLowerCase(),u=new l0("1.16.4",c,t,i);if(u.mesh)return cg(e,n,u.mesh,t.version),u.mesh}catch(c){reportError?.(c)}if(!r||!(0,R4e.isEntityAttackable)(r,e))return;let s=new pn(e.width,e.height,e.width);s.translate(0,e.height/2,0);let a=new pt({color:16711935}),o=new Ke(s,a);return(k4e[e.name]=(k4e[e.name]||0)+1)<6&&cg({username:e.name,height:e.height},n,o,t.version),o}var Xb=class{constructor(e,t){this.worldRenderer=e;this.mcData=t;this.debugMode="none",this.onSkinUpdate=()=>{},this.watchResourcesUpdates()}entities={};playerEntity=null;entitiesOptions={fontFamily:"mojangles"};debugMode;onSkinUpdate;clock=new qs;currentlyRendering=!0;cachedMapsImages={};itemFrameMaps={};pendingModelOverrides=new Map;boatPaddleScratch=U7e();get entitiesByName(){let e={};for(let t of Object.values(this.entities))t.realName&&(e[t.realName]=e[t.realName]||[],e[t.realName].push(t));return e}get entitiesRenderingCount(){return Object.values(this.entities).filter(e=>e.visible).length}getDebugString(){let e=Object.keys(this.entities).length,t=this.entitiesRenderingCount,n=Object.values(this.entities).filter(s=>s.playerObject),i=n.filter(s=>s.visible);return`${t}/${e} ${i.length}/${n.length}`}handlePlayerEntity(e){if(this.isRenderingAllowed()){if(!this.playerEntity){let t=new yt;t.originalEntity={...e,name:"player"};let n=new yt,i=this.setupPlayerObject(e,n,{});t.playerObject=i,t.add(n),t.name="player_entity",this.playerEntity=t,this.syncSceneAttachment(t),this.updatePlayerSkin(e.id,e.username,e.uuid??void 0,is)}this.playerEntity.originalEntity={...e,name:"player"},e.position&&(this.worldRenderer.sceneOrigin.getWorldPosition(this.playerEntity)||this.worldRenderer.sceneOrigin.track(this.playerEntity),this.playerEntity.position.set(e.position.x,e.position.y,e.position.z)),e.yaw!==void 0&&(this.playerEntity.rotation.y=e.yaw),this.updateEntityEquipment(this.playerEntity,e)}}clear(){for(let e of Object.values(this.entities))this.worldRenderer.sceneOrigin.removeAndUntrack(e),mr(e);this.entities={},this.currentSkinUrls={},this.playerVoiceStates={},this.playerEntity&&(this.worldRenderer.sceneOrigin.removeAndUntrack(this.playerEntity),mr(this.playerEntity),this.playerEntity=null)}reloadEntities(){for(let e of Object.values(this.entities))this.update({...e.originalEntity,delete:!0},{}),this.update(e.originalEntity,{})}watchResourcesUpdates(){this.worldRenderer.resourcesManager.on("assetsTexturesUpdated",()=>this.reloadEntities()),this.worldRenderer.resourcesManager.on("assetsInventoryReady",()=>this.reloadEntities())}setDebugMode(e,t=null){this.debugMode=e;for(let n of t?[t]:Object.values(this.entities)){let i=n.children.find(s=>s.name==="debug");i.visible=!1,this.debugMode==="basic"&&(i.visible=!0)}}setRendering(e,t=null){this.currentlyRendering=e&&this.isRenderingAllowed(),this.setSceneAttached(this.currentlyRendering,t)}isRenderingAllowed(){return this.worldRenderer.worldRendererConfig.renderEntities!==!1&&!this.worldRenderer.reactiveDebugParams.disableEntities}syncSceneAttachment(e=null){let t=this.isRenderingAllowed();this.currentlyRendering=t,this.setSceneAttached(t,e)}setSceneAttached(e,t=null){let n=t?[t]:[...Object.values(this.entities),...this.playerEntity?[this.playerEntity]:[]];for(let i of n)e?this.worldRenderer.scene.children.includes(i)||this.worldRenderer.scene.add(i):this.worldRenderer.scene.remove(i)}playEntityModelAnimation(e,t,n=!1){let i=this.entities[e];i&&i.traverse(s=>{s instanceof l0&&s.playAnimation(t,n)})}render(){if(this.syncSceneAttachment(),!this.isRenderingAllowed())return;this.clock.update(performance.now());let e=Math.min(this.clock.getDelta(),1/30),t=this.worldRenderer.viewerChunkPosition,n=10*10;for(let[i,s]of[...Object.entries(this.entities),["player_entity",this.playerEntity]]){if(!s)continue;let a=i==="player_entity";if(a){let u=this.worldRenderer.playerStateUtils.isThirdPerson();s.visible=u;let d=s.userData._passengerVehicleId!=null||s.userData._boatPassengerVehicleId!=null;if(u&&!d){let p=this.worldRenderer.playerStateReactive.eyeHeight;s.position.set(this.worldRenderer.cameraWorldPos.x,this.worldRenderer.cameraWorldPos.y-p,this.worldRenderer.cameraWorldPos.z)}}let{playerObject:o}=s;if(o?.animation&&o.animation.update(o,e),!a){let u=s.userData.renderHints;W7e(u)&&j7e(s,this.worldRenderer.cameraShake.getBaseRotation().yaw)}let l=s.userData[Yc],c=s.userData[ag];if(l&&c){let u=E7e(c,e),d=x7e({entityPitch:s.userData._horseHeadPitch??0,headYaw:s.userData._horseHeadYaw??s.userData._horseBodyYaw??0,bodyYaw:s.userData._horseBodyYaw??0,limbSwing:u.limbSwing,limbSwingAmount:u.limbSwingAmount});A7e(l,d)}if(!a&&o&&qb(o,s.userData),s.traverse(u=>{u instanceof l0&&u.update(e)}),!a&&t&&s.position){let u=s.position.x-t.x,d=s.position.y-t.y,p=s.position.z-t.z,v=u*u+d*d+p*p,g=this.worldRenderer.entitySectionKey(s.position.x,s.position.y,s.position.z),b=this.worldRenderer.isSectionOcclusionVisible(g);s.visible=!!((v<n||this.worldRenderer.shouldObjectVisible(s))&&b),this.maybeRenderPlayerSkin(i)}if(s.userData.renderHints?.localVehicle){let u=this.resolveLocalVehicleRenderWorldPos(s);s.position.set(u.x,u.y,u.z)}s.visible&&!a&&this.syncArmorPositions(s)}this.updateVehiclePassengerPositions(),this.applyRemoteBoatPassengerRotations(),this.applyLocalThirdPersonPlayerRotation(),this.updateBoatPaddleAnimations(e)}applyRemoteBoatPassengerRotations(){c4e({entities:this.entities,syncArmor:e=>this.syncArmorPositions(e)})}updateBoatPaddleAnimations(e){for(let t of Object.values(this.entities)){if(!t||!$o(t.realName))continue;let n=t.children.find(s=>s.name==="mesh");if(!n)continue;let i=n.userData.boatPaddleAnimation;i&&H7e(i,e,n.userData.boatPaddleLeftPivot,n.userData.boatPaddleRightPivot,this.boatPaddleScratch)}}applyLocalThirdPersonPlayerRotation(){let e=this.playerEntity;if(!e?.visible||!e.playerObject)return;let t=this.worldRenderer.cameraShake.getBaseRotation(),n=e.userData._passengerVehicleId!=null||e.userData._boatPassengerVehicleId!=null,i=e.userData._passengerVehicleId??e.userData._boatPassengerVehicleId,s=i!=null?this.entities[i]:void 0,a=s?.realName??s?.originalEntity.name,o=s?.rotation.y;if(L7e({isThirdPerson:!0,isAnchoredPassenger:n,vehicleName:a,vehicleYaw:o})){let l=Ub({cameraYaw:t.yaw,cameraPitch:t.pitch,vehicleYaw:o});e.rotation.set(0,l.bodyYaw,0),e.traverse(c=>{c.name==="head"&&c.rotation.set(l.headPitch,l.headYaw,0)})}else e.rotation.set(0,t.yaw,0),e.traverse(l=>{l.name==="head"&&l.rotation.set(-t.pitch,0,0)});this.syncArmorPositions(e)}resolvePassengerEntity(e){return this.playerEntity?.originalEntity.id===e?this.playerEntity:this.entities[e]}resolveLocalVehicleRenderWorldPos(e){let t=e.originalEntity,n=e.userData.renderHints,i=e.userData._localVehicleY??t.position?.y??e.position.y;return J7e({cameraWorldPos:this.worldRenderer.cameraWorldPos,rawVehicleY:i,eyeHeight:this.worldRenderer.playerStateReactive.eyeHeight,vehicleName:e.realName??t.name,vehicleHeight:t.height??1.6,verticalCameraLock:n?.localVehicleVerticalCameraLock})}updateVehiclePassengerPositions(){r4e({entities:this.entities,localPlayer:this.playerEntity,getWorldPosition:e=>this.worldRenderer.sceneOrigin.getWorldPosition(e),version:this.worldRenderer.version})}updateBoatPassengerPositions(){this.updateVehiclePassengerPositions()}syncArmorPositions(e){e.playerObject&&e.traverse(t=>{if(!t.name.startsWith("geometry_armor_"))return;let{skin:n}=e.playerObject;switch(t.name){case"geometry_armor_head":t.children[0]?.children[0]&&t.children[0].children[0].rotation.set(-n.head.rotation.x,n.head.rotation.y,n.head.rotation.z,n.head.rotation.order);break;case"geometry_armor_legs":t.children[0]&&(t.children[0].children[2]&&t.children[0].children[2].rotation.set(-n.leftLeg.rotation.x,n.leftLeg.rotation.y,n.leftLeg.rotation.z,n.leftLeg.rotation.order),t.children[0].children[1]&&t.children[0].children[1].rotation.set(-n.rightLeg.rotation.x,n.rightLeg.rotation.y,n.rightLeg.rotation.z,n.rightLeg.rotation.order));break;case"geometry_armor_feet":t.children[0]&&(t.children[0].children[0]&&t.children[0].children[0].rotation.set(-n.rightLeg.rotation.x,n.rightLeg.rotation.y,n.rightLeg.rotation.z,n.rightLeg.rotation.order),t.children[0].children[1]&&t.children[0].children[1].rotation.set(-n.leftLeg.rotation.x,n.leftLeg.rotation.y,-n.leftLeg.rotation.z,n.leftLeg.rotation.order));break}})}getPlayerObject(e){return this.playerEntity?.originalEntity.id===e?this.playerEntity?.playerObject:this.entities[e]?.playerObject}playerVoiceStates={};setPlayerVoiceState(e,t,n){let i=String(e);n?this.playerVoiceStates[i]=n:delete this.playerVoiceStates[i];let s=this.entities[e],a=s?.playerObject;if(!s||!a)return;let o=s.children.find(c=>c.name==="mesh");if(!o)return;let l=cg({username:t,voiceState:n},this.entitiesOptions,o,this.worldRenderer.version);T4e(l,a)}uuidPerSkinUrlsCache={};currentSkinUrls={};isCanvasBlank(e){return!e.getContext("2d")?.getImageData(0,0,e.width,e.height).data.some(n=>n!==0)}async updatePlayerSkin(e,t,n,i,s=void 0){i!==is&&this.loadedSkinEntityIds.add(String(e)),n&&((typeof i=="string"||typeof s=="string")&&(this.uuidPerSkinUrlsCache[n]={}),typeof i=="string"&&(this.uuidPerSkinUrlsCache[n].skinUrl=i),typeof s=="string"&&(this.uuidPerSkinUrlsCache[n].capeUrl=s),i===!0&&(i=this.uuidPerSkinUrlsCache[n]?.skinUrl??i),s??=this.uuidPerSkinUrlsCache[n]?.capeUrl);let o=this.getPlayerObject(e);if(!o)return;if(i===!0){if(!t)return;let c=await dc(t,"skin");if(!this.getPlayerObject(e)||!c)return;i=c}if(typeof i!="string")throw new Error("Invalid skin url");if(this.currentSkinUrls[String(e)]===i){if(s){if(s===!0&&t){let c=await dc(t,"cape");if(!this.getPlayerObject(e)||!c)return;s=c}typeof s=="string"&&this.loadAndApplyCape(e,s)}return}i!==is&&(this.currentSkinUrls[String(e)]=i);let l=this.worldRenderer.worldRendererConfig.renderEars||t==="deadmau5";this.loadAndApplySkin(e,i,l).then(async()=>{if(s){if(s===!0&&t){let c=await dc(t,"cape");if(!this.getPlayerObject(e)||!c)return;s=c}typeof s=="string"&&this.loadAndApplyCape(e,s)}}),o.cape.visible=!1,s||(o.backEquipment=null,o.elytra.map=null,o.cape.map&&o.cape.map.dispose(),o.cape.map=null)}async applyTemporaryPlayerSkinOverride(e,t,n,i){this.worldRenderer.playerStateReactive.playerSkin=e,await this.updatePlayerSkin(t,n,i,e,void 0)}async loadAndApplySkin(e,t,n){let i=this.getPlayerObject(e);if(i)try{let s;if(i=this.getPlayerObject(e),!i)return;let a,o;if(t===is){let c=await Ro(is);s=c.image,a=new Nn(c.canvas),o=c.canvas}else{let{canvas:c,image:u}=await Ro(t);s=u,a=new Nn(c),o=c}a.magFilter=ct,a.minFilter=ct,a.needsUpdate=!0,i.skin.map=a,i.skin.modelType=cA(o),i.skin.isCustom=t!==is,$C(i);let l;if(s?n&&(l=$r(64,64),uA(l,s),n=!this.isCanvasBlank(l)):n=!1,n){let c=new Nn(l);c.magFilter=ct,c.minFilter=ct,c.needsUpdate=!0,i.ears.map=c,i.ears.visible=!0}else i.ears.map=null,i.ears.visible=!1;this.onSkinUpdate?.()}catch(s){console.error("Error loading skin:",s)}}async loadAndApplyCape(e,t){let n=this.getPlayerObject(e);if(n)try{let{canvas:i,image:s}=await Ro(t);if(n=this.getPlayerObject(e),!n)return;lA(i,s);let a=new Nn(i);a.magFilter=ct,a.minFilter=ct,a.needsUpdate=!0,n.cape.map=a,n.cape.visible=!0,n.elytra.map=a,this.onSkinUpdate?.(),n.backEquipment||(n.backEquipment="cape")}catch(i){console.error("Error loading cape:",i)}}debugSwingArm(){let e=Object.values(this.entities).find(n=>n.playerObject?.animation);if(!e||!e.playerObject?.animation)return;let t=e.playerObject.animation;t.swingArm&&t.swingArm()}applyMovementAnimation(e,t){let n=e.animation;if(n){if(t==="oneSwing"){n.swingArm();return}if(n.switchAnimationCallback=null,t==="riding"){n.isMoving=!1,n.isRunning=!1,n.isCrouched=!1,n.isRiding=!0;return}n.isRiding=!1,n.isMoving=t==="walking"||t==="running"||t==="crouchWalking",n.isRunning=t==="running",n.isCrouched=t==="crouch"||t==="crouchWalking"}}playAnimation(e,t){let n=e==="player_entity"?this.playerEntity?.playerObject:this.getPlayerObject(e)??this.playerEntity?.playerObject;n&&this.applyMovementAnimation(n,t)}parseEntityLabel(e){if(e)try{if(e.type==="string")return e.value;let t=typeof e=="string"?og.default.simplify(og.default.parse(e)):jb.default.simplify(e);return HC(t).map(this.textFromComponent).join("")}catch{return e}}textFromComponent(e){return typeof e=="string"?e:e.text??""}getItemMesh(e,t,n=!1,i){!e.nbt&&e.nbtData&&(e.nbt=e.nbtData);let s=this.worldRenderer.getItemRenderData(e,t);if(!(i&&i===s?.modelName)){if(s&&"resolvedModel"in s){let a=nge(this.worldRenderer.material,s.resolvedModel,s.modelName,this.worldRenderer.resourcesManager.currentResources.worldBlockProvider,this.worldRenderer.resourcesManager.currentResources.mcData),o=1;t["minecraft:display_context"]==="ground"?o=.5:t["minecraft:display_context"]==="thirdperson"&&(o=6),a.scale.set(o,o,o);let l=new yt;return l.add(a),{mesh:l,isBlock:!0,modelName:s.modelName}}if(s){let a=s.renderInfo?.texture==="blocks"?this.worldRenderer.material.map:this.worldRenderer.itemsTexture,{u:o,v:l,su:c,sv:u}=s,v=i_e(a,{u:o,v:l,sizeX:c??1,sizeY:u??1},{faceCamera:n,use3D:!n}),g=1;return t["minecraft:display_context"]==="ground"?g=.5:t["minecraft:display_context"]==="thirdperson"&&(g=6),v.mesh.scale.set(g,g,g),{mesh:v.mesh,isBlock:!1,modelName:s.modelName,cleanup:v.cleanup}}}}setVisible(e,t){t?e.scale.set(1,1,1):e.scale.set(0,0,0)}update(e,t){let n=e.name==="player";(e.name==="zombie_villager"||e.name==="husk")&&(t.texture=`textures/1.16.4/entity/${e.name==="zombie_villager"?"zombie_villager/zombie_villager.png":`zombie/${e.name}.png`}`),e.name==="glow_item_frame"&&(t.textures||(t.textures=[]),t.textures.background="block:glow_item_frame");let i=this.entities[e.id],s=!i;if(e.delete){if(!i)return;i.userData._posTween?.stop(),i.userData._rotTween?.stop(),i.userData[ag]=void 0,i.userData[Yc]=void 0;let g=i.children.find(b=>b.name==="mesh");g&&g7e(g),i.additionalCleanup&&i.additionalCleanup(),i.traverse(b=>{b.additionalCleanup&&b.additionalCleanup()}),this.onRemoveEntity(e),this.worldRenderer.sceneOrigin.removeAndUntrack(i),mr(i),delete this.entities[e.id],delete this.playerVoiceStates[String(e.id)];return}if(!this.isRenderingAllowed())return;let a;if(i===void 0){this.beforeEntityAdded(e);let g=new yt;if(g.originalEntity=e,e.name==="item"||e.name==="tnt"||e.name==="falling_block"||e.name==="snowball"||e.name==="egg"||e.name==="ender_pearl"||e.name==="experience_bottle"||e.name==="splash_potion"||e.name==="lingering_potion"){let w=e.name==="tnt"||e.type==="projectile"?{name:e.name}:e.name==="falling_block"?{blockState:e.objectData}:I4e(e.metadata)?.find(S=>typeof S=="object"&&S?.itemCount);if(w){let S=this.getItemMesh(w,{"minecraft:display_context":"ground"},e.type==="projectile");if(S){if(a=S.mesh,e.name==="item"||e.type==="projectile"?(a.scale.set(.5,.5,.5),a.position.set(0,e.name==="item"?.2:.1,0)):(a.scale.set(2,2,2),a.position.set(0,.5,0)),e.name==="item"){let M=new qs;a.onBeforeRender=()=>{M.update(performance.now());let T=M.getDelta();a.rotation.y+=T}}g.additionalCleanup=()=>{S.cleanup&&S.cleanup()}}}}else if(n){let w=new yt,S=this.setupPlayerObject(e,w,t);if(g.playerObject=S,a=w,e.username){let M=cg({...e,voiceState:this.playerVoiceStates[e.id]},{fontFamily:"mojangles"},w,this.worldRenderer.version);T4e(M,S)}}else a=hKe(this.mcData,e,this.worldRenderer,this.entitiesOptions,{...t,customModel:e.customModel});if(!a)return;a.name="mesh";let b=u7e(e.name);b!=null&&(a.rotation.y=b,v7e(a));let y=e.pos??e.position;this.worldRenderer.sceneOrigin.track(g),g.position.set(y.x,y.y,y.z);let _=new Aa(a,e.type==="hostile"?16711680:e.type==="mob"?65280:e.type==="player"?255:16753920);_.name="debug",g.add(a),g.add(_),_.visible=!1,i=g,i.name="entity",i.realName=e.name,this.entities[e.id]=i,n&&this.updatePlayerSkin(e.id,e.username,t?.texture?e.uuid:void 0,t?.texture||is),this.setDebugMode(this.debugMode,g),this.syncSceneAttachment(g),this.afterAddEntity(e);let x=a.userData[Yc];x&&(i.userData[Yc]=x,i.userData[ag]=w7e())}else a=i.children.find(g=>g.name==="mesh"),e.renderHints&&(i.originalEntity.renderHints=e.renderHints);this.applyEntityRenderHints(i,e),this.updateEntityEquipment(i,e);let o=L4e(e,this.mcData),c=(I4e(e.metadata)?.[0]??e.metadata?.[0]??0)&32||this.worldRenderer.playerStateReactive.cameraSpectatingEntity===e.id&&this.worldRenderer.playerStateUtils.isSpectator();for(let g of a.children??[])g.name!=="nametag"&&(g.visible=!c);o.baby?i.scale.set(.5,.5,.5):i.scale.set(1,1,1);let u=Wb("text_display",e,this.mcData),d=u?.text||o.custom_name_visible&&o.custom_name;if(e.name!=="player"&&d){let g=u&&(u.billboard_render_constraints==="fixed"||!u.billboard_render_constraints),b=u&&!(parseInt(u.style_flags,10)&4)?cKe(u.background_color):void 0,y;if(u?.text_opacity){let _=parseInt(u?.text_opacity,10);y=_>0?_:256-_}cg({...e,username:typeof d=="string"?og.default.simplify(og.default.parse(d)):jb.default.simplify(d),nameTagBackgroundColor:b,nameTagTextOpacity:y,nameTagFixed:g,nameTagScale:u?.scale,nameTagTranslation:u&&(u.translation||new W(0,0,0)),nameTagRotationLeft:M4e(u?.left_rotation),nameTagRotationRight:M4e(u?.right_rotation)},this.entitiesOptions,a,this.worldRenderer.version)}let p=Wb("armor_stand",e,this.mcData);if(p){let g=(parseInt(p.client_flags,10)&1)!==0,b=(parseInt(p.client_flags,10)&4)!==0,y=(parseInt(p.client_flags,10)&8)===0,_=(parseInt(p.client_flags,10)&16)!==0;a.castShadow=!_,a.receiveShadow=!_,g?i.scale.set(.5,.5,.5):i.scale.set(1,1,1),i.traverse(x=>{switch(x.name){case"bone_baseplate":this.setVisible(x,y),x.rotation.y=-i.rotation.y;break;case"bone_head":p.head_pose&&x.setRotationFromEuler(Yo(p.head_pose));break;case"bone_body":p.body_pose&&x.setRotationFromEuler(Yo(p.body_pose));break;case"bone_rightarm":x.parent?.name!=="bone_armor"&&this.setVisible(x,b),p.left_arm_pose?x.setRotationFromEuler(Yo(p.left_arm_pose)):x.setRotationFromEuler(Yo({yaw:-10,pitch:-10,roll:0}));break;case"bone_leftarm":x.parent?.name!=="bone_armor"&&this.setVisible(x,b),p.right_arm_pose?x.setRotationFromEuler(Yo(p.right_arm_pose)):x.setRotationFromEuler(Yo({yaw:10,pitch:-10,roll:0}));break;case"bone_rightleg":p.left_leg_pose?x.setRotationFromEuler(Yo(p.left_leg_pose)):x.setRotationFromEuler(Yo({yaw:-1,pitch:-1,roll:0}));break;case"bone_leftleg":p.right_leg_pose?x.setRotationFromEuler(Yo(p.right_leg_pose)):x.setRotationFromEuler(Yo({yaw:1,pitch:1,roll:0}));break}})}let v=Wb("item_frame",e,this.mcData);if(v||(v=Wb("glow_item_frame",e,this.mcData)),v){let g=v?.item??e.metadata?.[8];if(a.scale.set(1,1,1),a.position.set(0,0,-.5),i.rotation.x=-e.pitch,i.children.find(b=>{if(b.name.startsWith("map_")){mr(b);let y=parseInt(b.name.split("_")[1],10);return this.itemFrameMaps[y]=this.itemFrameMaps[y]?.filter(_=>_!==b),b instanceof Ke&&b.material?.map?.dispose(),!0}else if(b.name==="item")return mr(b),!0;return!1})?.removeFromParent(),g&&(g.itemId??g.blockId??0)!==0){let b=v.rotation??0,y=g.nbtData?.value?.map?.value??g.components?.find(_=>_.type==="map_id")?.data;if(y)a.scale.set(16/12,16/12,1),this.addMapModel(i,y,b);else{let _=this.getItemMesh(g,{"minecraft:display_context":"fixed"});_&&(_.mesh.position.set(0,0,-.05),_.isBlock?_.mesh.scale.set(.25,.25,.25):_.mesh.scale.set(.5,.5,.5),_.mesh.rotateY(Math.PI),_.mesh.rotateZ(-b*Math.PI/4),_.mesh.name="item",i.add(_.mesh))}}}e.username!==void 0&&(i.username=e.username),this.updateNameTagVisibility(i),this.updateEntityPosition(e,s,t)}applyEntityRenderHints(e,t){if(t.renderHints){let c=t.renderHints,u=new Set(c.passengerIds??c.boatPassengerIds??[]),d=e.userData.renderHints?.passengerIds??e.userData.renderHints?.boatPassengerIds??[];if($o(t.name)||Hb(t.name))for(let v of d){if(u.has(v))continue;let g=this.resolvePassengerEntity(v);g&&zb(g,String(t.id),this.worldRenderer.sceneOrigin.getWorldPosition(g))}e.userData.renderHints=t.renderHints}if(!$o(t.name))return;let n=e.children.find(c=>c.name==="mesh");if(!n)return;let i=n.userData.boatWaterPatch;i&&(i.visible=t.renderHints?.boatWaterPatchVisible===!0);let s=e.userData.renderHints??t.renderHints,a=s?.boatPaddleLeft===!0,o=s?.boatPaddleRight===!0,l=n.userData.boatPaddleAnimation;l||(l=F7e(),n.userData.boatPaddleAnimation=l),z7e(l,a,o)}updateEntityPosition(e,t,n,i=!1){let s=this.entities[e.id];if(!s)return;if(this.applyEntityRenderHints(s,e),s.userData[Yc]){s.userData._horseHeadPitch=typeof e.pitch=="number"&&Number.isFinite(e.pitch)?e.pitch:0;let c=e.headYaw;s.userData._horseHeadYaw=typeof c=="number"&&Number.isFinite(c)?c:e.yaw,s.userData._horseBodyYaw=typeof e.yaw=="number"&&Number.isFinite(e.yaw)?e.yaw:0}let a=LP(e);if(e.position){if(a){s.userData._localVehicleY=e.position.y,s.userData._posTween?.stop(),s.userData._posTween=void 0;let u=this.resolveLocalVehicleRenderWorldPos(s);s.position.set(u.x,u.y,u.z)}else{let u=BP(e,t),d=this.worldRenderer.sceneOrigin.getWorldPosition(s)??{x:e.position.x,y:e.position.y,z:e.position.z};s.userData._tweenTarget||(s.userData._tweenTarget={x:d.x,y:d.y,z:d.z}),s.userData._posTween?.stop(),s.userData._posTween=new Xr(s.userData._tweenTarget).to({x:e.position.x,y:e.position.y,z:e.position.z},u).onUpdate(()=>{s.position.set(s.userData._tweenTarget.x,s.userData._tweenTarget.y,s.userData._tweenTarget.z)}).start()}let c=s.userData[ag];!i&&c&&Number.isFinite(e.position.x)&&Number.isFinite(e.position.z)&&S7e(c,e.position)}let o=X7e(e,t),l;if(s.playerObject&&n?.rotation?.head){let c=n.rotation.head.y,u=typeof c=="number"&&Number.isFinite(c)?c:e.yaw;typeof u=="number"&&Number.isFinite(u)&&(l=u)}else typeof e.yaw=="number"&&Number.isFinite(e.yaw)&&(l=e.yaw);if(typeof l=="number"&&Number.isFinite(l)){s.userData._rotTween?.stop(),s.userData._rotTween=void 0;let c=Number.isFinite(s.rotation.y)?s.rotation.y:0,u=uKe(c,l);o===0?s.rotation.y=c+u:s.userData._rotTween=new Xr(s.rotation).to({y:c+u},o).start()}if(s?.playerObject&&n?.rotation?.head){let{playerObject:c}=s,u=n.rotation.head.y;DP(s.userData,u,e.yaw),c.skin.head.rotation.y=0;let d=n.rotation.head.x;i4e(s.userData,d),qb(c,s.userData)}else s?.playerObject&&typeof e.yaw=="number"&&Number.isFinite(e.yaw)&&DP(s.userData,void 0,e.yaw)}afterAddEntity(e){}beforeEntityAdded(e){let t=this.pendingModelOverrides.get(e.id.toString());if(t){let{parts:n}=t;e.customModel=n.length===1?n[0]:{parts:n},this.pendingModelOverrides.delete(e.id.toString())}}loadedSkinEntityIds=new Set;maybeRenderPlayerSkin(e){let t=this.entities[e];if(e==="player_entity"&&(t=this.playerEntity,e=this.playerEntity?.originalEntity.id),!t||!t.playerObject||!t.visible)return;let n=128,i=this.worldRenderer.getCameraPosition(),s=this.worldRenderer.sceneOrigin.getWorldPosition(t),o=(s?new W(s.x,s.y,s.z):t.position.clone().add(new W(this.worldRenderer.sceneOrigin.x,this.worldRenderer.sceneOrigin.y,this.worldRenderer.sceneOrigin.z))).distanceTo(i);if(o<n&&o<this.worldRenderer.viewDistance*16){if(this.loadedSkinEntityIds.has(String(e)))return;this.updatePlayerSkin(e,t.playerObject.realUsername,t.playerObject.realPlayerUuid,!0,!0)}}onRemoveEntity(e){this.loadedSkinEntityIds.delete(e.id.toString()),delete this.currentSkinUrls[e.id.toString()]}updateMap(e,t){this.cachedMapsImages[e]=t;let n=this.itemFrameMaps[e];if(n&&(n=n.filter(i=>i.parent),this.itemFrameMaps[e]=n,n))for(let i of n)i.material.map=this.loadMap(t),i.material.needsUpdate=!0,i.visible=!0}updateNameTagVisibility(e){let t=this.worldRenderer.playerStateReactive.team,n=e.originalEntity.team,i=n?.nameTagVisibility||"always",s=i==="always"||i==="hideForOwnTeam"&&n?.team!==t?.team||i==="hideForOtherTeams"&&(n?.team===t?.team||t===void 0);e.traverse(a=>{a.name==="nametag"&&(a.visible=s)})}addMapModel(e,t,n){let i=this.cachedMapsImages?.[t],s=null;i&&(s=this.loadMap(i));let a={transparent:!0,alphaTest:.1};s&&(a.map=s);let o=new Ss(a),l=new Ke(new qn(1,1),o);l.rotation.set(0,Math.PI,0),e.add(l);let c=!0;e.traverseVisible(u=>{u.name==="geometry_frame"&&(c=!1)}),c?l.position.set(0,0,.499):l.position.set(0,0,.437),l.rotateZ(Math.PI*2-n*Math.PI/2),l.name=`map_${t}`,s||(l.visible=!1),this.itemFrameMaps[t]||(this.itemFrameMaps[t]=[]),this.itemFrameMaps[t].push(l)}loadMap(e){let t=xh(e);return t.needsUpdate=!0,t}addItemModel(e,t,n,i=!1){let s=`bone_${t}item`,a=`custom_item_${t}`;if(e.traverse(l=>{l.name===a&&(l.removeFromParent(),l.additionalCleanup&&l.additionalCleanup())}),!n)return;let o=this.getItemMesh(n,{"minecraft:display_context":"thirdperson"});o?.mesh&&e.traverse(l=>{if(l.name.toLowerCase()===s||l.name===`${t}Arm`){let c=new Ot;c.additionalCleanup=()=>{o.cleanup&&o.cleanup()};let u=o.mesh;c.rotation.z=-Math.PI/16,o.isBlock?c.rotation.y=Math.PI/4:(u.rotation.z=-Math.PI/4,c.rotation.y=Math.PI/2,c.scale.multiplyScalar(2)),i&&(c.position.y=-8,c.position.z=5,c.position.x=t==="left"?1:-1,c.rotation.x=Math.PI),c.add(u),c.name=a,l.add(c)}})}handleDamageEvent(e,t){let n=this.entities[e]?.children.find(i=>i.name==="mesh");n&&n.traverse(i=>{if(i instanceof Ke&&i.material.clone){i.material.clone().dispose(),i.material=i.material.clone();let a=i.material.color.clone();i.material.color.set(16711680),new Xr(i.material.color).to(a,500).start()}})}raycastSceneDebug(){let e=new U0;return e.setFromCamera(new ze(0,0),this.worldRenderer.camera),e.intersectObjects(this.worldRenderer.scene.children)[0]?.object}updateEntityModel(e,t,n,i){let s=Array.isArray(t)?t:[{modelPath:t,modelType:n,metadata:i}];this.pendingModelOverrides.set(e,{parts:s});let a=this.entities[e];a&&(this.update({...a.originalEntity,delete:!0},{}),this.update(a.originalEntity,{}))}setupPlayerObject(e,t,n){let i=new Om;i.realPlayerUuid=e.uuid??"",i.realUsername=e.username??"",i.position.set(0,16,0),$C(i),t.add(i);let s=1/16;return t.scale.set(s,s,s),t.rotation.set(0,Math.PI,0),i.animation=new ng,i.animation.isMoving=!1,i}updateEntityEquipment(e,t){if(!e||!t.equipment)return;let n=t.type==="player";if(this.addItemModel(e,n?"right":"left",t.equipment[0],n),this.addItemModel(e,n?"left":"right",t.equipment[1],n),lg(this.worldRenderer,e,"feet",t.equipment[2]),lg(this.worldRenderer,e,"legs",t.equipment[3],2),lg(this.worldRenderer,e,"chest",t.equipment[4]),lg(this.worldRenderer,e,"head",t.equipment[5]),n&&e.playerObject){let{playerObject:i}=e;i.backEquipment=t.equipment.some(s=>s?.name==="elytra")?"elytra":"cape",i.backEquipment==="elytra"&&this.loadAndApplyCape(t.id,OP),i.cape.map===null&&(i.cape.visible=!1)}}};function L4e(r,e){let t=e?.entitiesByName[r.name];return new Proxy({},{get(n,i,s){if(typeof i!="string"||!t)return;let a=t.metadataKeys?.indexOf(i);return r.metadata?.[a??-1]}})}function Wb(r,e,t){if(e.name===r)return L4e(e,t)}function lg(r,e,t,n,i=1,s=!1){if(!n){VP(e,t);return}let a=n.name.split("_"),o,l=t==="head"&&n.name==="player_head";if(l)if(VP(e,t),n.nbt){let g=jb.default.simplify(n.nbt);try{let b;if(g.SkullOwner?b=g.SkullOwner.Properties.textures[0]?.Value:b=g["minecraft:profile"]?.Properties?.find(y=>y.name==="textures")?.value,b){o=JSON.parse(Buffer.from(b,"base64").toString()).textures?.SKIN?.url;let{skinTexturesProxy:_}=r.worldRendererConfig;_&&(o=o?.replace("http://textures.minecraft.net/",_).replace("https://textures.minecraft.net/",_))}}catch(b){console.error("Error decoding player head texture:",b)}}else o=is;let c=a[0];if(!o){let g=`${c}_layer_${i}${s?"_overlay":""}`;o=r.resourcesManager.currentResources.customTextures.armor?.textures[g]?.src??A4e[g]}if(!o||!Kc[t]){VP(e,t);return}let u=`geometry_armor_${t}${s?"_overlay":""}`,d=e.children.findLast(g=>g.name===u),p;if(d?(p=d.material,v4(o,g=>{g.magFilter=ct,g.minFilter=ct,g.flipY=!1,g.wrapS=ma,g.wrapT=ma,p.map=g})):(d=Jc(r,o,Kc[t]),t==="head"&&(d.children[0].position.y+=.01),d.name=u,p=d.material,l||(p.side=Cn)),c==="leather"&&!s){let g=n.nbt?.value?.display?.value?.color?.value;if(g){let b=g>>16&255,y=g>>8&255,_=g&255;p.color.setRGB(b/255,y/255,_/255)}else p.color.setHex(11890001);lg(r,e,t,n,i,!0)}else p.color.setHex(16777215);let v=new Ot;v.name=`armor_${t}${s?"_overlay":""}`,v.add(d),e.add(d)}function VP(r,e){for(let t of r.children)(t.name===`geometry_armor_${e}`||t.name===`geometry_armor_${e}_overlay`)&&t.removeFromParent()}var FP=async(r,e)=>{let t;if(!r&&!e)t=await C4e;else{if(r||(r=await dc(e,"skin")),!r)return;let{canvas:l}=await Ro(r);t=new Nn(l)}t.magFilter=ct,t.minFilter=ct;let n=new pn,i=new Qr,s=!1,a=new Ke(n,i);a.scale.x=s?3:4,a.scale.y=12,a.scale.z=4,pKe(n,40,16,s?3:4,12,4),i.map=t,i.needsUpdate=!0;let o=new yt;return o.add(a),o.scale.set(.1,.1,.1),a.rotation.z=Math.PI,o};function mKe(r,e,t,n,i,s,a,o){let l=(C,I,k,L)=>[new ze(C/a,1-L/o),new ze(k/a,1-L/o),new ze(k/a,1-I/o),new ze(C/a,1-I/o)],c=l(e+s,t,e+n+s,t+s),u=l(e+n+s,t,e+n*2+s,t+s),d=l(e,t+s,e+s,t+s+i),p=l(e+s,t+s,e+n+s,t+s+i),v=l(e+n+s,t+s,e+n+s*2,t+i+s),g=l(e+n+s*2,t+s,e+n*2+s*2,t+i+s),b=r.attributes.uv,y=[v[3],v[2],v[0],v[1]],_=[d[3],d[2],d[0],d[1]],x=[c[3],c[2],c[0],c[1]],w=[u[0],u[1],u[3],u[2]],S=[p[3],p[2],p[0],p[1]],M=[g[3],g[2],g[0],g[1]],T=[];for(let C of[y,_,x,w,S,M])for(let I of C)T.push(I.x,I.y);b.set(new Float32Array(T)),b.needsUpdate=!0}function pKe(r,e,t,n,i,s){mKe(r,e,t,n,i,s,64,64)}var B4e={itemRight:{rotation:[0,-90,25],translation:[1.13,3.2,1.13],scale:[.68,.68,.68]},itemLeft:{rotation:[0,90,-25],translation:[1.13,3.2,1.13],scale:[.68,.68,.68]},blockRight:{rotation:[0,45,0],translation:[0,0,0],scale:[.4,.4,.4]},blockLeft:{rotation:[0,225,0],translation:[0,0,0],scale:[.4,.4,.4]}},ug=class{constructor(e,t=!1){this.worldRenderer=e;this.offHand=t;this.initCameraGroup(),this.unsubs.push(El(this.worldRenderer.playerStateReactive,"heldItemMain",()=>{this.offHand||this.updateItem()})),this.unsubs.push(El(this.worldRenderer.playerStateReactive,"heldItemOff",()=>{this.offHand&&this.updateItem()})),this.config=e.displayOptions.inWorldRenderingConfig,this.offHandDisplay=this.offHand,this.offHand||FP().then(n=>{this.disposed||(this.playerHand=n,this.updateItem())}).then(()=>{if(this.disposed)return;let n=Gy(async()=>FP(this.worldRenderer.playerStateReactive.playerSkin,this.worldRenderer.playerStateReactive.onlineMode?this.worldRenderer.playerStateReactive.username:void 0),this.worldRenderer.playerStateReactive,"playerSkin",i=>{i&&(this.playerHand=i,this.updateItem())},i=>{mr(i,!0)});this.unsubs.push(n)})}holdingBlock=void 0;blockSwapAnimation=void 0;cameraGroup=new Ke;objectOuterGroup=new yt;objectInnerGroup=new yt;holdingBlockInnerGroup=new yt;camera=new fn(75,1,.1,100);stopUpdate=!1;lastHeldItem;lastHeldItemRenderKey;isSwinging=!1;nextIterStopCallbacks;idleAnimator;ready=!1;lastUpdate=0;playerHand;offHandDisplay=!1;offHandModeLegacy=!1;swingAnimator;config;disposed=!1;unsubs=[];updateItem(){if(!this.ready)return;let e=this.offHand?this.worldRenderer.playerStateReactive.heldItemOff:this.worldRenderer.playerStateReactive.heldItemMain;e?this.setNewItem(e):this.offHand?this.setNewItem():this.setNewItem({type:"hand"})}initCameraGroup(){this.cameraGroup=new Ke}startSwing(){this.swingAnimator?.startSwing()}stopSwing(){this.swingAnimator?.stopSwing()}render(e,t,n,i){if(!this.lastHeldItem)return;let s=performance.now();this.lastUpdate&&s-this.lastUpdate>50&&this.replaceItemModel(this.lastHeldItem),this.swingAnimator?.isCurrentlySwinging()||this.swingAnimator?.debugParams.animationStage?this.swingAnimator?.update():this.idleAnimator?.update(),this.blockSwapAnimation?.switcher.update();let a=new Cr;a.add(this.cameraGroup),this.updateCameraGroup(),a.add(n.clone()),a.add(i.clone());let o=t.getSize(new ze),l=Math.min(o.width,o.height),c=o.width-l,{offHandDisplay:u}=this;if(u&&(this.cameraGroup.scale.x=-1),t.autoClear=!1,t.clearDepth(),this.offHandDisplay)t.setViewport(0,0,l,l);else{let d=o.width-l;t.setViewport(d,0,l,l)}t.render(a,this.camera),t.setViewport(0,0,o.width,o.height),u&&(this.cameraGroup.scale.x=1)}async playBlockSwapAnimation(e){this.blockSwapAnimation??={switcher:new kd(()=>({y:this.objectInnerGroup.position.y}),(s,a)=>{s==="y"&&(this.objectInnerGroup.position.y=a)},{y:16})};let t=e,n=this.objectInnerGroup.position.y+this.objectInnerGroup.scale.y*1.5*(t==="appeared"?1:-1),i=!1;return new Promise(s=>{this.blockSwapAnimation.switcher.transitionTo({y:n},t,()=>{i||s(!0)},()=>{i=!0,s(!1)})})}isDifferentItem(e){return this.lastHeldItemRenderKey!==om(this.worldRenderer,e)}updateCameraGroup(){if(this.stopUpdate)return;let{camera:e}=this;this.cameraGroup.position.copy(e.position),this.cameraGroup.rotation.copy(e.rotation);let t=1,{position:n,scale:i}=this.getHandHeld3d(),s=-n.z,a=this.offHandModeLegacy?-1:1;this.objectOuterGroup.position.set(s*n.x*t*a,s*n.y,-s);let o=i*2.22*.2;this.objectOuterGroup.scale.set(o,o,o)}lastItemModelName;async createItemModel(e){if(this.lastUpdate=performance.now(),!e||e.type==="hand"&&!this.playerHand)return;let t;if(e.type==="item"||e.type==="block"){let i=this.worldRenderer.entities.getItemMesh({...e.fullItem,itemId:e.id},jy(this.worldRenderer),!1,this.lastItemModelName);if(i){let{mesh:s,isBlock:a,modelName:o}=i;a?(t=s,e.type="block"):(s.position.set(.5,.5,.5),t=s,e.type="item"),this.lastItemModelName=o}}else t=this.playerHand;if(!t)return;t.name="holdingBlock";let n=this.getHandHeld3d().rotation;return t.rotation.x=Lt.degToRad(n.x),t.rotation.y=Lt.degToRad(n.y),t.rotation.z=Lt.degToRad(n.z),{model:t,type:e.type}}async replaceItemModel(e){if(this.blockSwapAnimation?.switcher.isTransitioning)return;if(!e){this.holdingBlock?.removeFromParent(),this.holdingBlock=void 0,this.swingAnimator?.stopSwing(),this.swingAnimator=void 0,this.idleAnimator=void 0;return}let t=await this.createItemModel(e);t&&(this.holdingBlock?.removeFromParent(),this.holdingBlock=t.model,this.holdingBlockInnerGroup.add(t.model))}testUnknownBlockSwitch(){this.setNewItem({type:"item",name:"minecraft:some-unknown-block",id:0,fullItem:{}})}switchRequest=0;async setNewItem(e){let t=om(this.worldRenderer,e),n=this.lastHeldItemRenderKey!==t;if(this.lastHeldItem=e,!n)return;this.lastHeldItemRenderKey=t,this.lastItemModelName=void 0;let i=++this.switchRequest,s=!1;if(this.holdingBlock){if(s=!0,!await this.playBlockSwapAnimation("disappeared"))return;this.holdingBlock?.removeFromParent(),this.holdingBlock=void 0}if(!e){this.swingAnimator?.stopSwing(),this.swingAnimator=void 0,this.idleAnimator=void 0,this.blockSwapAnimation=void 0;return}if(i!==this.switchRequest)return;let a=await this.createItemModel(e);if(!a||i!==this.switchRequest)return;let o=new yt;this.holdingBlockInnerGroup.removeFromParent(),this.holdingBlockInnerGroup=new yt,this.holdingBlockInnerGroup.add(a.model),o.add(this.holdingBlockInnerGroup),this.holdingBlock=a.model,this.objectInnerGroup=new yt,this.objectInnerGroup.add(o),this.objectInnerGroup.position.set(-.5,-.5,-.5),s&&(this.objectInnerGroup.position.y-=this.objectInnerGroup.scale.y*1.5),Object.assign(o.position,{x:.5,y:.5,z:.5}),this.objectOuterGroup=new yt,this.objectOuterGroup.add(this.objectInnerGroup),this.cameraGroup.add(this.objectOuterGroup);let l=this.getHandHeld3d().rotation;this.objectOuterGroup.rotation.y=Lt.degToRad(l.yOuter),s&&await this.playBlockSwapAnimation("appeared"),this.swingAnimator??=new HP(this.holdingBlockInnerGroup),this.swingAnimator.setHandMesh(this.holdingBlockInnerGroup),this.swingAnimator.type=a.type,this.config.viewBobbing&&(this.idleAnimator=new zP(this.holdingBlockInnerGroup,this.worldRenderer.playerStateReactive))}getHandHeld3d(){let e=this.lastHeldItem?.type??"hand",t=this.offHandModeLegacy?"Left":"Right",n=.8*1.15,i={x:.4,y:-.7,z:-.45},s={x:-32.4,y:42.8,z:-41.3,yOuter:0};if(e==="item"){let a=B4e[`item${t}`];i={x:-.05,y:-.7,z:-.45},s={x:a.rotation[0],y:a.rotation[1],z:a.rotation[2],yOuter:0},n=a.scale[0]*1.15}else if(e==="block"){let a=B4e[`block${t}`];i={x:.4,y:-.7,z:-.45},s={x:a.rotation[0],y:a.rotation[1],z:a.rotation[2],yOuter:0},n=a.scale[0]*1.15}return{rotation:s,position:i,scale:n}}dispose(){this.disposed=!0,this.ready=!1,this.unsubs.forEach(e=>e()),this.unsubs=[],this.idleAnimator?.destroy(),this.idleAnimator=void 0,this.swingAnimator?.stopSwing(),this.swingAnimator=void 0,this.blockSwapAnimation?.switcher.forceFinish(),this.blockSwapAnimation=void 0,mr(this.cameraGroup,!0),mr(this.objectOuterGroup,!0),mr(this.objectInnerGroup,!0),mr(this.holdingBlockInnerGroup,!0),this.holdingBlock=void 0,this.playerHand&&(mr(this.playerHand,!0),this.playerHand=void 0)}},zP=class{constructor(e,t){this.handMesh=e;this.playerState=t;this.handMesh=e,this.globalTime=0,this.currentState="NOT_MOVING",this.targetState="NOT_MOVING",this.defaultPosition={x:e.position.x,y:e.position.y,z:e.position.z,rotationX:e.rotation.x,rotationY:e.rotation.y,rotationZ:e.rotation.z},this.stateSwitcher=new kd(()=>({x:this.handMesh.position.x,y:this.handMesh.position.y,z:this.handMesh.position.z,rotationX:this.handMesh.rotation.x,rotationY:this.handMesh.rotation.y,rotationZ:this.handMesh.rotation.z}),(n,i)=>{switch(n){case"x":this.handMesh.position.x=i;break;case"y":this.handMesh.position.y=i;break;case"z":this.handMesh.position.z=i;break;case"rotationX":this.handMesh.rotation.x=i;break;case"rotationY":this.handMesh.rotation.y=i;break;case"rotationZ":this.handMesh.rotation.z=i;break}},{x:2,y:2,z:2,rotation:Math.PI}),this.debugGui=new $l("idle_animator",this.debugParams)}globalTime=0;lastTime=0;currentState;targetState;defaultPosition;idleOffset={y:0,rotationZ:0};tween=new yh;idleTween=null;stateSwitcher;debugParams={walkingSpeed:8,sprintingSpeed:16,walkingAmplitude:{x:1/30,y:1/10,rotationZ:.25},sprintingAmplitude:{x:1/30,y:1/10,rotationZ:.4}};debugGui;startIdleAnimation(){this.idleTween&&this.idleTween.stop(),this.idleOffset.y=this.handMesh.position.y-this.defaultPosition.y,this.idleOffset.rotationZ=this.handMesh.rotation.z-this.defaultPosition.rotationZ,this.idleTween=new Xr(this.idleOffset,this.tween).to({y:.05,rotationZ:.05},3e3).easing(Dr.Sinusoidal.InOut).yoyo(!0).repeat(1/0).start()}stopIdleAnimation(){this.idleTween&&(this.idleTween.stop(),this.idleOffset.y=0,this.idleOffset.rotationZ=0)}getStateTransform(e,t){switch(e){case"NOT_MOVING":case"SNEAKING":return{x:this.defaultPosition.x,y:this.defaultPosition.y,z:this.defaultPosition.z,rotationX:this.defaultPosition.rotationX,rotationY:this.defaultPosition.rotationY,rotationZ:this.defaultPosition.rotationZ};case"WALKING":case"SPRINTING":{let n=e==="SPRINTING"?this.debugParams.sprintingSpeed:this.debugParams.walkingSpeed,i=e==="SPRINTING"?this.debugParams.sprintingAmplitude:this.debugParams.walkingAmplitude;return{x:this.defaultPosition.x+Math.sin(t*n)*i.x,y:this.defaultPosition.y-Math.abs(Math.cos(t*n))*i.y,z:this.defaultPosition.z,rotationX:this.defaultPosition.rotationX,rotationY:this.defaultPosition.rotationY,rotationZ:this.defaultPosition.rotationZ}}}}setState(e){if(e===this.targetState)return;this.targetState=e;let t=!1;if(this.currentState!==e){if(this.stopIdleAnimation(),!t){let n=this.getStateTransform(e,this.globalTime);this.stateSwitcher.transitionTo(n,e)}this.currentState=e}}updated=!1;update(){this.stateSwitcher.update();let e=performance.now(),t=(e-this.lastTime)/1e3;if(this.lastTime=e,!this.stateSwitcher.isTransitioning)switch(this.currentState){case"NOT_MOVING":case"SNEAKING":this.globalTime=Math.PI/4;break;case"SPRINTING":case"WALKING":this.globalTime+=t;break}if(this.playerState){let n=this.playerState.movementState;n!==this.targetState&&this.setState(n)}if(!this.stateSwitcher.isTransitioning&&(this.currentState==="NOT_MOVING"||this.currentState==="SNEAKING")&&(this.idleTween?.isPlaying()||this.startIdleAnimation(),this.tween.update(),this.handMesh.position.y=this.defaultPosition.y+this.idleOffset.y,this.handMesh.rotation.z=this.defaultPosition.rotationZ+this.idleOffset.rotationZ),!this.stateSwitcher.isTransitioning&&(this.currentState==="WALKING"||this.currentState==="SPRINTING")){let n=this.getStateTransform(this.currentState,this.globalTime);Object.assign(this.handMesh.position,n),Object.assign(this.handMesh.rotation,{x:n.rotationX,y:n.rotationY,z:n.rotationZ})}}getCurrentState(){return this.currentState}destroy(){this.stopIdleAnimation(),this.stateSwitcher.forceFinish()}},HP=class{constructor(e){this.handMesh=e;this.handMesh=e,this.originalRotation=e.rotation.clone(),this.originalPosition=e.position.clone(),this.originalScale=e.scale.clone(),this.debugGui=new $l("hand_animator",this.debugParams,void 0,{animationStage:{min:0,max:1,step:.01},itemSwingXPosScale:{min:-2,max:2,step:.1},itemSwingYPosScale:{min:-2,max:2,step:.1},itemSwingZPosScale:{min:-2,max:2,step:.1},itemHeightScale:{min:-2,max:2,step:.1},itemPreswingRotY:{min:-180,max:180,step:5},itemSwingXRotAmount:{min:-180,max:180,step:5},itemSwingYRotAmount:{min:-180,max:180,step:5},itemSwingZRotAmount:{min:-180,max:180,step:5},armSwingXPosScale:{min:-2,max:2,step:.1},armSwingYPosScale:{min:-2,max:2,step:.1},armSwingZPosScale:{min:-2,max:2,step:.1},armSwingYRotAmount:{min:-180,max:180,step:5},armSwingZRotAmount:{min:-180,max:180,step:5},armHeightScale:{min:-2,max:2,step:.1}})}PI=Math.PI;animationTimer=0;lastTime=0;isAnimating=!1;stopRequested=!1;originalRotation;originalPosition;originalScale;debugParams={animationTime:250,animationStage:0,useClassicSwing:!0,itemSwingXPosScale:-.8,itemSwingYPosScale:.2,itemSwingZPosScale:-.2,itemHeightScale:-.6,itemPreswingRotY:45,itemSwingXRotAmount:-30,itemSwingYRotAmount:-35,itemSwingZRotAmount:-5,armSwingXPosScale:-.3,armSwingYPosScale:.4,armSwingZPosScale:-.4,armSwingYRotAmount:70,armSwingZRotAmount:-20,armHeightScale:-.6};debugGui;type="hand";setHandMesh(e){this.handMesh=e,this.originalRotation.copy(e.rotation),this.originalPosition.copy(e.position),this.originalScale.copy(e.scale)}update(){if(!this.isAnimating&&!this.debugParams.animationStage){this.handMesh.rotation.copy(this.originalRotation),this.handMesh.position.copy(this.originalPosition),this.handMesh.scale.copy(this.originalScale);return}let e=performance.now(),t=(e-this.lastTime)/1e3;this.lastTime=e,this.animationTimer+=t*1e3;let n=this.debugParams.animationStage||Math.min(this.animationTimer/this.debugParams.animationTime,1);if(n>=1){if(this.stopRequested){this.isAnimating=!1,this.stopRequested=!1,this.animationTimer=0,this.handMesh.rotation.copy(this.originalRotation),this.handMesh.position.copy(this.originalPosition),this.handMesh.scale.copy(this.originalScale);return}this.animationTimer=0;return}this.handMesh.rotation.copy(this.originalRotation),this.handMesh.position.copy(this.originalPosition),this.handMesh.scale.copy(this.originalScale);let i=n,s=Math.sqrt(i),a=Math.sin(i*this.PI),o=Math.sin(s*this.PI);if(this.type==="hand"){let l=this.debugParams.armSwingXPosScale*o,c=this.debugParams.armSwingYPosScale*Math.sin(s*this.PI*2),u=this.debugParams.armSwingZPosScale*a;this.handMesh.position.x+=l,this.handMesh.position.y+=c+this.debugParams.armHeightScale*i,this.handMesh.position.z+=u,this.handMesh.rotation.y+=Lt.degToRad(this.debugParams.armSwingYRotAmount*o),this.handMesh.rotation.z+=Lt.degToRad(this.debugParams.armSwingZRotAmount*a)}else{let l=this.debugParams.itemSwingXPosScale*o,c=this.debugParams.itemSwingYPosScale*Math.sin(s*this.PI*2),u=this.debugParams.itemSwingZPosScale*a;this.handMesh.position.x+=l,this.handMesh.position.y+=c+this.debugParams.itemHeightScale*i,this.handMesh.position.z+=u,this.handMesh.rotation.y+=Lt.degToRad(this.debugParams.itemPreswingRotY),this.handMesh.rotation.x+=Lt.degToRad(this.debugParams.itemSwingXRotAmount*a),this.handMesh.rotation.y+=Lt.degToRad(this.debugParams.itemSwingYRotAmount*o),this.handMesh.rotation.z+=Lt.degToRad(this.debugParams.itemSwingZRotAmount*a)}}startSwing(){this.stopRequested=!1,!this.isAnimating&&(this.isAnimating=!0,this.animationTimer=0,this.lastTime=performance.now())}stopSwing(){this.isAnimating&&(this.stopRequested=!0)}isCurrentlySwinging(){return this.isAnimating}};function dg(r,e=!1){return r.displayOptions.inWorldRenderingConfig.handRenderer==="legacy"?new ug(r,e):new Vv(r,e)}f();m();h();function D4e(r){let e=typeof r.pitch=="number"&&Number.isFinite(r.pitch)?r.pitch:0,t=typeof r.headYaw=="number"&&Number.isFinite(r.headYaw)?r.headYaw:typeof r.yaw=="number"&&Number.isFinite(r.yaw)?r.yaw:0;return{pitch:e,headYaw:t}}f();m();h();Pt();var O4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAALUlEQVR42mP4//8/IyWYYdSAwW6Ara3tf4oMmD179n9ChhD0AsiQ0Wgc7AYAAOqH+zNQ3r9kAAAAAElFTkSuQmCC";var N4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAOklEQVR42mP4//8/IyWYYdQA3AbY2tr+H1gDZs+e/R9mCD7D8IYBzBAQTXYgEvIKQQPw2T6aEqlkAADEA/W3ycLXvwAAAABJRU5ErkJggg==";var V4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAQklEQVR42mP4//8/IyWYYRgbYGtr+39wGQDiYzMUpwGzZ8+GawDRID4IkxSIMEOwaSQ6FgiFBW0NIOR8osJgBOQFALo37sVTOo/LAAAAAElFTkSuQmCC";var U4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAWElEQVR42mP4//8/IyWYYXAbYGtr+59sA0CaZ8+eTZkBhNg4DQApQlYIcglMDN1VWA0AKYJpQvYONi/hDUSYIfjCgmA0EooJ2hmAK9CINgBXoA2xvEAMBgBGPud3dYZtOQAAAABJRU5ErkJggg==";var F4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAYklEQVR42r1TQQrAMAxyD8tL89iMHgQJoQxHewi0UsWYFFX1/CkcF4iIsgUWOTM9ASV3F3rHF+v9rK4wEVnEFoFYbwmTbRZFFN9m0B9QZBfk2THaAhqktQdTkHYL9iZe+40vs7nda+BuVOMAAAAASUVORK5CYII=";var z4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAcElEQVR42rWTWwpAIQhEbWGu1MUaXRgQcXpyP8SIPI1jibu3l5DfAKrqyFgfAczsKxx5xJUCFGYFUZXMpOe9CAa8BOS+0U5UVbYQ6Siqbi0BFT0auTSRHZqNkE6BGXgEYKYtAczIbQAz8ukzXT3l3egz49IXvXQCVAAAAABJRU5ErkJggg==";var H4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAeElEQVQ4jaWSQQ4AIQgD9WG8tI/tnkgaUgmuBw8YHcqERXK/nOUuI4JPAABMSESwA1qAQgAQwBygnfNjTaCpWoBzUlNZQJ07x9FUdgSlV5FaW4Cjq8isW8BJ2GgPtEuVdr0HKvLXHjiRI0An8jTKqo9dF000cnBzPgKuxXtbq/m1AAAAAElFTkSuQmCC";var q4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhUlEQVR42qWTSRKAMAgE8WF5KY/FygEL2yEp9cAhCz0wJBYRx58wbowxYsZngLvHjITsgNYpJySBrPIBUMqZSHhdSw+oQlgVa01U7VRQ7huTk67aUWZaVyaNZFsSQBCTVBW3KahLyo/lQ6KR1Y+2BTUyGqke1AXoxsSzpYlU3FW0/Exv1ie0hq53Bf15aAAAAABJRU5ErkJggg==";var G4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAmklEQVR42o2SYQ6FMAiDeQfbSXdYXjSpqd869QeZQiilpbr7l2KM0cc75+xUV77YpGCjAPUqitMU3uCAXrsAlPSCcgJMbG4M0mQ1Etz/i0KlXQnmwyqpv1uH4h7fiws7ISneTYNEk0ImCxcAArGJrE4AXhypPtl7AqTdeJG8k3gHb0L6QfmK9WQTa59cSFdHRssKFHHngteV/wPDepaHIu0QVAAAAABJRU5ErkJggg==";var W4e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAoUlEQVR42n2Tyw3AIAxD3cGYlGFTUSmV+2o4IEEAf2JQVV1rjDGq576ec5avWVdfWIW12aMPEJBEImoPv+CAvvcCODsVNWBS8wA4A5ndv1/ytciQvBLMyeTSHD3ZYXPXXH7Y0ZMdJvCxQJls5O6tKHlPPWGEfU58WZR6ive1kKSleFNC2kXGRnrcDqhTTOmPeP3pAZnTq6Oin4X0oXbfnNZu626Io6lqGCwAAAAASUVORK5CYII=";var $b=class{constructor(e){this.worldRenderer=e;let t=[O4e,N4e,V4e,U4e,F4e,z4e,H4e,q4e,G4e,W4e];for(let i=0;i<10;i++)bh(t[i]).then(s=>{s.magFilter=ct,s.minFilter=ct,this.breakTextures.push(s)});let n=new pt({transparent:!0,blending:t1,premultipliedAlpha:!0,alphaTest:.5});this.blockBreakMesh=new Ke(new pn(1,1,1),n),this.blockBreakMesh.visible=!1,this.blockBreakMesh.renderOrder=999,this.blockBreakMesh.name="blockBreakMesh",this.worldRenderer.sceneOrigin.addAndTrack(this.blockBreakMesh),this.worldRenderer.onReactivePlayerStateUpdated("gameMode",()=>{this.updateLineMaterial()}),setTimeout(()=>{this.updateLineMaterial(),this.interactionLines&&this.setHighlightCursorBlock(this.interactionLines.blockPos,this.interactionLines.shapePositions,!0)})}_cursorLinesHidden=!1;get cursorLinesHidden(){return this._cursorLinesHidden}set cursorLinesHidden(e){this.interactionLines&&(this.interactionLines.mesh.visible=!e),this._cursorLinesHidden=e}cursorLineMaterial;interactionLines=null;prevColor;blockBreakMesh;breakTextures=[];updateLineMaterial(){let e=this.worldRenderer.playerStateReactive.gameMode==="creative",t=this.worldRenderer.renderer.getPixelRatio();this.cursorLineMaterial&&this.cursorLineMaterial.dispose(),this.cursorLineMaterial=new jd({color:(()=>{switch(this.worldRenderer.worldRendererConfig.highlightBlockColor){case"blue":return 4227327;case"classic":return 0;default:return e?4227327:0}})(),linewidth:Math.max(t*.7,1)*2}),this.prevColor=this.worldRenderer.worldRendererConfig.highlightBlockColor}updateBreakAnimation(e,t,n){if(this.hideBreakAnimation(),t===null||!e||!n)return;let{position:i,width:s,height:a,depth:o}=n,l=new Mt(i.x,i.y,i.z);this.blockBreakMesh.scale.set(s*1.001,a*1.001,o*1.001),l.add(new Mt(e.x,e.y,e.z)),this.blockBreakMesh.position.set(l.x,l.y,l.z),this.blockBreakMesh.visible=!0,this.blockBreakMesh.material.map=this.breakTextures[t]??this.breakTextures.at(-1),this.blockBreakMesh.material.needsUpdate=!0}hideBreakAnimation(){this.blockBreakMesh&&(this.blockBreakMesh.visible=!1)}updateDisplay(){if(this.cursorLineMaterial){let{renderer:e}=this.worldRenderer;this.cursorLineMaterial.resolution.set(e.domElement.width,e.domElement.height),this.cursorLineMaterial.dashOffset=performance.now()/750}}setHighlightCursorBlock(e,t,n=!1){if(e&&this.interactionLines&&e.equals(this.interactionLines.blockPos)&&MKe(t??[],this.interactionLines.shapePositions??[])&&!n||(this.interactionLines!==null&&(this.worldRenderer.sceneOrigin.removeAndUntrack(this.interactionLines.mesh),this.interactionLines=null),e===null))return;let i=new yt;for(let{position:s,width:a,height:o,depth:l}of t??[]){let c=new Mt(s.x,s.y,s.z),u=[1.0001*a,1.0001*o,1.0001*l],d=new pn(...u),p=new Wd().fromEdgesGeometry(new fl(d)),v=new rg(p,this.cursorLineMaterial);v.position.set(c.x,c.y,c.z),v.computeLineDistances(),i.add(v)}this.worldRenderer.sceneOrigin.addAndTrack(i),i.position.set(e.x,e.y,e.z),i.visible=!this.cursorLinesHidden,this.interactionLines={blockPos:e,mesh:i,shapePositions:t}}render(){this.prevColor!==this.worldRenderer.worldRendererConfig.highlightBlockColor&&this.updateLineMaterial(),this.updateDisplay()}},MKe=(r,e)=>{if(r.length!==e.length)return!1;for(let[t,n]of r.entries())if(n!==e[t])return!1;return!0};f();m();h();f();m();h();var IKe=Kr(lv(),1),qP=Kr(ss(),1);f();m();h();var j4e=(r,e,t)=>({...e,"minecraft:date":new Date});f();m();h();var TKe=(r,e)=>{let t=(r.getMonth()+1).toString().padStart(2,"0"),n=r.getDate().toString().padStart(2,"0");return e.replace("MM",t).replace("dd",n)},kKe=(r,e,t,n)=>{switch(e){case"daytime":return n["minecraft:time"];case"random":return Math.random();default:let i=n[r];return typeof i=="number"?i:void 0}},zm=(r,e)=>{switch(r.type){case"minecraft:model":return{model:r.model,...r.tints&&{tints:r.tints}};case"minecraft:empty":return{model:"minecraft:builtin/empty"};case"minecraft:select":{let t=e[r.property],n=t;r.pattern&&(r.property==="minecraft:local_time"||r.property==="minecraft:date")&&t&&(n=TKe(t,r.pattern));let s=r.cases.find(o=>Array.isArray(o.when)?o.when.some(l=>l===n):o.when===n)?.model??r.fallback;if(!s)throw new Error(`No matching case for ${r.property}=${n}`);let a=zm(s,e);return{...a,watchProperties:[...a.watchProperties||[],{property:r.property,type:"select",currentValue:n}]}}case"minecraft:range_dispatch":{let t=kKe(r.property,r.source,r.target,e);if(typeof t!="number")return zm(r.fallback??r.entries[0].model,e);let n=r.scale?t*r.scale:t,s=r.entries.sort((o,l)=>l.threshold-o.threshold).find(o=>n>=o.threshold)?.model??r.fallback,a=zm(s,e);return{...a,watchProperties:[...a.watchProperties||[],{property:r.property,type:"range",currentValue:t,source:r.source,...r.target&&{target:r.target}}]}}case"minecraft:condition":{let t=e[r.property],n=t?r.on_true:r.on_false,i=zm(n,e);return{...i,watchProperties:[...i.watchProperties||[],{property:r.property,type:"condition",currentValue:t}]}}case"minecraft:composite":{for(let t of r.models)try{return zm(t,e)}catch{continue}throw new Error("No resolvable model found in composite")}case"minecraft:special":return{model:"minecraft:special",special:r.model};default:throw new Error(`Unknown model type: ${r.type}`)}},X4e=(r,e)=>{let{version:t,name:n,properties:i}=e;if(i.use_duration_ms!==void 0){let a=Math.floor(i.use_duration_ms/50);i["minecraft:use_duration"]=a}let s=r.get(t,n);if(s)try{return zm(s.model,i)}catch(a){console.warn(`Error resolving model for ${n} in version ${t}:`,a);return}};var RKe=(r,e)=>{let t,n,i=r.name;i.includes(":")||(i=`minecraft:${i}`);let s=e.currentResources?.customItemModelNames[i];if(r.components){let a=new Map;for(let u of r.components)a.set(u.type,u);let o=a.get("custom_name")||a.get("item_name");o&&(t=typeof o.data=="string"?o.data:qP.default.simplify(o.data));let l=a.get("item_model");if(l&&(n=l.data),s){let u=a.get("custom_model_data");if(u?.data){let d;typeof u.data=="number"?d=u.data:typeof u.data=="object"&&"floats"in u.data&&Array.isArray(u.data.floats)&&u.data.floats.length>0&&(d=u.data.floats[0]),d&&s[d]&&(n=s[d])}}let c=a.get("lore");c&&(t??=r.displayName??r.name,t+=`
|
|
29382
29382
|
${JSON.stringify(c.data)}`)}if(r.nbt){let a=qP.default.simplify(r.nbt),o=a.display?.Name;o&&(t=o),s&&a.CustomModelData&&s[a.CustomModelData]&&(n=s[a.CustomModelData])}return{customText:t,customModel:n}};var $4e=(r,e,t,n)=>{let i=r.name,{customModel:s}=RKe(r,t);s&&(i=s);let a=j4e(n,{...e}),o=t.currentResources,l=X4e(pce(o),{name:i,version:o.version,properties:a})?.model;return(l==="minecraft:special"?void 0:l)??i};f();m();h();var Q4e=Kr(Z4e(),1);var e8e=(r,e,t=!1,n=!1)=>{let i=r.modelName,s=globalThis.loadedData.itemsByName[i];XE(e.currentResources.version)<XE("1.13")&&(i=(0,Q4e.getRenamedData)(s?"items":"blocks",i,e.currentResources.version,"1.13.1"));let a;if(!n){let l=e.currentResources?.guiAtlas?.json,c=d=>d&&l?.textures[d.replace("minecraft:","").replace("block/","").replace("blocks/","").replace("item/","").replace("items/","").replace("_inventory","")],u=c(i)??c(r.originalItemName);if(u){let d=u.u*l.width,p=u.v*l.height;return{texture:"gui",slice:[d,p,l.tileSize,l.tileSize],scale:.25,blockData:null,modelName:null}}}let o=l=>l.top??l;try{if(!e.currentResources?.itemsRenderer)throw new Error("Items renderer is not available");a=e.currentResources.itemsRenderer.getItemTexture(i,{},!1,n)??(r.originalItemName?e.currentResources.itemsRenderer.getItemTexture(r.originalItemName,{},!1,n):void 0)??e.currentResources.itemsRenderer.getItemTexture("item/missing_texture")}catch(l){reportError?.(`Failed to render item ${i} (original: ${r.originalItemName}) on ${e.currentResources.version} (resourcepack: TODO!): ${l.stack}`),a=o(e.currentResources.itemsRenderer.getItemTexture("errored"))}return a??=o(e.currentResources.itemsRenderer.getItemTexture("unknown")),"type"in a?{texture:a.type,slice:a.slice,modelName:i,blockData:null,scale:null}:{texture:"blocks",blockData:a,modelName:i,slice:null,scale:null}};var t8e=(r,e,t,n)=>{let i=t.currentResources;if(!i)throw new Error("Resources not loaded");let s=r.itemId??r.blockId??r.name,{blockState:a}=r;try{let o=a?globalThis.loadedData.blocksByStateId[a]?.name:typeof s=="number"?globalThis.loadedData.items[s]?.name:s;if(!o)throw new Error(`Item not found: ${s}`);let l=$4e({...r,name:o},e,t,n),c=e8e({modelName:l},t,!1,!0);if(!c)throw new Error(`Failed to get render info for item ${o}`);let u=c.texture==="blocks"?i.blocksAtlasImage:i.itemsAtlasImage;if(c.blockData)return{resolvedModel:c.blockData.resolvedModel,modelName:c.modelName};if(c.slice){let[d,p,v,g]=c.slice,[b,y,_,x]=[d/u.width,p/u.height,v/u.width,g/u.height];return{u:b,v:y,su:_,sv:x,renderInfo:c,modelName:c.modelName}}throw new Error(`Invalid render info for item ${o}`)}catch(o){return reportError?.(o),{u:0,v:0,su:16/i.blocksAtlasImage.width,sv:16/i.blocksAtlasImage.width,modelName:"missing"}}};f();m();h();Pt();f();m();h();function DKe(r){return Math.min(Math.max(r,0),1)}function n8e(r,e){return{individualGain:DKe(r),maxDistance:Math.max(r,1)*e}}function r8e(r,e){r.distanceModel="linear",r.refDistance=0,r.rolloffFactor=1,r.maxDistance=e}function i8e(r,e,t,n,i){let s=e.currentTime;r.positionX?(r.positionX.setValueAtTime(t,s),r.positionY.setValueAtTime(n,s),r.positionZ.setValueAtTime(i,s)):r.setPosition(t,n,i)}var Jb=new W,NKe=new Dt,VKe=new W,Kb=class{constructor(e){this.worldRenderer=e;e.onWorldSwitched.push(()=>{this.stopAll()}),e.onReactiveConfigUpdated("volume",t=>{this.changeVolume(t)})}audioListener;activeSounds=new Set;audioContext;soundVolumes=new Map;baseVolume=1;initAudioListener(){this.audioListener||(this.audioListener=new Kf,this.worldRenderer.camera.add(this.audioListener))}playSound(e,t,n=1,i=1,s=500,a=16){this.initAudioListener();let o=new V0(this.audioListener);this.activeSounds.add(o);let{individualGain:l,maxDistance:c}=n8e(n,a);this.soundVolumes.set(o,l);let u=new Jf,d=Date.now();u.loadAsync(t).then(p=>{if(Date.now()-d>s){console.warn("Ignored playing sound",t,"due to timeout:",s,"ms <",Date.now()-d,"ms"),this.activeSounds.delete(o),this.soundVolumes.delete(o);return}o.setBuffer(p),r8e(o.panner,c),o.setVolume(l*this.baseVolume),o.setPlaybackRate(i),this.worldRenderer.sceneOrigin.addAndTrack(o),o.position.set(e.x,e.y,e.z),o.updateMatrixWorld(!0),o.matrixWorld.decompose(Jb,NKe,VKe),i8e(o.panner,this.audioListener.context,Jb.x,Jb.y,Jb.z),o.onEnded=()=>{this.worldRenderer.sceneOrigin.removeAndUntrack(o),o.source&&o.disconnect(),this.activeSounds.delete(o),this.soundVolumes.delete(o),u.manager.itemEnd(t)},o.play()})}stopAll(){for(let e of this.activeSounds)e&&(e.stop(),e.source&&e.disconnect(),this.worldRenderer.sceneOrigin.removeAndUntrack(e));this.activeSounds.clear(),this.soundVolumes.clear()}changeVolume(e){this.baseVolume=e;for(let[t,n]of this.soundVolumes)t.setVolume(n*this.baseVolume)}destroy(){this.stopAll(),this.audioListener&&(this.audioListener.removeFromParent(),this.audioListener=void 0)}playTestSound(){let{x:e,y:t,z:n}=this.worldRenderer.cameraWorldPos;this.playSound({x:e,y:t,z:n},"/sound.mp3")}};f();m();h();Pt();var Zb=class{constructor(e,t){this.worldRenderer=e;this.onRenderCallbacks=t;t.push(()=>{this.update()})}rollAngle=0;get damageRollAmount(){return 5}get damageAnimDuration(){return 200}rollAnimation;basePitch=0;baseYaw=0;cameraBobInput=null;setCameraBobInput(e){this.cameraBobInput=e}setBaseRotation(e,t){this.basePitch=e,this.baseYaw=t,this.update()}getBaseRotation(){return{pitch:this.basePitch,yaw:this.baseYaw}}shakeFromDamage(e){let t=this.rollAngle,n=t+(e??(Math.random()<.5?-1:1))*this.damageRollAmount;this.rollAnimation={startTime:performance.now(),startRoll:t,targetRoll:n,duration:this.damageAnimDuration/2}}update(){if(this.worldRenderer.playerStateUtils.isSpectatingEntity()&&(this.rollAngle=0,this.rollAnimation=void 0),this.rollAnimation){let t=performance.now(),n=t-this.rollAnimation.startTime,i=Math.min(n/this.rollAnimation.duration,1);this.rollAnimation.returnToZero?(this.rollAngle=this.rollAnimation.startRoll*(1-this.easeInOut(i)),i===1&&(this.rollAnimation=void 0)):(this.rollAngle=this.rollAnimation.startRoll+(this.rollAnimation.targetRoll-this.rollAnimation.startRoll)*this.easeOut(i),i===1&&(this.rollAnimation={startTime:t,startRoll:this.rollAngle,targetRoll:0,duration:this.damageAnimDuration/2,returnToZero:!0}))}let e=this.worldRenderer.cameraObject;if(this.worldRenderer.cameraGroupVr){let t=new Dt().setFromAxisAngle(new W(0,1,0),this.baseYaw);e.setRotationFromQuaternion(t)}else{let t=this.addAntiZfightingOffset(this.basePitch),n=this.addAntiZfightingOffset(this.baseYaw),i=new Dt().setFromAxisAngle(new W(1,0,0),t),s=new Dt().setFromAxisAngle(new W(0,1,0),n),a=new Dt().setFromAxisAngle(new W(0,0,1),Lt.degToRad(this.rollAngle)),o=new Dt,l=new Dt,c=this.worldRenderer.playerStateReactive.perspective;if(this.cameraBobInput){let d=Wy(this.cameraBobInput);o=new Dt().setFromAxisAngle(new W(0,0,1),d.rotation.z),l=new Dt().setFromAxisAngle(new W(1,0,0),d.rotation.x),c==="first_person"&&this.worldRenderer.camera.position.set(d.position.x,d.position.y,0)}else c==="first_person"&&this.worldRenderer.camera.position.set(0,0,0);let u=s.multiply(i).multiply(a).multiply(o).multiply(l);e.setRotationFromQuaternion(u)}}easeOut(e){return 1-(1-e)*(1-e)}easeInOut(e){return e<.5?2*e*e:1-(-2*e+2)**2/2}addAntiZfightingOffset(e){let n=(e%(Math.PI*2)+Math.PI*2)%(Math.PI*2),i=.01;return Math.abs(n)<i||Math.abs(n-Math.PI/2)<i||Math.abs(n-Math.PI)<i||Math.abs(n-3*Math.PI/2)<i?e+.001:e}};f();m();h();Pt();var Qb=class{constructor(e){this.worldRenderer=e;this.worldRenderer.onWorldSwitched.push(()=>{this.onWorldGone()}),this.worldRenderer.onRender.push(()=>{this.render()}),this.worldRenderer.onReactiveConfigUpdated("volume",()=>{let{volume:t}=this.worldRenderer.worldRendererConfig;for(let[n,i]of this.customMedia.entries())i.positionalAudio&&i.positionalAudio.setVolume((i.props.volume??1)*t)})}customMedia=new Map;onWorldGone(){for(let[e,t]of this.customMedia.entries())this.destroyMedia(e)}onWorldStop(){for(let[e,t]of this.customMedia.entries())this.setVideoPlaying(e,!1)}createErrorTexture(e,t,n=16777215,i="Failed to load"){let s=new OffscreenCanvas(100,100),a=100;s.width=a,s.height=a;let o=s.getContext("2d");if(!o)return new Nn(s);o.clearRect(0,0,s.width,s.height),o.fillStyle=`rgba(${n>>16&255}, ${n>>8&255}, ${n&255}, 1)`,o.fillRect(0,0,s.width,s.height),o.fillStyle="#ff0000",o.font="bold 10px sans-serif",o.textAlign="center",o.textBaseline="middle",o.fillText(i,s.width/2,s.height/2,s.width);let l=new Nn(s);return l.minFilter=$t,l.magFilter=$t,l}createBackgroundTexture(e,t,n=0,i=1){let s=new OffscreenCanvas(1,1);s.width=1,s.height=1;let a=s.getContext("2d");if(!a)return new Nn(s);let o=n>>16&255,l=n>>8&255,c=n&255;a.fillStyle=`rgba(${o}, ${l}, ${c}, ${i})`,a.fillRect(0,0,1,1);let u=new Nn(s);return u.minFilter=ct,u.magFilter=ct,u}validateOrigin(e,t){if(t===!0)return!0;if(t===!1)return!1;let n=new URL(e);return t.some(i=>n.origin.endsWith(i))}onPageInteraction(){for(let[e,t]of this.customMedia.entries())t.hadAutoPlayError&&(t.hadAutoPlayError=!1,this.playVideo(e))}addMedia(e,t){let n=structuredClone(t);this.destroyMedia(e);let i=!1;t.src.startsWith("https://disk.yandex.ru/i/")&&(i=!0,t.src=`/ya-image?url=${t.src}`);let{scene:s}=this.worldRenderer;t.allowOrigins!==void 0&&!this.validateOrigin(t.src,t.allowOrigins)&&(console.warn("Remote resource blocked due to security policy",t.src,"allowed origins:",t.allowOrigins,"you can control it with `remoteContentNotSameOrigin` option"),t.src="");let o=t.src.endsWith(".png")||t.src.endsWith(".jpg")||t.src.endsWith(".jpeg")||t.imageOverride;i&&!t.imageOverride&&fetch(t.src,{method:"HEAD"}).then(M=>{M.headers.get("content-type")?.startsWith("image/")&&(this.destroyMedia(e),this.addMedia(e,{...n,src:t.src,imageOverride:!0}))}).catch(console.error);let l,c,u=Bn&&!o;if(u&&console.warn(`[addMedia] Video "${e}" skipped in off-thread renderer (no HTMLVideoElement)`),!o&&!u){l=document.createElement("video"),l.src=t.src.endsWith(".gif")?t.src.replace(".gif",".mp4"):t.src,l.loop=t.loop??!0;let M=(t.volume??1)*this.worldRenderer.worldRendererConfig.volume;l.volume=Math.min(M,1),l.playsInline=!0,l.crossOrigin="anonymous";let T=this.worldRenderer.soundSystem;if(T.initAudioListener(),!T.audioListener)throw new Error("Audio listener not initialized");c=new V0(T.audioListener),c.setRefDistance(6),c.setVolume(M),this.worldRenderer.sceneOrigin.addAndTrack(c),c.position.set(t.position.x,t.position.y,t.position.z),c.setMediaElementSource(l),c.connect(),l.addEventListener("pause",()=>{c?.pause(),globalThis.tempSendVideoStop?.(e,"paused",l.currentTime)}),l.addEventListener("play",()=>{c?.play(),globalThis.tempSendVideoPlay?.(e)}),l.addEventListener("seeked",()=>{c&&l&&(c.offset=l.currentTime)}),l.addEventListener("stalled",()=>{globalThis.tempSendVideoStop?.(e,"stalled",l.currentTime)}),l.addEventListener("waiting",()=>{globalThis.tempSendVideoStop?.(e,"waiting",l.currentTime)}),l.addEventListener("error",({error:C})=>{globalThis.tempSendVideoStop?.(e,`error: ${C}`,l.currentTime)}),l.addEventListener("ended",()=>{globalThis.tempSendVideoStop?.(e,"ended",l.currentTime),t.loop||(l.currentTime=0,S.ended=!0)})}let d=this.createBackgroundTexture(t.size.width,t.size.height,t.background),p=M=>{let T=this.createErrorTexture(t.size.width,t.size.height,t.background,M);b.map=T,b.needsUpdate=!0},v=new qn(1,1),g=t.allowLighting?Ss:pt,b=new g({map:d,transparent:!0,side:t.doubleSide?Cn:hi,alphaTest:.1}),y;if(l)y=new Su(l);else if(u)y=this.createErrorTexture(t.size.width,t.size.height,t.background,"Video unavailable (multi-thread)");else if(Bn){let M=L3(t.src);y=M.texture,y.minFilter=ct,y.magFilter=ct,M.promise.then(()=>{this.customMedia.get(e)?.texture===y&&(b.map=y,b.needsUpdate=!0)}).catch(()=>p())}else y=new _o().load(t.src,()=>{this.customMedia.get(e)?.texture===y&&(b.map=y,b.needsUpdate=!0)},void 0,()=>p());y.minFilter=ct,y.magFilter=ct,y.generateMipmaps=!1;let _=new Ke(v,b),{mesh:x}=this.positionMeshExact(_,Lt.degToRad((t.rotation??0)*90),t.position,t.size.width,t.size.height);s.add(x),l&&(_.onBeforeRender=()=>{l.readyState===l.HAVE_ENOUGH_DATA&&(!l.paused||!S?.hadAutoPlayError)&&(b.map!==y&&(b.map=y,b.needsUpdate=!0),y.needsUpdate=!0,c&&(c.position.copy(x.position),c.rotation.copy(x.rotation)))});let w=M=>{let T=v.attributes.uv.array;T[0]=M.startU,T[1]=M.startV,T[2]=M.endU,T[3]=M.startV,T[4]=M.endU,T[5]=M.endV,T[6]=M.startU,T[7]=M.endV,v.attributes.uv.needsUpdate=!0};t.uvMapping&&w(t.uvMapping);let S={mesh:x,video:l,texture:y,updateUVMapping:w,positionalAudio:c,props:n,hadAutoPlayError:!1,pausedBecuaseHidden:!1,ended:!1,handleError(M){if(S.destroyed)return;console.error(`Failed to play video ${e}:`,M);let T=C=>C;p(M.name==="NotAllowedError"||M.name==="AbortError"?T("Waiting for user interaction"):T("Failed to auto play"))}};return this.customMedia.set(e,S),l&&t.autoPlay&&this.playVideo(e,!0),e}playVideo(e,t=!1){let n=this.customMedia.get(e);if(n?.video){if(!t&&n.positionalAudio&&n.video.currentTime<1){let i=n.video.currentTime;this.addMedia(e,n.props),n.video.currentTime=i,n.props.autoPlay||this.playVideo(e,!0);return}n.video.play().then(()=>{n.hadAutoPlayError=!1,console.log(`Playing video ${e}`)}).catch(i=>{n.pausedBecuaseHidden||((i.name==="NotAllowedError"||i.name==="AbortError"||i.message?.includes("not allowed")&&!n.pausedBecuaseHidden)&&(n.hadAutoPlayError=!0),n.handleError(i))})}}render(){for(let[e,t]of this.customMedia.entries()){let n=t.mesh.visible;t.mesh.visible=this.worldRenderer.shouldObjectVisible(t.mesh)&&!t.mesh.forceHide,n!==t.mesh.visible&&t.video&&(t.mesh.visible?t.pausedBecuaseHidden&&(this.playVideo(e),t.pausedBecuaseHidden=!1):t.video.paused||(t.video.pause(),t.pausedBecuaseHidden=!0))}}setVideoPlaying(e,t){let n=this.customMedia.get(e);n?.video&&(t?this.playVideo(e):n.video.pause())}setVideoSeeking(e,t){let n=this.customMedia.get(e);n?.video&&(n.video.currentTime=t)}setVideoVolume(e,t){let n=this.customMedia.get(e);n?.video&&(n.video.volume=t)}setVideoSpeed(e,t){let n=this.customMedia.get(e);n?.video&&(n.video.playbackRate=t)}setControlMode(e,t,n){let i=this.customMedia.get(e);i?.video&&(i.props.controlMode={mouseButton:t,controlMode:n})}destroyMedia(e){let{scene:t}=this.worldRenderer,n=this.customMedia.get(e);if(n){n.destroyed=!0,n.video&&(n.video.pause(),n.video.src="",n.video.remove()),n.positionalAudio&&this.worldRenderer.sceneOrigin.removeAndUntrack(n.positionalAudio),this.worldRenderer.sceneOrigin.removeAndUntrack(n.mesh),n.texture.dispose();let i=n.mesh.children[0];i&&(i.geometry.dispose(),i.material instanceof mn&&i.material.dispose()),this.customMedia.delete(e)}}positionMeshExact(e,t,n,i,s,a=1){t===0&&(n.z+=.001),t===Math.PI/2&&(n.x-=.001),t===Math.PI&&(n.z-=.001),t===3*Math.PI/2&&(n.x+=.001),t===0&&(n.z+=1),t===Math.PI&&(n.x+=1),t===3*Math.PI/2&&(n.z+=1,n.x+=1),e.matrix.identity(),e.position.set(0,0,0),e.rotation.set(0,0,0),e.scale.set(1,1,1),e.rotateY(t),(t===Math.PI/2||t===3*Math.PI/2)&&(e.rotateZ(-Math.PI),e.rotateX(-Math.PI)),e.scale.set(i,s,a),e.geometry.translate(.5,.5,0),e.geometry.attributes.position.needsUpdate=!0,this.worldRenderer.sceneOrigin.track(e),e.position.set(n.x,n.y,n.z);let o=new yt;o.add(e);let l=new Ke(new pn(.1,.1,.1),new pt({color:16711680}));l.position.set(n.x,n.y,n.z),o.add(l);let c=n.x+Math.cos(t)*i,u=n.z+Math.sin(t)*i,d=new Ke(new pn(.1,.1,.1),new pt({color:255}));d.position.set(n.x,n.y+s,n.z),o.add(d);let p=new Ke(new pn(.1,.1,.1),new pt({color:16776960}));p.position.set(c,n.y,u),o.add(p);let v=new Ke(new pn(.1,.1,.1),new pt({color:16711935}));v.position.set(c,n.y+s,u),o.add(v);let g=new W(this.worldRenderer.sceneOrigin.toSceneX(n.x),this.worldRenderer.sceneOrigin.toSceneY(n.y),this.worldRenderer.sceneOrigin.toSceneZ(n.z)),b=new F0(new W(Math.cos(t),0,Math.sin(t)),g,1,16711680);return o.add(b),{mesh:e,debugGroup:o}}createTestCanvasTexture(){let e=new OffscreenCanvas(100,100);e.width=100,e.height=100;let t=e.getContext("2d");return t?(t.font="10px Arial",t.fillStyle="red",t.fillText("Hello World",0,10),new Nn(e)):null}lastCheck=0;THROTTLE_TIME=100;tryIntersectMedia(){if(Date.now()-this.lastCheck<this.THROTTLE_TIME)return;if(this.customMedia.size===0){this.worldRenderer.reactiveState.world.intersectMedia=null,this.worldRenderer.debugVideo=null,this.worldRenderer.cursorBlock.cursorLinesHidden=!1;return}this.lastCheck=Date.now();let{camera:e,scene:t}=this.worldRenderer,n=new U0,i=new ze(0,0);n.setFromCamera(i,e);let s=n.intersectObjects(t.children,!0);if(s.length>0){let a=s[0],o=a.object;for(let[l,c]of this.customMedia.entries())if(o===c.mesh||c.mesh.children.includes(o)){let{uv:u}=a;if(u){let d={id:l,x:u.x,y:u.y};this.worldRenderer.reactiveState.world.intersectMedia=d,this.worldRenderer.debugVideo=c,this.worldRenderer.cursorBlock.cursorLinesHidden=!0;return}}}this.worldRenderer.reactiveState.world.intersectMedia=null,this.worldRenderer.debugVideo=null,this.worldRenderer.cursorBlock.cursorLinesHidden=!1}handleUserClick(e){let t=this.worldRenderer.reactiveState.world.intersectMedia;if(t){let{id:n,x:i,y:s}=t,a=this.customMedia.get(n),o=a?.props.controlMode;if(a?.video&&(o?.mouseButton==="both"||o?.mouseButton===e))switch(o?.controlMode){case"play_pause":{this.setVideoPlaying(n,a.video.paused);break}case"play_if_ended":{a.ended&&this.setVideoPlaying(n,!0);break}case"toggle_mute":{a.video.muted=!a.video.muted;break}}}}};f();m();h();Pt();f();m();h();Pt();var UKe=1,s8e=10,ro={TARGET_SCREEN_PX:150,CANVAS_SIZE:256,LAYOUT:{DOT_Y:.3,NAME_Y:.45,DISTANCE_Y:.55},CANVAS_SCALE:2,ARROW:{enabledDefault:!1,pixelSize:50,paddingPx:50},DEFAULT_VISUAL_SCALE:1,DEFAULT_OPACITY:1};function o8e(r){let e=r.color??16711680,t=r.depthTest??!1,n=r.visualScale??r.metadata?.visualScale??(typeof window>"u"?void 0:window.serverMetadata?.waypointVisualScale)??ro.DEFAULT_VISUAL_SCALE,i=r.opacity??r.metadata?.opacity??(typeof window>"u"?void 0:window.serverMetadata?.waypointOpacity)??ro.DEFAULT_OPACITY,s=$r(a8e(),a8e());e9(s,e,r.label??"","0m",n);let a=new Nn(s);a.anisotropy=1,a.magFilter=$t,a.minFilter=$t;let o=new xs({map:a,transparent:!0,opacity:1,depthTest:t,depthWrite:!1}),l=new Zi(o);l.position.set(0,0,0),l.renderOrder=10,l.material.opacity=i;let c=r.label??"",u="0m",d=Number.NaN,p,v,g,b,y=null,_=ro.ARROW.enabledDefault,x=new yt;x.add(l);let{x:w,y:S,z:M}=r.position;x.position.set(w,S,M);function T(){a.needsUpdate=!0}function C(){if(!v||!g)return;let q=v.width;g.clearRect(0,0,q,q),g.beginPath(),g.moveTo(q*.15,q*.5),g.lineTo(q*.85,q*.5),g.lineTo(q*.5,q*.15),g.closePath();let z=`#${e.toString(16).padStart(6,"0")}`;g.lineWidth=6,g.strokeStyle="black",g.stroke(),g.fillStyle=z,g.fill(),b&&(b.needsUpdate=!0)}function I(q){e=q,u="0m",d=0,e9(s,e,c,"0m",n),T(),p&&C()}function k(q){c=q??"",e9(s,e,c,u,n),T()}function L(q,z){z!==u&&(u=z,e9(s,e,q,z,n),T())}function B(q){l.visible=q}function V(q,z,K){x.position.set(q,z,K)}function O(q,z,K,re){let Z=z*Math.PI/180,Q=Math.tan(Z/2)*2*K*(ro.TARGET_SCREEN_PX*n/re);l.scale.set(Q,Q,1)}function F(){if(p)return;let q=128;v=$r(q,q),g=v.getContext("2d"),C(),b=new Nn(v),b.anisotropy=1,b.magFilter=$t,b.minFilter=$t;let z=new xs({map:b,transparent:!0,depthTest:!1,depthWrite:!1,opacity:i});p=new Zi(z),p.renderOrder=12,p.visible=!1,y&&y.add(p)}function U(q){_=q,!q&&p&&(p.visible=!1)}function J(q){p?.parent&&p.parent.remove(p),y=q,p&&q&&q.add(p)}function $(q,z,K){if(!_||(F(),!p))return!0;let re=r.metadata?.onlyLeftRight===!0,Z=new W;q.getWorldDirection(Z);let Y=q.up.clone().normalize(),Q=new W().copy(Z).cross(Y).normalize(),ue=new W().copy(Q).cross(Z).normalize(),me=new W().setFromMatrixPosition(q.matrixWorld),we=new W(x.position.x,x.position.y,x.position.z).sub(me),ye=we.dot(Z),pe=we.dot(Q),Ge=we.dot(ue),ge=z/K,Ie=q.fov*Math.PI/180,Te=2*Math.atan(Math.tan(Ie/2)*ge),je=Math.atan2(pe,ye),he=Math.atan2(Ge,ye);if(ye>0&&Math.abs(je)<=Te/2&&Math.abs(he)<=Ie/2)return p.visible=!1,!0;let ae=je/(Te/2),Qe=he/(Ie/2);ye<=0&&(Math.abs(ae)>Math.abs(Qe)?(ae=Math.sign(ae),Qe=0):(ae=0,Qe=Math.sign(Qe))),re&&(Math.abs(ae)>Math.abs(Qe)||(ae=ae>=0?1:-1),Qe=0);let $e=Math.max(Math.abs(ae),Math.abs(Qe))||1,te=ae/$e,D=Qe/$e,ee=ro.ARROW.paddingPx,P=(te+1)*.5*z,E=(1-D)*.5*K,R=Math.min(Math.max(P,ee),z-ee),N=Math.min(Math.max(E,ee),K-ee);te=R/z*2-1,D=-(N/K)*2+1;let H=Math.max(2,q.near*4),G=Math.tan(Ie/2)*H,oe=G*ge,fe=me.clone().add(Z.clone().multiplyScalar(H)).add(Q.clone().multiplyScalar(te*oe)).add(ue.clone().multiplyScalar(D*G));p.visible=!0,p.position.copy(fe);let _e=Math.atan2(Qe,ae);p.material.rotation=_e-Math.PI/2;let ke=Math.tan(Ie/2)*2*H*(ro.ARROW.pixelSize*n/K);return p.scale.set(ke,ke,1),!1}function ne(q){return q.distanceTo(x.position)}function se(q,z,K,re){let Z=ne(q);O(q,z.fov,Z,re);let Y=Math.round(Z/s8e)*s8e;Y!==d&&(d=Y,L(c,`${Math.max(0,Y)}m`));let Q=$(z,K,re);return B(Q),Q}function X(){let q=l.material;if(q.map?.dispose(),q.dispose(),p){p.parent&&p.parent.remove(p);let z=p.material;z.map?.dispose(),z.dispose()}p=void 0,v=void 0,g=void 0,b=void 0}return{group:x,sprite:l,enableOffscreenArrow:U,setArrowParent:J,updateForCamera:se,setColor:I,setLabel:k,updateDistanceText:L,setVisible:B,setPosition:V,dispose:X}}function l8e(){let r=globalThis.devicePixelRatio||1,e=Math.min(r,UKe);return ro.CANVAS_SCALE*e}function a8e(){return Math.round(ro.CANVAS_SIZE*l8e())}function e9(r,e,t,n,i){let s=r.width,a=l8e(),o=r.getContext("2d");o.clearRect(0,0,s,s);let l=s/2,c=Math.round(s*ro.LAYOUT.DOT_Y),u=Math.round(s*.05*i),d=Math.max(2,Math.round(4*a*i)),p=u+d;o.beginPath(),o.arc(l,c,p,0,Math.PI*2),o.fillStyle=`#${e.toString(16).padStart(6,"0")}`,o.fill(),o.textAlign="center",o.textBaseline="middle";let v=Math.round(s*.08*i),g=Math.round(s*.06*i);o.font=`800 ${v}px mojangles`,o.lineWidth=Math.max(2,Math.round(3*a*i));let b=Math.round(s*ro.LAYOUT.NAME_Y);o.strokeStyle="black",o.strokeText(t,l,b),o.fillStyle="white",o.fillText(t,l,b),o.font=`800 ${g}px mojangles`,o.lineWidth=Math.max(2,Math.round(2*a*i));let y=Math.round(s*ro.LAYOUT.DISTANCE_Y);o.strokeStyle="black",o.strokeText(n,l,y),o.fillStyle="#CCCCCC",o.fillText(n,l,y)}var t9=class{constructor(e){this.worldRenderer=e}waypoints=new Map;waypointScene=new Cr;lastCameraPosition=new W;lastUpdateTime=0;UPDATE_THROTTLE_MS=16;updateWaypoints(){let e=performance.now(),t=this.worldRenderer.getCameraPosition(),n=this.lastCameraPosition.distanceTo(t)>.5,i=e-this.lastUpdateTime>this.UPDATE_THROTTLE_MS;if(!n&&!i)return;this.lastCameraPosition.copy(t),this.lastUpdateTime=e;let s=this.worldRenderer.renderer.getSize(new ze);for(let a of this.waypoints.values()){let o=new W(a.x,a.y,a.z),l=t.distanceTo(o),c=(!a.minDistance||l>=a.minDistance)&&(a.maxDistance===1/0||l<=a.maxDistance);a.sprite.setVisible(c),c&&(a.sprite.setPosition(this.worldRenderer.sceneOrigin.toSceneX(a.x),this.worldRenderer.sceneOrigin.toSceneY(a.y),this.worldRenderer.sceneOrigin.toSceneZ(a.z)),a.sprite.updateForCamera(this.worldRenderer.getCameraPosition(),this.worldRenderer.camera,s.width,s.height))}}render(){this.waypoints.size!==0&&(this.updateWaypoints(),this.worldRenderer.renderer.render(this.waypointScene,this.worldRenderer.camera))}addWaypoint(e,t,n,i,s={}){this.removeWaypoint(e);let a=s.color??16711680,{label:o,metadata:l}=s,c=s.minDistance??0,u=s.maxDistance??1/0,d=o8e({position:new W(t,n,i),color:a,label:o||e,metadata:l});d.enableOffscreenArrow(!0),d.setArrowParent(this.waypointScene),this.waypointScene.add(d.group),this.waypoints.set(e,{id:e,x:t+.5,y:n+.5,z:i+.5,minDistance:c,maxDistance:u,color:a,label:o,sprite:d})}removeWaypoint(e){let t=this.waypoints.get(e);t&&(this.waypointScene.remove(t.sprite.group),t.sprite.dispose(),this.waypoints.delete(e))}clear(){for(let e of this.waypoints.keys())this.removeWaypoint(e)}testWaypoint(){this.addWaypoint("Test Point",0,70,0,{color:65280,label:"Test Point"}),this.addWaypoint("Spawn",0,64,0,{color:16776960,label:"Spawn"}),this.addWaypoint("Far Point",100,70,100,{color:255,label:"Far Point"}),this.addWaypoint("Far Point 2",180,170,100,{color:255,label:"Far Point 2"}),this.addWaypoint("Far Point 3",1e3,100,1e3,{color:255,label:"Far Point 3"})}getWaypoint(e){return this.waypoints.get(e)}getAllWaypoints(){return[...this.waypoints.values()]}setWaypointColor(e,t){let n=this.waypoints.get(e);n&&(n.sprite.setColor(t),n.color=t)}setWaypointLabel(e,t){let n=this.waypoints.get(e);n&&(n.label=t,n.sprite.setLabel(t))}};f();m();h();Pt();var zn=class zn{constructor(e){this.worldRenderer=e;this.particleGeometry=new pn(zn.DEFAULT_PARTICLE_SIZE,zn.DEFAULT_PARTICLE_SIZE,zn.DEFAULT_PARTICLE_SIZE),this.createParticleMaterials()}explosions=new Map;particleGeometry;particleMaterials=[];testModeTimer;explosionCounter=0;createParticleMaterials(){let e=[16711680,65280,255,16776960,16711935,65535,16753920,8388736,16761035,16777215];for(let t of e){let n=new pt({color:t,transparent:!0,opacity:1});this.particleMaterials.push(n)}}getRandomMaterial(){return this.particleMaterials[Math.floor(Math.random()*this.particleMaterials.length)]}createExplosion(e,t=1,n,i=zn.DEFAULT_EXPLOSION_DURATION){let s=`firework_${this.explosionCounter++}_${Date.now()}`,a=[],o=Math.floor(zn.DEFAULT_PARTICLE_COUNT*t),l;if(zn.DEBUG_SHOW_EXPLOSION_CENTER){let u=.5*t,d=new ws(u,8,8),p=new pt({color:16711680,wireframe:!0,transparent:!0,opacity:.8});l=new Ke(d,p),l.renderOrder=999,this.worldRenderer.sceneOrigin.addAndTrack(l),l.position.set(e.x,e.y,e.z),console.log(`Debug: Created explosion center sphere at (${e.x}, ${e.y}, ${e.z}) with radius ${u}`)}for(let u=0;u<o;u++){let d=Math.random()*Math.PI*2,p=Math.sqrt(Math.random())*zn.VELOCITY_FACTOR*t,v=new Mt(p*Math.cos(d),Math.random()*.5-.25,p*Math.sin(d));u<5&&(console.log(`Debug: Particle ${u} - Initial pos: (${e.x}, ${e.y}, ${e.z}), Velocity: (${v.x.toFixed(3)}, ${v.y.toFixed(3)}, ${v.z.toFixed(3)}), Distance: ${p.toFixed(3)}`),console.log(`Debug: Particle ${u} - Velocity magnitude: ${v.toString()}, Expected max: ${(zn.VELOCITY_FACTOR*t).toFixed(3)}`));let g=n===void 0?this.getRandomMaterial().clone():new pt({color:n,transparent:!0,opacity:1}),b=new Ke(this.particleGeometry,g);b.renderOrder=1e3,this.worldRenderer.sceneOrigin.addAndTrack(b),b.position.set(e.x,e.y,e.z),u<5&&console.log(`Debug: Particle ${u} mesh created at (${b.position.x}, ${b.position.y}, ${b.position.z}) with size ${zn.DEFAULT_PARTICLE_SIZE}`);let y={position:e.clone(),velocity:v,color:new We(g.color),life:1,maxLife:1,mesh:b};a.push(y)}let c={id:s,position:e.clone(),particles:a,startTime:Date.now(),duration:i,size:t,debugSphere:l};return this.explosions.set(s,c),console.log(`Debug: Created firework explosion ${s} at (${e.x}, ${e.y}, ${e.z}) with ${o} particles, duration ${i}ms`),console.log(`Debug: Expected behavior - All particles should start at explosion center and move outward with velocities up to ${(zn.VELOCITY_FACTOR*t).toFixed(3)} units/second`),console.log(`Debug: Debug sphere radius: ${(.5*t).toFixed(3)}, Particle size: ${zn.DEFAULT_PARTICLE_SIZE}`),c}createExplosionFacingCamera(e,t=1,n,i=zn.DEFAULT_EXPLOSION_DURATION){let s=`firework_${this.explosionCounter++}_${Date.now()}`,a=[],o=Math.floor(zn.DEFAULT_PARTICLE_COUNT*t),l;if(zn.DEBUG_SHOW_EXPLOSION_CENTER){let p=.5*t,v=new ws(p,8,8),g=new pt({color:16711680,wireframe:!0,transparent:!0,opacity:.8});l=new Ke(v,g),l.renderOrder=999,this.worldRenderer.sceneOrigin.addAndTrack(l),l.position.set(e.x,e.y,e.z),console.log(`Debug: Created camera-facing explosion center sphere at (${e.x}, ${e.y}, ${e.z}) with radius ${p}`)}let c=this.worldRenderer.getCameraPosition(),u=new Mt(c.x-e.x,c.y-e.y,c.z-e.z).normalize();for(let p=0;p<o;p++){let v=Math.random()*Math.PI*2,g=Math.sqrt(Math.random())*zn.VELOCITY_FACTOR*t,b=new Mt(g*Math.cos(v),g*Math.sin(v),0),y=new Mt(b.x*u.x-b.z*u.z,b.y,b.x*u.z+b.z*u.x);p<5&&console.log(`Debug: Camera-facing Particle ${p} - Velocity: (${y.x.toFixed(3)}, ${y.y.toFixed(3)}, ${y.z.toFixed(3)}), Distance: ${g.toFixed(3)}`);let _=n===void 0?this.getRandomMaterial().clone():new pt({color:n,transparent:!0,opacity:1}),x=new Ke(this.particleGeometry,_);x.renderOrder=1e3,this.worldRenderer.sceneOrigin.addAndTrack(x),x.position.set(e.x,e.y,e.z);let w={position:e.clone(),velocity:y,color:new We(_.color),life:1,maxLife:1,mesh:x};a.push(w)}let d={id:s,position:e.clone(),particles:a,startTime:Date.now(),duration:i,size:t,debugSphere:l};return this.explosions.set(s,d),console.log(`Debug: Created camera-facing firework explosion ${s} at (${e.x}, ${e.y}, ${e.z}) with ${o} particles, duration ${i}ms`),d}explode(e,t=1,n,i){return this.createExplosion(e,t,n,i).id}explodeFacingCamera(e,t=1,n,i){return this.createExplosionFacingCamera(e,t,n,i).id}startTestMode(){let e=this.worldRenderer.getCameraPosition(),t=new Mt(e.x,e.y+10,e.z);this.testModeTimer=setInterval(()=>{let n=.8+Math.random()*.4,i=[16711680,65280,255,16776960,16711935,65535,16753920],s=i[Math.floor(Math.random()*i.length)];console.log("fireworkPos",t),this.explodeFacingCamera(t,n,s)},zn.TEST_INTERVAL)}updateParticle(e,t,n){let i=e.mesh.position.x===e.position.x&&e.mesh.position.y===e.position.y&&e.mesh.position.z===e.position.z;i&&e.life>.95&&(console.log(`Debug: First particle update - DeltaTime: ${t}ms (${(t/1e3).toFixed(3)}s), Duration: ${n}`),console.log(`Debug: Initial velocity: (${e.velocity.x.toFixed(3)}, ${e.velocity.y.toFixed(3)}, ${e.velocity.z.toFixed(3)}) units/s`),console.log(`Debug: Initial position: (${e.position.x.toFixed(3)}, ${e.position.y.toFixed(3)}, ${e.position.z.toFixed(3)})`)),e.velocity.y+=zn.GRAVITY;let s=e.position.clone(),a=t/1e3;e.position.add(e.velocity.scaled(a)),e.mesh.position.set(e.position.x,e.position.y,e.position.z);let o=e.life;e.life-=t/n;let l=Math.max(0,e.life);if(e.mesh.material instanceof pt&&(e.mesh.material.opacity=l),i&&o>.95){let c=e.position.distanceTo(s);console.log(`Debug: Particle moved ${c.toFixed(4)} units in ${(t/1e3).toFixed(3)}s, new pos: (${e.position.x.toFixed(3)}, ${e.position.y.toFixed(3)}, ${e.position.z.toFixed(3)})`),console.log(`Debug: Life: ${o.toFixed(3)} -> ${e.life.toFixed(3)}, Opacity: ${l.toFixed(3)}`)}return e.life>0}render(){let e=Date.now(),t=16.67;this.explosions.size>0&&Math.random()<.01&&console.log(`Debug: Render called with ${this.explosions.size} explosions, deltaTime: ${t}`);for(let[n,i]of this.explosions.entries()){let s=e-i.startTime;if(s>=i.duration){console.log(`Debug: Removing expired explosion ${n} after ${s}ms`),this.removeExplosion(n);continue}s%2e3<16&&console.log(`Debug: Explosion ${n} - Elapsed: ${s}ms, Particles alive: ${i.particles.length}`),i.particles=i.particles.filter(a=>this.updateParticle(a,t,i.duration)),i.particles.length===0&&(console.log(`Debug: Removing explosion ${n} - no particles left`),this.removeExplosion(n))}}removeExplosion(e){let t=this.explosions.get(e);if(t){for(let n of t.particles)this.worldRenderer.sceneOrigin.removeAndUntrack(n.mesh),n.mesh.material instanceof mn&&n.mesh.material.dispose();t.debugSphere&&(this.worldRenderer.sceneOrigin.removeAndUntrack(t.debugSphere),t.debugSphere.geometry.dispose(),t.debugSphere.material instanceof mn&&t.debugSphere.material.dispose(),console.log("Debug: Removed explosion center sphere")),this.explosions.delete(e)}}stopTestMode(){this.testModeTimer&&(clearInterval(this.testModeTimer),this.testModeTimer=void 0)}destroy(){this.stopTestMode();for(let e of this.explosions.keys())this.removeExplosion(e);for(let e of this.particleMaterials)e.dispose();this.particleGeometry.dispose()}};Hn(zn,"DEFAULT_PARTICLE_COUNT",50),Hn(zn,"DEFAULT_PARTICLE_SIZE",.05),Hn(zn,"DEFAULT_EXPLOSION_DURATION",6e3),Hn(zn,"GRAVITY",-.005),Hn(zn,"VELOCITY_FACTOR",1.5),Hn(zn,"TEST_INTERVAL",1e3),Hn(zn,"DEBUG_SHOW_EXPLOSION_CENTER",!0),Hn(zn,"DEBUG_SHOW_PARTICLE_TRAILS",!1);var n9=zn;f();m();h();Pt();var r9=class r{constructor(e,t,n,i){this.worldRenderer=e;this.updateCamera=t;this.updateFov=n;this.getInitialState=i}isRunning=!1;currentScript=null;currentPointIndex=0;currentTweens=[];startTime=0;totalDuration=0;currentPosition={x:0,y:0,z:0};currentRotation={yaw:0,pitch:0};currentFov=75;startScript(e){if(this.isRunning)return console.warn("Cinematic script already running. Stop current script first."),!1;if(!e.points||e.points.length===0)return console.warn("Cinematic script has no points"),!1;this.currentScript=e,this.isRunning=!0,this.currentPointIndex=0,this.startTime=performance.now(),this.totalDuration=e.points.reduce((n,i)=>n+i.duration,0);let t=this.getInitialState();return this.currentPosition={x:t.position.x,y:t.position.y,z:t.position.z},this.currentRotation={yaw:t.yaw,pitch:t.pitch},this.currentFov=t.fov,console.log(`Starting cinematic script: ${e.name||"Unnamed"} (${this.totalDuration}ms)`),this.moveToPoint(0),!0}stopScript(){if(this.isRunning){for(let e of this.currentTweens)e.stop();this.currentTweens=[],this.isRunning=!1,this.currentScript=null,this.currentPointIndex=0}}runExampleScripts(e){let t=this.worldRenderer.getCameraPosition(),n=new Mt(t.x,t.y,t.z),i=r.createCircularFlyby(n,30,20,15e3),s=r.createSpiralDescent(n.offset(0,50,0),n,3,12e3),a=r.createBuildingTour([{pos:n.offset(-20,10,-20),lookAt:n,duration:3e3},{pos:n.offset(20,15,-20),lookAt:n,duration:3e3},{pos:n.offset(20,20,20),lookAt:n,duration:3e3},{pos:n.offset(-20,25,20),lookAt:n,duration:3e3}]),o=[i,s,a];return this.startScript(o[e]),{circular:i,spiral:s,buildingTour:a}}moveToPoint(e){if(!this.currentScript||e>=this.currentScript.points.length){this.handleScriptComplete();return}let t=this.currentScript.points[e],{duration:n}=t,i={x:t.x,y:t.y,z:t.z},s={yaw:t.yaw,pitch:t.pitch},a=t.fov??this.currentFov;if(t.lookAt){let d=new W(t.lookAt.x,t.lookAt.y,t.lookAt.z),p=new W(t.x,t.y,t.z),v=d.sub(p).normalize();s.yaw=Math.atan2(-v.x,-v.z),s.pitch=Math.asin(v.y)}let o=this.getEasingFunction(t.easing||"easeInOut"),l=new Xr(this.currentPosition).to(i,n).easing(o).onUpdate(()=>{this.updateCamera(new Mt(this.currentPosition.x,this.currentPosition.y,this.currentPosition.z),this.currentRotation.yaw,this.currentRotation.pitch)}),c=new Xr(this.currentRotation).to(this.wrapRotation(s),n).easing(o).onUpdate(()=>{this.updateCamera(new Mt(this.currentPosition.x,this.currentPosition.y,this.currentPosition.z),this.currentRotation.yaw,this.currentRotation.pitch)}),u=null;if(Math.abs(a-this.currentFov)>.1){let d={fov:this.currentFov};u=new Xr(d).to({fov:a},n).easing(o).onUpdate(()=>{this.currentFov=d.fov,this.updateFov(this.currentFov)})}this.currentTweens=[l,c],u&&this.currentTweens.push(u),l.start(),c.start(),u?.start(),l.onComplete(()=>{this.currentPointIndex++,this.currentScript?.onPointReached?.(e,t),this.isRunning&&this.moveToPoint(this.currentPointIndex)})}wrapRotation(e){let t=e.yaw,n=t-this.currentRotation.yaw;n>Math.PI?t-=2*Math.PI:n<-Math.PI&&(t+=2*Math.PI);let i=Math.max(-Math.PI/2+.01,Math.min(Math.PI/2-.01,e.pitch));return{yaw:t,pitch:i}}getEasingFunction(e){switch(e){case"linear":return Dr.Linear.None;case"easeIn":return Dr.Quadratic.In;case"easeOut":return Dr.Quadratic.Out;case"easeInOut":return Dr.Quadratic.InOut;case"smoothstep":return Dr.Cubic.InOut;case"bounce":return Dr.Bounce.Out;default:return Dr.Quadratic.InOut}}handleScriptComplete(){if(!this.currentScript)return;let e=this.currentScript;e.loop?(this.currentPointIndex=0,this.moveToPoint(0)):(console.log(`Cinematic script completed: ${e.name||"Unnamed"}`),e.onComplete?.(),this.stopScript())}get running(){return this.isRunning}get progress(){if(!this.isRunning||this.totalDuration===0)return 0;let e=performance.now()-this.startTime;return Math.min(e/this.totalDuration,1)}get currentScriptName(){return this.currentScript?.name}static createCircularFlyby(e,t,n,i){let s=[];for(let o=0;o<=8;o++){let l=o/8*Math.PI*2,c=e.x+Math.cos(l)*t,u=e.z+Math.sin(l)*t,d=e.y+n;s.push({x:c,y:d,z:u,yaw:l+Math.PI/2,pitch:-.2,duration:i/8,easing:"smoothstep",lookAt:{x:e.x,y:e.y,z:e.z}})}return{name:"Circular Flyby",points:s,loop:!1}}static createSpiralDescent(e,t,n,i){let s=[],a=n*8,o=20;for(let l=0;l<=a;l++){let c=l/a,u=c*n*Math.PI*2,d=Lt.lerp(e.x,t.x,c)+Math.cos(u)*o*(1-c),p=Lt.lerp(e.z,t.z,c)+Math.sin(u)*o*(1-c),v=Lt.lerp(e.y,t.y,c);s.push({x:d,y:v,z:p,yaw:u+Math.PI/2,pitch:-.3*c,duration:i/a,easing:"easeInOut"})}return{name:"Spiral Descent",points:s,loop:!1}}static createBuildingTour(e){return{name:"Building Tour",points:e.map((n,i)=>({x:n.pos.x,y:n.pos.y,z:n.pos.z,yaw:0,pitch:0,duration:n.duration||3e3,easing:"smoothstep",lookAt:n.lookAt?{x:n.lookAt.x,y:n.lookAt.y,z:n.lookAt.z}:void 0})),loop:!1}}};f();m();h();Pt();var GP=.75,i9=class{constructor(e,t,n){this.scene=e;this.defaultSkybox=t;this.initialImage=n;this.debugGui=new $l("skybox_renderer",this,["temperature","worldTime","inWater","waterBreathing","fogOrangeness","brightnessAtPosition","distanceFactor"],{brightnessAtPosition:{min:0,max:1,step:.01},temperature:{min:0,max:1,step:.01},worldTime:{min:0,max:24e3,step:1},fogOrangeness:{min:-1,max:1,step:.01},distanceFactor:{min:0,max:5,step:.01}}),n||this.createGradientSky()}texture=null;mesh=null;skyMesh=null;voidMesh=null;worldTime=0;partialTicks=0;viewDistance=4;temperature=GP;inWater=!1;waterBreathing=!1;fogBrightness=0;prevFogBrightness=0;fogOrangeness=0;distanceFactor=2.7;brightnessAtPosition=1;debugGui;async init(){this.initialImage&&await this.setSkyboxImage(this.initialImage)}async setSkyboxImage(e){this.texture&&this.texture.dispose();let t=new _o;if(this.texture=await new Promise(n=>{t.load(e,i=>{i.mapping=z0,i.colorSpace=sr,i.minFilter=ct,i.magFilter=ct,i.needsUpdate=!0,n(i)})}),this.mesh)this.mesh.material.map=this.texture,this.mesh.material.needsUpdate=!0;else{let n=new ws(500,60,40);n.scale(-1,1,1);let i=new pt({map:this.texture,side:hi});this.mesh=new Ke(n,i),this.scene.add(this.mesh)}}update(e,t){t!==this.viewDistance&&(this.viewDistance=t,this.updateSkyColors()),this.mesh?this.mesh.position.set(0,0,0):this.skyMesh&&(this.skyMesh.position.set(0,0,0),this.voidMesh?.position.set(0,0,0),this.updateSkyColors())}updateTime(e,t=0){this.debugGui.visible||(this.worldTime=e,this.partialTicks=t,this.updateSkyColors())}updateViewDistance(e){this.viewDistance=e,this.updateSkyColors()}updateTemperature(e){this.debugGui.visible||(this.temperature=e,this.updateSkyColors())}updateWaterState(e,t){this.debugGui.visible||(this.inWater=e,this.waterBreathing=t,this.updateSkyColors())}updateDefaultSkybox(e){this.debugGui.visible||(this.defaultSkybox=e,this.updateSkyColors())}createGradientSky(){{let n=new qn(768,768);n.rotateX(-Math.PI/2),n.translate(0,16,0);let i=new pt({color:16777215,side:Cn,depthTest:!1});this.skyMesh=new Ke(n,i),this.scene.add(this.skyMesh)}{let n=new qn(768,768);n.rotateX(-Math.PI/2),n.translate(0,-16,0);let i=new pt({color:16777215,side:Cn,depthTest:!1});this.voidMesh=new Ke(n,i),this.scene.add(this.voidMesh)}this.updateSkyColors()}getFogColor(e=0){let t=this.getCelestialAngle(e),n=Math.cos(t*Math.PI*2)*2+.5;n=Math.max(0,Math.min(1,n));let i=.7529412,s=.84705883,a=1;return i*=n*.94+.06,s*=n*.94+.06,a*=n*.91+.09,new W(i,s,a)}getSkyColor(e=0,t=0,n=0){let i=this.getCelestialAngle(n),s=Math.cos(i*3.141593*2)*2+.5;s<0&&(s=0),s>1&&(s=1);let a=this.getTemperature(e,t),o=this.getSkyColorByTemp(a),l=(o>>16&255)/255,c=(o>>8&255)/255,u=(o&255)/255;return new W(l*s,c*s,u*s)}calculateCelestialAngle(e,t){let i=(e%24e3+t)/24e3-.25;return i<0&&i++,i>1&&i--,i=1-(Math.cos(i*Math.PI)+1)/2,i+=(i-i)/3,i}getCelestialAngle(e){return this.calculateCelestialAngle(this.worldTime,e)}getTemperature(e,t){return this.temperature}getSkyColorByTemp(e){e/=3,e<-1&&(e=-1),e>1&&(e=1);let t=.6222222-e*.05,i=this.fogOrangeness>0?t+(.12-t)*this.fogOrangeness*.8:t+this.fogOrangeness*.1,s=.5+e*.1+Math.abs(this.fogOrangeness)*.3;return this.hsbToRgb(i,s,1)}hsbToRgb(e,t,n){let i=0,s=0,a=0;if(t===0)i=s=a=Math.floor(n*255+.5);else{let o=(e-Math.floor(e))*6,l=o-Math.floor(o),c=n*(1-t),u=n*(1-t*l),d=n*(1-t*(1-l));switch(Math.floor(o)){case 0:i=Math.floor(n*255+.5),s=Math.floor(d*255+.5),a=Math.floor(c*255+.5);break;case 1:i=Math.floor(u*255+.5),s=Math.floor(n*255+.5),a=Math.floor(c*255+.5);break;case 2:i=Math.floor(c*255+.5),s=Math.floor(n*255+.5),a=Math.floor(d*255+.5);break;case 3:i=Math.floor(c*255+.5),s=Math.floor(u*255+.5),a=Math.floor(n*255+.5);break;case 4:i=Math.floor(d*255+.5),s=Math.floor(c*255+.5),a=Math.floor(n*255+.5);break;case 5:i=Math.floor(n*255+.5),s=Math.floor(c*255+.5),a=Math.floor(u*255+.5);break}}return 4278190080|i<<16|s<<8|Math.trunc(a)}updateSkyColors(){if(!this.skyMesh||!this.voidMesh)return;if(!this.defaultSkybox){this.skyMesh.visible=!1,this.voidMesh.visible=!1,this.mesh&&(this.mesh.visible=!1);return}this.skyMesh.visible=!0,this.voidMesh.visible=!0,this.mesh&&(this.mesh.visible=!0),this.prevFogBrightness=this.fogBrightness;let e=this.viewDistance/32,t=this.brightnessAtPosition*(1-e)+e;if(this.fogBrightness+=(t-this.fogBrightness)*.1,this.inWater){let g=this.waterBreathing?100:5;this.scene.fog=new L0(new We(0,0,1),.0025,g),this.scene.background=new We(0,0,1),this.skyMesh.material.color.set(new We(0,0,1)),this.voidMesh.material.color.set(new We(0,0,.6));return}let n=this.viewDistance*16,i=1-(.25+.75*this.viewDistance/32)**.25,s=this.getCelestialAngle(this.partialTicks),a=this.getSkyColor(0,0,this.partialTicks),o=this.getFogColor(this.partialTicks),l=Math.cos(s*Math.PI*2)*2+.5,c=Math.max(0,Math.min(1,l)),u=this.prevFogBrightness+(this.fogBrightness-this.prevFogBrightness)*this.partialTicks,d=(o.x+(a.x-o.x)*i)*c*u,p=(o.y+(a.y-o.y)*i)*c*u,v=(o.z+(a.z-o.z)*i)*c*u;this.scene.background=new We(d,p,v),this.scene.fog=new L0(new We(d,p,v),.0025,n*this.distanceFactor),this.skyMesh.material.color.set(new We(a.x,a.y,a.z)),this.voidMesh.material.color.set(new We(a.x*.2+.04,a.y*.2+.04,a.z*.6+.1))}dispose(){this.texture&&this.texture.dispose(),this.mesh&&(this.mesh.geometry.dispose(),this.mesh.material.dispose(),this.scene.remove(this.mesh)),this.skyMesh&&(this.skyMesh.geometry.dispose(),this.skyMesh.material.dispose(),this.scene.remove(this.skyMesh)),this.voidMesh&&(this.voidMesh.geometry.dispose(),this.voidMesh.material.dispose(),this.scene.remove(this.voidMesh))}};f();m();h();Pt();var FKe=`
|
|
29383
29383
|
precision highp float;
|
|
29384
29384
|
attribute vec3 position;
|