Pytems

Create & Manage Items in Infinite Craft

目前为 2024-02-16 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Pytems
  3. // @namespace https://py9.dev/
  4. // @version 1.0.0
  5. // @description Create & Manage Items in Infinite Craft
  6. // @author Py9
  7. // @match https://neal.fun/infinite-craft/
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=neal.fun
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. let items = localStorage.getItem('infinite-craft-data')
  14. if (items === null) {
  15. items = {"elements":[{"text":"Water","emoji":"💧","discovered":false},{"text":"Fire","emoji":"🔥","discovered":false},{"text":"Wind","emoji":"🌬️","discovered":false},{"text":"Earth","emoji":"🌍","discovered":false}]}
  16. } else {
  17. items = JSON.parse(items)
  18. }
  19. localStorage.setItem('infinite-craft-data', JSON.stringify(items))
  20. let thanks = {"text":"Thank you for using Pytems","emoji":"🍉","discovered":false}
  21. if (!items.elements.some(e => e.text === thanks.text)) {
  22. items.elements.unshift(thanks)
  23.  
  24. }
  25. localStorage.setItem('infinite-craft-data', JSON.stringify(items))
  26.  
  27. let buttonContainer = document.createElement('div');
  28. buttonContainer.style.display = 'flex';
  29. buttonContainer.style.justifyContent = 'center';
  30. document.body.appendChild(buttonContainer);
  31.  
  32. let createButton = document.createElement('button');
  33. createButton.textContent = 'Create Item';
  34. createButton.style.zIndex = 1000000;
  35. createButton.style.padding = '10px 20px';
  36. createButton.style.backgroundColor = '#4CAF50';
  37. createButton.style.color = 'white';
  38. createButton.style.border = 'none';
  39. createButton.style.borderRadius = '5px';
  40. createButton.style.cursor = 'pointer';
  41. createButton.style.marginTop = '10px';
  42. buttonContainer.appendChild(createButton);
  43. createButton.addEventListener('click', function() {
  44. createItemMenu.style.display = 'flex';
  45. });
  46.  
  47. let deleteButton = document.createElement('button');
  48. deleteButton.textContent = 'Delete Item';
  49. deleteButton.style.zIndex = 1000000;
  50. deleteButton.style.padding = '10px 20px';
  51. deleteButton.style.backgroundColor = '#f44336';
  52. deleteButton.style.color = 'white';
  53. deleteButton.style.border = 'none';
  54. deleteButton.style.borderRadius = '5px';
  55. deleteButton.style.cursor = 'pointer';
  56. deleteButton.style.marginLeft = '10px';
  57. deleteButton.style.marginTop = '10px';
  58. buttonContainer.appendChild(deleteButton);
  59. deleteButton.addEventListener('click', function() {
  60. deleteItemMenu.style.display = 'flex';
  61. });
  62.  
  63. let createItemMenu = document.createElement('div');
  64. createItemMenu.style.position = 'fixed';
  65. createItemMenu.style.top = '25%';
  66. createItemMenu.style.left = '50%';
  67. createItemMenu.style.transform = 'translateX(-50%)';
  68. createItemMenu.style.zIndex = 1000000;
  69. createItemMenu.style.padding = '20px';
  70. createItemMenu.style.backgroundColor = 'white';
  71. createItemMenu.style.borderRadius = '5px';
  72. createItemMenu.style.display = 'none';
  73. createItemMenu.style.flexDirection = 'column';
  74. createItemMenu.style.alignItems = 'center';
  75. createItemMenu.style.justifyContent = 'center';
  76. createItemMenu.style.border = '1px solid #ddd';
  77. createItemMenu.style.boxShadow = '0 0 10px rgba(0,0,0,0.1)';
  78. document.body.appendChild(createItemMenu);
  79.  
  80. let createItemInput = document.createElement('input');
  81. createItemInput.style.padding = '10px';
  82. createItemInput.style.margin = '5px';
  83. createItemInput.style.width = '100%';
  84. createItemInput.style.border = '1px solid #ddd';
  85. createItemInput.style.borderRadius = '5px';
  86. createItemInput.style.fontSize = '16px';
  87. createItemInput.style.outline = 'none';
  88. createItemInput.placeholder = 'Enter the name of the item';
  89. createItemInput.value = 'New Item';
  90. createItemMenu.appendChild(createItemInput);
  91. let createItemEmoji = document.createElement('input');
  92. createItemEmoji.style.padding = '10px';
  93. createItemEmoji.style.margin = '5px';
  94. createItemEmoji.style.width = '100%';
  95. createItemEmoji.style.border = '1px solid #ddd';
  96. createItemEmoji.style.borderRadius = '5px';
  97. createItemEmoji.style.fontSize = '16px';
  98. createItemEmoji.style.outline = 'none';
  99. createItemEmoji.placeholder = 'Enter the emoji for the item';
  100. createItemEmoji.value = '📋';
  101. createItemMenu.appendChild(createItemEmoji);
  102.  
  103. let createItemDiscoveredLabel = document.createElement('label');
  104. createItemDiscoveredLabel.textContent = 'Discovered';
  105. createItemDiscoveredLabel.style.fontSize = '16px';
  106. createItemDiscoveredLabel.style.outline = 'none';
  107. createItemMenu.appendChild(createItemDiscoveredLabel);
  108.  
  109. let createItemDiscovered = document.createElement('input');
  110. createItemDiscovered.type = 'checkbox';
  111. createItemDiscovered.style.border = '1px solid #ddd';
  112. createItemDiscovered.style.borderRadius = '5px';
  113. createItemDiscovered.style.fontSize = '16px';
  114. createItemDiscovered.style.outline = 'none';
  115. createItemDiscovered.style.marginBottom = '5px';
  116. createItemMenu.appendChild(createItemDiscovered);
  117.  
  118. let createItemSubmit = document.createElement('button');
  119. createItemSubmit.textContent = 'Create Item';
  120. createItemSubmit.style.padding = '10px 20px';
  121. createItemSubmit.style.backgroundColor = '#4CAF50';
  122. createItemSubmit.style.color = 'white';
  123. createItemSubmit.style.border = 'none';
  124. createItemSubmit.style.borderRadius = '5px';
  125. createItemSubmit.style.cursor = 'pointer';
  126. createItemMenu.appendChild(createItemSubmit);
  127.  
  128. createItemSubmit.addEventListener('click', function() {
  129. let newItem = {"text":createItemInput.value,"emoji":createItemEmoji.value,"discovered":createItemDiscovered.checked};
  130. items = localStorage.getItem('infinite-craft-data')
  131. items = JSON.parse(items)
  132. items.elements.push(newItem);
  133. localStorage.setItem('infinite-craft-data', JSON.stringify(items))
  134. location.reload();
  135. });
  136.  
  137. let deleteItemMenu = document.createElement('div');
  138. deleteItemMenu.style.position = 'fixed';
  139. deleteItemMenu.style.top = '25%';
  140. deleteItemMenu.style.left = '50%';
  141. deleteItemMenu.style.transform = 'translateX(-50%)';
  142. deleteItemMenu.style.zIndex = 1000000;
  143. deleteItemMenu.style.padding = '20px';
  144. deleteItemMenu.style.backgroundColor = 'white';
  145. deleteItemMenu.style.borderRadius = '5px';
  146. deleteItemMenu.style.display = 'none';
  147. deleteItemMenu.style.flexDirection = 'column';
  148. deleteItemMenu.style.alignItems = 'center';
  149. deleteItemMenu.style.justifyContent = 'center';
  150. deleteItemMenu.style.border = '1px solid #ddd';
  151. deleteItemMenu.style.boxShadow = '0 0 10px rgba(0,0,0,0.1)';
  152. document.body.appendChild(deleteItemMenu);
  153.  
  154. let deleteItemInput = document.createElement('input');
  155. deleteItemInput.style.padding = '10px';
  156. deleteItemInput.style.margin = '5px';
  157. deleteItemInput.style.width = '100%';
  158. deleteItemInput.style.border = '1px solid #ddd';
  159. deleteItemInput.style.borderRadius = '5px';
  160. deleteItemInput.style.fontSize = '16px';
  161. deleteItemInput.style.outline = 'none';
  162. deleteItemInput.placeholder = 'Enter the name of the item';
  163. deleteItemMenu.appendChild(deleteItemInput);
  164.  
  165. let deleteItemSubmit = document.createElement('button');
  166. deleteItemSubmit.textContent = 'Delete Item';
  167. deleteItemSubmit.style.padding = '10px 20px';
  168. deleteItemSubmit.style.backgroundColor = '#f44336';
  169. deleteItemSubmit.style.color = 'white';
  170. deleteItemSubmit.style.border = 'none';
  171. deleteItemSubmit.style.borderRadius = '5px';
  172. deleteItemSubmit.style.cursor = 'pointer';
  173. deleteItemMenu.appendChild(deleteItemSubmit);
  174.  
  175. deleteItemSubmit.addEventListener('click', function() {
  176. items = localStorage.getItem('infinite-craft-data')
  177. items = JSON.parse(items)
  178. items.elements = items.elements.filter(e => e.text !== deleteItemInput.value)
  179. localStorage.setItem('infinite-craft-data', JSON.stringify(items))
  180. location.reload();
  181. });
  182. })();