我的世界去除跳转网易提示

去掉网易跳转提示提示

  1. // ==UserScript==
  2. // @name 我的世界去除跳转网易提示
  3. // @namespace https://github.com/marioplus/minecraft-net-easy-tips-remover
  4. // @version 1.1.0
  5. // @author marioplus
  6. // @license GPL-3.0
  7. // @icon https://www.google.com/s2/favicons?sz=64&domain=minecraft.net
  8. // @match https://www.minecraft.net/*
  9. // @run-at document-start
  10. // @description 去掉网易跳转提示提示
  11. // ==/UserScript==
  12.  
  13. (function () {
  14. 'use strict';
  15.  
  16. var __defProp = Object.defineProperty;
  17. var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  18. var __publicField = (obj, key, value) => {
  19. __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
  20. return value;
  21. };
  22. class ElementCreateListener {
  23. /**
  24. * 初始化元素监听器
  25. * @param mode 监听模式:
  26. * - 'auto' : 添加首个处理器时自动激活监听
  27. * - 'manual' : 需手动调用 activate() 启动
  28. */
  29. constructor(mode = "auto") {
  30. // 观测器实例,用于监听 DOM 树变化
  31. __publicField(this, "_observer");
  32. // 存储选择器与回调的映射关系(Key: CSS 选择器,Value: 处理函数)
  33. __publicField(this, "_handlerMap", /* @__PURE__ */ new Map());
  34. // 当前监听器状态,用于防止重复激活
  35. __publicField(this, "_operationStatus", "idle");
  36. // 运行模式标志(构造时确定,不可变)
  37. __publicField(this, "_listeningMode");
  38. this._listeningMode = mode;
  39. this._observer = new MutationObserver(
  40. (mutationRecords) => this._handleMutations(mutationRecords)
  41. );
  42. }
  43. /**
  44. * 处理 DOM 变动记录的核心逻辑
  45. * @param mutationRecords - MutationObserver 返回的变动记录数组
  46. */
  47. _handleMutations(mutationRecords) {
  48. for (const record of mutationRecords) {
  49. if (record.type !== "childList" || record.target.nodeType !== Node.ELEMENT_NODE || record.addedNodes.length === 0)
  50. continue;
  51. record.addedNodes.forEach((node) => {
  52. if (node.nodeType !== Node.ELEMENT_NODE || !(node instanceof HTMLElement))
  53. return;
  54. const newElement = node;
  55. this._handlerMap.forEach((handler, selector) => {
  56. if (newElement.matches(selector)) {
  57. this._invokeHandler(handler, newElement, selector);
  58. }
  59. newElement.querySelectorAll(selector).forEach((nestedElement) => {
  60. this._invokeHandler(handler, nestedElement, selector);
  61. });
  62. });
  63. });
  64. }
  65. }
  66. /**
  67. * 安全执行处理器函数
  68. * @param handler - 注册(不可用)的回调函数
  69. * @param targetElement - 待处理的 HTML 元素(已做类型断言)
  70. * @param selector - 对应的选择器标识
  71. */
  72. _invokeHandler(handler, targetElement, selector) {
  73. try {
  74. handler(targetElement, selector);
  75. } catch (error) {
  76. console.error(`[ElementCreateListener] Handler error for "${selector}":`, error);
  77. }
  78. }
  79. //======== 公开接口 ========//
  80. /**
  81. * 注册(不可用)元素处理器
  82. * @param selector - CSS 选择器
  83. * @param callback - 匹配到元素时执行的回调
  84. * @returns 当前实例(支持链式调用)
  85. */
  86. addHandler(selector, callback) {
  87. this._handlerMap.set(selector, callback);
  88. if (this._listeningMode === "auto")
  89. this.activate();
  90. return this;
  91. }
  92. /**
  93. * 移除指定选择器的处理器
  94. * @param selectors - 要移除的 CSS 选择器列表
  95. * @returns 当前实例(支持链式调用)
  96. */
  97. removeHandler(...selectors) {
  98. selectors.forEach((selector) => this._handlerMap.delete(selector));
  99. if (this._handlerMap.size === 0)
  100. this.deactivate();
  101. return this;
  102. }
  103. /**
  104. * 清空所有处理器并停止监听
  105. * @returns 当前实例(支持链式调用)
  106. */
  107. clearHandlers() {
  108. this._handlerMap.clear();
  109. this.deactivate();
  110. return this;
  111. }
  112. /**
  113. * 启动 DOM 监听(幂等操作)
  114. * @remarks 重复调用不会产生副作用
  115. * @returns 当前实例(支持链式调用)
  116. */
  117. activate() {
  118. if (this._operationStatus === "idle") {
  119. this._operationStatus = "active";
  120. this._observer.observe(document.documentElement, {
  121. childList: true,
  122. // 监控子节点变化
  123. subtree: true
  124. // 监控所有后代节点
  125. });
  126. }
  127. return this;
  128. }
  129. /**
  130. * 停止 DOM 监听(幂等操作)
  131. * @returns 当前实例(支持链式调用)
  132. */
  133. deactivate() {
  134. this._operationStatus = "idle";
  135. this._observer.disconnect();
  136. return this;
  137. }
  138. /**
  139. * 延时自动停止监听
  140. * @param timeout - 延迟时间(毫秒)
  141. * @returns 当前实例(支持链式调用)
  142. */
  143. delayedDeactivate(timeout) {
  144. setTimeout(() => this.deactivate(), timeout);
  145. return this;
  146. }
  147. }
  148. new ElementCreateListener("auto").addHandler(".MC_AEM_Wrapper", (el) => el.style.display = "none").delayedDeactivate(10 * 1e3);
  149.  
  150. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址