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

去掉网易跳转提示提示

// ==UserScript==
// @name       我的世界去除跳转网易提示
// @namespace  https://github.com/marioplus/minecraft-net-easy-tips-remover
// @version    1.1.0
// @author     marioplus
// @license    GPL-3.0
// @icon       https://www.google.com/s2/favicons?sz=64&domain=minecraft.net
// @match      https://www.minecraft.net/*
// @run-at     document-start
// @description 去掉网易跳转提示提示
// ==/UserScript==

(function () {
  'use strict';

  var __defProp = Object.defineProperty;
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  var __publicField = (obj, key, value) => {
    __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
    return value;
  };
  class ElementCreateListener {
    /**
     * 初始化元素监听器
     * @param mode 监听模式:
     *   - 'auto' : 添加首个处理器时自动激活监听
     *   - 'manual' : 需手动调用 activate() 启动
     */
    constructor(mode = "auto") {
      // 观测器实例,用于监听 DOM 树变化
      __publicField(this, "_observer");
      // 存储选择器与回调的映射关系(Key: CSS 选择器,Value: 处理函数)
      __publicField(this, "_handlerMap", /* @__PURE__ */ new Map());
      // 当前监听器状态,用于防止重复激活
      __publicField(this, "_operationStatus", "idle");
      // 运行模式标志(构造时确定,不可变)
      __publicField(this, "_listeningMode");
      this._listeningMode = mode;
      this._observer = new MutationObserver(
        (mutationRecords) => this._handleMutations(mutationRecords)
      );
    }
    /**
     * 处理 DOM 变动记录的核心逻辑
     * @param mutationRecords - MutationObserver 返回的变动记录数组
     */
    _handleMutations(mutationRecords) {
      for (const record of mutationRecords) {
        if (record.type !== "childList" || record.target.nodeType !== Node.ELEMENT_NODE || record.addedNodes.length === 0)
          continue;
        record.addedNodes.forEach((node) => {
          if (node.nodeType !== Node.ELEMENT_NODE || !(node instanceof HTMLElement))
            return;
          const newElement = node;
          this._handlerMap.forEach((handler, selector) => {
            if (newElement.matches(selector)) {
              this._invokeHandler(handler, newElement, selector);
            }
            newElement.querySelectorAll(selector).forEach((nestedElement) => {
              this._invokeHandler(handler, nestedElement, selector);
            });
          });
        });
      }
    }
    /**
     * 安全执行处理器函数
     * @param handler - 注册的回调函数
     * @param targetElement - 待处理的 HTML 元素(已做类型断言)
     * @param selector - 对应的选择器标识
     */
    _invokeHandler(handler, targetElement, selector) {
      try {
        handler(targetElement, selector);
      } catch (error) {
        console.error(`[ElementCreateListener]  Handler error for "${selector}":`, error);
      }
    }
    //======== 公开接口 ========//
    /**
     * 注册元素处理器
     * @param selector - CSS 选择器
     * @param callback - 匹配到元素时执行的回调
     * @returns 当前实例(支持链式调用)
     */
    addHandler(selector, callback) {
      this._handlerMap.set(selector, callback);
      if (this._listeningMode === "auto")
        this.activate();
      return this;
    }
    /**
     * 移除指定选择器的处理器
     * @param selectors - 要移除的 CSS 选择器列表
     * @returns 当前实例(支持链式调用)
     */
    removeHandler(...selectors) {
      selectors.forEach((selector) => this._handlerMap.delete(selector));
      if (this._handlerMap.size === 0)
        this.deactivate();
      return this;
    }
    /**
     * 清空所有处理器并停止监听
     * @returns 当前实例(支持链式调用)
     */
    clearHandlers() {
      this._handlerMap.clear();
      this.deactivate();
      return this;
    }
    /**
     * 启动 DOM 监听(幂等操作)
     * @remarks 重复调用不会产生副作用
     * @returns 当前实例(支持链式调用)
     */
    activate() {
      if (this._operationStatus === "idle") {
        this._operationStatus = "active";
        this._observer.observe(document.documentElement, {
          childList: true,
          // 监控子节点变化
          subtree: true
          // 监控所有后代节点
        });
      }
      return this;
    }
    /**
     * 停止 DOM 监听(幂等操作)
     * @returns 当前实例(支持链式调用)
     */
    deactivate() {
      this._operationStatus = "idle";
      this._observer.disconnect();
      return this;
    }
    /**
     * 延时自动停止监听
     * @param timeout - 延迟时间(毫秒)
     * @returns 当前实例(支持链式调用)
     */
    delayedDeactivate(timeout) {
      setTimeout(() => this.deactivate(), timeout);
      return this;
    }
  }
  new ElementCreateListener("auto").addHandler(".MC_AEM_Wrapper", (el) => el.style.display = "none").delayedDeactivate(10 * 1e3);

})();