diff --git a/libraries/context-filter-polyfill.min.js b/libraries/context-filter-polyfill.min.js new file mode 100644 index 0000000..d92657c --- /dev/null +++ b/libraries/context-filter-polyfill.min.js @@ -0,0 +1,363 @@ +!function() { + "use strict"; + var t; + !function(t) { + t.None = "none", + t.Url = "url", + t.Blur = "blur", + t.Brightness = "brightness", + t.Contrast = "contrast", + t.DropShadow = "drop-shadow", + t.Grayscale = "grayscale", + t.HueRotate = "hue-rotate", + t.Invert = "invert", + t.Opacity = "opacity", + t.Saturate = "saturate", + t.Sepia = "sepia" + }(t || (t = {})); + var r = new Map + , a = function(t) { + var r = document.createElement("canvas"); + return r.height = t.canvas.height, + r.width = t.canvas.width, + Object.defineProperty(r, "__skipFilterPatch", { + value: !0 + }), + r.getContext("2d") + }; + var e = ["__skipFilterPatch", "__currentPathMirror", "canvas", "filter", "getImageData"]; + var n = ["clearRect", "drawImage", "fill", "fillRect", "fillText", "stroke", "strokeRect", "strokeText"] + , i = function(t, a) { + a.match(/([-a-z]+)(?:\(([\w\d\s\.%-]*)\))?/gim).map(function(t) { + return t.match(/([-a-z]+)(?:\((.*)\))?/i).slice(1, 3) + }).reduce(function(t, a) { + var e = a[0] + , n = a[1]; + return r.has(e) ? r.get(e).apply(void 0, [t].concat((n || "").split(" "))) : t + }, t) + } + , o = function(t) { + var r = parseFloat(t); + return /%\s*?$/i.test(t) && (r /= 100), + r + } + , s = function(t) { + return parseFloat(t) + }; + var c, h; + r.set(t.None, function(t) { + return t + }), + r.set(t.Blur, function(t, r) { + void 0 === r && (r = "0"); + var a = s(r); + if (a <= 0) + return t; + for (var e, n, i, o, c = t.canvas, h = c.height, u = c.width, v = t.getImageData(0, 0, u, h), f = v.data, p = u - 1, g = h - 1, l = a + 1, d = [1, 57, 41, 21, 203, 34, 97, 73, 227, 91, 149, 62, 105, 45, 39, 137, 241, 107, 3, 173, 39, 71, 65, 238, 219, 101, 187, 87, 81, 151, 141, 133, 249, 117, 221, 209, 197, 187, 177, 169, 5, 153, 73, 139, 133, 127, 243, 233, 223, 107, 103, 99, 191, 23, 177, 171, 165, 159, 77, 149, 9, 139, 135, 131, 253, 245, 119, 231, 224, 109, 211, 103, 25, 195, 189, 23, 45, 175, 171, 83, 81, 79, 155, 151, 147, 9, 141, 137, 67, 131, 129, 251, 123, 30, 235, 115, 113, 221, 217, 53, 13, 51, 50, 49, 193, 189, 185, 91, 179, 175, 43, 169, 83, 163, 5, 79, 155, 19, 75, 147, 145, 143, 35, 69, 17, 67, 33, 65, 255, 251, 247, 243, 239, 59, 29, 229, 113, 111, 219, 27, 213, 105, 207, 51, 201, 199, 49, 193, 191, 47, 93, 183, 181, 179, 11, 87, 43, 85, 167, 165, 163, 161, 159, 157, 155, 77, 19, 75, 37, 73, 145, 143, 141, 35, 138, 137, 135, 67, 33, 131, 129, 255, 63, 250, 247, 61, 121, 239, 237, 117, 29, 229, 227, 225, 111, 55, 109, 216, 213, 211, 209, 207, 205, 203, 201, 199, 197, 195, 193, 48, 190, 47, 93, 185, 183, 181, 179, 178, 176, 175, 173, 171, 85, 21, 167, 165, 41, 163, 161, 5, 79, 157, 78, 154, 153, 19, 75, 149, 74, 147, 73, 144, 143, 71, 141, 140, 139, 137, 17, 135, 134, 133, 66, 131, 65, 129, 1][a], m = [0, 9, 10, 10, 14, 12, 14, 14, 16, 15, 16, 15, 16, 15, 15, 17, 18, 17, 12, 18, 16, 17, 17, 19, 19, 18, 19, 18, 18, 19, 19, 19, 20, 19, 20, 20, 20, 20, 20, 20, 15, 20, 19, 20, 20, 20, 21, 21, 21, 20, 20, 20, 21, 18, 21, 21, 21, 21, 20, 21, 17, 21, 21, 21, 22, 22, 21, 22, 22, 21, 22, 21, 19, 22, 22, 19, 20, 22, 22, 21, 21, 21, 22, 22, 22, 18, 22, 22, 21, 22, 22, 23, 22, 20, 23, 22, 22, 23, 23, 21, 19, 21, 21, 21, 23, 23, 23, 22, 23, 23, 21, 23, 22, 23, 18, 22, 23, 20, 22, 23, 23, 23, 21, 22, 20, 22, 21, 22, 24, 24, 24, 24, 24, 22, 21, 24, 23, 23, 24, 21, 24, 23, 24, 22, 24, 24, 22, 24, 24, 22, 23, 24, 24, 24, 20, 23, 22, 23, 24, 24, 24, 24, 24, 24, 24, 23, 21, 23, 22, 23, 24, 24, 24, 22, 24, 24, 24, 23, 22, 24, 24, 25, 23, 25, 25, 23, 24, 25, 25, 24, 22, 25, 25, 25, 24, 23, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 23, 25, 23, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 24, 22, 25, 25, 23, 25, 25, 20, 24, 25, 24, 25, 25, 22, 24, 25, 24, 25, 24, 25, 25, 24, 25, 25, 25, 25, 22, 25, 25, 25, 24, 25, 24, 25, 18][a], _ = [], w = [], y = [], D = [], P = [], I = [], b = 3; b-- > 0; ) { + for (var M = 0, O = 0, k = 0; k < h; k++) { + for (var C = f[M] * l, x = f[M + 1] * l, F = f[M + 2] * l, j = f[M + 3] * l, R = 1; R <= a; R++) + e = M + ((R > p ? p : R) << 2), + C += f[e++], + x += f[e++], + F += f[e++], + j += f[e]; + for (var S = 0; S < u; S++) + _[O] = C, + w[O] = x, + y[O] = F, + D[O] = j, + 0 === k && (P[S] = ((e = S + l) < p ? e : p) << 2, + I[S] = (e = S - a) > 0 ? e << 2 : 0), + n = M + P[S], + i = M + I[S], + C += f[n++] - f[i++], + x += f[n++] - f[i++], + F += f[n++] - f[i++], + j += f[n] - f[i], + O++; + M += u << 2 + } + for (S = 0; S < u; S++) { + var T = S; + for (C = _[T] * l, + x = w[T] * l, + F = y[T] * l, + j = D[T] * l, + R = 1; R <= a; R++) + C += _[T += R > g ? 0 : u], + x += w[T], + F += y[T], + j += D[T]; + for (O = S << 2, + k = 0; k < h; k++) + f[O + 3] = o = j * d >>> m, + o > 0 ? (o = 255 / o, + f[O] = (C * d >>> m) * o, + f[O + 1] = (x * d >>> m) * o, + f[O + 2] = (F * d >>> m) * o) : f[O] = f[O + 1] = f[O + 2] = 0, + 0 === S && (P[k] = ((e = k + l) < g ? e : g) * u, + I[k] = (e = k - a) > 0 ? e * u : 0), + n = S + P[k], + i = S + I[k], + C += _[n] - _[i], + x += w[n] - w[i], + F += y[n] - y[i], + j += D[n] - D[i], + O += u << 2 + } + } + return t.putImageData(v, 0, 0), + t + }), + r.set(t.Brightness, function(t, r) { + if (void 0 === r && (r = "1"), + 1 === (r = o(r))) + return t; + r < 0 && (r = 0); + for (var a = t.canvas, e = a.height, n = a.width, i = t.getImageData(0, 0, n, e), s = i.data, c = s.length, h = 0; h < c; h += 4) + s[h + 0] *= r, + s[h + 1] *= r, + s[h + 2] *= r; + return t.putImageData(i, 0, 0), + t + }), + r.set(t.Contrast, function(t, r) { + if (void 0 === r && (r = "1"), + 1 === (r = o(r))) + return t; + r < 0 && (r = 0); + for (var a = t.canvas, e = a.height, n = a.width, i = t.getImageData(0, 0, n, e), s = i.data, c = s.length, h = 0; h < c; h += 4) + s[h + 0] = 255 * ((s[h + 0] / 255 - .5) * r + .5), + s[h + 1] = 255 * ((s[h + 1] / 255 - .5) * r + .5), + s[h + 2] = 255 * ((s[h + 2] / 255 - .5) * r + .5); + return t.putImageData(i, 0, 0), + t + }), + r.set(t.DropShadow, function(t, r, a, e, n) { + var i = document.createElement("canvas").getContext("2d"); + i.shadowOffsetX = s(r), + i.shadowOffsetY = s(a), + i.shadowBlur = n ? s(e || "0") : 0, + i.shadowColor = n || e || "transparent", + i.drawImage(t.canvas, 0, 0); + var o = t.canvas + , c = o.width + , h = o.height; + return t.putImageData(i.getImageData(0, 0, c, h), 0, 0), + t + }), + r.set(t.Grayscale, function(t, r) { + if (void 0 === r && (r = "0"), + (r = o(r)) <= 0) + return t; + r > 1 && (r = 1); + for (var a = t.canvas, e = a.height, n = a.width, i = t.getImageData(0, 0, n, e), s = i.data, c = s.length, h = 0; h < c; h += 4) { + var u = .2126 * s[h] + .7152 * s[h + 1] + .0722 * s[h + 2]; + s[h + 0] += (u - s[h + 0]) * r, + s[h + 1] += (u - s[h + 1]) * r, + s[h + 2] += (u - s[h + 2]) * r + } + return t.putImageData(i, 0, 0), + t + }), + r.set(t.HueRotate, function(t, r) { + void 0 === r && (r = "0deg"); + var a = function(t) { + var r = parseFloat(t); + switch (t.slice(r.toString().length)) { + case "deg": + r /= 360; + break; + case "grad": + r /= 400; + break; + case "rad": + r /= 2 * Math.PI + } + return r + }(r); + if (a <= 0) + return t; + var e, n, i, o, s, c, h, u, v, f = t.canvas, p = f.height, g = f.width, l = t.getImageData(0, 0, g, p), d = l.data, m = (a % 1 + 1) % 1 * 3, _ = Math.floor(m), w = m - _, y = 1 - w; + switch (_) { + case 0: + e = y, + n = 0, + i = w, + o = w, + s = y, + c = 0, + h = 0, + u = w, + v = y; + break; + case 1: + e = 0, + n = w, + i = y, + o = y, + s = 0, + c = w, + h = w, + u = y, + v = 0; + break; + case 2: + e = w, + n = y, + i = 0, + o = 0, + s = w, + c = y, + h = y, + u = 0, + v = w + } + for (var D = 0, P = 0; P < p; ++P) + for (var I = 0; I < g; ++I) { + var b = d[0 + (D = 4 * (P * g + I))] + , M = d[D + 1] + , O = d[D + 2]; + d[D + 0] = Math.floor(e * b + n * M + i * O), + d[D + 1] = Math.floor(o * b + s * M + c * O), + d[D + 2] = Math.floor(h * b + u * M + v * O) + } + return t.putImageData(l, 0, 0), + t + }), + r.set(t.Invert, function(t, r) { + if (void 0 === r && (r = "0"), + (r = o(r)) <= 0) + return t; + r > 1 && (r = 1); + for (var a = t.canvas, e = a.height, n = a.width, i = t.getImageData(0, 0, n, e), s = i.data, c = s.length, h = 0; h < c; h += 4) + s[h + 0] = Math.abs(s[h + 0] - 255 * r), + s[h + 1] = Math.abs(s[h + 1] - 255 * r), + s[h + 2] = Math.abs(s[h + 2] - 255 * r); + return t.putImageData(i, 0, 0), + t + }), + r.set(t.Opacity, function(t, r) { + if (void 0 === r && (r = "1"), + (r = o(r)) < 0) + return t; + r > 1 && (r = 1); + for (var a = t.canvas, e = a.height, n = a.width, i = t.getImageData(0, 0, n, e), s = i.data, c = s.length, h = 3; h < c; h += 4) + s[h] *= r; + return t.putImageData(i, 0, 0), + t + }), + r.set(t.Saturate, function(t, r) { + void 0 === r && (r = "1"); + var a = o(r); + if (1 === a) + return t; + a < 0 && (a = 0); + for (var e = t.canvas, n = e.height, i = e.width, s = t.getImageData(0, 0, i, n), c = s.data, h = .3086 * (1 - a), u = .6094 * (1 - a), v = .082 * (1 - a), f = i << 2, p = 0; p < n; p++) + for (var g = p * f, l = 0; l < i; l++) { + var d = g + (l << 2) + , m = c[d + 0] + , _ = c[d + 1] + , w = c[d + 2]; + c[d + 0] = (h + a) * m + u * _ + v * w, + c[d + 1] = h * m + (u + a) * _ + v * w, + c[d + 2] = h * m + u * _ + (v + a) * w + } + return t.putImageData(s, 0, 0), + t + }), + r.set(t.Sepia, function(t, r) { + if (void 0 === r && (r = "0"), + (r = o(r)) <= 0) + return t; + r > 1 && (r = 1); + for (var a = t.canvas, e = a.height, n = a.width, i = t.getImageData(0, 0, n, e), s = i.data, c = s.length, h = 0; h < c; h += 4) { + var u = s[h + 0] + , v = s[h + 1] + , f = s[h + 2]; + s[h + 0] = (.393 * u + .769 * v + .189 * f) * r + u * (1 - r), + s[h + 1] = (.349 * u + .686 * v + .168 * f) * r + v * (1 - r), + s[h + 2] = (.272 * u + .534 * v + .131 * f) * r + f * (1 - r) + } + return t.putImageData(i, 0, 0), + t + }), + "filter"in CanvasRenderingContext2D.prototype || (c = HTMLCanvasElement, + h = CanvasRenderingContext2D, + Object.defineProperty(c.prototype, "__skipFilterPatch", { + writable: !0, + value: !1 + }), + Object.defineProperty(c.prototype, "__currentPathMirror", { + writable: !0, + value: void 0 + }), + Object.defineProperty(h.prototype, "filter", { + writable: !0, + value: t.None + }), + function(t) { + Object.keys(t.prototype).filter(function(t) { + return e.indexOf(t) < 0 + }).map(function(r) { + return { + member: r, + descriptor: Object.getOwnPropertyDescriptor(t.prototype, r) + } + }).filter(function(t) { + return t.descriptor.set + }).forEach(function(r) { + var e = r.member + , n = r.descriptor; + Object.defineProperty(t.prototype, e, { + get: function() { + return this.canvas.__skipFilterPatch ? n.get.call(this) : this.canvas.__currentPathMirror[e] + }, + set: function(t) { + if (this.canvas.__skipFilterPatch) + return n.set.call(this, t); + this.canvas.__currentPathMirror || (this.canvas.__currentPathMirror = a(this)), + this.canvas.__currentPathMirror[e] = t + } + }) + }) + }(CanvasRenderingContext2D), + function(t) { + Object.keys(t.prototype).filter(function(t) { + return e.indexOf(t) < 0 + }).map(function(r) { + return { + member: r, + descriptor: Object.getOwnPropertyDescriptor(t.prototype, r) + } + }).filter(function(t) { + var r = t.descriptor; + return r.value && "function" == typeof r.value + }).forEach(function(r) { + var e = r.member + , o = r.descriptor.value; + Object.defineProperty(t.prototype, e, { + value: function() { + for (var t, r = [], s = 0; s < arguments.length; s++) + r[s] = arguments[s]; + if (this.canvas.__skipFilterPatch) + return o.call.apply(o, [this].concat(r)); + this.canvas.__currentPathMirror || (this.canvas.__currentPathMirror = a(this)); + var c = (t = this.canvas.__currentPathMirror)[e].apply(t, r); + if (n.indexOf(e) > -1) { + i(this.canvas.__currentPathMirror, this.filter), + this.canvas.__skipFilterPatch = !0; + var h = void 0; + "getTransform"in this && (h = this.getTransform(), + this.setTransform(1, 0, 0, 1, 0, 0)), + this.drawImage(this.canvas.__currentPathMirror.canvas, 0, 0), + h && this.setTransform(h), + this.canvas.__skipFilterPatch = !1, + this.canvas.__currentPathMirror = a(this) + } + return c + } + }) + }) + }(CanvasRenderingContext2D)) +}(); diff --git a/src/js/net/minecraft/client/render/gui/FontRenderer.js b/src/js/net/minecraft/client/render/gui/FontRenderer.js index ada4f62..9b42a08 100644 --- a/src/js/net/minecraft/client/render/gui/FontRenderer.js +++ b/src/js/net/minecraft/client/render/gui/FontRenderer.js @@ -52,7 +52,7 @@ window.FontRenderer = class { stack.save(); if (isShadow) { - stack.filter = "brightness(0%)"; + stack.filter = "brightness(20%)"; } // For each character diff --git a/src/start.js b/src/start.js index 322a608..d71cf81 100644 --- a/src/start.js +++ b/src/start.js @@ -80,6 +80,7 @@ loadTexture([ // Dependencies "libraries/three.min.js", "libraries/stats.min.js", + "libraries/context-filter-polyfill.min.js", // Minecraft Source "src/js/net/minecraft/util/EnumBlockFace.js",