Greasy Fork 支持简体中文。

Pytems

Create & Manage Items in Infinite Craft with an Easy to use Menu!

目前為 2024-02-16 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name Pytems
  3. // @namespace https://py9.dev/
  4. // @version 1.0.2
  5. // @description Create & Manage Items in Infinite Craft with an Easy to use Menu!
  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. const version = '1.0.2';
  14. let checkVersion = async () => {
  15. let response = await fetch('https://raw.githubusercontent.com/Proyo9/Infinite-Hack/main/version.txt');
  16. let text = await response.text();
  17. if (!text.includes(version)) {
  18. alert('A new version of Pytems is available! Check console for more info.');
  19. console.info('Pytems | New version available at https://greasyfork.org/en/scripts/487439-pytems');
  20. }
  21. }
  22. checkVersion();
  23.  
  24. let script = document.createElement('script');
  25. script.src = 'https://cdn.jsdelivr.net/npm/emoji-picker-element@^1/index.js';
  26. script.type = 'module';
  27. document.head.appendChild(script);
  28. let items = localStorage.getItem('infinite-craft-data')
  29. if (items === null) {
  30. items = {"elements":[{"text":"Water","emoji":"💧","discovered":false},{"text":"Fire","emoji":"🔥","discovered":false},{"text":"Wind","emoji":"🌬️","discovered":false},{"text":"Earth","emoji":"🌍","discovered":false}]}
  31. } else {
  32. items = JSON.parse(items)
  33. }
  34. localStorage.setItem('infinite-craft-data', JSON.stringify(items))
  35. let thanks = {"text":"Thank you for using Pytems","emoji":"🍉","discovered":false}
  36. if (!items.elements.some(e => e.text === thanks.text)) {
  37. items.elements.unshift(thanks)
  38.  
  39. }
  40. localStorage.setItem('infinite-craft-data', JSON.stringify(items))
  41.  
  42. let buttonContainer = document.createElement('div');
  43. buttonContainer.style.display = 'flex';
  44. buttonContainer.style.justifyContent = 'center';
  45. document.body.appendChild(buttonContainer);
  46.  
  47. let createButton = document.createElement('button');
  48. createButton.textContent = 'Create Item';
  49. createButton.style.zIndex = 1000000;
  50. createButton.style.padding = '10px 20px';
  51. createButton.style.backgroundColor = '#4CAF50';
  52. createButton.style.color = 'white';
  53. createButton.style.border = 'none';
  54. createButton.style.borderRadius = '5px';
  55. createButton.style.cursor = 'pointer';
  56. createButton.style.marginTop = '10px';
  57. buttonContainer.appendChild(createButton);
  58. createButton.addEventListener('click', function() {
  59. createItemMenu.style.display = 'flex';
  60. });
  61.  
  62. let deleteButton = document.createElement('button');
  63. deleteButton.textContent = 'Delete Item';
  64. deleteButton.style.zIndex = 1000000;
  65. deleteButton.style.padding = '10px 20px';
  66. deleteButton.style.backgroundColor = '#f44336';
  67. deleteButton.style.color = 'white';
  68. deleteButton.style.border = 'none';
  69. deleteButton.style.borderRadius = '5px';
  70. deleteButton.style.cursor = 'pointer';
  71. deleteButton.style.marginLeft = '10px';
  72. deleteButton.style.marginTop = '10px';
  73. buttonContainer.appendChild(deleteButton);
  74. deleteButton.addEventListener('click', function() {
  75. deleteItemMenu.style.display = 'flex';
  76. });
  77.  
  78. let createItemMenu = document.createElement('div');
  79. createItemMenu.style.position = 'fixed';
  80. createItemMenu.style.top = '15%';
  81. createItemMenu.style.left = '50%';
  82. createItemMenu.style.transform = 'translateX(-50%)';
  83. createItemMenu.style.zIndex = 1000000;
  84. createItemMenu.style.padding = '20px';
  85. createItemMenu.style.backgroundColor = 'white';
  86. createItemMenu.style.borderRadius = '5px';
  87. createItemMenu.style.display = 'none';
  88. createItemMenu.style.flexDirection = 'column';
  89. createItemMenu.style.alignItems = 'center';
  90. createItemMenu.style.justifyContent = 'center';
  91. createItemMenu.style.border = '1px solid #ddd';
  92. createItemMenu.style.boxShadow = '0 0 10px rgba(0,0,0,0.1)';
  93. document.body.appendChild(createItemMenu);
  94.  
  95. let createItemInput = document.createElement('input');
  96. createItemInput.style.padding = '10px';
  97. createItemInput.style.margin = '5px';
  98. createItemInput.style.width = '100%';
  99. createItemInput.style.border = '1px solid #ddd';
  100. createItemInput.style.borderRadius = '5px';
  101. createItemInput.style.fontSize = '16px';
  102. createItemInput.style.outline = 'none';
  103. createItemInput.placeholder = 'Enter the name of the item';
  104. createItemInput.value = 'New Item';
  105. createItemMenu.appendChild(createItemInput);
  106. let createItemEmoji = document.createElement('input');
  107. createItemEmoji.style.padding = '10px';
  108. createItemEmoji.style.margin = '5px';
  109. createItemEmoji.style.width = '100%';
  110. createItemEmoji.style.border = '1px solid #ddd';
  111. createItemEmoji.style.borderRadius = '5px';
  112. createItemEmoji.style.fontSize = '16px';
  113. createItemEmoji.style.outline = 'none';
  114. createItemEmoji.placeholder = 'Enter the emoji for the item';
  115. createItemEmoji.value = '📋';
  116. createItemMenu.appendChild(createItemEmoji);
  117.  
  118. let pickerButton = document.createElement('button');
  119. pickerButton.textContent = 'Pick Emoji';
  120. pickerButton.style.padding = '10px 20px';
  121. pickerButton.style.backgroundColor = '#2196F3';
  122. pickerButton.style.color = 'white';
  123. pickerButton.style.border = 'none';
  124. pickerButton.style.borderRadius = '5px';
  125. pickerButton.style.cursor = 'pointer';
  126. pickerButton.style.marginBottom = '10px';
  127. createItemMenu.appendChild(pickerButton);
  128. pickerButton.addEventListener('click', function() {
  129. pickerButton.style.display = 'none';
  130. emojiPicker.style.display = 'flex';
  131. }
  132. );
  133.  
  134. let emojiPicker = document.createElement('emoji-picker');
  135. emojiPicker.style.marginTop = '10px';
  136. emojiPicker.style.marginBottom = '10px';
  137. emojiPicker.style.display = 'none';
  138. emojiPicker.addEventListener('emoji-click', (event) => {
  139. createItemEmoji.value = event.detail.emoji.unicode;
  140. emojiPicker.style.display = 'none';
  141. pickerButton.style.display = 'flex';
  142. });
  143. createItemMenu.appendChild(emojiPicker);
  144.  
  145. let createItemDiscoveredLabel = document.createElement('label');
  146. createItemDiscoveredLabel.textContent = 'Discovered';
  147. createItemDiscoveredLabel.style.fontSize = '16px';
  148. createItemDiscoveredLabel.style.outline = 'none';
  149. createItemMenu.appendChild(createItemDiscoveredLabel);
  150.  
  151. let createItemDiscovered = document.createElement('input');
  152. createItemDiscovered.type = 'checkbox';
  153. createItemDiscovered.style.border = '1px solid #ddd';
  154. createItemDiscovered.style.borderRadius = '5px';
  155. createItemDiscovered.style.fontSize = '16px';
  156. createItemDiscovered.style.outline = 'none';
  157. createItemDiscovered.style.marginBottom = '5px';
  158. createItemMenu.appendChild(createItemDiscovered);
  159.  
  160. let createItemSubmit = document.createElement('button');
  161. createItemSubmit.textContent = 'Create Item';
  162. createItemSubmit.style.padding = '10px 20px';
  163. createItemSubmit.style.backgroundColor = '#4CAF50';
  164. createItemSubmit.style.color = 'white';
  165. createItemSubmit.style.border = 'none';
  166. createItemSubmit.style.borderRadius = '5px';
  167. createItemSubmit.style.cursor = 'pointer';
  168. createItemMenu.appendChild(createItemSubmit);
  169.  
  170. createItemSubmit.addEventListener('click', function() {
  171. let newItem = {"text":createItemInput.value,"emoji":createItemEmoji.value,"discovered":createItemDiscovered.checked};
  172. items = localStorage.getItem('infinite-craft-data')
  173. items = JSON.parse(items)
  174. items.elements.push(newItem);
  175. localStorage.setItem('infinite-craft-data', JSON.stringify(items))
  176. location.reload();
  177. });
  178.  
  179. let deleteItemMenu = document.createElement('div');
  180. deleteItemMenu.style.position = 'fixed';
  181. deleteItemMenu.style.top = '15%';
  182. deleteItemMenu.style.left = '50%';
  183. deleteItemMenu.style.transform = 'translateX(-50%)';
  184. deleteItemMenu.style.zIndex = 1000000;
  185. deleteItemMenu.style.padding = '20px';
  186. deleteItemMenu.style.backgroundColor = 'white';
  187. deleteItemMenu.style.borderRadius = '5px';
  188. deleteItemMenu.style.display = 'none';
  189. deleteItemMenu.style.flexDirection = 'column';
  190. deleteItemMenu.style.alignItems = 'center';
  191. deleteItemMenu.style.justifyContent = 'center';
  192. deleteItemMenu.style.border = '1px solid #ddd';
  193. deleteItemMenu.style.boxShadow = '0 0 10px rgba(0,0,0,0.1)';
  194. document.body.appendChild(deleteItemMenu);
  195.  
  196. let deleteItemInput = document.createElement('input');
  197. deleteItemInput.style.padding = '10px';
  198. deleteItemInput.style.margin = '5px';
  199. deleteItemInput.style.width = '100%';
  200. deleteItemInput.style.border = '1px solid #ddd';
  201. deleteItemInput.style.borderRadius = '5px';
  202. deleteItemInput.style.fontSize = '16px';
  203. deleteItemInput.style.outline = 'none';
  204. deleteItemInput.placeholder = 'Enter the name of the item';
  205. deleteItemMenu.appendChild(deleteItemInput);
  206.  
  207. let deleteItemSubmit = document.createElement('button');
  208. deleteItemSubmit.textContent = 'Delete Item';
  209. deleteItemSubmit.style.padding = '10px 20px';
  210. deleteItemSubmit.style.backgroundColor = '#f44336';
  211. deleteItemSubmit.style.color = 'white';
  212. deleteItemSubmit.style.border = 'none';
  213. deleteItemSubmit.style.borderRadius = '5px';
  214. deleteItemSubmit.style.cursor = 'pointer';
  215. deleteItemMenu.appendChild(deleteItemSubmit);
  216.  
  217. deleteItemSubmit.addEventListener('click', function() {
  218. items = localStorage.getItem('infinite-craft-data')
  219. items = JSON.parse(items)
  220. items.elements = items.elements.filter(e => e.text !== deleteItemInput.value)
  221. localStorage.setItem('infinite-craft-data', JSON.stringify(items))
  222. location.reload();
  223. });
  224. })();