Bopimo Item Data Downloader

Adds a button to download item textures from Bopimo.com

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         Bopimo Item Data Downloader
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  Adds a button to download item textures from Bopimo.com
// @author       Teemsploit, Variant Tombstones, Evelyn
// @license      MIT
// @match        https://www.bopimo.com/items/*
// @run-at       document-start
// @grant        none
// ==/UserScript==

(function () {
  'use strict';

  function injectUI() {
    var buttonPanel = document.createElement('div');
    buttonPanel.id = "custom-download-panel";
    buttonPanel.className = "shop-card";
    buttonPanel.style = "position: fixed; z-index: 1000; padding: 1rem;";
    buttonPanel.style.bottom = "1rem";
    buttonPanel.style.right = "1rem";
    buttonPanel.innerHTML = `
      <button class="button" id="download-texture-btn">Download Texture</button>
      <button class="button" id="download-mesh-btn" style="margin-left: 10px;">Download Mesh</button>
      <p>Credits: Teemsploit & Variant Tombstones</p>
    `;
    document.body.appendChild(buttonPanel);
  }

  function makeButtonsDoStuffIGuess() {
    const textureButton = document.getElementById("download-texture-btn");
    const meshButton = document.getElementById("download-mesh-btn");

    if (textureButton) {
      textureButton.addEventListener("click", () => download('image'));
    }

    if (meshButton) {
      meshButton.addEventListener("click", () => download('mesh'));
    }
  }

  function download(type) {
    try {
      var imageUrl = document.querySelector('meta[property="og:image"]').getAttribute('content');
      if (!imageUrl) {
        alert('Image link not found.');
        return;
      }
      var assetUrl = imageUrl.replace("renders/thumbnail", "assets");

      // Fix: Proper comparison for the type
      if (type === 'mesh') {
        assetUrl = assetUrl.replace(".png", ".obj");
      }

      var parts = assetUrl.split("/");
      var fileName = parts[parts.length - 1];
      var link = document.createElement("a");
      link.setAttribute("href", assetUrl);
      link.setAttribute("download", fileName);
      document.body.appendChild(link);
      link.click();
      document.body.removeChild(link);
    } catch (err) {
      alert('An error occurred: ' + err);
    }
  }

  function waitForDomReady() {
    if (document.readyState === 'loading') {
      document.addEventListener('DOMContentLoaded', makeButtonsDoStuffIGuess);
    } else {
      makeButtonsDoStuffIGuess();
    }
  }

  injectUI();

  waitForDomReady();
})();