diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 2278708..ba84fcf 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -5,11 +5,24 @@
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
-
+
@@ -64,39 +77,39 @@
- {
- "keyToString": {
- "Application.Run Test.executor": "Run",
- "Maven.Algorithm test.executor": "Run",
- "Maven.Clean.executor": "Run",
- "Maven.LogiTech [-Dtest=Tests#main,test,-e].executor": "Run",
- "Maven.LogiTech [-Dtest=Tests#main,test].executor": "Run",
- "Maven.LogiTech [-Dtest=Tests,test].executor": "Run",
- "Maven.LogiTech [clean].executor": "Run",
- "Maven.LogiTech [compile].executor": "Run",
- "Maven.LogiTech [install,-Dmaven.test.skip=true].executor": "Run",
- "Maven.LogiTech [install].executor": "Run",
- "Maven.LogiTech [package].executor": "Run",
- "Maven.SlimefunAddon [install].executor": "Run",
- "Maven.TestAddon [install].executor": "Run",
- "RunOnceActivity.ShowReadmeOnStart": "true",
- "Shell Script.Build and Start Server.executor": "Run",
- "Shell Script.Unnamed.executor": "Run",
- "git-widget-placeholder": "master",
- "kotlin-language-version-configured": "true",
- "last_opened_file_path": "C:/Intellij_Idea/workspace/NetworksExpansion-master3",
- "node.js.detected.package.eslint": "true",
- "node.js.detected.package.tslint": "true",
- "node.js.selected.package.eslint": "(autodetect)",
- "node.js.selected.package.tslint": "(autodetect)",
- "nodejs_package_manager_path": "npm",
- "project.structure.last.edited": "Libraries",
- "project.structure.proportion": "0.15",
- "project.structure.side.proportion": "0.2",
- "settings.editor.selected.configurable": "editor.preferences.completion",
- "vue.rearranger.settings.migration": "true"
+
+}]]>
@@ -289,14 +302,10 @@
-
-
-
- 1726337109641
-
-
-
- 1726337109642
+
+
+
+
@@ -682,7 +691,15 @@
1728036463830
-
+
+
+ 1728057844990
+
+
+
+ 1728057844991
+
+
diff --git a/src/main/java/me/matl114/logitech/Listeners/ListenerManager.java b/src/main/java/me/matl114/logitech/Listeners/ListenerManager.java
index 478820c..074de21 100644
--- a/src/main/java/me/matl114/logitech/Listeners/ListenerManager.java
+++ b/src/main/java/me/matl114/logitech/Listeners/ListenerManager.java
@@ -24,6 +24,7 @@ public static void registerListeners(Plugin plugin,PluginManager manager){
register(VANILLACRAFT_ALLOW);
register(ENTITYFEAT_LISTENER);
register(LASER_ON_HEAD_LISTENER);
+ register(SUPERSPONGE_DRY_LISTENER);
}
public static Plugin plugin;
public static PluginManager manager;
@@ -40,4 +41,5 @@ public static void register(Listener listener){
public static final Listener VANILLACRAFT_ALLOW=new CraftingListener();
public static final Listener ENTITYFEAT_LISTENER=new SpawnerListener();
public static final Listener LASER_ON_HEAD_LISTENER=new LaserGunOnHeadListener();
+ public static final Listener SUPERSPONGE_DRY_LISTENER=new SuperSpongeDryListener();
}
diff --git a/src/main/java/me/matl114/logitech/Listeners/Listeners/SuperSpongeDryListener.java b/src/main/java/me/matl114/logitech/Listeners/Listeners/SuperSpongeDryListener.java
new file mode 100644
index 0000000..2adbf69
--- /dev/null
+++ b/src/main/java/me/matl114/logitech/Listeners/Listeners/SuperSpongeDryListener.java
@@ -0,0 +1,59 @@
+package me.matl114.logitech.Listeners.Listeners;
+
+import me.matl114.logitech.SlimefunItem.AddItem;
+import me.matl114.logitech.Utils.CraftUtils;
+import me.matl114.logitech.Utils.Debug;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.block.BlockState;
+import org.bukkit.block.Container;
+import org.bukkit.block.data.BlockData;
+import org.bukkit.block.data.type.Furnace;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.inventory.FurnaceBurnEvent;
+import org.bukkit.event.inventory.FurnaceSmeltEvent;
+import org.bukkit.inventory.FurnaceInventory;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.InventoryHolder;
+import org.bukkit.inventory.ItemStack;
+
+public class SuperSpongeDryListener implements Listener {
+ @EventHandler
+ public void onFurnaceDryFinish(FurnaceSmeltEvent event){
+ ItemStack stack=event.getSource();
+ if(stack.getType()== Material.WET_SPONGE&& CraftUtils.matchItemStack(stack,AddItem.SUPERSPONGE_USED,false)){
+ Block block=event.getBlock();
+ BlockState blockData=block.getState();
+ if(blockData instanceof Container ih){
+ Inventory inventory=ih.getInventory();
+ if(inventory instanceof FurnaceInventory fi){
+ ItemStack fuelSlot=fi.getFuel();
+ ItemStack outputSlot=fi.getResult();
+ if(outputSlot==null||outputSlot.getType()==Material.AIR){
+ //槽位是空的,直接输入该输出就行
+ event.setResult(AddItem.SUPERSPONGE.clone());
+ if(fuelSlot!=null&&fuelSlot.getType()== Material.BUCKET){
+ //燃料修改
+ fuelSlot.setType(Material.POWDER_SNOW_BUCKET);
+ }
+ }
+ else if( CraftUtils.matchItemStack(outputSlot,AddItem.SUPERSPONGE,false)){
+ //由于bukkit特性,需要我们自己设置数量
+ ItemStack source=fi.getSmelting();
+ if(CraftUtils.matchItemStack(source,AddItem.SUPERSPONGE_USED,false)){
+ outputSlot.setAmount(outputSlot.getAmount()+1);
+ source.setAmount(source.getAmount()-1);
+ if(fuelSlot!=null&&fuelSlot.getType()== Material.BUCKET){
+ //燃料修改
+ fuelSlot.setType(Material.POWDER_SNOW_BUCKET);
+ }
+ event.setCancelled(true);
+ }
+ }
+ }
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/me/matl114/logitech/MyAddon.java b/src/main/java/me/matl114/logitech/MyAddon.java
index 5b26c2d..14bac61 100644
--- a/src/main/java/me/matl114/logitech/MyAddon.java
+++ b/src/main/java/me/matl114/logitech/MyAddon.java
@@ -14,10 +14,7 @@
import me.matl114.logitech.SlimefunItem.AddSlimefunItems;
import me.matl114.logitech.SlimefunItem.Blocks.MultiBlockTypes;
import me.matl114.logitech.SlimefunItem.Cargo.Storages;
-import me.matl114.logitech.Utils.BukkitUtils;
-import me.matl114.logitech.Utils.CraftUtils;
-import me.matl114.logitech.Utils.DataCache;
-import me.matl114.logitech.Utils.Debug;
+import me.matl114.logitech.Utils.*;
import me.matl114.logitech.Utils.UtilClass.MultiBlockClass.MultiBlockService;
import net.guizhanss.guizhanlibplugin.updater.GuizhanUpdater;
import org.bukkit.Bukkit;
@@ -106,7 +103,9 @@ public void onEnable() {
RadiationRegion.setup();
//加载配方工具
CraftUtils.setup();
- //加载原版工作台注入
+ //加载世界操作工具
+ WorldUtils.setup();
+ //加载Bukkit操作工具
BukkitUtils.setup();
Debug.logger("指令注册完毕");
command.register();
diff --git a/src/main/java/me/matl114/logitech/SlimefunItem/AddGroups.java b/src/main/java/me/matl114/logitech/SlimefunItem/AddGroups.java
index 13e8e0f..dd41727 100644
--- a/src/main/java/me/matl114/logitech/SlimefunItem/AddGroups.java
+++ b/src/main/java/me/matl114/logitech/SlimefunItem/AddGroups.java
@@ -1,668 +1,675 @@
-package me.matl114.logitech.SlimefunItem;
-
-import io.github.thebusybiscuit.slimefun4.api.SlimefunAddon;
-import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
-import io.github.thebusybiscuit.slimefun4.api.player.PlayerProfile;
-import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuide;
-import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuideMode;
-import io.github.thebusybiscuit.slimefun4.implementation.Slimefun;
-import io.github.thebusybiscuit.slimefun4.libraries.dough.chat.ChatInput;
-import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack;
-import io.github.thebusybiscuit.slimefun4.utils.ChestMenuUtils;
-import me.matl114.logitech.Items.CustomHead;
-import me.matl114.logitech.Listeners.Listeners.PlayerQuiteListener;
-import me.matl114.logitech.Schedule.PersistentEffects.AbstractEffect;
-import me.matl114.logitech.Schedule.PersistentEffects.CustomEffects;
-import me.matl114.logitech.Schedule.PersistentEffects.PlayerEffects;
-import me.matl114.logitech.Schedule.SchedulePostRegister;
-import me.matl114.logitech.Schedule.Schedules;
-import me.matl114.logitech.SlimefunItem.Machines.WorkBenchs.BugCrafter;
-import me.matl114.logitech.Utils.*;
-import me.matl114.logitech.Utils.UtilClass.MenuClass.*;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
-import net.md_5.bungee.api.ChatColor;
-import net.md_5.bungee.api.chat.ClickEvent;
-import net.md_5.bungee.api.chat.TextComponent;
-import org.bukkit.Material;
-import org.bukkit.NamespacedKey;
-import org.bukkit.damage.DamageSource;
-import org.bukkit.damage.DamageType;
-import org.bukkit.entity.Player;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
-import org.bukkit.event.entity.EntityDamageEvent;
-import org.bukkit.event.entity.PlayerDeathEvent;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
-import org.bukkit.scheduler.BukkitRunnable;
-
-import java.util.*;
-
-public class AddGroups {
- public static void registerGroups(SlimefunAddon plugin){
- ROOT.register(plugin);
- INFO.register(plugin);
- MATERIAL.register(plugin);
- BASIC.register(plugin);
- CARGO.register(plugin);
- SINGULARITY.register(plugin);
- ADVANCED.register(plugin);
- BEYOND.register(plugin);
- VANILLA.register(plugin);
- MANUAL.register(plugin);
- SPECIAL.register(plugin);
- SPACE.register(plugin);
- GENERATORS.register(plugin);
- ENERGY.register(plugin);
- FUNCTIONAL.register(plugin);
- }
- // 给你的分类提供一个独一无二的ID
- protected static final NamespacedKey itemGroupId = AddUtils.getNameKey("addon_category");
- protected static final NamespacedKey bugcrafterId = AddUtils.getNameKey("bugcrafter");
-
- public static final ItemGroup MATERIAL =new DummyItemGroup(AddUtils.getNameKey("material" ), AddItem.MATERIAL);
-
- public static final ItemGroup BASIC =new DummyItemGroup(AddUtils.getNameKey("basic" ), AddItem.BASIC);
-
- public static final ItemGroup CARGO = new DummyItemGroup(AddUtils.getNameKey("cargo" ), AddItem.CARGO);
-
- public static final ItemGroup SINGULARITY= new DummyItemGroup(AddUtils.getNameKey("singularity"),AddItem.SINGULARITY);
-
- public static final ItemGroup ADVANCED= new DummyItemGroup(AddUtils.getNameKey("advanced" ), AddItem.ADVANCED);
-
- public static final ItemGroup BEYOND= new DummyItemGroup(AddUtils.getNameKey("beyond" ), AddItem.BEYOND);
-
- public static final ItemGroup VANILLA= new DummyItemGroup(AddUtils.getNameKey("vanilla" ), AddItem.VANILLA);
-
- public static final ItemGroup MANUAL = new DummyItemGroup(AddUtils.getNameKey("manual" ), AddItem.MANUAL);
-
- public static final ItemGroup SPECIAL = new DummyItemGroup(AddUtils.getNameKey("special" ), AddItem.SPECIAL);
-
- public static final ItemGroup SPACE = new DummyItemGroup(AddUtils.getNameKey("space"),AddItem.SPACE);
-
- public static final ItemGroup GENERATORS = new DummyItemGroup(AddUtils.getNameKey("generators"),AddItem.GENERATORS);
-
- public static final ItemGroup ENERGY= new DummyItemGroup(AddUtils.getNameKey("energy"),AddItem.ENERGY);
-
- public static final ItemGroup FUNCTIONAL=new DummyItemGroup(AddUtils.getNameKey("functional"),AddItem.FUNCTIONAL);
- public static ItemGroup MORE2=new CustomItemGroup(AddUtils.getNameKey("more2"),AddUtils.color("更多说明"),AddItem.MORE2,54,36,new LinkedHashMap<>()) {
- @Override
- protected void init(MenuFactory menuFactory) {
- menuFactory.addInventory(0,AddUtils.getInfoShow("&f致歉说明",
- "&7感谢您能点开到这里,看到这份说明",
- "&7本附属为我开发的首个附属,无人问津是应该的",
- "&7您能点进这一分类已经是对我最大的鼓励和支持",
- "&7本人水平很次,也没有很好的创作能力创作让玩家满意的附属",
- "&7还请包容"));
- menuFactory.addInventory(1,AddUtils.getInfoShow("&f致歉说明",
- "&7这个附属很烂",
- "&7他拥有冗长的机制说明书和昂贵的合成表",
- "&7以及作者乱填的,毫无道理的材料消耗",
- "&7为什么呢",
- "&7因为作者并不知道怎么编一个让玩家满意的合成表",
- "&7很可能有些时候,在这方面给玩家带来很大的困扰"));
- menuFactory.addInventory(2,AddUtils.getInfoShow("&f致歉说明",
- "&7作者也不知道为什么作者要写这一个附属",
- "&7作者已经投入整个暑假的晚上8点到凌晨4点来进行附属编写",
- "&7作者也&a希望这个附属能变得更好&7,而不是更恶心",
- "&7作者&a希望附属对玩家有帮助,而不是对玩家造成困扰"
- ));
- menuFactory.addInventory(3,AddUtils.getInfoShow("&f致歉说明",
- "&7作者在此恳请大家",
- "&a多多包容作者,并把自己的想法跟作者讨论",
- "&a不管如何,作者都会听取玩家的意见,争取将附属做得更好"));
- menuFactory.addInventory(4,AddUtils.getInfoShow("&f致歉说明",
- "&7这个附属还是很烂",
- "&7他既没有乱码科技的制造台,也没有乱序技艺的尘埃反应堆",
- "&7作者一开始的目标是制作优秀的机器,虽然现在改为了制作高效的机器",
- "&7但是并没有非常超标的机器存在",
- "&7还请玩家包容",
- "&7如果你只是想找op机器",
- "&7那么本附属可能并不符合你的心意"));
- menuFactory.addInventory(5,AddUtils.getInfoShow("&f致歉说明",
- "&7作者能拿的出手的机制就这几个",
- "&7虽说抱歉,但是作者也不会因此而做op机器和刷物机器",
- "&a但是玩家有什么好的想法或者急切的机器需求",
- "&a也是可以和作者提的",
- "",
- "&7作者真心希望该附属越做越好,而不是越来越烂",
- "&a所以我在此恳请大家主动发表自己的看法"));
- menuFactory.addInventory(6,AddUtils.getInfoShow("&f致歉说明",
- "&7虽说致歉,但是作者还是会&a坚定的继续开发和维护这个附属",
- "&7虽然作者也曾想过放弃该附属",
- "&7但是也只是一时之念,大家不要当真",
- "&7请大家放心,作者并不会丢下一堆烂摊子跑路"));
- menuFactory.addInventory(7,AddUtils.getInfoShow("&f致歉说明",
- "&7最后,在此对&e所有觉得这个附属没救的玩家&7致辞","",
- "&7粘液圈虽然不大,但是比本附属好的附属也是比比皆是",
- "&7作者的生活中也不只是有粘液,作者也要有自己的生活,并不能帮你救活这个附属",
- "&7您也不必拘泥于我的附属,我们好聚好散,对大家都好"));
- menuFactory.addInventory(8,AddUtils.getInfoShow("&f致歉说明",
- "&7最后声明:本说明并不针对某一特定玩家",
- "&7当您对号入座时,请不要座岔了,谢谢."
- ));
- }
-
- @Override
- protected void addGuideRelated(ChestMenu menu, Player p, PlayerProfile profile, SlimefunGuideMode mode, int pages) {
-
- }
- };
- public static ItemGroup UPDATELOG=new CustomItemGroup(AddUtils.getNameKey("log"),AddUtils.colorful("更新日志"),AddItem.UPDATELOG,54,36,new LinkedHashMap<>()) {
- @Override
- protected void init(MenuFactory factory) {
- factory.addInventory(0,AddUtils.getInfoShow("&f更新日志","&7此页为简易的更新日志","&7你或许可以找到你想要的新特性"));
- factory.addInventory(1,AddUtils.getInfoShow("&f2024.8.28",
- "&7创建日志",
- "&7创建新的终极机器用于测试",
- "&7大型配方展示组增加历史记录",
- "&7修复模拟合成台不显示黑名单的bug",
- "&7修复原版配方读取,将矿辞读为等价物品组")
- );
- factory.addInventory(2,AddUtils.getInfoShow("&f2024.8.29",
- "&7修改部分描述",
- "&7修复了自定义菜单历史记录bug",
- "&7平衡性调整",
- "&7修改了等价物品组配置的读取方式",
- "&7修改了语言文件读取方式,并研发了自动提取字符串脚本",
- "&7研发出乱码科技的英文版\"乱翻科技\"",
- "&7我没有痴呆症"
- )
- );
- factory.addInventory(3,AddUtils.getInfoShow("&f2024.8.30",
- "&7进行平衡性调整",
- "&7修复分拣机与糟糕sft导致的冲突",
- "&7新增若干货运机器与其配方",
- "&7遇见了芯片最优解",
- "&7与玩家交流,获得反馈",
- "&7出现了手残破坏多方块结构的玩家",
- "&7大家一定要小心谨慎,少得痴呆症"
- )
- );
- factory.addInventory(4,AddUtils.getInfoShow("&f&m2024.8.30 &r&f2024.8.31",
- "&7增加了可调节的货运机器",
- "&7开始研发逻辑奇点部分的机器",
- "&7发现远古测试机器的bug",
- "&7中午出门把身份证丢了,晦气",
- "&7下午治疗身份证去了,没更新痴呆症",
- "&7大家一定要小心谨慎,少得身份症",
- "&7晚上和haiman整了SlimefunEssentials",
- "&7JEI十分的强劲,我觉得我都不用写搜索了"
- )
- );
- factory.addInventory(5,AddUtils.getInfoShow("&f2024.9.1",
- "&7修复薯片核心配方无法原版自动化",
- "&7到处转转,学会怎么上传头颅",
- "&7完成终极机制之远程接入存储,但是出现了小的bug",
- "&7修一个小bug 花费了我好久。实际上这是我算法架构的问题",
- "&7但是我还是尝试了若干方案之后,最终决定这么搞,希望不会炸",
- "&7经过了亿点重构,准备开始测试了,希望人没事"
- )
- );
- factory.addInventory(6,AddUtils.getInfoShow("&f2024.9.1",
- "&7今天是几号来着",
- "&7方案全部无效",
- "&7新特性不能就这么寄了",
- "&7躺下睡觉吧还是"
- )
- );
- factory.addInventory(7,AddUtils.getInfoShow("&f2024.9.3",
- "&7哈哈哈哈哈哈哈哈",
- "&7终于想到一个方法了",
- "&7既然他提供超过两个引用会寄,那我就要根据menu和slots为单位控制产生的引用数",
- "&7不要再对引用位置做无所谓的控制,这没有必要",
- "&7只要将cache生成器包装入一个方法 然后在方法里狠狠注入检测代码就可以了!",
- "&7我他娘的还真是小机灵鬼",
- "&7开干",
- "&7终于,,,修好了!"
- )
- );
- factory.addInventory(8,AddUtils.getInfoShow("&f2024.9.3",
- "&7我一定是记错日期了,不然为什么一觉醒来日期没变呢",
- "&7继续完善存储链接体系",
- "&7应广大玩家要求,修改逻辑反应堆为运行中不销耗布尔组件,只在搜索阶段消耗",
- "&7发现配方搜素算法一个cache未及时同步的bug",
- "&7好在在新测试员的帮助下很快解决.",
- "&7比Tmatsuki_rui能干多了."
- )
- );
- factory.addInventory(9,AddUtils.getInfoShow("&f2024.9.4",
- "&7一不小心忘了写了",
- "&7还能写啥呢",
- "&7修bug,完善终极科技线",
- "&7修复超新星不同步bug",
- "&7修复了存储缓存生成后dirty位错误的bug"
- )
- );
- factory.addInventory(10,AddUtils.getInfoShow("&f2024.9.5",
- "&7是时候给附属加一点强力的生产机器了",
- "&7不然都没人玩,成本太高了",
- "&7开发了多线程机器,虽然就是复制粘贴",
- "&7研究一下同化方块机制",
- "&7尝试优化push方法"
- )
- );
- factory.addInventory(11,AddUtils.getInfoShow("&f2024.9.6",
- "&7整了一些机器 想必玩家们会喜欢",
- "&7开发了一些数值比较好看的机器",
- "&7希望是这样的",
- "&7"
- )
- );
- factory.addInventory(12,AddUtils.getInfoShow("&f2024.9.7",
- "&7整了一些机器 想必玩家们会喜欢",
- "&7整了一款全新的高端多方块",
- "&7包括两个等级和一些激发机制",
- "&7我觉得那真是太酷啦"
- )
- );
- factory.addInventory(13,AddUtils.getInfoShow("&f2024.9.7",
- "&7开发了LogiTech shell",
- "&7一款基于原神(bushi)的shell命令行工具",
- "&7可以查询和修改类/对象的成员等等,支持设置变量",
- "&7紧急修复了因dataload导致的卡服",
- "&7这就是依托"
- )
- );
- factory.addInventory(14,AddUtils.getInfoShow("&f2024.9.9",
- "&7开学了",
- "&7开学第一天没课",
- "&7兼容构思rsc生成器随机输出",
- "&7我希望开启一个计划,让大家一起完善machine堆叠列表"
- )
- );
- factory.addInventory(15,AddUtils.getInfoShow("&f2024.9.12",
- "&7增加了内置文件",
- "&7增加了乱码的机器列表",
- "&7恕我直言,起名真乱",
- "&7还有ag科技,一个配方机器都找不到",
- "&7纯懒狗附属"
- )
- );
- factory.addInventory(16,AddUtils.getInfoShow("&f2024.9.27",
- "&7显然 我忘了记录日志",
- "&7这甜蜜确实挺糟糕的",
- "&7不如之后我就写更新日志"
- ));
- factory.addInventory(18,AddUtils.getInfoShow("&f2024.9.27更新",
- "&7修复存储交互接口潜在bug",
- "&7修复堆叠机器列表导入重复bug",
- "&7修复反概念物质扩散不会继承玩家权限bug",
- "&7增加shell玩家权限检测",
- "&7修复简易堆叠破烂的bug",
- "&7增加星辰金熔炉的槽位推送限制",
- "&7修复了未插入货运配置卡时code读取异常bug",
- "&7还修了啥不太记得了",
- "&7增加了烘干机到快捷综合机器",
- "&7增加赤石科技道具",
- "&7减少超频刷怪笼的合成需求",
- "&7修复了堆叠机器无法支持非消耗物品的bug",
- "&7准备增加分拣机",
- "&7增加堆叠机器配置文件直接导入配方类型的功能",
- "&7增加tnt复制机",
- "&7增加破基岩棒",
- "&7修复逻辑反应堆槽位提供异常",
- ""));
- }
-
- @Override
- protected void addGuideRelated(ChestMenu menu, Player p, PlayerProfile profile, SlimefunGuideMode mode, int pages) {
-
- }
- };
- public static ItemGroup BUGCRAFTER=new CustomItemGroup(bugcrafterId,AddUtils.colorful(AddUtils.ADDON_NAME),AddItem.ALLBIGRECIPES,54,36,new LinkedHashMap<>()) {
- public PlayerHistoryRecord historyHandler=new PlayerHistoryRecord() {
- HashMap> records=new HashMap<>();
- {
- PlayerQuiteListener.addHandler((player)->{
- UUID uid=player.getUniqueId();
- synchronized(records) {
- records.remove(uid);
- }
- });
- }
- public CustomMenu getRecord(Player player){
- UUID uuid=player.getUniqueId();
- synchronized(records){
- List list=records.get(uuid);
- if(list==null){
- list=new ArrayList();
- }
- if(list.isEmpty()){
- return null;
- }
- return list.get(list.size()-1);
- }
- }
- public void addRecord(Player player, CustomMenu record){
- UUID uuid=player.getUniqueId();
- synchronized(records){
- List list=records.get(uuid);
- if(list==null){
- list=new ArrayList<>();
- records.put(uuid,list);
- }
- list.add(record);
-
- }
- }
- public CustomMenu deleteRecord(Player player,CustomMenu record){
- UUID uuid=player.getUniqueId();
- synchronized(records){
- List list=records.get(uuid);
- if(list==null||list.isEmpty()){
- return null;
- }
- return list.remove(list.size()-1);
- }
- }
- };
- MenuFactory subRecipes=null;
- public void initCustomMenus(){
- subRecipes=MenuUtils.createMRecipeListDisplay(AddItem.BUG_CRAFTER,RecipeSupporter.PROVIDED_SHAPED_RECIPES.get(BugCrafter.TYPE),
- null,historyHandler,MenuUtils::createMRecipeDisplay);
- }
- public MenuFactory getSubRecipes() {
- if(subRecipes==null){
- initCustomMenus();
- }
- return subRecipes;
- }
- protected void init(MenuFactory factory) {
- ItemStack menuBackGround=new CustomItemStack(Material.PURPLE_STAINED_GLASS_PANE,"");
- factory.addOverrides(4,AddItem.URL,(Player player1, int i1, ItemStack itemstack1, ClickAction clickAction) -> {
- final TextComponent link = new TextComponent("单击此处访问Github");
- link.setColor(ChatColor.YELLOW);
- link.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://github.com/m1919810/LogiTech"));
- player1.spigot().sendMessage(link);
- return false;
- });
- factory.setBackGround(menuBackGround);
- SchedulePostRegister.addPostRegisterTask(this::initCustomMenus);
- }
- public void openPage(Player var1, PlayerProfile var2, SlimefunGuideMode var3,int page){
-
- var2.getGuideHistory().add(this,1);
- CustomMenu menu= historyHandler.getRecord(var1);
- if(menu!=null){
- ChestMenu historyMenu=menu.constructPage(-1);
- historyMenu.open(var1);
- return;
- }
- CustomMenu menu2=getSubRecipes().build();
- menu2.setBackSlot(1);
- menu2.setBackHandler(((player, i, itemStack, clickAction) -> {
- var2.getGuideHistory().goBack(Slimefun.getRegistry().getSlimefunGuide(var3));
- return false;
- }));
- menu2.openPages(var1,1);
- }
- @Override
- protected void addGuideRelated(ChestMenu menu, Player p, PlayerProfile profile, SlimefunGuideMode mode, int pages) {
-
- }
- };
-
- public static final ItemGroup INFO =new CustomItemGroup(AddUtils.getNameKey("info"),null, AddItem.INFO,54,36,new LinkedHashMap<>()) {
- @Override
- protected void init(MenuFactory factory) {
- this.setVisble(false);
- factory.addInventory(1,AddItem.INFO1);
- factory.addInventory(11,AddItem.INFO2);
- factory.addInventory(21,AddItem.INFO3);
- factory.addInventory(7,AddItem.INFO4);
- factory.addInventory(15,AddItem.INFO5);
- factory.addInventory(23,AddItem.INFO6);
- factory.addInventory(13,AddItem.URL,(Player player1, int i1, ItemStack itemstack1, ClickAction clickAction) -> {
- final TextComponent link = new TextComponent("单击此处访问Github");
- link.setColor(ChatColor.YELLOW);
- link.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://github.com/m1919810/LogiTech"));
- player1.spigot().sendMessage(link);
- return false;
- });
- factory.addInventory(27,AddItem.FEAT1);
- factory.addInventory(28,AddItem.FEAT2);
- factory.addInventory(29,AddItem.FEAT3);
- factory.addInventory(30,AddItem.FEAT4);
- factory.addInventory(31,AddItem.FEAT5);
- factory.addInventory(32,AddItem.FEAT6);
- factory.addInventory(33,AddItem.FEAT7);
- factory.addInventory(34,AddItem.FEAT8);
- factory.addInventory(35,AddItem.FEAT9);
- factory.addOverrides(4,AddItem.MATL114);
- }
- @Override
- protected void addGuideRelated(ChestMenu menu, Player p, PlayerProfile profile, SlimefunGuideMode mode, int pages) {
- for(int s=0;s<2;++s){
- int rand=AddUtils.random(36);
- if(menu.getItemInSlot(rand+9)==null){
- menu.replaceExistingItem(rand+9,AddItem.BUG);
- menu.addMenuClickHandler(rand+9,((player, i, itemStack, clickAction) -> {
- AddUtils.forceGive(player,AddItem.BUG,1);
- menu.replaceExistingItem(rand+9,null);
- menu.addMenuClickHandler(rand+9,ChestMenuUtils.getEmptyClickHandler());
- return false;
- }));
- break;
- }
- }
- }
- };
- public static final ItemGroup ROOT=new CustomItemGroup(itemGroupId,AddUtils.colorful(AddUtils.ADDON_NAME), AddItem.ROOT,54,108,
- new LinkedHashMap<>(){{
- put(2,MATERIAL);
- put(0,INFO);
- put(27,BUGCRAFTER);
- put(4,BASIC);
- put(3,MANUAL);
- put(6,ENERGY);
- put(5,GENERATORS);
- put(22, SPACE);
- put(21,VANILLA);
- put(8,SPECIAL);
- put(20,CARGO);
- put(23,ADVANCED);
- put(24,SINGULARITY);
- put(31,BEYOND);
- put(36,UPDATELOG);
- put(26,MORE2);
- }}
- ){
- public MenuFactory MACHINEMENU=null;
- public MenuFactory RECIPEMENU=null;
- public void initCustomMenus(){
- MACHINEMENU=MenuUtils.createMachineListDisplay(RecipeSupporter.MACHINE_RECIPELIST.keySet().stream().toList(),null).setBack(1);
- RECIPEMENU=MenuUtils.createRecipeTypeDisplay(RecipeSupporter.RECIPE_TYPES.stream().toList(),null).setBack(1);
-// BUGCRAFTER=MenuUtils.createMRecipeListDisplay(AddItem.BUG_CRAFTER,RecipeSupporter.PROVIDED_SHAPED_RECIPES.get(BugCrafter.TYPE),
-// null,MenuUtils::createMRecipeDisplay);
- }
- public MenuFactory getMachineMenu(){
- if(MACHINEMENU==null){
- initCustomMenus();
- }
- return MACHINEMENU;
- }
- public MenuFactory getRecipeMenu(){
- if(RECIPEMENU==null){
- initCustomMenus();
- }
- return RECIPEMENU;
- }
-// public MenuFactory getBugCrafterMenu(){
-// if(BUGCRAFTER==null){
-// initCustomMenus();
-// }
-// return BUGCRAFTER;
-// }
- //used to set common handlers and common params
- public void init(MenuFactory factory){
- this.setVisble(true);
- //对模板进行最高级别的覆写
- ItemStack menuBackGround=new CustomItemStack(Material.PURPLE_STAINED_GLASS_PANE,"");
- factory.addOverrides(4,AddItem.URL,(Player player1, int i1, ItemStack itemstack1, ClickAction clickAction) -> {
- final TextComponent link = new TextComponent("单击此处访问Github");
- link.setColor(ChatColor.YELLOW);
- link.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://github.com/m1919810/LogiTech"));
- player1.spigot().sendMessage(link);
- return false;
- });
- factory.setBackGround(menuBackGround);
- final int[] BORDER=new int[]{
- 1,7,10,11,12,13,14,15,16,19,25,28,34
- };
- int len=BORDER.length;
- for (int i=0;i new ChestMenu.MenuClickHandler() {
- boolean has=false;
- @Override
- public boolean onClick(Player player, int i, ItemStack itemStack, ClickAction clickAction) {
- if(!has&&itemStack!=null){has=true;itemStack.setItemMeta(s1);}
- return false;
- }
- });
- factory.addInventory(57, h2,(cm)-> new ChestMenu.MenuClickHandler() {
- boolean has=false;
- @Override
- public boolean onClick(Player player, int i, ItemStack itemStack, ClickAction clickAction) {
- if(!has&&itemStack!=null){has=true;itemStack.setItemMeta(s2);}
- return false;
- }
- });
- factory.addInventory(58, h3,(cm)-> new ChestMenu.MenuClickHandler() {
- boolean has=false;
- @Override
- public boolean onClick(Player player, int i, ItemStack itemStack, ClickAction clickAction) {
- if(!has&&itemStack!=null){has=true;
- itemStack.setType(Material.REPEATING_COMMAND_BLOCK);
- itemStack.setItemMeta(s3);}
- return false;
- }
- });
- factory.addInventory(59, h4,(cm)-> new ChestMenu.MenuClickHandler() {
- boolean has=false;
- @Override
- public boolean onClick(Player player, int i, ItemStack itemStack, ClickAction clickAction) {
- if(!has&&itemStack!=null){
- has=true;
- itemStack.setItemMeta(s4);}
- return false;
- }
- });
- factory.addInventory(60, h5,(cm)-> new ChestMenu.MenuClickHandler() {
- boolean has=false;
- @Override
- public boolean onClick(Player player, int i, ItemStack itemStack, ClickAction clickAction) {
- if(!has&&itemStack!=null){
- has=true;itemStack.setItemMeta(s5);
- AddUtils.sendMessage(player,"&eTmatsuki_rui就是纯纯的____");
- if(AddUtils.standardRandom()<0.3){
- AddUtils.forceGive(player,head.clone(),AddUtils.random(4));
- }
- PlayerEffects.grantEffect(CustomEffects.WRONG_BUTTON,player,1,1);
- }
- return false;
- }
- });
- factory.addInventory(63, h6,(cm)-> new ChestMenu.MenuClickHandler() {
- boolean has=false;
- @Override
- public boolean onClick(Player player, int i, ItemStack itemStack, ClickAction clickAction) {
- if(!has&&itemStack!=null){has=true;itemStack.setItemMeta(s6);}
- return false;
- }
- });
- factory.addInventory(67, h8,(cm)-> new ChestMenu.MenuClickHandler() {
- boolean has=false;
- @Override
- public boolean onClick(Player player, int i, ItemStack itemStack, ClickAction clickAction) {
- if(!has&&itemStack!=null){has=true;
- itemStack.setItemMeta(s8);
- Schedules.launchSchedules(()->{
- PlayerEffects.grantEffect(CustomEffects.WRONG_BUTTON,player,2,1);
- },100,true,0);
- }
- return false;
- }
- });
- this.s7metas=new ItemMeta[6];
- String continueStr="&7点击继续";
- ItemStack it=new CustomItemStack(AddItem.MATL114,AddUtils.color("你觉得..."),continueStr);
- factory.addInventory(71,it,(cm)->new ChestMenu.MenuClickHandler() {
- int index=0;
- @Override
- public boolean onClick(Player player, int i, ItemStack itemStack, ClickAction clickAction) {
- if(itemStack!=null)
- itemStack.setItemMeta(s7metas[index]);
- index=(index+1)%5;
- return false;
- }
- });
- it=new CustomItemStack(AddItem.MATL114,AddUtils.color("我能在患有痴呆症的情况下完成逻辑工艺的编写吗?"),continueStr);
- s7metas[0]=it.getItemMeta();
- it=new CustomItemStack(AddItem.MATL114,AddUtils.color("这能被完成么,这可能完成么?"),continueStr);
- s7metas[1]=it.getItemMeta();
- it=new CustomItemStack(AddItem.MATL114,AddUtils.color("我知道这有点难"),continueStr);
- s7metas[2]=it.getItemMeta();
- it=new CustomItemStack(AddItem.MATL114,AddUtils.color("所以,我想"),continueStr);
- s7metas[3]=it.getItemMeta();
- it=new CustomItemStack(AddItem.MATL114,AddUtils.color("今年我要进行一项从未有人达成过的挑战"),continueStr);
- s7metas[4]=it.getItemMeta();
- }
- final ItemMeta s1=new CustomItemStack(CustomHead.getHead("fd524332cdb381c9e51f77d4cec9bc6d4d1c5bdec1499d206d8383e9176bdfb0"),AddUtils.color("haiman"),"&7haiman科技作者","&7海曼科技会为你提供足够的物质支持").getItemMeta();
- final ItemMeta s2=new CustomItemStack(CustomHead.getHead("a9b046531a6182de634d6fed1f3b4f885ee99bfe2bc0c1684f7b97d396c2059f"),AddUtils.color("mmmjjkx"),"&7rsc开发者","&3纯大蛇\uD83D\uDE0B").getItemMeta();
- final ItemMeta s3=new CustomItemStack(Material.REPEATING_COMMAND_BLOCK,AddUtils.color("tinalness"),"&7大香蕉的本质是命令方块\uD83D\uDE0B(确信","&7但是你或许会需要他的网络拓展").getItemMeta();
- final ItemMeta s4=new CustomItemStack(CustomHead.SUPPORTER2.getItem(),AddUtils.color("HgTlPbBi"),"&7逻辑工艺的支持者","&7提出了很多有用的点子").getItemMeta();
- final ItemMeta s5=new CustomItemStack(CustomHead.getHead("8e434215b5616bf37dccbacdb240bd16de59507e62a5371ceca80327b398e65"),AddUtils.color("Tmatsuki_rui"),"&7凉城服的祸源","&7纯傻逼,给爷死啊\uD83D\uDE21").getItemMeta();
- final ItemMeta s6=new CustomItemStack(CustomHead.BUSHIGEMEN.getItem()," ","&7看得出你的视力很好","&7所以一定要仔细阅读","&7版本说明与机器说明哦").getItemMeta();
- final ItemStack head=new CustomItemStack(Material.PLAYER_HEAD,AddUtils.color("逝者的头颅"));
- final ItemMeta s8=new CustomItemStack(CustomHead.BIG_SNAKE.getItem(),AddUtils.color("taitaia"),"&7刷物?你在想屁吃\uD83D\uDE0B").getItemMeta();
- ItemMeta[] s7metas;
- //used to set GUIDE based handlers,an interface to adapt CustomMenu menus
- public void addGuideRelated(ChestMenu menu, Player p, PlayerProfile profile, SlimefunGuideMode mode, int page){
- //加入实例化之后的handler和item,同打开玩家等数据有关的handler
- if(page==1){
- menu.addMenuClickHandler(27 ,((Player player1, int i1, ItemStack itemstack1, ClickAction clickAction) -> {
- getRecipeMenu().build().setBackHandler(((player, i, itemStack, clickAction1) -> {
- this.openPage(player1,profile,mode,page);
- return false;
- })).open(player1);
- return false;
- }));
- menu.addMenuClickHandler(18,((Player player1, int i1, ItemStack itemstack1, ClickAction clickAction) -> {
- getMachineMenu().build().setBackHandler(((player, i, itemStack, clickAction1) -> {
- this.openPage(player1,profile,mode,page);
- return false;
- })).open(player1);
- return false;
- }));
- }else if(page==2){
-
- }
- }
- };
-
-
-
-}
-
+package me.matl114.logitech.SlimefunItem;
+
+import io.github.thebusybiscuit.slimefun4.api.SlimefunAddon;
+import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
+import io.github.thebusybiscuit.slimefun4.api.player.PlayerProfile;
+import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuide;
+import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuideMode;
+import io.github.thebusybiscuit.slimefun4.implementation.Slimefun;
+import io.github.thebusybiscuit.slimefun4.libraries.dough.chat.ChatInput;
+import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack;
+import io.github.thebusybiscuit.slimefun4.utils.ChestMenuUtils;
+import me.matl114.logitech.Items.CustomHead;
+import me.matl114.logitech.Listeners.Listeners.PlayerQuiteListener;
+import me.matl114.logitech.Schedule.PersistentEffects.AbstractEffect;
+import me.matl114.logitech.Schedule.PersistentEffects.CustomEffects;
+import me.matl114.logitech.Schedule.PersistentEffects.PlayerEffects;
+import me.matl114.logitech.Schedule.SchedulePostRegister;
+import me.matl114.logitech.Schedule.Schedules;
+import me.matl114.logitech.SlimefunItem.Machines.WorkBenchs.BugCrafter;
+import me.matl114.logitech.Utils.*;
+import me.matl114.logitech.Utils.UtilClass.MenuClass.*;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
+import net.md_5.bungee.api.ChatColor;
+import net.md_5.bungee.api.chat.ClickEvent;
+import net.md_5.bungee.api.chat.TextComponent;
+import org.bukkit.Material;
+import org.bukkit.NamespacedKey;
+import org.bukkit.damage.DamageSource;
+import org.bukkit.damage.DamageType;
+import org.bukkit.entity.Player;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.event.entity.EntityDamageEvent;
+import org.bukkit.event.entity.PlayerDeathEvent;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.scheduler.BukkitRunnable;
+
+import java.util.*;
+
+public class AddGroups {
+ public static void registerGroups(SlimefunAddon plugin){
+ ROOT.register(plugin);
+ INFO.register(plugin);
+ MATERIAL.register(plugin);
+ BASIC.register(plugin);
+ CARGO.register(plugin);
+ SINGULARITY.register(plugin);
+ ADVANCED.register(plugin);
+ BEYOND.register(plugin);
+ VANILLA.register(plugin);
+ MANUAL.register(plugin);
+ SPECIAL.register(plugin);
+ SPACE.register(plugin);
+ GENERATORS.register(plugin);
+ ENERGY.register(plugin);
+ FUNCTIONAL.register(plugin);
+ }
+ // 给你的分类提供一个独一无二的ID
+ protected static final NamespacedKey itemGroupId = AddUtils.getNameKey("addon_category");
+ protected static final NamespacedKey bugcrafterId = AddUtils.getNameKey("bugcrafter");
+
+ public static final ItemGroup MATERIAL =new DummyItemGroup(AddUtils.getNameKey("material" ), AddItem.MATERIAL);
+
+ public static final ItemGroup BASIC =new DummyItemGroup(AddUtils.getNameKey("basic" ), AddItem.BASIC);
+
+ public static final ItemGroup CARGO = new DummyItemGroup(AddUtils.getNameKey("cargo" ), AddItem.CARGO);
+
+ public static final ItemGroup SINGULARITY= new DummyItemGroup(AddUtils.getNameKey("singularity"),AddItem.SINGULARITY);
+
+ public static final ItemGroup ADVANCED= new DummyItemGroup(AddUtils.getNameKey("advanced" ), AddItem.ADVANCED);
+
+ public static final ItemGroup BEYOND= new DummyItemGroup(AddUtils.getNameKey("beyond" ), AddItem.BEYOND);
+
+ public static final ItemGroup VANILLA= new DummyItemGroup(AddUtils.getNameKey("vanilla" ), AddItem.VANILLA);
+
+ public static final ItemGroup MANUAL = new DummyItemGroup(AddUtils.getNameKey("manual" ), AddItem.MANUAL);
+
+ public static final ItemGroup SPECIAL = new DummyItemGroup(AddUtils.getNameKey("special" ), AddItem.SPECIAL);
+
+ public static final ItemGroup SPACE = new DummyItemGroup(AddUtils.getNameKey("space"),AddItem.SPACE);
+
+ public static final ItemGroup GENERATORS = new DummyItemGroup(AddUtils.getNameKey("generators"),AddItem.GENERATORS);
+
+ public static final ItemGroup ENERGY= new DummyItemGroup(AddUtils.getNameKey("energy"),AddItem.ENERGY);
+
+ public static final ItemGroup FUNCTIONAL=new DummyItemGroup(AddUtils.getNameKey("functional"),AddItem.FUNCTIONAL);
+ public static ItemGroup MORE2=new CustomItemGroup(AddUtils.getNameKey("more2"),AddUtils.color("更多说明"),AddItem.MORE2,54,36,new LinkedHashMap<>()) {
+ @Override
+ protected void init(MenuFactory menuFactory) {
+ menuFactory.addInventory(0,AddUtils.getInfoShow("&f致歉说明",
+ "&7感谢您能点开到这里,看到这份说明",
+ "&7本附属为我开发的首个附属,无人问津是应该的",
+ "&7您能点进这一分类已经是对我最大的鼓励和支持",
+ "&7本人水平很次,也没有很好的创作能力创作让玩家满意的附属",
+ "&7还请包容"));
+ menuFactory.addInventory(1,AddUtils.getInfoShow("&f致歉说明",
+ "&7这个附属很烂",
+ "&7他拥有冗长的机制说明书和昂贵的合成表",
+ "&7以及作者乱填的,毫无道理的材料消耗",
+ "&7为什么呢",
+ "&7因为作者并不知道怎么编一个让玩家满意的合成表",
+ "&7很可能有些时候,在这方面给玩家带来很大的困扰"));
+ menuFactory.addInventory(2,AddUtils.getInfoShow("&f致歉说明",
+ "&7作者也不知道为什么作者要写这一个附属",
+ "&7作者已经投入整个暑假的晚上8点到凌晨4点来进行附属编写",
+ "&7作者也&a希望这个附属能变得更好&7,而不是更恶心",
+ "&7作者&a希望附属对玩家有帮助,而不是对玩家造成困扰"
+ ));
+ menuFactory.addInventory(3,AddUtils.getInfoShow("&f致歉说明",
+ "&7作者在此恳请大家",
+ "&a多多包容作者,并把自己的想法跟作者讨论",
+ "&a不管如何,作者都会听取玩家的意见,争取将附属做得更好"));
+ menuFactory.addInventory(4,AddUtils.getInfoShow("&f致歉说明",
+ "&7这个附属还是很烂",
+ "&7他既没有乱码科技的制造台,也没有乱序技艺的尘埃反应堆",
+ "&7作者一开始的目标是制作优秀的机器,虽然现在改为了制作高效的机器",
+ "&7但是并没有非常超标的机器存在",
+ "&7还请玩家包容",
+ "&7如果你只是想找op机器",
+ "&7那么本附属可能并不符合你的心意"));
+ menuFactory.addInventory(5,AddUtils.getInfoShow("&f致歉说明",
+ "&7作者能拿的出手的机制就这几个",
+ "&7虽说抱歉,但是作者也不会因此而做op机器和刷物机器",
+ "&a但是玩家有什么好的想法或者急切的机器需求",
+ "&a也是可以和作者提的",
+ "",
+ "&7作者真心希望该附属越做越好,而不是越来越烂",
+ "&a所以我在此恳请大家主动发表自己的看法"));
+ menuFactory.addInventory(6,AddUtils.getInfoShow("&f致歉说明",
+ "&7虽说致歉,但是作者还是会&a坚定的继续开发和维护这个附属",
+ "&7虽然作者也曾想过放弃该附属",
+ "&7但是也只是一时之念,大家不要当真",
+ "&7请大家放心,作者并不会丢下一堆烂摊子跑路"));
+ menuFactory.addInventory(7,AddUtils.getInfoShow("&f致歉说明",
+ "&7最后,在此对&e所有觉得这个附属没救的玩家&7致辞","",
+ "&7粘液圈虽然不大,但是比本附属好的附属也是比比皆是",
+ "&7作者的生活中也不只是有粘液,作者也要有自己的生活,并不能帮你救活这个附属",
+ "&7您也不必拘泥于我的附属,我们好聚好散,对大家都好"));
+ menuFactory.addInventory(8,AddUtils.getInfoShow("&f致歉说明",
+ "&7最后声明:本说明并不针对某一特定玩家",
+ "&7当您对号入座时,请不要座岔了,谢谢."
+ ));
+ }
+
+ @Override
+ protected void addGuideRelated(ChestMenu menu, Player p, PlayerProfile profile, SlimefunGuideMode mode, int pages) {
+
+ }
+ };
+ public static ItemGroup UPDATELOG=new CustomItemGroup(AddUtils.getNameKey("log"),AddUtils.colorful("更新日志"),AddItem.UPDATELOG,54,36,new LinkedHashMap<>()) {
+ @Override
+ protected void init(MenuFactory factory) {
+ factory.addInventory(0,AddUtils.getInfoShow("&f更新日志","&7此页为简易的更新日志","&7你或许可以找到你想要的新特性"));
+ factory.addInventory(1,AddUtils.getInfoShow("&f2024.8.28",
+ "&7创建日志",
+ "&7创建新的终极机器用于测试",
+ "&7大型配方展示组增加历史记录",
+ "&7修复模拟合成台不显示黑名单的bug",
+ "&7修复原版配方读取,将矿辞读为等价物品组")
+ );
+ factory.addInventory(2,AddUtils.getInfoShow("&f2024.8.29",
+ "&7修改部分描述",
+ "&7修复了自定义菜单历史记录bug",
+ "&7平衡性调整",
+ "&7修改了等价物品组配置的读取方式",
+ "&7修改了语言文件读取方式,并研发了自动提取字符串脚本",
+ "&7研发出乱码科技的英文版\"乱翻科技\"",
+ "&7我没有痴呆症"
+ )
+ );
+ factory.addInventory(3,AddUtils.getInfoShow("&f2024.8.30",
+ "&7进行平衡性调整",
+ "&7修复分拣机与糟糕sft导致的冲突",
+ "&7新增若干货运机器与其配方",
+ "&7遇见了芯片最优解",
+ "&7与玩家交流,获得反馈",
+ "&7出现了手残破坏多方块结构的玩家",
+ "&7大家一定要小心谨慎,少得痴呆症"
+ )
+ );
+ factory.addInventory(4,AddUtils.getInfoShow("&f&m2024.8.30 &r&f2024.8.31",
+ "&7增加了可调节的货运机器",
+ "&7开始研发逻辑奇点部分的机器",
+ "&7发现远古测试机器的bug",
+ "&7中午出门把身份证丢了,晦气",
+ "&7下午治疗身份证去了,没更新痴呆症",
+ "&7大家一定要小心谨慎,少得身份症",
+ "&7晚上和haiman整了SlimefunEssentials",
+ "&7JEI十分的强劲,我觉得我都不用写搜索了"
+ )
+ );
+ factory.addInventory(5,AddUtils.getInfoShow("&f2024.9.1",
+ "&7修复薯片核心配方无法原版自动化",
+ "&7到处转转,学会怎么上传头颅",
+ "&7完成终极机制之远程接入存储,但是出现了小的bug",
+ "&7修一个小bug 花费了我好久。实际上这是我算法架构的问题",
+ "&7但是我还是尝试了若干方案之后,最终决定这么搞,希望不会炸",
+ "&7经过了亿点重构,准备开始测试了,希望人没事"
+ )
+ );
+ factory.addInventory(6,AddUtils.getInfoShow("&f2024.9.1",
+ "&7今天是几号来着",
+ "&7方案全部无效",
+ "&7新特性不能就这么寄了",
+ "&7躺下睡觉吧还是"
+ )
+ );
+ factory.addInventory(7,AddUtils.getInfoShow("&f2024.9.3",
+ "&7哈哈哈哈哈哈哈哈",
+ "&7终于想到一个方法了",
+ "&7既然他提供超过两个引用会寄,那我就要根据menu和slots为单位控制产生的引用数",
+ "&7不要再对引用位置做无所谓的控制,这没有必要",
+ "&7只要将cache生成器包装入一个方法 然后在方法里狠狠注入检测代码就可以了!",
+ "&7我他娘的还真是小机灵鬼",
+ "&7开干",
+ "&7终于,,,修好了!"
+ )
+ );
+ factory.addInventory(8,AddUtils.getInfoShow("&f2024.9.3",
+ "&7我一定是记错日期了,不然为什么一觉醒来日期没变呢",
+ "&7继续完善存储链接体系",
+ "&7应广大玩家要求,修改逻辑反应堆为运行中不销耗布尔组件,只在搜索阶段消耗",
+ "&7发现配方搜素算法一个cache未及时同步的bug",
+ "&7好在在新测试员的帮助下很快解决.",
+ "&7比Tmatsuki_rui能干多了."
+ )
+ );
+ factory.addInventory(9,AddUtils.getInfoShow("&f2024.9.4",
+ "&7一不小心忘了写了",
+ "&7还能写啥呢",
+ "&7修bug,完善终极科技线",
+ "&7修复超新星不同步bug",
+ "&7修复了存储缓存生成后dirty位错误的bug"
+ )
+ );
+ factory.addInventory(10,AddUtils.getInfoShow("&f2024.9.5",
+ "&7是时候给附属加一点强力的生产机器了",
+ "&7不然都没人玩,成本太高了",
+ "&7开发了多线程机器,虽然就是复制粘贴",
+ "&7研究一下同化方块机制",
+ "&7尝试优化push方法"
+ )
+ );
+ factory.addInventory(11,AddUtils.getInfoShow("&f2024.9.6",
+ "&7整了一些机器 想必玩家们会喜欢",
+ "&7开发了一些数值比较好看的机器",
+ "&7希望是这样的",
+ "&7"
+ )
+ );
+ factory.addInventory(12,AddUtils.getInfoShow("&f2024.9.7",
+ "&7整了一些机器 想必玩家们会喜欢",
+ "&7整了一款全新的高端多方块",
+ "&7包括两个等级和一些激发机制",
+ "&7我觉得那真是太酷啦"
+ )
+ );
+ factory.addInventory(13,AddUtils.getInfoShow("&f2024.9.7",
+ "&7开发了LogiTech shell",
+ "&7一款基于原神(bushi)的shell命令行工具",
+ "&7可以查询和修改类/对象的成员等等,支持设置变量",
+ "&7紧急修复了因dataload导致的卡服",
+ "&7这就是依托"
+ )
+ );
+ factory.addInventory(14,AddUtils.getInfoShow("&f2024.9.9",
+ "&7开学了",
+ "&7开学第一天没课",
+ "&7兼容构思rsc生成器随机输出",
+ "&7我希望开启一个计划,让大家一起完善machine堆叠列表"
+ )
+ );
+ factory.addInventory(15,AddUtils.getInfoShow("&f2024.9.12",
+ "&7增加了内置文件",
+ "&7增加了乱码的机器列表",
+ "&7恕我直言,起名真乱",
+ "&7还有ag科技,一个配方机器都找不到",
+ "&7纯懒狗附属"
+ )
+ );
+ factory.addInventory(16,AddUtils.getInfoShow("&f2024.9.27",
+ "&7显然 我忘了记录日志",
+ "&7这甜蜜确实挺糟糕的",
+ "&7不如之后我就写更新日志"
+ ));
+ factory.addInventory(18,AddUtils.getInfoShow("&f2024.9.27更新",
+ "&7修复存储交互接口潜在bug",
+ "&7修复堆叠机器列表导入重复bug",
+ "&7修复反概念物质扩散不会继承玩家权限bug",
+ "&7增加shell玩家权限检测",
+ "&7修复简易堆叠破烂的bug",
+ "&7增加星辰金熔炉的槽位推送限制",
+ "&7修复了未插入货运配置卡时code读取异常bug",
+ "&7还修了啥不太记得了",
+ "&7增加了烘干机到快捷综合机器",
+ "&7增加赤石科技道具",
+ "&7减少超频刷怪笼的合成需求",
+ "&7修复了堆叠机器无法支持非消耗物品的bug",
+ "&7准备增加分拣机",
+ "&7增加堆叠机器配置文件直接导入配方类型的功能",
+ "&7增加tnt复制机",
+ "&7增加破基岩棒",
+ "&7修复逻辑反应堆槽位提供异常",
+ ""));
+ factory.addInventory(16,AddUtils.getInfoShow("&f2024.?",
+ "&7修复部分bug,虽然忘了修了啥了",
+ "&7增加了激光发射器 进阶版",
+ "&7增加桃花飞针",
+ "&7增加更多的赤石道具",
+ "&7更新啥了忘了"
+ ));
+ }
+
+ @Override
+ protected void addGuideRelated(ChestMenu menu, Player p, PlayerProfile profile, SlimefunGuideMode mode, int pages) {
+
+ }
+ };
+ public static ItemGroup BUGCRAFTER=new CustomItemGroup(bugcrafterId,AddUtils.colorful(AddUtils.ADDON_NAME),AddItem.ALLBIGRECIPES,54,36,new LinkedHashMap<>()) {
+ public PlayerHistoryRecord historyHandler=new PlayerHistoryRecord() {
+ HashMap> records=new HashMap<>();
+ {
+ PlayerQuiteListener.addHandler((player)->{
+ UUID uid=player.getUniqueId();
+ synchronized(records) {
+ records.remove(uid);
+ }
+ });
+ }
+ public CustomMenu getRecord(Player player){
+ UUID uuid=player.getUniqueId();
+ synchronized(records){
+ List list=records.get(uuid);
+ if(list==null){
+ list=new ArrayList();
+ }
+ if(list.isEmpty()){
+ return null;
+ }
+ return list.get(list.size()-1);
+ }
+ }
+ public void addRecord(Player player, CustomMenu record){
+ UUID uuid=player.getUniqueId();
+ synchronized(records){
+ List list=records.get(uuid);
+ if(list==null){
+ list=new ArrayList<>();
+ records.put(uuid,list);
+ }
+ list.add(record);
+
+ }
+ }
+ public CustomMenu deleteRecord(Player player,CustomMenu record){
+ UUID uuid=player.getUniqueId();
+ synchronized(records){
+ List list=records.get(uuid);
+ if(list==null||list.isEmpty()){
+ return null;
+ }
+ return list.remove(list.size()-1);
+ }
+ }
+ };
+ MenuFactory subRecipes=null;
+ public void initCustomMenus(){
+ subRecipes=MenuUtils.createMRecipeListDisplay(AddItem.BUG_CRAFTER,RecipeSupporter.PROVIDED_SHAPED_RECIPES.get(BugCrafter.TYPE),
+ null,historyHandler,MenuUtils::createMRecipeDisplay);
+ }
+ public MenuFactory getSubRecipes() {
+ if(subRecipes==null){
+ initCustomMenus();
+ }
+ return subRecipes;
+ }
+ protected void init(MenuFactory factory) {
+ ItemStack menuBackGround=new CustomItemStack(Material.PURPLE_STAINED_GLASS_PANE,"");
+ factory.addOverrides(4,AddItem.URL,(Player player1, int i1, ItemStack itemstack1, ClickAction clickAction) -> {
+ final TextComponent link = new TextComponent("单击此处访问Github");
+ link.setColor(ChatColor.YELLOW);
+ link.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://github.com/m1919810/LogiTech"));
+ player1.spigot().sendMessage(link);
+ return false;
+ });
+ factory.setBackGround(menuBackGround);
+ SchedulePostRegister.addPostRegisterTask(this::initCustomMenus);
+ }
+ public void openPage(Player var1, PlayerProfile var2, SlimefunGuideMode var3,int page){
+
+ var2.getGuideHistory().add(this,1);
+ CustomMenu menu= historyHandler.getRecord(var1);
+ if(menu!=null){
+ ChestMenu historyMenu=menu.constructPage(-1);
+ historyMenu.open(var1);
+ return;
+ }
+ CustomMenu menu2=getSubRecipes().build();
+ menu2.setBackSlot(1);
+ menu2.setBackHandler(((player, i, itemStack, clickAction) -> {
+ var2.getGuideHistory().goBack(Slimefun.getRegistry().getSlimefunGuide(var3));
+ return false;
+ }));
+ menu2.openPages(var1,1);
+ }
+ @Override
+ protected void addGuideRelated(ChestMenu menu, Player p, PlayerProfile profile, SlimefunGuideMode mode, int pages) {
+
+ }
+ };
+
+ public static final ItemGroup INFO =new CustomItemGroup(AddUtils.getNameKey("info"),null, AddItem.INFO,54,36,new LinkedHashMap<>()) {
+ @Override
+ protected void init(MenuFactory factory) {
+ this.setVisble(false);
+ factory.addInventory(1,AddItem.INFO1);
+ factory.addInventory(11,AddItem.INFO2);
+ factory.addInventory(21,AddItem.INFO3);
+ factory.addInventory(7,AddItem.INFO4);
+ factory.addInventory(15,AddItem.INFO5);
+ factory.addInventory(23,AddItem.INFO6);
+ factory.addInventory(13,AddItem.URL,(Player player1, int i1, ItemStack itemstack1, ClickAction clickAction) -> {
+ final TextComponent link = new TextComponent("单击此处访问Github");
+ link.setColor(ChatColor.YELLOW);
+ link.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://github.com/m1919810/LogiTech"));
+ player1.spigot().sendMessage(link);
+ return false;
+ });
+ factory.addInventory(27,AddItem.FEAT1);
+ factory.addInventory(28,AddItem.FEAT2);
+ factory.addInventory(29,AddItem.FEAT3);
+ factory.addInventory(30,AddItem.FEAT4);
+ factory.addInventory(31,AddItem.FEAT5);
+ factory.addInventory(32,AddItem.FEAT6);
+ factory.addInventory(33,AddItem.FEAT7);
+ factory.addInventory(34,AddItem.FEAT8);
+ factory.addInventory(35,AddItem.FEAT9);
+ factory.addOverrides(4,AddItem.MATL114);
+ }
+ @Override
+ protected void addGuideRelated(ChestMenu menu, Player p, PlayerProfile profile, SlimefunGuideMode mode, int pages) {
+ for(int s=0;s<2;++s){
+ int rand=AddUtils.random(36);
+ if(menu.getItemInSlot(rand+9)==null){
+ menu.replaceExistingItem(rand+9,AddItem.BUG);
+ menu.addMenuClickHandler(rand+9,((player, i, itemStack, clickAction) -> {
+ AddUtils.forceGive(player,AddItem.BUG,1);
+ menu.replaceExistingItem(rand+9,null);
+ menu.addMenuClickHandler(rand+9,ChestMenuUtils.getEmptyClickHandler());
+ return false;
+ }));
+ break;
+ }
+ }
+ }
+ };
+ public static final ItemGroup ROOT=new CustomItemGroup(itemGroupId,AddUtils.colorful(AddUtils.ADDON_NAME), AddItem.ROOT,54,108,
+ new LinkedHashMap<>(){{
+ put(2,MATERIAL);
+ put(0,INFO);
+ put(27,BUGCRAFTER);
+ put(4,BASIC);
+ put(3,MANUAL);
+ put(6,ENERGY);
+ put(5,GENERATORS);
+ put(22, SPACE);
+ put(21,VANILLA);
+ put(8,SPECIAL);
+ put(20,CARGO);
+ put(23,ADVANCED);
+ put(24,SINGULARITY);
+ put(31,BEYOND);
+ put(36,UPDATELOG);
+ put(26,MORE2);
+ }}
+ ){
+ public MenuFactory MACHINEMENU=null;
+ public MenuFactory RECIPEMENU=null;
+ public void initCustomMenus(){
+ MACHINEMENU=MenuUtils.createMachineListDisplay(RecipeSupporter.MACHINE_RECIPELIST.keySet().stream().toList(),null).setBack(1);
+ RECIPEMENU=MenuUtils.createRecipeTypeDisplay(RecipeSupporter.RECIPE_TYPES.stream().toList(),null).setBack(1);
+// BUGCRAFTER=MenuUtils.createMRecipeListDisplay(AddItem.BUG_CRAFTER,RecipeSupporter.PROVIDED_SHAPED_RECIPES.get(BugCrafter.TYPE),
+// null,MenuUtils::createMRecipeDisplay);
+ }
+ public MenuFactory getMachineMenu(){
+ if(MACHINEMENU==null){
+ initCustomMenus();
+ }
+ return MACHINEMENU;
+ }
+ public MenuFactory getRecipeMenu(){
+ if(RECIPEMENU==null){
+ initCustomMenus();
+ }
+ return RECIPEMENU;
+ }
+// public MenuFactory getBugCrafterMenu(){
+// if(BUGCRAFTER==null){
+// initCustomMenus();
+// }
+// return BUGCRAFTER;
+// }
+ //used to set common handlers and common params
+ public void init(MenuFactory factory){
+ this.setVisble(true);
+ //对模板进行最高级别的覆写
+ ItemStack menuBackGround=new CustomItemStack(Material.PURPLE_STAINED_GLASS_PANE,"");
+ factory.addOverrides(4,AddItem.URL,(Player player1, int i1, ItemStack itemstack1, ClickAction clickAction) -> {
+ final TextComponent link = new TextComponent("单击此处访问Github");
+ link.setColor(ChatColor.YELLOW);
+ link.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://github.com/m1919810/LogiTech"));
+ player1.spigot().sendMessage(link);
+ return false;
+ });
+ factory.setBackGround(menuBackGround);
+ final int[] BORDER=new int[]{
+ 1,7,10,11,12,13,14,15,16,19,25,28,34
+ };
+ int len=BORDER.length;
+ for (int i=0;i new ChestMenu.MenuClickHandler() {
+ boolean has=false;
+ @Override
+ public boolean onClick(Player player, int i, ItemStack itemStack, ClickAction clickAction) {
+ if(!has&&itemStack!=null){has=true;itemStack.setItemMeta(s1);}
+ return false;
+ }
+ });
+ factory.addInventory(57, h2,(cm)-> new ChestMenu.MenuClickHandler() {
+ boolean has=false;
+ @Override
+ public boolean onClick(Player player, int i, ItemStack itemStack, ClickAction clickAction) {
+ if(!has&&itemStack!=null){has=true;itemStack.setItemMeta(s2);}
+ return false;
+ }
+ });
+ factory.addInventory(58, h3,(cm)-> new ChestMenu.MenuClickHandler() {
+ boolean has=false;
+ @Override
+ public boolean onClick(Player player, int i, ItemStack itemStack, ClickAction clickAction) {
+ if(!has&&itemStack!=null){has=true;
+ itemStack.setType(Material.REPEATING_COMMAND_BLOCK);
+ itemStack.setItemMeta(s3);}
+ return false;
+ }
+ });
+ factory.addInventory(59, h4,(cm)-> new ChestMenu.MenuClickHandler() {
+ boolean has=false;
+ @Override
+ public boolean onClick(Player player, int i, ItemStack itemStack, ClickAction clickAction) {
+ if(!has&&itemStack!=null){
+ has=true;
+ itemStack.setItemMeta(s4);}
+ return false;
+ }
+ });
+ factory.addInventory(60, h5,(cm)-> new ChestMenu.MenuClickHandler() {
+ boolean has=false;
+ @Override
+ public boolean onClick(Player player, int i, ItemStack itemStack, ClickAction clickAction) {
+ if(!has&&itemStack!=null){
+ has=true;itemStack.setItemMeta(s5);
+ AddUtils.sendMessage(player,"&eTmatsuki_rui就是纯纯的____");
+ if(AddUtils.standardRandom()<0.3){
+ AddUtils.forceGive(player,head.clone(),AddUtils.random(4));
+ }
+ PlayerEffects.grantEffect(CustomEffects.WRONG_BUTTON,player,1,1);
+ }
+ return false;
+ }
+ });
+ factory.addInventory(63, h6,(cm)-> new ChestMenu.MenuClickHandler() {
+ boolean has=false;
+ @Override
+ public boolean onClick(Player player, int i, ItemStack itemStack, ClickAction clickAction) {
+ if(!has&&itemStack!=null){has=true;itemStack.setItemMeta(s6);}
+ return false;
+ }
+ });
+ factory.addInventory(67, h8,(cm)-> new ChestMenu.MenuClickHandler() {
+ boolean has=false;
+ @Override
+ public boolean onClick(Player player, int i, ItemStack itemStack, ClickAction clickAction) {
+ if(!has&&itemStack!=null){has=true;
+ itemStack.setItemMeta(s8);
+ Schedules.launchSchedules(()->{
+ PlayerEffects.grantEffect(CustomEffects.WRONG_BUTTON,player,2,1);
+ },100,true,0);
+ }
+ return false;
+ }
+ });
+ this.s7metas=new ItemMeta[6];
+ String continueStr="&7点击继续";
+ ItemStack it=new CustomItemStack(AddItem.MATL114,AddUtils.color("你觉得..."),continueStr);
+ factory.addInventory(71,it,(cm)->new ChestMenu.MenuClickHandler() {
+ int index=0;
+ @Override
+ public boolean onClick(Player player, int i, ItemStack itemStack, ClickAction clickAction) {
+ if(itemStack!=null)
+ itemStack.setItemMeta(s7metas[index]);
+ index=(index+1)%5;
+ return false;
+ }
+ });
+ it=new CustomItemStack(AddItem.MATL114,AddUtils.color("我能在患有痴呆症的情况下完成逻辑工艺的编写吗?"),continueStr);
+ s7metas[0]=it.getItemMeta();
+ it=new CustomItemStack(AddItem.MATL114,AddUtils.color("这能被完成么,这可能完成么?"),continueStr);
+ s7metas[1]=it.getItemMeta();
+ it=new CustomItemStack(AddItem.MATL114,AddUtils.color("我知道这有点难"),continueStr);
+ s7metas[2]=it.getItemMeta();
+ it=new CustomItemStack(AddItem.MATL114,AddUtils.color("所以,我想"),continueStr);
+ s7metas[3]=it.getItemMeta();
+ it=new CustomItemStack(AddItem.MATL114,AddUtils.color("今年我要进行一项从未有人达成过的挑战"),continueStr);
+ s7metas[4]=it.getItemMeta();
+ }
+ final ItemMeta s1=new CustomItemStack(CustomHead.getHead("fd524332cdb381c9e51f77d4cec9bc6d4d1c5bdec1499d206d8383e9176bdfb0"),AddUtils.color("haiman"),"&7haiman科技作者","&7海曼科技会为你提供足够的物质支持").getItemMeta();
+ final ItemMeta s2=new CustomItemStack(CustomHead.getHead("a9b046531a6182de634d6fed1f3b4f885ee99bfe2bc0c1684f7b97d396c2059f"),AddUtils.color("mmmjjkx"),"&7rsc开发者","&3纯大蛇\uD83D\uDE0B").getItemMeta();
+ final ItemMeta s3=new CustomItemStack(Material.REPEATING_COMMAND_BLOCK,AddUtils.color("tinalness"),"&7大香蕉的本质是命令方块\uD83D\uDE0B(确信","&7但是你或许会需要他的网络拓展").getItemMeta();
+ final ItemMeta s4=new CustomItemStack(CustomHead.SUPPORTER2.getItem(),AddUtils.color("HgTlPbBi"),"&7逻辑工艺的支持者","&7提出了很多有用的点子").getItemMeta();
+ final ItemMeta s5=new CustomItemStack(CustomHead.getHead("8e434215b5616bf37dccbacdb240bd16de59507e62a5371ceca80327b398e65"),AddUtils.color("Tmatsuki_rui"),"&7凉城服的祸源","&7纯傻逼,给爷死啊\uD83D\uDE21").getItemMeta();
+ final ItemMeta s6=new CustomItemStack(CustomHead.BUSHIGEMEN.getItem()," ","&7看得出你的视力很好","&7所以一定要仔细阅读","&7版本说明与机器说明哦").getItemMeta();
+ final ItemStack head=new CustomItemStack(Material.PLAYER_HEAD,AddUtils.color("逝者的头颅"));
+ final ItemMeta s8=new CustomItemStack(CustomHead.BIG_SNAKE.getItem(),AddUtils.color("taitaia"),"&7刷物?你在想屁吃\uD83D\uDE0B").getItemMeta();
+ ItemMeta[] s7metas;
+ //used to set GUIDE based handlers,an interface to adapt CustomMenu menus
+ public void addGuideRelated(ChestMenu menu, Player p, PlayerProfile profile, SlimefunGuideMode mode, int page){
+ //加入实例化之后的handler和item,同打开玩家等数据有关的handler
+ if(page==1){
+ menu.addMenuClickHandler(27 ,((Player player1, int i1, ItemStack itemstack1, ClickAction clickAction) -> {
+ getRecipeMenu().build().setBackHandler(((player, i, itemStack, clickAction1) -> {
+ this.openPage(player1,profile,mode,page);
+ return false;
+ })).open(player1);
+ return false;
+ }));
+ menu.addMenuClickHandler(18,((Player player1, int i1, ItemStack itemstack1, ClickAction clickAction) -> {
+ getMachineMenu().build().setBackHandler(((player, i, itemStack, clickAction1) -> {
+ this.openPage(player1,profile,mode,page);
+ return false;
+ })).open(player1);
+ return false;
+ }));
+ }else if(page==2){
+
+ }
+ }
+ };
+
+
+
+}
+
diff --git a/src/main/java/me/matl114/logitech/SlimefunItem/AddItem.java b/src/main/java/me/matl114/logitech/SlimefunItem/AddItem.java
index 31b5623..e5bd628 100644
--- a/src/main/java/me/matl114/logitech/SlimefunItem/AddItem.java
+++ b/src/main/java/me/matl114/logitech/SlimefunItem/AddItem.java
@@ -1,628 +1,635 @@
-package me.matl114.logitech.SlimefunItem;
-
-import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
-import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems;
-import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack;
-import me.matl114.logitech.Items.CustomHead;
-import me.matl114.logitech.Language;
-import me.matl114.logitech.Utils.AddUtils;
-import org.bukkit.Material;
-import org.bukkit.inventory.ItemStack;
-
-import java.util.HashSet;
-
-public class AddItem {
-
- public static void registerItemStack(){
- for (ItemStack it :ADDGLOW){
- AddUtils.addGlow(it);
- }
- AddUtils.hideAllFlags(CARGO_CONFIG);
- AddUtils.hideAllFlags(ENTITY_FEAT);
- }
-
- //Groups
- public static final ItemStack ROOT=new CustomItemStack(Material.BUDDING_AMETHYST,
- Language.get("Groups.ROOT.Name"),Language.getList("Groups.ROOT.Lore"));
- public static final ItemStack INFO=AddUtils.themed(Material.PAPER,AddUtils.Theme.INFO1,
- Language.get("Groups.INFO.Name"), Language.getList("Groups.INFO.Lore"));
- public static final ItemStack MATERIAL=AddUtils.themed(Material.END_CRYSTAL,AddUtils.Theme.CATEGORY2,
- Language.get("Groups.MATERIAL.Name"), Language.getList("Groups.MATERIAL.Lore"));
- public static final ItemStack INFO1=AddUtils.themed(Material.PAPER,AddUtils.Theme.NONE,
- Language.get("Groups.INFO1.Name"), Language.getList("Groups.INFO1.Lore"));
- public static final ItemStack INFO2=AddUtils.themed(Material.PAPER,AddUtils.Theme.NONE,
- Language.get("Groups.INFO2.Name"), Language.getList("Groups.INFO2.Lore"));
- public static final ItemStack INFO3=AddUtils.themed(Material.PAPER,AddUtils.Theme.NONE,
- Language.get("Groups.INFO3.Name"), Language.getList("Groups.INFO3.Lore"));
- public static final ItemStack INFO4=AddUtils.themed(Material.PAPER,AddUtils.Theme.NONE,
- Language.get("Groups.INFO4.Name"), Language.getList("Groups.INFO4.Lore"));
- public static final ItemStack INFO5=AddUtils.themed(Material.PAPER,AddUtils.Theme.NONE,
- Language.get("Groups.INFO5.Name"), Language.getList("Groups.INFO5.Lore"));
- public static final ItemStack INFO6=AddUtils.themed(Material.PAPER,AddUtils.Theme.NONE,
- Language.get("Groups.INFO6.Name"), Language.getList("Groups.INFO6.Lore"));
- public static final ItemStack URL=AddUtils.themed(Material.BOOK,AddUtils.Theme.NONE,
- Language.get("Groups.URL.Name"), Language.getList("Groups.URL.Lore"));
- public static final ItemStack ALLMACHINE=AddUtils.themed(Material.BLAST_FURNACE,AddUtils.Theme.MENU1,
- Language.get("Groups.ALLMACHINE.Name"), Language.getList("Groups.ALLMACHINE.Lore"));
- public static final ItemStack ALLRECIPE=AddUtils.themed(Material.KNOWLEDGE_BOOK,AddUtils.Theme.MENU1,
- Language.get("Groups.ALLRECIPE.Name"), Language.getList("Groups.ALLRECIPE.Lore"));
- public static final ItemStack BASIC=AddUtils.themed(Material.FURNACE,AddUtils.Theme.CATEGORY2,
- Language.get("Groups.BASIC.Name"),Language.getList("Groups.BASIC.Lore") );
- public static final ItemStack ALLBIGRECIPES =AddUtils.themed(Material.LODESTONE, AddUtils.Theme.CATEGORY2,
- Language.get("Groups.ALLBIGRECIPES.Name"),Language.getList("Groups.ALLBIGRECIPES.Lore"));
- public static final ItemStack CARGO=AddUtils.themed(Material.BAMBOO_CHEST_RAFT,AddUtils.Theme.CATEGORY2,
- Language.get("Groups.CARGO.Name"),Language.getList("Groups.CARGO.Lore"));
- public static final ItemStack SINGULARITY=AddUtils.themed(Material.NETHER_STAR,AddUtils.Theme.CATEGORY2,
- Language.get("Groups.SINGULARITY.Name"),Language.getList("Groups.SINGULARITY.Lore"));
- public static final ItemStack ADVANCED=AddUtils.themed(Material.BEACON,AddUtils.Theme.CATEGORY2,
- Language.get("Groups.ADVANCED.Name"),Language.getList("Groups.ADVANCED.Lore"));
- public static final ItemStack BEYOND=AddUtils.themed(Material.REPEATING_COMMAND_BLOCK,AddUtils.Theme.CATEGORY2,
- Language.get("Groups.BEYOND.Name"),Language.getList("Groups.BEYOND.Lore"));
- public static final ItemStack VANILLA=AddUtils.themed(Material.OBSERVER,AddUtils.Theme.CATEGORY2,
- Language.get("Groups.VANILLA.Name"),Language.getList("Groups.VANILLA.Lore"));
- public static final ItemStack MANUAL=AddUtils.themed(Material.CRAFTING_TABLE,AddUtils.Theme.CATEGORY2,
- Language.get("Groups.MANUAL.Name"),Language.getList("Groups.MANUAL.Lore") );
- public static final ItemStack SPECIAL=AddUtils.themed(Material.SCULK_CATALYST,AddUtils.Theme.CATEGORY2,
- Language.get("Groups.SPECIAL.Name"),Language.getList("Groups.SPECIAL.Lore"));
- //public static final ItemStack TEMPLATE=AddUtils.themed()
- public static final ItemStack TOBECONTINUE=AddUtils.themed(Material.STRUCTURE_VOID,AddUtils.Theme.CATEGORY2,
- Language.get("Groups.TOBECONTINUE.Name"),Language.getList("Groups.TOBECONTINUE.Lore"));
- public static final ItemStack SPACE =AddUtils.themed(Material.TOTEM_OF_UNDYING, AddUtils.Theme.CATEGORY2,
- Language.get("Groups.SPACE.Name"),Language.getList("Groups.SPACE.Lore"));
- public static final ItemStack GENERATORS=AddUtils.themed(Material.LAVA_BUCKET, AddUtils.Theme.CATEGORY2,
- Language.get("Groups.GENERATORS.Name"),Language.getList("Groups.GENERATORS.Lore"));
- public static final ItemStack ENERGY=AddUtils.themed(Material.LIGHTNING_ROD, AddUtils.Theme.CATEGORY2,
- Language.get("Groups.ENERGY.Name"),Language.getList("Groups.ENERGY.Lore"));
- public static final ItemStack FUNCTIONAL=AddUtils.themed(Material.STRUCTURE_VOID, AddUtils.Theme.CATEGORY2,
- Language.get("Groups.FUNCTIONAL.Name"),Language.getList("Groups.FUNCTIONAL.Lore"));
- public static final ItemStack UPDATELOG=AddUtils.themed(Material.WRITABLE_BOOK,AddUtils.Theme.NONE,
- Language.get("Groups.UPDATELOG.Name"), Language.getList("Groups.UPDATELOG.Lore"));
- public static final ItemStack MORE2=AddUtils.themed("MORE2",Material.WRITABLE_BOOK, AddUtils.Theme.NONE,
- Language.get("Groups.MORE2.Name"),Language.getList("Groups.MORE2.Lore"));
- //feat
- public static final ItemStack FEAT1=AddUtils.themed(Material.BOOK, AddUtils.Theme.NONE,
- Language.get("Groups.FEAT1.Name"),Language.getList("Groups.FEAT1.Lore"));
- public static final ItemStack FEAT2=AddUtils.themed(Material.BOOK, AddUtils.Theme.NONE,
- Language.get("Groups.FEAT2.Name"),Language.getList("Groups.FEAT2.Lore"));
- public static final ItemStack FEAT3=AddUtils.themed(Material.BOOK, AddUtils.Theme.NONE,
- Language.get("Groups.FEAT3.Name"),Language.getList("Groups.FEAT3.Lore"));
- public static final ItemStack FEAT4=AddUtils.themed(Material.BOOK, AddUtils.Theme.NONE,
- Language.get("Groups.FEAT4.Name"),Language.getList("Groups.FEAT4.Lore"));
- public static final ItemStack FEAT5=AddUtils.themed(Material.BOOK, AddUtils.Theme.NONE,
- Language.get("Groups.FEAT5.Name"),Language.getList("Groups.FEAT5.Lore"));
- public static final ItemStack FEAT6=AddUtils.themed(Material.BOOK, AddUtils.Theme.NONE,
- Language.get("Groups.FEAT6.Name"),Language.getList("Groups.FEAT6.Lore"));
- public static final ItemStack FEAT7=AddUtils.themed(Material.BOOK, AddUtils.Theme.NONE,
- Language.get("Groups.FEAT7.Name"),Language.getList("Groups.FEAT7.Lore"));
- public static final ItemStack FEAT8=AddUtils.themed(Material.BOOK, AddUtils.Theme.NONE,
- Language.get("Groups.FEAT8.Name"),Language.getList("Groups.FEAT8.Lore"));
- public static final ItemStack FEAT9=AddUtils.themed(Material.BOOK, AddUtils.Theme.NONE,
- Language.get("Groups.FEAT9.Name"),Language.getList("Groups.FEAT9.Lore"));
-
-
- //items
- public static final SlimefunItemStack ENTITY_FEAT=AddUtils.themed("ENTITY_FEAT",Material.SPAWNER,AddUtils.Theme.ITEM1,
- Language.get("Items.ENTITY_FEAT.Name"),Language.getList("Items.ENTITY_FEAT.Lore"));
- public static final SlimefunItemStack BUG= AddUtils.themed("BUG", Material.BONE_MEAL, AddUtils.Theme.ITEM1,
- Language.get("Items.BUG.Name"),Language.getList("Items.BUG.Lore"));
- public static final SlimefunItemStack MATL114 = AddUtils.themed("MATL114", CustomHead.MATL114.getItem(), AddUtils.Theme.ITEM1,
- Language.get("Items.MATL114.Name"),Language.getList("Items.MATL114.Lore"));
- public static final SlimefunItemStack CHIP_INGOT=AddUtils.themed("CHIP_INGOT",Material.BAKED_POTATO,AddUtils.Theme.ITEM1,
- Language.get("Items.CHIP_INGOT.Name"),Language.getList("Items.CHIP_INGOT.Lore"));
- public static final SlimefunItemStack TITANIUM_INGOT=AddUtils.themed("TITANIUM_INGOT",Material.IRON_INGOT,AddUtils.Theme.ITEM1,
- Language.get("Items.TITANIUM_INGOT.Name"),Language.getList("Items.TITANIUM_INGOT.Lore"));
- public static final SlimefunItemStack TUNGSTEN_INGOT=AddUtils.themed("TUNGSTEN_INGOT",Material.NETHERITE_INGOT,AddUtils.Theme.ITEM1,
- Language.get("Items.TUNGSTEN_INGOT.Name"),Language.getList("Items.TUNGSTEN_INGOT.Lore"));
- public static final SlimefunItemStack LOGIC= AddUtils.themed("LOGIC",Material.STRING,AddUtils.Theme.ITEM1,
- Language.get("Items.LOGIC.Name"),Language.getList("Items.LOGIC.Lore"));
- public static final SlimefunItemStack TRUE_ =AddUtils.themed("TRUE_",Material.MUSIC_DISC_5,AddUtils.Theme.ITEM1,
- Language.get("Items.TRUE_.Name"),Language.getList("Items.TRUE_.Lore"));
- public static final SlimefunItemStack FALSE_ =AddUtils.themed("FALSE_",Material.MUSIC_DISC_5,AddUtils.Theme.ITEM1,
- Language.get("Items.FALSE_.Name"),Language.getList("Items.FALSE_.Lore"));
- public static final SlimefunItemStack LOGIGATE=AddUtils.themed("LOGIGATE",Material.COMPARATOR,AddUtils.Theme.ITEM1,
- Language.get("Items.LOGIGATE.Name"),Language.getList("Items.LOGIGATE.Lore"));
- //generated items
- public static final SlimefunItemStack EXISTE=AddUtils.themed("EXISTE",Material.SLIME_BALL,AddUtils.Theme.ITEM1,
- Language.get("Items.EXISTE.Name"),Language.getList("Items.EXISTE.Lore"));
- public static final SlimefunItemStack UNIQUE=AddUtils.themed("UNIQUE",Material.MAGMA_CREAM,AddUtils.Theme.ITEM1,
- Language.get("Items.UNIQUE.Name"),Language.getList("Items.UNIQUE.Lore"));
- public static final SlimefunItemStack PARADOX=AddUtils.themed("PARADOX",Material.NAUTILUS_SHELL,AddUtils.Theme.ITEM1,
- Language.get("Items.PARADOX.Name"),Language.getList("Items.PARADOX.Lore"));
- public static final SlimefunItemStack NOLOGIC=AddUtils.themed("NOLOGIC",Material.STRING,AddUtils.Theme.ITEM1,
- Language.get("Items.NOLOGIC.Name"),Language.getList("Items.NOLOGIC.Lore"));
- public static final SlimefunItemStack LENGINE=AddUtils.themed("LENGINE",Material.MAGENTA_GLAZED_TERRACOTTA,AddUtils.Theme.ITEM1,
- Language.get("Items.LENGINE.Name"),Language.getList("Items.LENGINE.Lore"));
- public static final SlimefunItemStack LFIELD=AddUtils.themed("LFIELD",Material.END_CRYSTAL,AddUtils.Theme.ITEM1,
- Language.get("Items.LFIELD.Name"),Language.getList("Items.LFIELD.Lore"));
- public static final SlimefunItemStack LSCHEDULER=AddUtils.themed("LSCHEDULER",Material.RECOVERY_COMPASS,AddUtils.Theme.ITEM1,
- Language.get("Items.LSCHEDULER.Name"),Language.getList("Items.LSCHEDULER.Lore"));
- public static final SlimefunItemStack LCRAFT=AddUtils.themed("LCRAFT",Material.CONDUIT,AddUtils.Theme.ITEM1,
- Language.get("Items.LCRAFT.Name"),Language.getList("Items.LCRAFT.Lore"));
- public static final SlimefunItemStack LDIGITIZER=AddUtils.themed("LDIGITIZER",Material.TARGET,AddUtils.Theme.ITEM1,
- Language.get("Items.LDIGITIZER.Name"),Language.getList("Items.LDIGITIZER.Lore"));
- public static final SlimefunItemStack LBOOLIZER=AddUtils.themed("LBOOLIZER",Material.LEVER,AddUtils.Theme.ITEM1,
- Language.get("Items.LBOOLIZER.Name"),Language.getList("Items.LBOOLIZER.Lore"));
- public static final SlimefunItemStack LIOPORT=AddUtils.themed("LIOPORT",Material.CALIBRATED_SCULK_SENSOR,AddUtils.Theme.ITEM1,
- Language.get("Items.LIOPORT.Name"),Language.getList("Items.LIOPORT.Lore"));
- public static final SlimefunItemStack PALLADIUM_INGOT=AddUtils.themed("PALLADIUM_INGOT",Material.COPPER_INGOT,AddUtils.Theme.ITEM1,
- Language.get("Items.PALLADIUM_INGOT.Name"),Language.getList("Items.PALLADIUM_INGOT.Lore"));
- public static final SlimefunItemStack PLATINUM_INGOT=AddUtils.themed("PLATINUM_INGOT",Material.GOLD_INGOT,AddUtils.Theme.ITEM1,
- Language.get("Items.PLATINUM_INGOT.Name"),Language.getList("Items.PLATINUM_INGOT.Lore"));
- public static final SlimefunItemStack MOLYBDENUM=AddUtils.themed("MOLYBDENUM",Material.GUNPOWDER,AddUtils.Theme.ITEM1,
- Language.get("Items.MOLYBDENUM.Name"),Language.getList("Items.MOLYBDENUM.Lore"));
- public static final SlimefunItemStack CERIUM=AddUtils.themed("CERIUM",Material.GUNPOWDER,AddUtils.Theme.ITEM1,
- Language.get("Items.CERIUM.Name"),Language.getList("Items.CERIUM.Lore"));
- public static final SlimefunItemStack CADMIUM_INGOT=AddUtils.themed("CADMIUM_INGOT",Material.NETHERITE_INGOT,AddUtils.Theme.ITEM1,
- Language.get("Items.CADMIUM_INGOT.Name"),Language.getList("Items.CADMIUM_INGOT.Lore"));
- public static final SlimefunItemStack MENDELEVIUM=AddUtils.themed("MENDELEVIUM",Material.GLOWSTONE_DUST,AddUtils.Theme.ITEM1,
- Language.get("Items.MENDELEVIUM.Name"),Language.getList("Items.MENDELEVIUM.Lore"));
- public static final SlimefunItemStack DYSPROSIUM=AddUtils.themed("DYSPROSIUM",Material.REDSTONE,AddUtils.Theme.ITEM1,
- Language.get("Items.DYSPROSIUM.Name"),Language.getList("Items.DYSPROSIUM.Lore"));
- public static final SlimefunItemStack BISMUTH_INGOT=AddUtils.themed("BISMUTH_INGOT",Material.IRON_INGOT,AddUtils.Theme.ITEM1,
- Language.get("Items.BISMUTH_INGOT.Name"),Language.getList("Items.BISMUTH_INGOT.Lore"));
- public static final SlimefunItemStack ANTIMONY_INGOT=AddUtils.themed("ANTIMONY_INGOT",Material.IRON_INGOT,AddUtils.Theme.ITEM1,
- Language.get("Items.ANTIMONY_INGOT.Name"),Language.getList("Items.ANTIMONY_INGOT.Lore"));
- public static final SlimefunItemStack BORON=AddUtils.themed("BORON",Material.CLAY_BALL,AddUtils.Theme.ITEM1,
- Language.get("Items.BORON.Name"),Language.getList("Items.BORON.Lore"));
- public static final SlimefunItemStack THALLIUM=AddUtils.themed("THALLIUM",Material.BRICK,AddUtils.Theme.ITEM1,
- Language.get("Items.THALLIUM.Name"),Language.getList("Items.THALLIUM.Lore"));
- public static final SlimefunItemStack HYDRAGYRUM=AddUtils.themed("HYDRAGYRUM",Material.PRISMARINE_CRYSTALS,AddUtils.Theme.ITEM1,
- Language.get("Items.HYDRAGYRUM.Name"),Language.getList("Items.HYDRAGYRUM.Lore"));
- public static final SlimefunItemStack HGTLPBBI=AddUtils.themed("HGTLPBBI",CustomHead.SUPPORTER2.getItem(), AddUtils.Theme.ITEM1,
- Language.get("Items.HGTLPBBI.Name"),Language.getList("Items.HGTLPBBI.Lore"));
- public static final SlimefunItemStack DIMENSIONAL_SHARD=AddUtils.themed("DIMENSIONAL_SHARD",Material.PRISMARINE_SHARD,AddUtils.Theme.ITEM1,
- Language.get("Items.DIMENSIONAL_SHARD.Name"),Language.getList("Items.DIMENSIONAL_SHARD.Lore"));
- public static final SlimefunItemStack STAR_GOLD=AddUtils.themed("STAR_GOLD",Material.NETHER_STAR,AddUtils.Theme.ITEM1,
- Language.get("Items.STAR_GOLD.Name"),Language.getList("Items.STAR_GOLD.Lore"));
- public static final SlimefunItemStack VIRTUAL_SPACE=AddUtils.themed("VIRTUAL_SPACE",CustomHead.VSPACE.getItem(), AddUtils.Theme.ITEM1,
- Language.get("Items.VIRTUAL_SPACE.Name"),Language.getList("Items.VIRTUAL_SPACE.Lore"));
- public static final SlimefunItemStack WORLD_FEAT=AddUtils.themed("WORLD_FEAT",Material.GRASS_BLOCK,AddUtils.Theme.ITEM1,
- Language.get("Items.WORLD_FEAT.Name"),Language.getList("Items.WORLD_FEAT.Lore"));
- public static final SlimefunItemStack NETHER_FEAT=AddUtils.themed("NETHER_FEAT",Material.NETHERITE_SCRAP,AddUtils.Theme.ITEM1,
- Language.get("Items.NETHER_FEAT.Name"),Language.getList("Items.NETHER_FEAT.Lore"));
- public static final SlimefunItemStack END_FEAT=AddUtils.themed("END_FEAT",Material.CHORUS_PLANT,AddUtils.Theme.ITEM1,
- Language.get("Items.END_FEAT.Name"),Language.getList("Items.END_FEAT.Lore"));
- public static final SlimefunItemStack STACKFRAME=AddUtils.themed("STACKFRAME",Material.BEDROCK,AddUtils.Theme.ITEM1,
- Language.get("Items.STACKFRAME.Name"),Language.getList("Items.STACKFRAME.Lore"));
-
- public static final SlimefunItemStack STAR_GOLD_INGOT=AddUtils.themed("STAR_GOLD_INGOT",Material.GOLD_INGOT,AddUtils.Theme.ITEM1,
- Language.get("Items.STAR_GOLD_INGOT.Name"),Language.getList("Items.STAR_GOLD_INGOT.Lore"));
- public static final SlimefunItemStack ABSTRACT_INGOT=AddUtils.themed("ABSTRACT_INGOT",Material.IRON_INGOT,AddUtils.Theme.ITEM1,
- Language.get("Items.ABSTRACT_INGOT.Name"),Language.getList("Items.ABSTRACT_INGOT.Lore"));
- public static final SlimefunItemStack PDCECDMD=AddUtils.themed("PDCECDMD",CustomHead.BUSHIGEMEN.getItem(), AddUtils.Theme.ITEM1,
- Language.get("Items.PDCECDMD.Name"),Language.getList("Items.PDCECDMD.Lore"));
- public static final SlimefunItemStack REINFORCED_CHIP_INGOT=AddUtils.themed("REINFORCED_CHIP_INGOT",Material.POISONOUS_POTATO,AddUtils.Theme.ITEM1,
- Language.get("Items.REINFORCED_CHIP_INGOT.Name"),Language.getList("Items.REINFORCED_CHIP_INGOT.Lore"));
- public static final SlimefunItemStack ATOM_INGOT=AddUtils.themed("ATOM_INGOT",Material.ECHO_SHARD,AddUtils.Theme.ITEM1,
- Language.get("Items.ATOM_INGOT.Name"),Language.getList("Items.ATOM_INGOT.Lore"));
-
- public static final SlimefunItemStack LMOTOR=AddUtils.themed("LMOTOR",CustomHead.MOTOR.getItem(),AddUtils.Theme.ITEM1,
- Language.get("Items.LMOTOR.Name"),Language.getList("Items.LMOTOR.Lore"));
- public static final SlimefunItemStack LPLATE=AddUtils.themed("LPLATE",Material.PAPER,AddUtils.Theme.ITEM1,
- Language.get("Items.LPLATE.Name"),Language.getList("Items.LPLATE.Lore"));
- public static final SlimefunItemStack METAL_CORE=AddUtils.themed("METAL_CORE",Material.NETHERITE_BLOCK,AddUtils.Theme.ITEM1,
- Language.get("Items.METAL_CORE.Name"),Language.getList("Items.METAL_CORE.Lore"));
- public static final SlimefunItemStack SMELERY_CORE=AddUtils.themed("SMELERY_CORE",Material.IRON_BLOCK,AddUtils.Theme.ITEM1,
- Language.get("Items.SMELERY_CORE.Name"),Language.getList("Items.SMELERY_CORE.Lore"));
- public static final SlimefunItemStack MASS_CORE=AddUtils.themed("MASS_CORE",Material.COAL_BLOCK,AddUtils.Theme.ITEM1,
- Language.get("Items.MASS_CORE.Name"),Language.getList("Items.MASS_CORE.Lore"));
- public static final SlimefunItemStack TECH_CORE=AddUtils.themed("TECH_CORE",Material.BEACON,AddUtils.Theme.ITEM1,
- Language.get("Items.TECH_CORE.Name"),Language.getList("Items.TECH_CORE.Lore"));
- public static final SlimefunItemStack SPACE_PLATE=AddUtils.themed("SPACE_PLATE",Material.PAPER,AddUtils.Theme.ITEM1,
- Language.get("Items.SPACE_PLATE.Name"),Language.getList("Items.SPACE_PLATE.Lore"));
- public static final SlimefunItemStack LOGIC_CORE=AddUtils.themed("LOGIC_CORE",Material.NETHER_STAR,AddUtils.Theme.ITEM1,
- Language.get("Items.LOGIC_CORE.Name"),Language.getList("Items.LOGIC_CORE.Lore"));
- public static final SlimefunItemStack FINAL_FRAME=AddUtils.themed("FINAL_FRAME",Material.BUDDING_AMETHYST,AddUtils.Theme.MULTIBLOCK1,
- Language.get("Items.FINAL_FRAME.Name"),Language.getList("Items.FINAL_FRAME.Lore"));
- public static final SlimefunItemStack REDSTONE_ENGINE=AddUtils.themed("REDSTONE_ENGINE",Material.SLIME_BLOCK,AddUtils.Theme.ITEM1,
- Language.get("Items.REDSTONE_ENGINE.Name"),Language.getList("Items.REDSTONE_ENGINE.Lore"));
- public static final SlimefunItemStack HYPER_LINK=AddUtils.themed("HYPER_LINK",Material.NETHER_STAR,AddUtils.Theme.ITEM1,
- Language.get("Items.HYPER_LINK.Name"),Language.getList("Items.HYPER_LINK.Lore"));
-
- public static final SlimefunItemStack SAMPLE_HEAD=AddUtils.themed("SAMPLE_HEAD",Material.PLAYER_HEAD,AddUtils.Theme.ITEM1,
- Language.get("Items.SAMPLE_HEAD.Name"),Language.getList("Items.SAMPLE_HEAD.Lore"));
- public static final SlimefunItemStack CHIP=AddUtils.themed("CHIP",Material.NAME_TAG,AddUtils.Theme.ITEM1,
- Language.get("Items.CHIP.Name"),Language.getList("Items.CHIP.Lore"));
- public static final SlimefunItemStack CHIP_CORE=AddUtils.themed("CHIP_CORE",CustomHead.CORE.getItem(), AddUtils.Theme.ITEM1,
- Language.get("Items.CHIP_CORE.Name"),Language.getList("Items.CHIP_CORE.Lore"));
- public static final SlimefunItemStack LSINGULARITY=AddUtils.themed("LSINGULARITY",Material.FIREWORK_STAR,AddUtils.Theme.ITEM1,
- Language.get("Items.LSINGULARITY.Name"),Language.getList("Items.LSINGULARITY.Lore"));
- public static final SlimefunItemStack RADIATION_CLEAR=AddUtils.themed("RADIATION_CLEAR",Material.GLASS_BOTTLE,AddUtils.Theme.ITEM1,
- Language.get("Items.RADIATION_CLEAR.Name"),Language.getList("Items.RADIATION_CLEAR.Lore"));
- public static final SlimefunItemStack ANTIMASS_CLEAR=AddUtils.themed("ANTIMASS_CLEAR",Material.GLASS_BOTTLE,AddUtils.Theme.ITEM1,
- Language.get("Items.ANTIMASS_CLEAR.Name"),Language.getList("Items.ANTIMASS_CLEAR.Lore"));
- public static final SlimefunItemStack BISILVER=AddUtils.themed("BISILVER",Material.IRON_INGOT,AddUtils.Theme.ITEM1,
- Language.get("Items.BISILVER.Name"),Language.getList("Items.BISILVER.Lore"));
- public static final SlimefunItemStack PAGOLD=AddUtils.themed("PAGOLD",Material.GOLD_INGOT,AddUtils.Theme.ITEM1,
- Language.get("Items.PAGOLD.Name"),Language.getList("Items.PAGOLD.Lore"));
- public static final SlimefunItemStack LASER=AddUtils.themed("LASER",CustomHead.LASER.getItem(), AddUtils.Theme.ITEM1,
- Language.get("Items.LASER.Name"),Language.getList("Items.LASER.Lore"));
- public static final SlimefunItemStack ANTIMASS=AddUtils.themed("ANTIMASS",Material.SCULK,AddUtils.Theme.ITEM1,
- Language.get("Items.ANTIMASS.Name"),Language.getList("Items.ANTIMASS.Lore"));
- public static final SlimefunItemStack VIRTUALWORLD=AddUtils.themed("VIRTUALWORLD",CustomHead.END_BLOCK.getItem(), AddUtils.Theme.ITEM1,
- Language.get("Items.VIRTUALWORLD.Name"),Language.getList("Items.VIRTUALWORLD.Lore"));
- public static final SlimefunItemStack SAMPLE_SPAWNER=AddUtils.themed("SAMPLE_SPAWNER",Material.SPAWNER,AddUtils.Theme.ITEM1,
- Language.get("Items.SAMPLE_SPAWNER.Name"),Language.getList("Items.SAMPLE_SPAWNER.Lore"));
- public static final SlimefunItemStack HOLOGRAM_REMOVER=AddUtils.themed("HOLOGRAM_REMOVER",Material.LIGHT,AddUtils.Theme.ITEM1,
- Language.get("Items.HOLOGRAM_REMOVER.Name"),Language.getList("Items.HOLOGRAM_REMOVER.Lore"));
- public static final SlimefunItemStack WITHERPROOF_REDSTONE=AddUtils.themed("WITHERPROOF_REDSTONE",Material.REDSTONE_BLOCK,AddUtils.Theme.ITEM1,
- Language.get("Items.WITHERPROOF_REDSTONE.Name"),Language.getList("Items.WITHERPROOF_REDSTONE.Lore"));
- public static final SlimefunItemStack WITHERPROOF_REDS=AddUtils.themed("WITHERPROOF_REDS",Material.REDSTONE,AddUtils.Theme.ITEM1,
- Language.get("Items.WITHERPROOF_REDS.Name"),Language.getList("Items.WITHERPROOF_REDS.Lore"));
- public static final SlimefunItemStack BEDROCK_BREAKER=AddUtils.themed("BEDROCK_BREAKER",Material.PISTON,AddUtils.Theme.ITEM1,
- Language.get("Items.BEDROCK_BREAKER.Name"),Language.getList("Items.BEDROCK_BREAKER.Lore"));
- public static final SlimefunItemStack LASER_GUN=AddUtils.themed("LASER_GUN",CustomHead.LASER_GUN.getItem(), AddUtils.Theme.ITEM1,
- Language.get("Items.LASER_GUN.Name"),Language.getList("Items.LASER_GUN.Lore"));
- //nachines
- public static final SlimefunItemStack HEAD_ANALYZER=AddUtils.themed("HEAD_ANALYZER",Material.SOUL_CAMPFIRE, AddUtils.Theme.MACHINE1,
- Language.get("Machines.HEAD_ANALYZER.Name"),Language.getList("Machines.HEAD_ANALYZER.Lore"));
- public static final SlimefunItemStack RECIPE_LOGGER=AddUtils.themed("RECIPE_LOGGER",Material.FLETCHING_TABLE, AddUtils.Theme.MACHINE1,
- Language.get("Machines.RECIPE_LOGGER.Name"),Language.getList("Machines.RECIPE_LOGGER.Lore"));
- public static final SlimefunItemStack BOOL_GENERATOR=AddUtils.themed("BOOL_GENERATOR",Material.REDSTONE_TORCH,AddUtils.Theme.MACHINE1,
- Language.get("Machines.BOOL_GENERATOR.Name"),Language.getList("Machines.BOOL_GENERATOR.Lore"));
- public static final SlimefunItemStack LOGIC_REACTOR=AddUtils.themed("LOGIC_REACTOR",CustomHead.LOGIC_REACTOR.getItem(),AddUtils.Theme.MACHINE1,
- Language.get("Machines.LOGIC_REACTOR.Name"),Language.getList("Machines.LOGIC_REACTOR.Lore"));
- public static final SlimefunItemStack BUG_CRAFTER=AddUtils.themed("BUG_CRAFTER",CustomHead.BUG_CRATFER.getItem(),AddUtils.Theme.MACHINE1,
- Language.get("Machines.BUG_CRAFTER.Name"),Language.getList("Machines.BUG_CRAFTER.Lore"));
- public static final SlimefunItemStack ENDFRAME_MACHINE=AddUtils.themed("ENDFRAME_MACHINE",Material.END_PORTAL_FRAME,AddUtils.Theme.MACHINE1,
- Language.get("Machines.ENDFRAME_MACHINE.Name"),Language.getList("Machines.ENDFRAME_MACHINE.Lore"));
- public static final SlimefunItemStack LVOID_GENERATOR=AddUtils.themed("LVOID_GENERATOR",Material.SOUL_LANTERN,AddUtils.Theme.MACHINE1,
- Language.get("Machines.LVOID_GENERATOR.Name"),Language.getList("Machines.LVOID_GENERATOR.Lore"));
- public static final SlimefunItemStack SPECIAL_CRAFTER=AddUtils.themed("SPECIAL_CRAFTER",Material.LOOM,AddUtils.Theme.MACHINE1,
- Language.get("Machines.SPECIAL_CRAFTER.Name"),Language.getList("Machines.SPECIAL_CRAFTER.Lore"));
- public static final SlimefunItemStack STAR_SMELTERY=AddUtils.themed("STAR_SMELTERY",Material.BLAST_FURNACE,AddUtils.Theme.MACHINE1,
- Language.get("Machines.STAR_SMELTERY.Name"),Language.getList("Machines.STAR_SMELTERY.Lore"));
-
- public static final SlimefunItemStack INFINITY_AUTOCRAFT=AddUtils.themed("INFINITY_AUTOCRAFT",Material.CRYING_OBSIDIAN,AddUtils.Theme.MACHINE1,
- Language.get("Machines.INFINITY_AUTOCRAFT.Name"),Language.getList("Machines.INFINITY_AUTOCRAFT.Lore"));
- public static final SlimefunItemStack CHIP_MAKER=AddUtils.themed("CHIP_MAKER",Material.CHISELED_BOOKSHELF,AddUtils.Theme.MACHINE1,
- Language.get("Machines.CHIP_MAKER.Name"),Language.getList("Machines.CHIP_MAKER.Lore"));
- public static final SlimefunItemStack CHIP_CONSUMER=AddUtils.themed("CHIP_CONSUMER",Material.TORCH,AddUtils.Theme.MACHINE1,
- Language.get("Machines.CHIP_CONSUMER.Name"),Language.getList("Machines.CHIP_CONSUMER.Lore"));
- public static final SlimefunItemStack CHIP_BICONSUMER=AddUtils.themed("CHIP_BICONSUMER",Material.LANTERN,AddUtils.Theme.MACHINE1,
- Language.get("Machines.CHIP_BICONSUMER.Name"),Language.getList("Machines.CHIP_BICONSUMER.Lore"));
- public static final SlimefunItemStack SEQ_CONSTRUCTOR=AddUtils.themed("SEQ_CONSTRUCTOR",Material.BAMBOO_MOSAIC,AddUtils.Theme.MACHINE1,
- Language.get("Machines.SEQ_CONSTRUCTOR.Name"),Language.getList("Machines.SEQ_CONSTRUCTOR.Lore"));
- public static final SlimefunItemStack STACKMACHINE=AddUtils.themed("STACKMACHINE",Material.FURNACE,AddUtils.Theme.MACHINE1,
- Language.get("Machines.STACKMACHINE.Name"),Language.getList("Machines.STACKMACHINE.Lore"));
- public static final SlimefunItemStack ENERGY_TRASH=AddUtils.themed("ENERGY_TRASH", SlimefunItems.PORTABLE_DUSTBIN.getItem().getItem().clone()
- ,AddUtils.Theme.MACHINE1, Language.get("Machines.ENERGY_TRASH.Name"),Language.getList("Machines.ENERGY_TRASH.Lore"));
- public static final SlimefunItemStack OPPO_GEN=AddUtils.themed("OPPO_GEN",CustomHead.HOT_MACHINE.getItem(), AddUtils.Theme.MACHINE1,
- Language.get("Machines.OPPO_GEN.Name"),Language.getList("Machines.OPPO_GEN.Lore"));
- public static final SlimefunItemStack ARC_REACTOR=AddUtils.themed("ARC_REACTOR",CustomHead.REACTOR.getItem(),AddUtils.Theme.MACHINE1,
- Language.get("Machines.ARC_REACTOR.Name"),Language.getList("Machines.ARC_REACTOR.Lore"));
- public static final SlimefunItemStack ENERGY_AMPLIFIER=AddUtils.themed("ENERGY_AMPLIFIER",Material.NETHERITE_BLOCK,AddUtils.Theme.MACHINE1,
- Language.get("Machines.ENERGY_AMPLIFIER.Name"),Language.getList("Machines.ENERGY_AMPLIFIER.Lore"));
- public static final SlimefunItemStack ADVANCED_CHIP_MAKER=AddUtils.themed("ADVANCED_CHIP_MAKER",Material.CHISELED_BOOKSHELF,AddUtils.Theme.MACHINE1,
- Language.get("Machines.ADVANCED_CHIP_MAKER.Name"),Language.getList("Machines.ADVANCED_CHIP_MAKER.Lore"));
- public static final SlimefunItemStack CHIP_REACTOR=AddUtils.themed("CHIP_REACTOR",Material.JUKEBOX,AddUtils.Theme.MACHINE1,
- Language.get("Machines.CHIP_REACTOR.Name"),Language.getList("Machines.CHIP_REACTOR.Lore"));
- public static final SlimefunItemStack DUST_EXTRACTOR=AddUtils.themed("DUST_EXTRACTOR",Material.CHISELED_STONE_BRICKS,AddUtils.Theme.MACHINE1,
- Language.get("Machines.DUST_EXTRACTOR.Name"),Language.getList("Machines.DUST_EXTRACTOR.Lore"));
- public static final SlimefunItemStack FURNACE_FACTORY=AddUtils.themed("FURNACE_FACTORY",Material.FURNACE,AddUtils.Theme.MACHINE1,
- Language.get("Machines.FURNACE_FACTORY.Name"),Language.getList("Machines.FURNACE_FACTORY.Lore"));
- public static final SlimefunItemStack INGOT_FACTORY=AddUtils.themed("INGOT_FACTORY",Material.RED_GLAZED_TERRACOTTA,AddUtils.Theme.MACHINE1,
- Language.get("Machines.INGOT_FACTORY.Name"),Language.getList("Machines.INGOT_FACTORY.Lore"));
- public static final SlimefunItemStack FINAL_LASER=AddUtils.themed("FINAL_LASER",Material.DROPPER,AddUtils.Theme.MACHINE1,
- Language.get("Machines.FINAL_LASER.Name"),Language.getList("Machines.FINAL_LASER.Lore"));
- public static final SlimefunItemStack FINAL_CONVERTOR=AddUtils.themed("FINAL_CONVERTOR",Material.WARPED_HYPHAE,AddUtils.Theme.MACHINE1,
- Language.get("Machines.FINAL_CONVERTOR.Name"),Language.getList("Machines.FINAL_CONVERTOR.Lore"));
- public static final SlimefunItemStack PRESSOR_FACTORY=AddUtils.themed("PRESSOR_FACTORY",Material.PISTON,AddUtils.Theme.MACHINE1,
- Language.get("Machines.PRESSOR_FACTORY.Name"),Language.getList("Machines.PRESSOR_FACTORY.Lore"));
- public static final SlimefunItemStack CRAFTER=AddUtils.themed("CRAFTER",Material.CRAFTING_TABLE,AddUtils.Theme.MACHINE1,
- Language.get("Machines.CRAFTER.Name"),Language.getList("Machines.CRAFTER.Lore"));
- public static final SlimefunItemStack EASYSTACKMACHINE=AddUtils.themed("EASYSTACKMACHINE",Material.FURNACE,AddUtils.Theme.MACHINE1,
- Language.get("Machines.EASYSTACKMACHINE.Name"),Language.getList("Machines.EASYSTACKMACHINE.Lore"));
- public static final SlimefunItemStack CONVERTOR=AddUtils.themed("CONVERTOR",Material.SEA_LANTERN,AddUtils.Theme.MACHINE1,
- Language.get("Machines.CONVERTOR.Name"),Language.getList("Machines.CONVERTOR.Lore"));
- public static final SlimefunItemStack VIRTUAL_KILLER=AddUtils.themed("VIRTUAL_KILLER",Material.STONECUTTER,AddUtils.Theme.MACHINE1,
- Language.get("Machines.VIRTUAL_KILLER.Name"),Language.getList("Machines.VIRTUAL_KILLER.Lore"));
- public static final SlimefunItemStack INF_MOBSIMULATION=AddUtils.themed("INF_MOBSIMULATION",Material.GILDED_BLACKSTONE,AddUtils.Theme.MACHINE1,
- Language.get("Machines.INF_MOBSIMULATION.Name"),Language.getList("Machines.INF_MOBSIMULATION.Lore"));
- public static final SlimefunItemStack INF_GEOQUARRY=AddUtils.themed("INF_GEOQUARRY",Material.CHISELED_QUARTZ_BLOCK,AddUtils.Theme.MACHINE1,
- Language.get("Machines.INF_GEOQUARRY.Name"),Language.getList("Machines.INF_GEOQUARRY.Lore"));
- public static final SlimefunItemStack RAND_EDITOR=AddUtils.themed("RAND_EDITOR",Material.ENCHANTING_TABLE,AddUtils.Theme.MACHINE1,
- Language.get("Machines.RAND_EDITOR.Name"),Language.getList("Machines.RAND_EDITOR.Lore"));
- public static final SlimefunItemStack ATTR_OP=AddUtils.themed("ATTR_OP",Material.ANVIL,AddUtils.Theme.MACHINE1,
- Language.get("Machines.ATTR_OP.Name"),Language.getList("Machines.ATTR_OP.Lore"));
- public static final SlimefunItemStack GRIND_FACTORY=AddUtils.themed("GRIND_FACTORY",Material.GRINDSTONE,AddUtils.Theme.MACHINE1,
- Language.get("Machines.GRIND_FACTORY.Name"),Language.getList("Machines.GRIND_FACTORY.Lore"));
- public static final SlimefunItemStack TNT_GEN=AddUtils.themed("TNT_GEN",Material.NOTE_BLOCK,AddUtils.Theme.MACHINE1,
- Language.get("Machines.TNT_GEN.Name"),Language.getList("Machines.TNT_GEN.Lore"));
- public static final SlimefunItemStack ADVANCE_BREWER=AddUtils.themed("ADVANCE_BREWER",Material.SMOKER,AddUtils.Theme.MACHINE1,
- Language.get("Machines.ADVANCE_BREWER.Name"),Language.getList("Machines.ADVANCE_BREWER.Lore"));
- public static final SlimefunItemStack SIMU_LVOID=AddUtils.themed("SIMU_LVOID",Material.SOUL_TORCH,AddUtils.Theme.MACHINE1,
- Language.get("Machines.SIMU_LVOID.Name"),Language.getList("Machines.SIMU_LVOID.Lore"));
- //manuals
- public static final SlimefunItemStack MANUAL_CORE=AddUtils.themed("MANUAL_CORE",Material.AMETHYST_SHARD,AddUtils.Theme.ITEM1,
- Language.get("Manuals.MANUAL_CORE.Name"),Language.getList("Manuals.MANUAL_CORE.Lore"));
- public static final SlimefunItemStack CRAFT_MANUAL=AddUtils.themed("CRAFT_MANUAL",Material.CRAFTING_TABLE,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.CRAFT_MANUAL.Name"),Language.getList("Manuals.CRAFT_MANUAL.Lore"));
- public static final SlimefunItemStack FURNACE_MANUAL=AddUtils.themed("FURNACE_MANUAL",Material.FURNACE,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.FURNACE_MANUAL.Name"),Language.getList("Manuals.FURNACE_MANUAL.Lore"));
- public static final SlimefunItemStack ENHANCED_CRAFT_MANUAL=AddUtils.themed("ENHANCED_CRAFT_MANUAL",Material.CRAFTING_TABLE,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.ENHANCED_CRAFT_MANUAL.Name"),Language.getList("Manuals.ENHANCED_CRAFT_MANUAL.Lore"));
- public static final SlimefunItemStack GRIND_MANUAL=AddUtils.themed("GRIND_MANUAL",Material.DISPENSER,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.GRIND_MANUAL.Name"),Language.getList("Manuals.GRIND_MANUAL.Lore"));
- public static final SlimefunItemStack ARMOR_FORGE_MANUAL=AddUtils.themed("ARMOR_FORGE_MANUAL",Material.ANVIL,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.ARMOR_FORGE_MANUAL.Name"),Language.getList("Manuals.ARMOR_FORGE_MANUAL.Lore"));
- public static final SlimefunItemStack ORE_CRUSHER_MANUAL=AddUtils.themed("ORE_CRUSHER_MANUAL",Material.DROPPER,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.ORE_CRUSHER_MANUAL.Name"),Language.getList("Manuals.ORE_CRUSHER_MANUAL.Lore"));
- public static final SlimefunItemStack COMPRESSOR_MANUAL=AddUtils.themed("COMPRESSOR_MANUAL",Material.PISTON,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.COMPRESSOR_MANUAL.Name"),Language.getList("Manuals.COMPRESSOR_MANUAL.Lore"));
- public static final SlimefunItemStack PRESSURE_MANUAL=AddUtils.themed("PRESSURE_MANUAL",Material.GLASS,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.PRESSURE_MANUAL.Name"),Language.getList("Manuals.PRESSURE_MANUAL.Lore"));
- public static final SlimefunItemStack MAGIC_WORKBENCH_MANUAL=AddUtils.themed("MAGIC_WORKBENCH_MANUAL",Material.BOOKSHELF,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.MAGIC_WORKBENCH_MANUAL.Name"),Language.getList("Manuals.MAGIC_WORKBENCH_MANUAL.Lore"));
- public static final SlimefunItemStack ORE_WASHER_MANUAL=AddUtils.themed("ORE_WASHER_MANUAL",Material.BLUE_STAINED_GLASS,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.ORE_WASHER_MANUAL.Name"),Language.getList("Manuals.ORE_WASHER_MANUAL.Lore"));
- public static final SlimefunItemStack GOLD_PAN_MANUAL=AddUtils.themed("GOLD_PAN_MANUAL",Material.BROWN_TERRACOTTA,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.GOLD_PAN_MANUAL.Name"),Language.getList("Manuals.GOLD_PAN_MANUAL.Lore"));
- public static final SlimefunItemStack ANCIENT_ALTAR_MANUAL=AddUtils.themed("ANCIENT_ALTAR_MANUAL",Material.ENCHANTING_TABLE,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.ANCIENT_ALTAR_MANUAL.Name"),Language.getList("Manuals.ANCIENT_ALTAR_MANUAL.Lore"));
- public static final SlimefunItemStack SMELTERY_MANUAL=AddUtils.themed("SMELTERY_MANUAL",Material.BLAST_FURNACE,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.SMELTERY_MANUAL.Name"),Language.getList("Manuals.SMELTERY_MANUAL.Lore"));
- public static final SlimefunItemStack CRUCIBLE_MANUAL=AddUtils.themed("CRUCIBLE_MANUAL",Material.RED_TERRACOTTA,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.CRUCIBLE_MANUAL.Name"),Language.getList("Manuals.CRUCIBLE_MANUAL.Lore"));
- public static final SlimefunItemStack PULVERIZER_MANUAL=AddUtils.themed("PULVERIZER_MANUAL",Material.GRINDSTONE,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.PULVERIZER_MANUAL.Name"),Language.getList("Manuals.PULVERIZER_MANUAL.Lore"));
- public static final SlimefunItemStack MULTICRAFTTABLE_MANUAL=AddUtils.themed("MULTICRAFTTABLE_MANUAL",Material.CRAFTING_TABLE,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.MULTICRAFTTABLE_MANUAL.Name"),Language.getList("Manuals.MULTICRAFTTABLE_MANUAL.Lore"));
- public static final SlimefunItemStack TABLESAW_MANUAL=AddUtils.themed("TABLESAW_MANUAL",Material.STONECUTTER,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.TABLESAW_MANUAL.Name"),Language.getList("Manuals.TABLESAW_MANUAL.Lore"));
- public static final SlimefunItemStack COMPOSTER=AddUtils.themed("COMPOSTER",Material.CAULDRON,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.COMPOSTER.Name"),Language.getList("Manuals.COMPOSTER.Lore"));
- public static final SlimefunItemStack MULTIMACHINE_MANUAL=AddUtils.themed("MULTIMACHINE_MANUAL",Material.GRAY_STAINED_GLASS,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.MULTIMACHINE_MANUAL.Name"),Language.getList("Manuals.MULTIMACHINE_MANUAL.Lore"));
- public static final SlimefunItemStack MOBDATA_MANUAL=AddUtils.themed("MOBDATA_MANUAL",Material.LODESTONE,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.MOBDATA_MANUAL.Name"),Language.getList("Manuals.MOBDATA_MANUAL.Lore"));
- public static final SlimefunItemStack INFINITY_MANUAL=AddUtils.themed("INFINITY_MANUAL",Material.RESPAWN_ANCHOR,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.INFINITY_MANUAL.Name"),Language.getList("Manuals.INFINITY_MANUAL.Lore"));
- public static final SlimefunItemStack NTWWORKBENCH_MANUAL=AddUtils.themed("NTWWORKBENCH_MANUAL",Material.BAMBOO_BLOCK,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.NTWWORKBENCH_MANUAL.Name"),Language.getList("Manuals.NTWWORKBENCH_MANUAL.Lore"));
- public static final SlimefunItemStack MULTIBLOCK_MANUAL=AddUtils.themed("MULTIBLOCK_MANUAL",Material.BRICKS,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.MULTIBLOCK_MANUAL.Name"),Language.getList("Manuals.MULTIBLOCK_MANUAL.Lore"));
- public static final SlimefunItemStack FINAL_MANUAL=AddUtils.themed("FINAL_MANUAL",Material.REINFORCED_DEEPSLATE,AddUtils.Theme.MANUAL1,
- Language.get("Manuals.FINAL_MANUAL.Name"),Language.getList("Manuals.FINAL_MANUAL.Lore"));
- public static final SlimefunItemStack REPLACE_CARD=AddUtils.themed("REPLACE_CARD",Material.PRIZE_POTTERY_SHERD,AddUtils.Theme.ITEM1,
- Language.get("Manuals.REPLACE_CARD.Name"),Language.getList("Manuals.REPLACE_CARD.Lore"));
- public static final SlimefunItemStack CARD_MAKER=AddUtils.themed("CARD_MAKER",Material.FLETCHING_TABLE,AddUtils.Theme.MACHINE1,
- Language.get("Manuals.CARD_MAKER.Name"),Language.getList("Manuals.CARD_MAKER.Lore"));
- //generators
- public static final SlimefunItemStack MAGIC_STONE=AddUtils.themed("MAGIC_STONE",Material.COBBLESTONE,AddUtils.Theme.MACHINE2,
- Language.get("Generators.MAGIC_STONE.Name"),Language.getList("Generators.MAGIC_STONE.Lore"));
- public static final SlimefunItemStack BOOL_MG=AddUtils.themed("BOOL_MG",Material.REDSTONE_TORCH,AddUtils.Theme.MACHINE2,
- Language.get("Generators.BOOL_MG.Name"),Language.getList("Generators.BOOL_MG.Lore"));
- public static final SlimefunItemStack OVERWORLD_MINER=AddUtils.themed("OVERWORLD_MINER",Material.SMOOTH_STONE,AddUtils.Theme.MACHINE2,
- Language.get("Generators.OVERWORLD_MINER.Name"),Language.getList("Generators.OVERWORLD_MINER.Lore"));
- public static final SlimefunItemStack NETHER_MINER=AddUtils.themed("NETHER_MINER",Material.CRIMSON_NYLIUM,AddUtils.Theme.MACHINE2,
- Language.get("Generators.NETHER_MINER.Name"),Language.getList("Generators.NETHER_MINER.Lore"));
- public static final SlimefunItemStack END_MINER =AddUtils.themed("END_MINER",Material.END_STONE_BRICKS,AddUtils.Theme.MACHINE2,
- Language.get("Generators.END_MINER.Name"),Language.getList("Generators.END_MINER.Lore"));
- public static final SlimefunItemStack DIMENSION_MINER=AddUtils.themed("DIMENSION_MINER",Material.CRYING_OBSIDIAN,AddUtils.Theme.MACHINE2,
- Language.get("Generators.DIMENSION_MINER.Name"),Language.getList("Generators.DIMENSION_MINER.Lore"));
- public static final SlimefunItemStack REDSTONE_MG=AddUtils.themed("REDSTONE_MG",Material.OBSERVER,AddUtils.Theme.MACHINE2,
- Language.get("Generators.REDSTONE_MG.Name"),Language.getList("Generators.REDSTONE_MG.Lore"));
- public static final SlimefunItemStack DUPE_MG=AddUtils.themed("DUPE_MG",Material.STICKY_PISTON,AddUtils.Theme.MACHINE2,
- Language.get("Generators.DUPE_MG.Name"),Language.getList("Generators.DUPE_MG.Lore"));
- public static final SlimefunItemStack ENDDUPE_MG=AddUtils.themed("ENDDUPE_MG",Material.END_PORTAL_FRAME,AddUtils.Theme.MACHINE2,
- Language.get("Generators.ENDDUPE_MG.Name"),Language.getList("Generators.ENDDUPE_MG.Lore"));
- public static final SlimefunItemStack STACKMGENERATOR=AddUtils.themed("STACKMGENERATOR",Material.SMOOTH_STONE,AddUtils.Theme.MACHINE2,
- Language.get("Generators.STACKMGENERATOR.Name"),Language.getList("Generators.STACKMGENERATOR.Lore"));
- public static final SlimefunItemStack REVERSE_GENERATOR=AddUtils.themed("REVERSE_GENERATOR",CustomHead.REVERSE.getItem(), AddUtils.Theme.MACHINE2,
- Language.get("Generators.REVERSE_GENERATOR.Name"),Language.getList("Generators.REVERSE_GENERATOR.Lore"));
- public static final SlimefunItemStack VIRTUAL_MINER=AddUtils.themed("VIRTUAL_MINER",Material.CHERRY_WOOD,AddUtils.Theme.MACHINE2,
- Language.get("Generators.VIRTUAL_MINER.Name"),Language.getList("Generators.VIRTUAL_MINER.Lore"));
- public static final SlimefunItemStack VIRTUAL_PLANT=AddUtils.themed("VIRTUAL_PLANT",Material.STRIPPED_CHERRY_WOOD,AddUtils.Theme.MACHINE2,
- Language.get("Generators.VIRTUAL_PLANT.Name"),Language.getList("Generators.VIRTUAL_PLANT.Lore"));
- public static final SlimefunItemStack MAGIC_PLANT=AddUtils.themed("MAGIC_PLANT",Material.DIRT,AddUtils.Theme.MACHINE2,
- Language.get("Generators.MAGIC_PLANT.Name"),Language.getList("Generators.MAGIC_PLANT.Lore"));
- public static final SlimefunItemStack OVERWORLD_PLANT=AddUtils.themed("OVERWORLD_PLANT",Material.PODZOL,AddUtils.Theme.MACHINE2,
- Language.get("Generators.OVERWORLD_PLANT.Name"),Language.getList("Generators.OVERWORLD_PLANT.Lore"));
- public static final SlimefunItemStack NETHER_PLANT=AddUtils.themed("NETHER_PLANT",Material.WARPED_NYLIUM,AddUtils.Theme.MACHINE2,
- Language.get("Generators.NETHER_PLANT.Name"),Language.getList("Generators.NETHER_PLANT.Lore"));
- public static final SlimefunItemStack END_PLANT=AddUtils.themed("END_PLANT",Material.END_STONE,AddUtils.Theme.MACHINE2,
- Language.get("Generators.END_PLANT.Name"),Language.getList("Generators.END_PLANT.Lore"));
- public static final SlimefunItemStack SMELTRY=AddUtils.themed("SMELTRY",Material.FURNACE,AddUtils.Theme.MACHINE1,
- Language.get("Machines.SMELTRY.Name"),Language.getList("Machines.SMELTRY.Lore"));
- public static final SlimefunItemStack STONE_FACTORY=AddUtils.themed("STONE_FACTORY",Material.STONE_BRICKS,AddUtils.Theme.MACHINE2,
- Language.get("Generators.STONE_FACTORY.Name"),Language.getList("Generators.STONE_FACTORY.Lore"));
- public static final SlimefunItemStack TNT_MG=AddUtils.themed("TNT_MG",Material.ANCIENT_DEBRIS,AddUtils.Theme.MACHINE2,
- Language.get("Generators.TNT_MG.Name"),Language.getList("Generators.TNT_MG.Lore"));
- //cargos
- public static final SlimefunItemStack CARGO_PART=AddUtils.themed("CARGO_PART",Material.SHAPER_ARMOR_TRIM_SMITHING_TEMPLATE,AddUtils.Theme.ITEM1,
- Language.get("Items.CARGO_PART.Name"),Language.getList("Items.CARGO_PART.Lore"));
- public static final SlimefunItemStack CARGO_CONFIG=AddUtils.themed("CARGO_CONFIG",Material.TIDE_ARMOR_TRIM_SMITHING_TEMPLATE,AddUtils.Theme.ITEM1,
- Language.get("Items.CARGO_CONFIG.Name"),Language.getList("Items.CARGO_CONFIG.Lore"));
- public static final SlimefunItemStack CARGO_CONFIGURATOR=AddUtils.themed("CARGO_CONFIGURATOR",Material.JUKEBOX,AddUtils.Theme.CARGO1,
- Language.get("Items.CARGO_CONFIGURATOR.Name"),Language.getList("Items.CARGO_CONFIGURATOR.Lore"));
- public static final SlimefunItemStack SIMPLE_CARGO=AddUtils.themed("SIMPLE_CARGO",Material.TARGET,AddUtils.Theme.CARGO1,
- Language.get("Cargo.SIMPLE_CARGO.Name"),Language.getList("Cargo.SIMPLE_CARGO.Lore"));
- public static final SlimefunItemStack REMOTE_CARGO=AddUtils.themed("REMOTE_CARGO",Material.CALIBRATED_SCULK_SENSOR,AddUtils.Theme.CARGO1,
- Language.get("Cargo.REMOTE_CARGO.Name"),Language.getList("Cargo.REMOTE_CARGO.Lore"));
- public static final SlimefunItemStack LINE_CARGO=AddUtils.themed("LINE_CARGO",Material.OBSERVER,AddUtils.Theme.CARGO1,
- Language.get("Cargo.LINE_CARGO.Name"),Language.getList("Cargo.LINE_CARGO.Lore"));
- public static final SlimefunItemStack BISORTER=AddUtils.themed("BISORTER",Material.VERDANT_FROGLIGHT,AddUtils.Theme.CARGO1,
- Language.get("Cargo.BISORTER.Name"),Language.getList("Cargo.BISORTER.Lore"));
- public static final SlimefunItemStack QUARSORTER=AddUtils.themed("QUARSORTER",Material.PEARLESCENT_FROGLIGHT,AddUtils.Theme.CARGO1,
- Language.get("Cargo.QUARSORTER.Name"),Language.getList("Cargo.QUARSORTER.Lore"));
- public static final SlimefunItemStack OCTASORTER=AddUtils.themed("OCTASORTER",Material.OCHRE_FROGLIGHT,AddUtils.Theme.CARGO1,
- Language.get("Cargo.OCTASORTER.Name"),Language.getList("Cargo.OCTASORTER.Lore"));
- public static final SlimefunItemStack ADV_TRASH=AddUtils.themed("ADV_TRASH",CustomHead.FIRE_GENERATOR.getItem(), AddUtils.Theme.CARGO1,
- Language.get("Cargo.ADV_TRASH.Name"),Language.getList("Cargo.ADV_TRASH.Lore"));
- public static final SlimefunItemStack STORAGE_OPERATOR=AddUtils.themed("STORAGE_OPERATOR",Material.CARTOGRAPHY_TABLE,AddUtils.Theme.CARGO1,
- Language.get("Cargo.STORAGE_OPERATOR.Name"),Language.getList("Cargo.STORAGE_OPERATOR.Lore"));
- public static final SlimefunItemStack ADV_ADJACENT_CARGO=AddUtils.themed("ADV_ADJACENT_CARGO",Material.TARGET,AddUtils.Theme.CARGO1,
- Language.get("Cargo.ADV_ADJACENT_CARGO.Name"),Language.getList("Cargo.ADV_ADJACENT_CARGO.Lore"));
- public static final SlimefunItemStack ADV_REMOTE_CARGO=AddUtils.themed("ADV_REMOTE_CARGO",Material.CALIBRATED_SCULK_SENSOR,AddUtils.Theme.CARGO1,
- Language.get("Cargo.ADV_REMOTE_CARGO.Name"),Language.getList("Cargo.ADV_REMOTE_CARGO.Lore"));
- public static final SlimefunItemStack ADV_LINE_CARGO=AddUtils.themed("ADV_LINE_CARGO",Material.OBSERVER,AddUtils.Theme.CARGO1,
- Language.get("Cargo.ADV_LINE_CARGO.Name"),Language.getList("Cargo.ADV_LINE_CARGO.Lore"));
- public static final SlimefunItemStack REDSTONE_ADJACENT_CARGO=AddUtils.themed("REDSTONE_ADJACENT_CARGO",Material.REDSTONE_LAMP,AddUtils.Theme.CARGO1,
- Language.get("Cargo.REDSTONE_ADJACENT_CARGO.Name"),Language.getList("Cargo.REDSTONE_ADJACENT_CARGO.Lore"));
- public static final SlimefunItemStack CHIP_ADJ_CARGO=AddUtils.themed("CHIP_ADJ_CARGO",Material.SHROOMLIGHT,AddUtils.Theme.CARGO1,
- Language.get("Cargo.CHIP_ADJ_CARGO.Name"),Language.getList("Cargo.CHIP_ADJ_CARGO.Lore"));
- public static final SlimefunItemStack RESETTER=AddUtils.themed("RESETTER",Material.FLETCHING_TABLE,AddUtils.Theme.CARGO1,
- Language.get("Cargo.RESETTER.Name"),Language.getList("Cargo.RESETTER.Lore"));
- public static final SlimefunItemStack STORAGE_SINGULARITY= AddUtils.themed("STORAGE_SINGULARITY",Material.NETHER_STAR,AddUtils.Theme.ITEM1,
- Language.get("Cargo.STORAGE_SINGULARITY.Name"),Language.getList("Cargo.STORAGE_SINGULARITY.Lore"));
- public static final SlimefunItemStack QUANTUM_LINK=AddUtils.themed("QUANTUM_LINK",Material.NETHER_STAR,AddUtils.Theme.ITEM1,
- Language.get("Cargo.QUANTUM_LINK.Name"),Language.getList("Cargo.QUANTUM_LINK.Lore"));
- public static final SlimefunItemStack INPORT=AddUtils.themed("INPORT",Material.END_STONE,AddUtils.Theme.MACHINE1,
- Language.get("Cargo.INPORT.Name"),Language.getList("Cargo.INPORT.Lore"));
- public static final SlimefunItemStack OUTPORT=AddUtils.themed("OUTPORT",Material.END_STONE,AddUtils.Theme.MACHINE1,
- Language.get("Cargo.OUTPORT.Name"),Language.getList("Cargo.OUTPORT.Lore"));
- public static final SlimefunItemStack IOPORT=AddUtils.themed("IOPORT",Material.PURPUR_PILLAR,AddUtils.Theme.ITEM1,
- Language.get("Cargo.IOPORT.Name"),Language.getList("Cargo.IOPORT.Lore"));
- public static final SlimefunItemStack STORAGE=AddUtils.themed("STORAGE",Material.LIGHT_GRAY_STAINED_GLASS,AddUtils.Theme.CARGO1,
- Language.get("Cargo.STORAGE.Name"),Language.getList("Cargo.STORAGE.Lore"));
- public static final SlimefunItemStack STORAGE_INPUT=AddUtils.themed("STORAGE_INPUT",Material.BLUE_STAINED_GLASS,AddUtils.Theme.CARGO1,
- Language.get("Cargo.STORAGE_INPUT.Name"),Language.getList("Cargo.STORAGE_INPUT.Lore"));
- public static final SlimefunItemStack STORAGE_OUTPUT=AddUtils.themed("STORAGE_OUTPUT",Material.RED_STAINED_GLASS,AddUtils.Theme.CARGO1,
- Language.get("Cargo.STORAGE_OUTPUT.Name"),Language.getList("Cargo.STORAGE_OUTPUT.Lore"));
- public static final SlimefunItemStack BIFILTER=AddUtils.themed("BIFILTER",Material.PRISMARINE,AddUtils.Theme.ITEM1,
- Language.get("Cargo.BIFILTER.Name"),Language.getList("Cargo.BIFILTER.Lore"));
- public static final SlimefunItemStack QUARFILTER=AddUtils.themed("QUARFILTER",Material.PRISMARINE_BRICKS,AddUtils.Theme.ITEM1,
- Language.get("Cargo.QUARFILTER.Name"),Language.getList("Cargo.QUARFILTER.Lore"));
- public static final SlimefunItemStack OCTAFILTER=AddUtils.themed("OCTAFILTER",Material.DARK_PRISMARINE,AddUtils.Theme.ITEM1,
- Language.get("Cargo.OCTAFILTER.Name"),Language.getList("Cargo.OCTAFILTER.Lore"));
- //multiblock
- public static final SlimefunItemStack PORTAL_CORE=AddUtils.themed("PORTAL_CORE",Material.CRYING_OBSIDIAN,AddUtils.Theme.MULTIBLOCK1,
- Language.get("MultiBlock.PORTAL_CORE.Name"),Language.getList("MultiBlock.PORTAL_CORE.Lore"));
- public static final SlimefunItemStack PORTAL_FRAME=AddUtils.themed("PORTAL_FRAME",Material.IRON_BLOCK,AddUtils.Theme.MULTIBLOCK2,
- Language.get("MultiBlock.PORTAL_FRAME.Name"),Language.getList("MultiBlock.PORTAL_FRAME.Lore"));
- public static final SlimefunItemStack SOLAR_REACTOR=AddUtils.themed("SOLAR_REACTOR",Material.LODESTONE,AddUtils.Theme.MULTIBLOCK1,
- Language.get("MultiBlock.SOLAR_REACTOR.Name"),Language.getList("MultiBlock.SOLAR_REACTOR.Lore"));
- public static final SlimefunItemStack SOLAR_REACTOR_FRAME=AddUtils.themed("SOLAR_REACTOR_FRAME",Material.CHISELED_QUARTZ_BLOCK,AddUtils.Theme.MULTIBLOCK2,
- Language.get("MultiBlock.SOLAR_REACTOR_FRAME.Name"),Language.getList("MultiBlock.SOLAR_REACTOR_FRAME.Lore"));
- public static final SlimefunItemStack SOLAR_REACTOR_GLASS=AddUtils.themed("SOLAR_REACTOR_GLASS",Material.TINTED_GLASS,AddUtils.Theme.MULTIBLOCK2,
- Language.get("MultiBlock.SOLAR_REACTOR_GLASS.Name"),Language.getList("MultiBlock.SOLAR_REACTOR_GLASS.Lore"));
- public static final SlimefunItemStack SOLAR_INPUT=AddUtils.themed("SOLAR_INPUT",Material.WAXED_OXIDIZED_COPPER,AddUtils.Theme.MULTIBLOCK2,
- Language.get("MultiBlock.SOLAR_INPUT.Name"),Language.getList("MultiBlock.SOLAR_INPUT.Lore"));
- public static final SlimefunItemStack SOLAR_OUTPUT=AddUtils.themed("SOLAR_OUTPUT",Material.WAXED_COPPER_BLOCK,AddUtils.Theme.MULTIBLOCK2,
- Language.get("MultiBlock.SOLAR_OUTPUT.Name"),Language.getList("MultiBlock.SOLAR_OUTPUT.Lore"));
- public static final SlimefunItemStack TRANSMUTATOR_FRAME=AddUtils.themed("TRANSMUTATOR_FRAME",Material.SMOOTH_STONE, AddUtils.Theme.MULTIBLOCK2,
- Language.get("MultiBlock.TRANSMUTATOR_FRAME.Name"),Language.getList("MultiBlock.TRANSMUTATOR_FRAME.Lore"));
- public static final SlimefunItemStack TRANSMUTATOR_GLASS=AddUtils.themed("TRANSMUTATOR_GLASS",Material.LIGHT_GRAY_STAINED_GLASS,AddUtils.Theme.MULTIBLOCK2,
- Language.get("MultiBlock.TRANSMUTATOR_GLASS.Name"),Language.getList("MultiBlock.TRANSMUTATOR_GLASS.Lore"));
- public static final SlimefunItemStack TRANSMUTATOR_ROD=AddUtils.themed("TRANSMUTATOR_ROD",Material.REINFORCED_DEEPSLATE,AddUtils.Theme.MULTIBLOCK2,
- Language.get("MultiBlock.TRANSMUTATOR_ROD.Name"),Language.getList("MultiBlock.TRANSMUTATOR_ROD.Lore"));
- public static final SlimefunItemStack TRANSMUTATOR=AddUtils.themed("TRANSMUTATOR",Material.FURNACE,AddUtils.Theme.MULTIBLOCK1,
- Language.get("MultiBlock.TRANSMUTATOR.Name"),Language.getList("MultiBlock.TRANSMUTATOR.Lore"));
- public static final SlimefunItemStack FINAL_BASE=AddUtils.themed("FINAL_BASE",Material.POLISHED_DEEPSLATE,AddUtils.Theme.MULTIBLOCK1,
- Language.get("MultiBlock.FINAL_BASE.Name"),Language.getList("MultiBlock.FINAL_BASE.Lore"));
- public static final SlimefunItemStack FINAL_ALTAR=AddUtils.themed("FINAL_ALTAR",Material.CHISELED_DEEPSLATE,AddUtils.Theme.MULTIBLOCK2,
- Language.get("MultiBlock.FINAL_ALTAR.Name"),Language.getList("MultiBlock.FINAL_ALTAR.Lore"));
-
- //feat
- public static final SlimefunItemStack CUSTOM1=
- AddUtils.themed("CUSTOM1",new ItemStack(Material.COMMAND_BLOCK),AddUtils.Theme.ITEM1,"测试物件1","只是一个简单的测试");
- public static final SlimefunItemStack MACHINE1=
- AddUtils.themed("MACHINE1",new ItemStack(Material.FURNACE),AddUtils.Theme.MACHINE1,"测试机器1","tnnd对照组");
- public static final SlimefunItemStack MACHINE2=
- AddUtils.themed("MACHINE2",new ItemStack(Material.FURNACE),AddUtils.Theme.MACHINE1,"测试机2","tnnd实验组");
- public static final SlimefunItemStack MACHINE3=
- AddUtils.themed("MACHINE3",new ItemStack(Material.FURNACE),AddUtils.Theme.MACHINE1,"测试机3","tnnd测试组 AbstractProcessor");
- public static final SlimefunItemStack MACHINE4=
- AddUtils.themed("MACHINE4",new ItemStack(Material.FURNACE),AddUtils.Theme.MACHINE1,"测试机4","tnnd测试组 AbstractAdvancedProcessor");
- public static final SlimefunItemStack SMG1=
- AddUtils.themed("SMG1",new ItemStack(Material.DIAMOND_BLOCK),AddUtils.Theme.MACHINE2,"测试生成器1","测测我的");
- public static final SlimefunItemStack MMG1=
- AddUtils.themed("MMG1",new ItemStack(Material.EMERALD_BLOCK),AddUtils.Theme.MACHINE2,"定向生成器1","测测我的");
- public static final SlimefunItemStack MANUAL1=
- AddUtils.themed("MANUAL1",new ItemStack(Material.CRAFTING_TABLE),AddUtils.Theme.MANUAL1,"测试快捷机器","强化工作台");
- public static final SlimefunItemStack MANUAL_MULTI=
- AddUtils.themed("MANUAL_MULTI",new ItemStack(Material.CRAFTING_TABLE),AddUtils.Theme.MANUAL1,"测试快捷机器","多方块机器");
- public static final SlimefunItemStack MANUAL_KILL=
- AddUtils.themed("MANUAL_KILL",new ItemStack(Material.RESPAWN_ANCHOR),AddUtils.Theme.MANUAL1,"测试快捷机器","击杀掉落");
- public static final SlimefunItemStack MANUAL_INF=
- AddUtils.themed("MANUAL_INF",new ItemStack(Material.RESPAWN_ANCHOR),AddUtils.Theme.MANUAL1,"测试快捷机器","无尽工作台");
- public static final SlimefunItemStack MANUAL_MOB=
- AddUtils.themed("MANUAL_MOB",new ItemStack(Material.LODESTONE),AddUtils.Theme.MANUAL1,"测试快捷机器","无尽芯片注入");
- public static final SlimefunItemStack MANUAL_NTWBENCH=
- AddUtils.themed("MANUAL_NTWBENCH",new ItemStack(Material.DRIED_KELP_BLOCK),AddUtils.Theme.MANUAL1,"测试快捷机器","网络工作台");
- public static final SlimefunItemStack AUTOSMELTING1=
- AddUtils.themed("AUTOCRAFT_SMELT",new ItemStack(Material.FURNACE),AddUtils.Theme.MANUAL1,"测试AutoCraft","冶炼炉");
- public static final SlimefunItemStack AUTO_INF=
- AddUtils.themed("AUTOCRAFT_INF",new ItemStack(Material.RESPAWN_ANCHOR),AddUtils.Theme.MANUAL1,"测试定向合成机","无尽工作台");
-
-// public static final SlimefunItemStack INPORT=
-// AddUtils.themed("INPORT",new ItemStack(Material.END_STONE),AddUtils.Theme.CARGO1,"存入接口","较快的将物品存入奇点...");
-// public static final SlimefunItemStack OUTPORT=
-// AddUtils.themed("OUTPORT",new ItemStack(Material.END_STONE),AddUtils.Theme.CARGO1,"取出接口","较快的将物品取出奇点...");
- public static final SlimefunItemStack TESTUNIT1=
- AddUtils.themed("TESTUNIT1",new ItemStack(Material.GLASS),AddUtils.Theme.CARGO1,"测试存储单元","啥用都没");
- public static final SlimefunItemStack TESTUNIT2=
- AddUtils.themed("TESTUNIT2",new ItemStack(Material.GLASS),AddUtils.Theme.CARGO1,"测试存储单元2","啥用都没");
- public static final SlimefunItemStack TESTUNIT3=
- AddUtils.themed("TESTUNIT3",new ItemStack(Material.GLASS),AddUtils.Theme.CARGO1,"测试存储单元3","啥用都没");
- public static final SlimefunItemStack AUTO_SPECIAL=
- AddUtils.themed("AUTOCRAFT_SPECIAL",new ItemStack(Material.LOOM),AddUtils.Theme.MACHINE2,"测试特殊合成机","测试测试");
- public static final SlimefunItemStack AUTO_MULTIBLOCK=
- AddUtils.themed("AUTOCRAFT_MULTIBLOCK",new ItemStack(Material.BRICKS),AddUtils.Theme.MANUAL1,"测试快捷多方块","测试测试");
- public static final SlimefunItemStack ANTIGRAVITY=
- AddUtils.themed("ANTI_GRAVITY_ITEM",new ItemStack(Material.NETHERITE_INGOT),AddUtils.Theme.ITEM1,"反重力装置","测试测试");
- public static final SlimefunItemStack WORKBENCH1=
- AddUtils.themed("WORKBENCH1",new ItemStack(Material.ENCHANTING_TABLE),AddUtils.Theme.BENCH1,"测试工作站","测试测试");
- //final
- public static final SlimefunItemStack FINAL_SEQUENTIAL=AddUtils.themed("FINAL_SEQUENTIAL",Material.STRIPPED_BAMBOO_BLOCK,AddUtils.Theme.MACHINE1,
- Language.get("Machines.FINAL_SEQUENTIAL.Name"),Language.getList("Machines.FINAL_SEQUENTIAL.Lore"));
-
- public static final SlimefunItemStack FINAL_STACKMACHINE=AddUtils.themed("FINAL_STACKMACHINE",Material.BLAST_FURNACE,AddUtils.Theme.MACHINE1,
- Language.get("Machines.FINAL_STACKMACHINE.Name"),Language.getList("Machines.FINAL_STACKMACHINE.Lore"));
- public static final SlimefunItemStack FINAL_STACKMGENERATOR=AddUtils.themed("FINAL_STACKMGENERATOR",Material.POLISHED_ANDESITE,AddUtils.Theme.MACHINE2,
- Language.get("Generators.FINAL_STACKMGENERATOR.Name"),Language.getList("Generators.FINAL_STACKMGENERATOR.Lore"));
- public static final SlimefunItemStack FINAL_STONE_MG=AddUtils.themed("FINAL_STONE_MG",Material.DEEPSLATE_TILES,AddUtils.Theme.MACHINE2,
- Language.get("Generators.FINAL_STONE_MG.Name"),Language.getList("Generators.FINAL_STONE_MG.Lore"));
-
- public static final SlimefunItemStack TESTPART=AddUtils.themed("TEST_MPART",Material.OBSIDIAN,AddUtils.Theme.MACHINE1,"测试多方块部件","测试测试");
- public static final SlimefunItemStack TESTCORE=AddUtils.themed("TEST_MCORE",Material.IRON_BLOCK,AddUtils.Theme.MACHINE1,"测试多方块核心","测试测试");
- public static final SlimefunItemStack TEST_SEQ=AddUtils.themed("TEST_SEQ",Material.LOOM,AddUtils.Theme.MACHINE1,
- Language.get("Items.TEST_SEQ.Name"),Language.getList("Items.TEST_SEQ.Lore"));
-
- //tmp占位符
- public static final SlimefunItemStack TMP1= new SlimefunItemStack("TMP1",Material.STONE,"&b占位符","&7暂未开发");
- public static final SlimefunItemStack RESOLVE_FAILED=AddUtils.themed("RESOLVE_FAILED",Material.STRUCTURE_VOID,AddUtils.Theme.NONE,
- Language.get("Items.RESOLVE_FAILED.Name"),Language.getList("Items.RESOLVE_FAILED.Lore"));
- public static final SlimefunItemStack SHELL=AddUtils.themed("SHELL",Material.BOOK,AddUtils.Theme.ITEM1,
- Language.get("Items.SHELL.Name"),Language.getList("Items.SHELL.Lore"));
- public static final HashSet ADDGLOW=new HashSet<>(){{
- add(RESOLVE_FAILED);
- add(BUG);
- add(INFO);
- add(BEYOND);
- add(TRUE_);
- add(CHIP_INGOT);
- add(PARADOX);
- add(NOLOGIC);
- add(DIMENSIONAL_SHARD);
- add(WORLD_FEAT);
- add(NETHER_FEAT);
- add(END_FEAT);
- add(REINFORCED_CHIP_INGOT);
- add(ABSTRACT_INGOT);
- add(STAR_GOLD_INGOT);
- add(METAL_CORE);
- add(TECH_CORE);
- add(SMELERY_CORE);
- add(MASS_CORE);
- add(PORTAL_FRAME);
- add(LSINGULARITY);
- add(ATOM_INGOT);
- add(PAGOLD);
- add(BISILVER);
- add(STACKFRAME);
- add(MULTIBLOCK_MANUAL);
- add(ADVANCED_CHIP_MAKER);
- add(ADV_ADJACENT_CARGO);
- add(ADV_REMOTE_CARGO);
- add(ADV_LINE_CARGO);
- add(ENERGY_AMPLIFIER);
- add(MORE2);
- add(INF_MOBSIMULATION);
- add(ENTITY_FEAT);
- add(WITHERPROOF_REDSTONE);
- add(WITHERPROOF_REDS);
- add(BEDROCK_BREAKER);
- }};
-}
+package me.matl114.logitech.SlimefunItem;
+
+import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
+import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems;
+import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack;
+import me.matl114.logitech.Items.CustomHead;
+import me.matl114.logitech.Language;
+import me.matl114.logitech.Utils.AddUtils;
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
+
+import java.util.HashSet;
+
+public class AddItem {
+
+ public static void registerItemStack(){
+ for (ItemStack it :ADDGLOW){
+ AddUtils.addGlow(it);
+ }
+ AddUtils.hideAllFlags(CARGO_CONFIG);
+ AddUtils.hideAllFlags(ENTITY_FEAT);
+ }
+
+ //Groups
+ public static final ItemStack ROOT=new CustomItemStack(Material.BUDDING_AMETHYST,
+ Language.get("Groups.ROOT.Name"),Language.getList("Groups.ROOT.Lore"));
+ public static final ItemStack INFO=AddUtils.themed(Material.PAPER,AddUtils.Theme.INFO1,
+ Language.get("Groups.INFO.Name"), Language.getList("Groups.INFO.Lore"));
+ public static final ItemStack MATERIAL=AddUtils.themed(Material.END_CRYSTAL,AddUtils.Theme.CATEGORY2,
+ Language.get("Groups.MATERIAL.Name"), Language.getList("Groups.MATERIAL.Lore"));
+ public static final ItemStack INFO1=AddUtils.themed(Material.PAPER,AddUtils.Theme.NONE,
+ Language.get("Groups.INFO1.Name"), Language.getList("Groups.INFO1.Lore"));
+ public static final ItemStack INFO2=AddUtils.themed(Material.PAPER,AddUtils.Theme.NONE,
+ Language.get("Groups.INFO2.Name"), Language.getList("Groups.INFO2.Lore"));
+ public static final ItemStack INFO3=AddUtils.themed(Material.PAPER,AddUtils.Theme.NONE,
+ Language.get("Groups.INFO3.Name"), Language.getList("Groups.INFO3.Lore"));
+ public static final ItemStack INFO4=AddUtils.themed(Material.PAPER,AddUtils.Theme.NONE,
+ Language.get("Groups.INFO4.Name"), Language.getList("Groups.INFO4.Lore"));
+ public static final ItemStack INFO5=AddUtils.themed(Material.PAPER,AddUtils.Theme.NONE,
+ Language.get("Groups.INFO5.Name"), Language.getList("Groups.INFO5.Lore"));
+ public static final ItemStack INFO6=AddUtils.themed(Material.PAPER,AddUtils.Theme.NONE,
+ Language.get("Groups.INFO6.Name"), Language.getList("Groups.INFO6.Lore"));
+ public static final ItemStack URL=AddUtils.themed(Material.BOOK,AddUtils.Theme.NONE,
+ Language.get("Groups.URL.Name"), Language.getList("Groups.URL.Lore"));
+ public static final ItemStack ALLMACHINE=AddUtils.themed(Material.BLAST_FURNACE,AddUtils.Theme.MENU1,
+ Language.get("Groups.ALLMACHINE.Name"), Language.getList("Groups.ALLMACHINE.Lore"));
+ public static final ItemStack ALLRECIPE=AddUtils.themed(Material.KNOWLEDGE_BOOK,AddUtils.Theme.MENU1,
+ Language.get("Groups.ALLRECIPE.Name"), Language.getList("Groups.ALLRECIPE.Lore"));
+ public static final ItemStack BASIC=AddUtils.themed(Material.FURNACE,AddUtils.Theme.CATEGORY2,
+ Language.get("Groups.BASIC.Name"),Language.getList("Groups.BASIC.Lore") );
+ public static final ItemStack ALLBIGRECIPES =AddUtils.themed(Material.LODESTONE, AddUtils.Theme.CATEGORY2,
+ Language.get("Groups.ALLBIGRECIPES.Name"),Language.getList("Groups.ALLBIGRECIPES.Lore"));
+ public static final ItemStack CARGO=AddUtils.themed(Material.BAMBOO_CHEST_RAFT,AddUtils.Theme.CATEGORY2,
+ Language.get("Groups.CARGO.Name"),Language.getList("Groups.CARGO.Lore"));
+ public static final ItemStack SINGULARITY=AddUtils.themed(Material.NETHER_STAR,AddUtils.Theme.CATEGORY2,
+ Language.get("Groups.SINGULARITY.Name"),Language.getList("Groups.SINGULARITY.Lore"));
+ public static final ItemStack ADVANCED=AddUtils.themed(Material.BEACON,AddUtils.Theme.CATEGORY2,
+ Language.get("Groups.ADVANCED.Name"),Language.getList("Groups.ADVANCED.Lore"));
+ public static final ItemStack BEYOND=AddUtils.themed(Material.REPEATING_COMMAND_BLOCK,AddUtils.Theme.CATEGORY2,
+ Language.get("Groups.BEYOND.Name"),Language.getList("Groups.BEYOND.Lore"));
+ public static final ItemStack VANILLA=AddUtils.themed(Material.OBSERVER,AddUtils.Theme.CATEGORY2,
+ Language.get("Groups.VANILLA.Name"),Language.getList("Groups.VANILLA.Lore"));
+ public static final ItemStack MANUAL=AddUtils.themed(Material.CRAFTING_TABLE,AddUtils.Theme.CATEGORY2,
+ Language.get("Groups.MANUAL.Name"),Language.getList("Groups.MANUAL.Lore") );
+ public static final ItemStack SPECIAL=AddUtils.themed(Material.SCULK_CATALYST,AddUtils.Theme.CATEGORY2,
+ Language.get("Groups.SPECIAL.Name"),Language.getList("Groups.SPECIAL.Lore"));
+ //public static final ItemStack TEMPLATE=AddUtils.themed()
+ public static final ItemStack TOBECONTINUE=AddUtils.themed(Material.STRUCTURE_VOID,AddUtils.Theme.CATEGORY2,
+ Language.get("Groups.TOBECONTINUE.Name"),Language.getList("Groups.TOBECONTINUE.Lore"));
+ public static final ItemStack SPACE =AddUtils.themed(Material.TOTEM_OF_UNDYING, AddUtils.Theme.CATEGORY2,
+ Language.get("Groups.SPACE.Name"),Language.getList("Groups.SPACE.Lore"));
+ public static final ItemStack GENERATORS=AddUtils.themed(Material.LAVA_BUCKET, AddUtils.Theme.CATEGORY2,
+ Language.get("Groups.GENERATORS.Name"),Language.getList("Groups.GENERATORS.Lore"));
+ public static final ItemStack ENERGY=AddUtils.themed(Material.LIGHTNING_ROD, AddUtils.Theme.CATEGORY2,
+ Language.get("Groups.ENERGY.Name"),Language.getList("Groups.ENERGY.Lore"));
+ public static final ItemStack FUNCTIONAL=AddUtils.themed(Material.STRUCTURE_VOID, AddUtils.Theme.CATEGORY2,
+ Language.get("Groups.FUNCTIONAL.Name"),Language.getList("Groups.FUNCTIONAL.Lore"));
+ public static final ItemStack UPDATELOG=AddUtils.themed(Material.WRITABLE_BOOK,AddUtils.Theme.NONE,
+ Language.get("Groups.UPDATELOG.Name"), Language.getList("Groups.UPDATELOG.Lore"));
+ public static final ItemStack MORE2=AddUtils.themed("MORE2",Material.WRITABLE_BOOK, AddUtils.Theme.NONE,
+ Language.get("Groups.MORE2.Name"),Language.getList("Groups.MORE2.Lore"));
+ //feat
+ public static final ItemStack FEAT1=AddUtils.themed(Material.BOOK, AddUtils.Theme.NONE,
+ Language.get("Groups.FEAT1.Name"),Language.getList("Groups.FEAT1.Lore"));
+ public static final ItemStack FEAT2=AddUtils.themed(Material.BOOK, AddUtils.Theme.NONE,
+ Language.get("Groups.FEAT2.Name"),Language.getList("Groups.FEAT2.Lore"));
+ public static final ItemStack FEAT3=AddUtils.themed(Material.BOOK, AddUtils.Theme.NONE,
+ Language.get("Groups.FEAT3.Name"),Language.getList("Groups.FEAT3.Lore"));
+ public static final ItemStack FEAT4=AddUtils.themed(Material.BOOK, AddUtils.Theme.NONE,
+ Language.get("Groups.FEAT4.Name"),Language.getList("Groups.FEAT4.Lore"));
+ public static final ItemStack FEAT5=AddUtils.themed(Material.BOOK, AddUtils.Theme.NONE,
+ Language.get("Groups.FEAT5.Name"),Language.getList("Groups.FEAT5.Lore"));
+ public static final ItemStack FEAT6=AddUtils.themed(Material.BOOK, AddUtils.Theme.NONE,
+ Language.get("Groups.FEAT6.Name"),Language.getList("Groups.FEAT6.Lore"));
+ public static final ItemStack FEAT7=AddUtils.themed(Material.BOOK, AddUtils.Theme.NONE,
+ Language.get("Groups.FEAT7.Name"),Language.getList("Groups.FEAT7.Lore"));
+ public static final ItemStack FEAT8=AddUtils.themed(Material.BOOK, AddUtils.Theme.NONE,
+ Language.get("Groups.FEAT8.Name"),Language.getList("Groups.FEAT8.Lore"));
+ public static final ItemStack FEAT9=AddUtils.themed(Material.BOOK, AddUtils.Theme.NONE,
+ Language.get("Groups.FEAT9.Name"),Language.getList("Groups.FEAT9.Lore"));
+
+
+ //items
+ public static final SlimefunItemStack ENTITY_FEAT=AddUtils.themed("ENTITY_FEAT",Material.SPAWNER,AddUtils.Theme.ITEM1,
+ Language.get("Items.ENTITY_FEAT.Name"),Language.getList("Items.ENTITY_FEAT.Lore"));
+ public static final SlimefunItemStack BUG= AddUtils.themed("BUG", Material.BONE_MEAL, AddUtils.Theme.ITEM1,
+ Language.get("Items.BUG.Name"),Language.getList("Items.BUG.Lore"));
+ public static final SlimefunItemStack MATL114 = AddUtils.themed("MATL114", CustomHead.MATL114.getItem(), AddUtils.Theme.ITEM1,
+ Language.get("Items.MATL114.Name"),Language.getList("Items.MATL114.Lore"));
+ public static final SlimefunItemStack CHIP_INGOT=AddUtils.themed("CHIP_INGOT",Material.BAKED_POTATO,AddUtils.Theme.ITEM1,
+ Language.get("Items.CHIP_INGOT.Name"),Language.getList("Items.CHIP_INGOT.Lore"));
+ public static final SlimefunItemStack TITANIUM_INGOT=AddUtils.themed("TITANIUM_INGOT",Material.IRON_INGOT,AddUtils.Theme.ITEM1,
+ Language.get("Items.TITANIUM_INGOT.Name"),Language.getList("Items.TITANIUM_INGOT.Lore"));
+ public static final SlimefunItemStack TUNGSTEN_INGOT=AddUtils.themed("TUNGSTEN_INGOT",Material.NETHERITE_INGOT,AddUtils.Theme.ITEM1,
+ Language.get("Items.TUNGSTEN_INGOT.Name"),Language.getList("Items.TUNGSTEN_INGOT.Lore"));
+ public static final SlimefunItemStack LOGIC= AddUtils.themed("LOGIC",Material.STRING,AddUtils.Theme.ITEM1,
+ Language.get("Items.LOGIC.Name"),Language.getList("Items.LOGIC.Lore"));
+ public static final SlimefunItemStack TRUE_ =AddUtils.themed("TRUE_",Material.MUSIC_DISC_5,AddUtils.Theme.ITEM1,
+ Language.get("Items.TRUE_.Name"),Language.getList("Items.TRUE_.Lore"));
+ public static final SlimefunItemStack FALSE_ =AddUtils.themed("FALSE_",Material.MUSIC_DISC_5,AddUtils.Theme.ITEM1,
+ Language.get("Items.FALSE_.Name"),Language.getList("Items.FALSE_.Lore"));
+ public static final SlimefunItemStack LOGIGATE=AddUtils.themed("LOGIGATE",Material.COMPARATOR,AddUtils.Theme.ITEM1,
+ Language.get("Items.LOGIGATE.Name"),Language.getList("Items.LOGIGATE.Lore"));
+ //generated items
+ public static final SlimefunItemStack EXISTE=AddUtils.themed("EXISTE",Material.SLIME_BALL,AddUtils.Theme.ITEM1,
+ Language.get("Items.EXISTE.Name"),Language.getList("Items.EXISTE.Lore"));
+ public static final SlimefunItemStack UNIQUE=AddUtils.themed("UNIQUE",Material.MAGMA_CREAM,AddUtils.Theme.ITEM1,
+ Language.get("Items.UNIQUE.Name"),Language.getList("Items.UNIQUE.Lore"));
+ public static final SlimefunItemStack PARADOX=AddUtils.themed("PARADOX",Material.NAUTILUS_SHELL,AddUtils.Theme.ITEM1,
+ Language.get("Items.PARADOX.Name"),Language.getList("Items.PARADOX.Lore"));
+ public static final SlimefunItemStack NOLOGIC=AddUtils.themed("NOLOGIC",Material.STRING,AddUtils.Theme.ITEM1,
+ Language.get("Items.NOLOGIC.Name"),Language.getList("Items.NOLOGIC.Lore"));
+ public static final SlimefunItemStack LENGINE=AddUtils.themed("LENGINE",Material.MAGENTA_GLAZED_TERRACOTTA,AddUtils.Theme.ITEM1,
+ Language.get("Items.LENGINE.Name"),Language.getList("Items.LENGINE.Lore"));
+ public static final SlimefunItemStack LFIELD=AddUtils.themed("LFIELD",Material.END_CRYSTAL,AddUtils.Theme.ITEM1,
+ Language.get("Items.LFIELD.Name"),Language.getList("Items.LFIELD.Lore"));
+ public static final SlimefunItemStack LSCHEDULER=AddUtils.themed("LSCHEDULER",Material.RECOVERY_COMPASS,AddUtils.Theme.ITEM1,
+ Language.get("Items.LSCHEDULER.Name"),Language.getList("Items.LSCHEDULER.Lore"));
+ public static final SlimefunItemStack LCRAFT=AddUtils.themed("LCRAFT",Material.CONDUIT,AddUtils.Theme.ITEM1,
+ Language.get("Items.LCRAFT.Name"),Language.getList("Items.LCRAFT.Lore"));
+ public static final SlimefunItemStack LDIGITIZER=AddUtils.themed("LDIGITIZER",Material.TARGET,AddUtils.Theme.ITEM1,
+ Language.get("Items.LDIGITIZER.Name"),Language.getList("Items.LDIGITIZER.Lore"));
+ public static final SlimefunItemStack LBOOLIZER=AddUtils.themed("LBOOLIZER",Material.LEVER,AddUtils.Theme.ITEM1,
+ Language.get("Items.LBOOLIZER.Name"),Language.getList("Items.LBOOLIZER.Lore"));
+ public static final SlimefunItemStack LIOPORT=AddUtils.themed("LIOPORT",Material.CALIBRATED_SCULK_SENSOR,AddUtils.Theme.ITEM1,
+ Language.get("Items.LIOPORT.Name"),Language.getList("Items.LIOPORT.Lore"));
+ public static final SlimefunItemStack PALLADIUM_INGOT=AddUtils.themed("PALLADIUM_INGOT",Material.COPPER_INGOT,AddUtils.Theme.ITEM1,
+ Language.get("Items.PALLADIUM_INGOT.Name"),Language.getList("Items.PALLADIUM_INGOT.Lore"));
+ public static final SlimefunItemStack PLATINUM_INGOT=AddUtils.themed("PLATINUM_INGOT",Material.GOLD_INGOT,AddUtils.Theme.ITEM1,
+ Language.get("Items.PLATINUM_INGOT.Name"),Language.getList("Items.PLATINUM_INGOT.Lore"));
+ public static final SlimefunItemStack MOLYBDENUM=AddUtils.themed("MOLYBDENUM",Material.GUNPOWDER,AddUtils.Theme.ITEM1,
+ Language.get("Items.MOLYBDENUM.Name"),Language.getList("Items.MOLYBDENUM.Lore"));
+ public static final SlimefunItemStack CERIUM=AddUtils.themed("CERIUM",Material.GUNPOWDER,AddUtils.Theme.ITEM1,
+ Language.get("Items.CERIUM.Name"),Language.getList("Items.CERIUM.Lore"));
+ public static final SlimefunItemStack CADMIUM_INGOT=AddUtils.themed("CADMIUM_INGOT",Material.NETHERITE_INGOT,AddUtils.Theme.ITEM1,
+ Language.get("Items.CADMIUM_INGOT.Name"),Language.getList("Items.CADMIUM_INGOT.Lore"));
+ public static final SlimefunItemStack MENDELEVIUM=AddUtils.themed("MENDELEVIUM",Material.GLOWSTONE_DUST,AddUtils.Theme.ITEM1,
+ Language.get("Items.MENDELEVIUM.Name"),Language.getList("Items.MENDELEVIUM.Lore"));
+ public static final SlimefunItemStack DYSPROSIUM=AddUtils.themed("DYSPROSIUM",Material.REDSTONE,AddUtils.Theme.ITEM1,
+ Language.get("Items.DYSPROSIUM.Name"),Language.getList("Items.DYSPROSIUM.Lore"));
+ public static final SlimefunItemStack BISMUTH_INGOT=AddUtils.themed("BISMUTH_INGOT",Material.IRON_INGOT,AddUtils.Theme.ITEM1,
+ Language.get("Items.BISMUTH_INGOT.Name"),Language.getList("Items.BISMUTH_INGOT.Lore"));
+ public static final SlimefunItemStack ANTIMONY_INGOT=AddUtils.themed("ANTIMONY_INGOT",Material.IRON_INGOT,AddUtils.Theme.ITEM1,
+ Language.get("Items.ANTIMONY_INGOT.Name"),Language.getList("Items.ANTIMONY_INGOT.Lore"));
+ public static final SlimefunItemStack BORON=AddUtils.themed("BORON",Material.CLAY_BALL,AddUtils.Theme.ITEM1,
+ Language.get("Items.BORON.Name"),Language.getList("Items.BORON.Lore"));
+ public static final SlimefunItemStack THALLIUM=AddUtils.themed("THALLIUM",Material.BRICK,AddUtils.Theme.ITEM1,
+ Language.get("Items.THALLIUM.Name"),Language.getList("Items.THALLIUM.Lore"));
+ public static final SlimefunItemStack HYDRAGYRUM=AddUtils.themed("HYDRAGYRUM",Material.PRISMARINE_CRYSTALS,AddUtils.Theme.ITEM1,
+ Language.get("Items.HYDRAGYRUM.Name"),Language.getList("Items.HYDRAGYRUM.Lore"));
+ public static final SlimefunItemStack HGTLPBBI=AddUtils.themed("HGTLPBBI",CustomHead.SUPPORTER2.getItem(), AddUtils.Theme.ITEM1,
+ Language.get("Items.HGTLPBBI.Name"),Language.getList("Items.HGTLPBBI.Lore"));
+ public static final SlimefunItemStack DIMENSIONAL_SHARD=AddUtils.themed("DIMENSIONAL_SHARD",Material.PRISMARINE_SHARD,AddUtils.Theme.ITEM1,
+ Language.get("Items.DIMENSIONAL_SHARD.Name"),Language.getList("Items.DIMENSIONAL_SHARD.Lore"));
+ public static final SlimefunItemStack STAR_GOLD=AddUtils.themed("STAR_GOLD",Material.NETHER_STAR,AddUtils.Theme.ITEM1,
+ Language.get("Items.STAR_GOLD.Name"),Language.getList("Items.STAR_GOLD.Lore"));
+ public static final SlimefunItemStack VIRTUAL_SPACE=AddUtils.themed("VIRTUAL_SPACE",CustomHead.VSPACE.getItem(), AddUtils.Theme.ITEM1,
+ Language.get("Items.VIRTUAL_SPACE.Name"),Language.getList("Items.VIRTUAL_SPACE.Lore"));
+ public static final SlimefunItemStack WORLD_FEAT=AddUtils.themed("WORLD_FEAT",Material.GRASS_BLOCK,AddUtils.Theme.ITEM1,
+ Language.get("Items.WORLD_FEAT.Name"),Language.getList("Items.WORLD_FEAT.Lore"));
+ public static final SlimefunItemStack NETHER_FEAT=AddUtils.themed("NETHER_FEAT",Material.NETHERITE_SCRAP,AddUtils.Theme.ITEM1,
+ Language.get("Items.NETHER_FEAT.Name"),Language.getList("Items.NETHER_FEAT.Lore"));
+ public static final SlimefunItemStack END_FEAT=AddUtils.themed("END_FEAT",Material.CHORUS_PLANT,AddUtils.Theme.ITEM1,
+ Language.get("Items.END_FEAT.Name"),Language.getList("Items.END_FEAT.Lore"));
+ public static final SlimefunItemStack STACKFRAME=AddUtils.themed("STACKFRAME",Material.BEDROCK,AddUtils.Theme.ITEM1,
+ Language.get("Items.STACKFRAME.Name"),Language.getList("Items.STACKFRAME.Lore"));
+
+ public static final SlimefunItemStack STAR_GOLD_INGOT=AddUtils.themed("STAR_GOLD_INGOT",Material.GOLD_INGOT,AddUtils.Theme.ITEM1,
+ Language.get("Items.STAR_GOLD_INGOT.Name"),Language.getList("Items.STAR_GOLD_INGOT.Lore"));
+ public static final SlimefunItemStack ABSTRACT_INGOT=AddUtils.themed("ABSTRACT_INGOT",Material.IRON_INGOT,AddUtils.Theme.ITEM1,
+ Language.get("Items.ABSTRACT_INGOT.Name"),Language.getList("Items.ABSTRACT_INGOT.Lore"));
+ public static final SlimefunItemStack PDCECDMD=AddUtils.themed("PDCECDMD",CustomHead.BUSHIGEMEN.getItem(), AddUtils.Theme.ITEM1,
+ Language.get("Items.PDCECDMD.Name"),Language.getList("Items.PDCECDMD.Lore"));
+ public static final SlimefunItemStack REINFORCED_CHIP_INGOT=AddUtils.themed("REINFORCED_CHIP_INGOT",Material.POISONOUS_POTATO,AddUtils.Theme.ITEM1,
+ Language.get("Items.REINFORCED_CHIP_INGOT.Name"),Language.getList("Items.REINFORCED_CHIP_INGOT.Lore"));
+ public static final SlimefunItemStack ATOM_INGOT=AddUtils.themed("ATOM_INGOT",Material.ECHO_SHARD,AddUtils.Theme.ITEM1,
+ Language.get("Items.ATOM_INGOT.Name"),Language.getList("Items.ATOM_INGOT.Lore"));
+
+ public static final SlimefunItemStack LMOTOR=AddUtils.themed("LMOTOR",CustomHead.MOTOR.getItem(),AddUtils.Theme.ITEM1,
+ Language.get("Items.LMOTOR.Name"),Language.getList("Items.LMOTOR.Lore"));
+ public static final SlimefunItemStack LPLATE=AddUtils.themed("LPLATE",Material.PAPER,AddUtils.Theme.ITEM1,
+ Language.get("Items.LPLATE.Name"),Language.getList("Items.LPLATE.Lore"));
+ public static final SlimefunItemStack METAL_CORE=AddUtils.themed("METAL_CORE",Material.NETHERITE_BLOCK,AddUtils.Theme.ITEM1,
+ Language.get("Items.METAL_CORE.Name"),Language.getList("Items.METAL_CORE.Lore"));
+ public static final SlimefunItemStack SMELERY_CORE=AddUtils.themed("SMELERY_CORE",Material.IRON_BLOCK,AddUtils.Theme.ITEM1,
+ Language.get("Items.SMELERY_CORE.Name"),Language.getList("Items.SMELERY_CORE.Lore"));
+ public static final SlimefunItemStack MASS_CORE=AddUtils.themed("MASS_CORE",Material.COAL_BLOCK,AddUtils.Theme.ITEM1,
+ Language.get("Items.MASS_CORE.Name"),Language.getList("Items.MASS_CORE.Lore"));
+ public static final SlimefunItemStack TECH_CORE=AddUtils.themed("TECH_CORE",Material.BEACON,AddUtils.Theme.ITEM1,
+ Language.get("Items.TECH_CORE.Name"),Language.getList("Items.TECH_CORE.Lore"));
+ public static final SlimefunItemStack SPACE_PLATE=AddUtils.themed("SPACE_PLATE",Material.PAPER,AddUtils.Theme.ITEM1,
+ Language.get("Items.SPACE_PLATE.Name"),Language.getList("Items.SPACE_PLATE.Lore"));
+ public static final SlimefunItemStack LOGIC_CORE=AddUtils.themed("LOGIC_CORE",Material.NETHER_STAR,AddUtils.Theme.ITEM1,
+ Language.get("Items.LOGIC_CORE.Name"),Language.getList("Items.LOGIC_CORE.Lore"));
+ public static final SlimefunItemStack FINAL_FRAME=AddUtils.themed("FINAL_FRAME",Material.BUDDING_AMETHYST,AddUtils.Theme.MULTIBLOCK1,
+ Language.get("Items.FINAL_FRAME.Name"),Language.getList("Items.FINAL_FRAME.Lore"));
+ public static final SlimefunItemStack REDSTONE_ENGINE=AddUtils.themed("REDSTONE_ENGINE",Material.SLIME_BLOCK,AddUtils.Theme.ITEM1,
+ Language.get("Items.REDSTONE_ENGINE.Name"),Language.getList("Items.REDSTONE_ENGINE.Lore"));
+ public static final SlimefunItemStack HYPER_LINK=AddUtils.themed("HYPER_LINK",Material.NETHER_STAR,AddUtils.Theme.ITEM1,
+ Language.get("Items.HYPER_LINK.Name"),Language.getList("Items.HYPER_LINK.Lore"));
+
+ public static final SlimefunItemStack SAMPLE_HEAD=AddUtils.themed("SAMPLE_HEAD",Material.PLAYER_HEAD,AddUtils.Theme.ITEM1,
+ Language.get("Items.SAMPLE_HEAD.Name"),Language.getList("Items.SAMPLE_HEAD.Lore"));
+ public static final SlimefunItemStack CHIP=AddUtils.themed("CHIP",Material.NAME_TAG,AddUtils.Theme.ITEM1,
+ Language.get("Items.CHIP.Name"),Language.getList("Items.CHIP.Lore"));
+ public static final SlimefunItemStack CHIP_CORE=AddUtils.themed("CHIP_CORE",CustomHead.CORE.getItem(), AddUtils.Theme.ITEM1,
+ Language.get("Items.CHIP_CORE.Name"),Language.getList("Items.CHIP_CORE.Lore"));
+ public static final SlimefunItemStack LSINGULARITY=AddUtils.themed("LSINGULARITY",Material.FIREWORK_STAR,AddUtils.Theme.ITEM1,
+ Language.get("Items.LSINGULARITY.Name"),Language.getList("Items.LSINGULARITY.Lore"));
+ public static final SlimefunItemStack RADIATION_CLEAR=AddUtils.themed("RADIATION_CLEAR",Material.GLASS_BOTTLE,AddUtils.Theme.ITEM1,
+ Language.get("Items.RADIATION_CLEAR.Name"),Language.getList("Items.RADIATION_CLEAR.Lore"));
+ public static final SlimefunItemStack ANTIMASS_CLEAR=AddUtils.themed("ANTIMASS_CLEAR",Material.GLASS_BOTTLE,AddUtils.Theme.ITEM1,
+ Language.get("Items.ANTIMASS_CLEAR.Name"),Language.getList("Items.ANTIMASS_CLEAR.Lore"));
+ public static final SlimefunItemStack BISILVER=AddUtils.themed("BISILVER",Material.IRON_INGOT,AddUtils.Theme.ITEM1,
+ Language.get("Items.BISILVER.Name"),Language.getList("Items.BISILVER.Lore"));
+ public static final SlimefunItemStack PAGOLD=AddUtils.themed("PAGOLD",Material.GOLD_INGOT,AddUtils.Theme.ITEM1,
+ Language.get("Items.PAGOLD.Name"),Language.getList("Items.PAGOLD.Lore"));
+ public static final SlimefunItemStack LASER=AddUtils.themed("LASER",CustomHead.LASER.getItem(), AddUtils.Theme.ITEM1,
+ Language.get("Items.LASER.Name"),Language.getList("Items.LASER.Lore"));
+ public static final SlimefunItemStack ANTIMASS=AddUtils.themed("ANTIMASS",Material.SCULK,AddUtils.Theme.ITEM1,
+ Language.get("Items.ANTIMASS.Name"),Language.getList("Items.ANTIMASS.Lore"));
+ public static final SlimefunItemStack VIRTUALWORLD=AddUtils.themed("VIRTUALWORLD",CustomHead.END_BLOCK.getItem(), AddUtils.Theme.ITEM1,
+ Language.get("Items.VIRTUALWORLD.Name"),Language.getList("Items.VIRTUALWORLD.Lore"));
+ public static final SlimefunItemStack SAMPLE_SPAWNER=AddUtils.themed("SAMPLE_SPAWNER",Material.SPAWNER,AddUtils.Theme.ITEM1,
+ Language.get("Items.SAMPLE_SPAWNER.Name"),Language.getList("Items.SAMPLE_SPAWNER.Lore"));
+ public static final SlimefunItemStack HOLOGRAM_REMOVER=AddUtils.themed("HOLOGRAM_REMOVER",Material.LIGHT,AddUtils.Theme.ITEM1,
+ Language.get("Items.HOLOGRAM_REMOVER.Name"),Language.getList("Items.HOLOGRAM_REMOVER.Lore"));
+ public static final SlimefunItemStack WITHERPROOF_REDSTONE=AddUtils.themed("WITHERPROOF_REDSTONE",Material.REDSTONE_BLOCK,AddUtils.Theme.ITEM1,
+ Language.get("Items.WITHERPROOF_REDSTONE.Name"),Language.getList("Items.WITHERPROOF_REDSTONE.Lore"));
+ public static final SlimefunItemStack WITHERPROOF_REDS=AddUtils.themed("WITHERPROOF_REDS",Material.REDSTONE,AddUtils.Theme.ITEM1,
+ Language.get("Items.WITHERPROOF_REDS.Name"),Language.getList("Items.WITHERPROOF_REDS.Lore"));
+ public static final SlimefunItemStack BEDROCK_BREAKER=AddUtils.themed("BEDROCK_BREAKER",Material.PISTON,AddUtils.Theme.ITEM1,
+ Language.get("Items.BEDROCK_BREAKER.Name"),Language.getList("Items.BEDROCK_BREAKER.Lore"));
+ public static final SlimefunItemStack LASER_GUN=AddUtils.themed("LASER_GUN",CustomHead.LASER_GUN.getItem(), AddUtils.Theme.ITEM1,
+ Language.get("Items.LASER_GUN.Name"),Language.getList("Items.LASER_GUN.Lore"));
+ public static final SlimefunItemStack SUPERSPONGE=AddUtils.themed("SUPERSPONGE",Material.SPONGE,AddUtils.Theme.ITEM1,
+ Language.get("Items.SUPERSPONGE.Name"),Language.getList("Items.SUPERSPONGE.Lore"));
+ public static final SlimefunItemStack SUPERSPONGE_USED=AddUtils.themed("SUPERSPONGE_USED",Material.WET_SPONGE,AddUtils.Theme.ITEM1,
+ Language.get("Items.SUPERSPONGE_USED.Name"),Language.getList("Items.SUPERSPONGE_USED.Lore"));
+ public static final SlimefunItemStack TRACE_ARROW=AddUtils.themed("TRACE_ARROW",Material.CHERRY_SAPLING,AddUtils.Theme.ITEM1,
+ Language.get("Items.TRACE_ARROW.Name"),Language.getList("Items.TRACE_ARROW.Lore"));
+ //nachines
+ public static final SlimefunItemStack HEAD_ANALYZER=AddUtils.themed("HEAD_ANALYZER",Material.SOUL_CAMPFIRE, AddUtils.Theme.MACHINE1,
+ Language.get("Machines.HEAD_ANALYZER.Name"),Language.getList("Machines.HEAD_ANALYZER.Lore"));
+ public static final SlimefunItemStack RECIPE_LOGGER=AddUtils.themed("RECIPE_LOGGER",Material.FLETCHING_TABLE, AddUtils.Theme.MACHINE1,
+ Language.get("Machines.RECIPE_LOGGER.Name"),Language.getList("Machines.RECIPE_LOGGER.Lore"));
+ public static final SlimefunItemStack BOOL_GENERATOR=AddUtils.themed("BOOL_GENERATOR",Material.REDSTONE_TORCH,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.BOOL_GENERATOR.Name"),Language.getList("Machines.BOOL_GENERATOR.Lore"));
+ public static final SlimefunItemStack LOGIC_REACTOR=AddUtils.themed("LOGIC_REACTOR",CustomHead.LOGIC_REACTOR.getItem(),AddUtils.Theme.MACHINE1,
+ Language.get("Machines.LOGIC_REACTOR.Name"),Language.getList("Machines.LOGIC_REACTOR.Lore"));
+ public static final SlimefunItemStack BUG_CRAFTER=AddUtils.themed("BUG_CRAFTER",CustomHead.BUG_CRATFER.getItem(),AddUtils.Theme.MACHINE1,
+ Language.get("Machines.BUG_CRAFTER.Name"),Language.getList("Machines.BUG_CRAFTER.Lore"));
+ public static final SlimefunItemStack ENDFRAME_MACHINE=AddUtils.themed("ENDFRAME_MACHINE",Material.END_PORTAL_FRAME,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.ENDFRAME_MACHINE.Name"),Language.getList("Machines.ENDFRAME_MACHINE.Lore"));
+ public static final SlimefunItemStack LVOID_GENERATOR=AddUtils.themed("LVOID_GENERATOR",Material.SOUL_LANTERN,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.LVOID_GENERATOR.Name"),Language.getList("Machines.LVOID_GENERATOR.Lore"));
+ public static final SlimefunItemStack SPECIAL_CRAFTER=AddUtils.themed("SPECIAL_CRAFTER",Material.LOOM,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.SPECIAL_CRAFTER.Name"),Language.getList("Machines.SPECIAL_CRAFTER.Lore"));
+ public static final SlimefunItemStack STAR_SMELTERY=AddUtils.themed("STAR_SMELTERY",Material.BLAST_FURNACE,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.STAR_SMELTERY.Name"),Language.getList("Machines.STAR_SMELTERY.Lore"));
+
+ public static final SlimefunItemStack INFINITY_AUTOCRAFT=AddUtils.themed("INFINITY_AUTOCRAFT",Material.CRYING_OBSIDIAN,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.INFINITY_AUTOCRAFT.Name"),Language.getList("Machines.INFINITY_AUTOCRAFT.Lore"));
+ public static final SlimefunItemStack CHIP_MAKER=AddUtils.themed("CHIP_MAKER",Material.CHISELED_BOOKSHELF,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.CHIP_MAKER.Name"),Language.getList("Machines.CHIP_MAKER.Lore"));
+ public static final SlimefunItemStack CHIP_CONSUMER=AddUtils.themed("CHIP_CONSUMER",Material.TORCH,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.CHIP_CONSUMER.Name"),Language.getList("Machines.CHIP_CONSUMER.Lore"));
+ public static final SlimefunItemStack CHIP_BICONSUMER=AddUtils.themed("CHIP_BICONSUMER",Material.LANTERN,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.CHIP_BICONSUMER.Name"),Language.getList("Machines.CHIP_BICONSUMER.Lore"));
+ public static final SlimefunItemStack SEQ_CONSTRUCTOR=AddUtils.themed("SEQ_CONSTRUCTOR",Material.BAMBOO_MOSAIC,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.SEQ_CONSTRUCTOR.Name"),Language.getList("Machines.SEQ_CONSTRUCTOR.Lore"));
+ public static final SlimefunItemStack STACKMACHINE=AddUtils.themed("STACKMACHINE",Material.FURNACE,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.STACKMACHINE.Name"),Language.getList("Machines.STACKMACHINE.Lore"));
+ public static final SlimefunItemStack ENERGY_TRASH=AddUtils.themed("ENERGY_TRASH", SlimefunItems.PORTABLE_DUSTBIN.getItem().getItem().clone()
+ ,AddUtils.Theme.MACHINE1, Language.get("Machines.ENERGY_TRASH.Name"),Language.getList("Machines.ENERGY_TRASH.Lore"));
+ public static final SlimefunItemStack OPPO_GEN=AddUtils.themed("OPPO_GEN",CustomHead.HOT_MACHINE.getItem(), AddUtils.Theme.MACHINE1,
+ Language.get("Machines.OPPO_GEN.Name"),Language.getList("Machines.OPPO_GEN.Lore"));
+ public static final SlimefunItemStack ARC_REACTOR=AddUtils.themed("ARC_REACTOR",CustomHead.REACTOR.getItem(),AddUtils.Theme.MACHINE1,
+ Language.get("Machines.ARC_REACTOR.Name"),Language.getList("Machines.ARC_REACTOR.Lore"));
+ public static final SlimefunItemStack ENERGY_AMPLIFIER=AddUtils.themed("ENERGY_AMPLIFIER",Material.NETHERITE_BLOCK,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.ENERGY_AMPLIFIER.Name"),Language.getList("Machines.ENERGY_AMPLIFIER.Lore"));
+ public static final SlimefunItemStack ADVANCED_CHIP_MAKER=AddUtils.themed("ADVANCED_CHIP_MAKER",Material.CHISELED_BOOKSHELF,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.ADVANCED_CHIP_MAKER.Name"),Language.getList("Machines.ADVANCED_CHIP_MAKER.Lore"));
+ public static final SlimefunItemStack CHIP_REACTOR=AddUtils.themed("CHIP_REACTOR",Material.JUKEBOX,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.CHIP_REACTOR.Name"),Language.getList("Machines.CHIP_REACTOR.Lore"));
+ public static final SlimefunItemStack DUST_EXTRACTOR=AddUtils.themed("DUST_EXTRACTOR",Material.CHISELED_STONE_BRICKS,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.DUST_EXTRACTOR.Name"),Language.getList("Machines.DUST_EXTRACTOR.Lore"));
+ public static final SlimefunItemStack FURNACE_FACTORY=AddUtils.themed("FURNACE_FACTORY",Material.FURNACE,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.FURNACE_FACTORY.Name"),Language.getList("Machines.FURNACE_FACTORY.Lore"));
+ public static final SlimefunItemStack INGOT_FACTORY=AddUtils.themed("INGOT_FACTORY",Material.RED_GLAZED_TERRACOTTA,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.INGOT_FACTORY.Name"),Language.getList("Machines.INGOT_FACTORY.Lore"));
+ public static final SlimefunItemStack FINAL_LASER=AddUtils.themed("FINAL_LASER",Material.DROPPER,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.FINAL_LASER.Name"),Language.getList("Machines.FINAL_LASER.Lore"));
+ public static final SlimefunItemStack FINAL_CONVERTOR=AddUtils.themed("FINAL_CONVERTOR",Material.WARPED_HYPHAE,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.FINAL_CONVERTOR.Name"),Language.getList("Machines.FINAL_CONVERTOR.Lore"));
+ public static final SlimefunItemStack PRESSOR_FACTORY=AddUtils.themed("PRESSOR_FACTORY",Material.PISTON,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.PRESSOR_FACTORY.Name"),Language.getList("Machines.PRESSOR_FACTORY.Lore"));
+ public static final SlimefunItemStack CRAFTER=AddUtils.themed("CRAFTER",Material.CRAFTING_TABLE,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.CRAFTER.Name"),Language.getList("Machines.CRAFTER.Lore"));
+ public static final SlimefunItemStack EASYSTACKMACHINE=AddUtils.themed("EASYSTACKMACHINE",Material.FURNACE,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.EASYSTACKMACHINE.Name"),Language.getList("Machines.EASYSTACKMACHINE.Lore"));
+ public static final SlimefunItemStack CONVERTOR=AddUtils.themed("CONVERTOR",Material.SEA_LANTERN,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.CONVERTOR.Name"),Language.getList("Machines.CONVERTOR.Lore"));
+ public static final SlimefunItemStack VIRTUAL_KILLER=AddUtils.themed("VIRTUAL_KILLER",Material.STONECUTTER,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.VIRTUAL_KILLER.Name"),Language.getList("Machines.VIRTUAL_KILLER.Lore"));
+ public static final SlimefunItemStack INF_MOBSIMULATION=AddUtils.themed("INF_MOBSIMULATION",Material.GILDED_BLACKSTONE,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.INF_MOBSIMULATION.Name"),Language.getList("Machines.INF_MOBSIMULATION.Lore"));
+ public static final SlimefunItemStack INF_GEOQUARRY=AddUtils.themed("INF_GEOQUARRY",Material.CHISELED_QUARTZ_BLOCK,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.INF_GEOQUARRY.Name"),Language.getList("Machines.INF_GEOQUARRY.Lore"));
+ public static final SlimefunItemStack RAND_EDITOR=AddUtils.themed("RAND_EDITOR",Material.ENCHANTING_TABLE,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.RAND_EDITOR.Name"),Language.getList("Machines.RAND_EDITOR.Lore"));
+ public static final SlimefunItemStack ATTR_OP=AddUtils.themed("ATTR_OP",Material.ANVIL,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.ATTR_OP.Name"),Language.getList("Machines.ATTR_OP.Lore"));
+ public static final SlimefunItemStack GRIND_FACTORY=AddUtils.themed("GRIND_FACTORY",Material.GRINDSTONE,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.GRIND_FACTORY.Name"),Language.getList("Machines.GRIND_FACTORY.Lore"));
+ public static final SlimefunItemStack TNT_GEN=AddUtils.themed("TNT_GEN",Material.NOTE_BLOCK,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.TNT_GEN.Name"),Language.getList("Machines.TNT_GEN.Lore"));
+ public static final SlimefunItemStack ADVANCE_BREWER=AddUtils.themed("ADVANCE_BREWER",Material.SMOKER,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.ADVANCE_BREWER.Name"),Language.getList("Machines.ADVANCE_BREWER.Lore"));
+ public static final SlimefunItemStack SIMU_LVOID=AddUtils.themed("SIMU_LVOID",Material.SOUL_TORCH,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.SIMU_LVOID.Name"),Language.getList("Machines.SIMU_LVOID.Lore"));
+ //manuals
+ public static final SlimefunItemStack MANUAL_CORE=AddUtils.themed("MANUAL_CORE",Material.AMETHYST_SHARD,AddUtils.Theme.ITEM1,
+ Language.get("Manuals.MANUAL_CORE.Name"),Language.getList("Manuals.MANUAL_CORE.Lore"));
+ public static final SlimefunItemStack CRAFT_MANUAL=AddUtils.themed("CRAFT_MANUAL",Material.CRAFTING_TABLE,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.CRAFT_MANUAL.Name"),Language.getList("Manuals.CRAFT_MANUAL.Lore"));
+ public static final SlimefunItemStack FURNACE_MANUAL=AddUtils.themed("FURNACE_MANUAL",Material.FURNACE,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.FURNACE_MANUAL.Name"),Language.getList("Manuals.FURNACE_MANUAL.Lore"));
+ public static final SlimefunItemStack ENHANCED_CRAFT_MANUAL=AddUtils.themed("ENHANCED_CRAFT_MANUAL",Material.CRAFTING_TABLE,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.ENHANCED_CRAFT_MANUAL.Name"),Language.getList("Manuals.ENHANCED_CRAFT_MANUAL.Lore"));
+ public static final SlimefunItemStack GRIND_MANUAL=AddUtils.themed("GRIND_MANUAL",Material.DISPENSER,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.GRIND_MANUAL.Name"),Language.getList("Manuals.GRIND_MANUAL.Lore"));
+ public static final SlimefunItemStack ARMOR_FORGE_MANUAL=AddUtils.themed("ARMOR_FORGE_MANUAL",Material.ANVIL,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.ARMOR_FORGE_MANUAL.Name"),Language.getList("Manuals.ARMOR_FORGE_MANUAL.Lore"));
+ public static final SlimefunItemStack ORE_CRUSHER_MANUAL=AddUtils.themed("ORE_CRUSHER_MANUAL",Material.DROPPER,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.ORE_CRUSHER_MANUAL.Name"),Language.getList("Manuals.ORE_CRUSHER_MANUAL.Lore"));
+ public static final SlimefunItemStack COMPRESSOR_MANUAL=AddUtils.themed("COMPRESSOR_MANUAL",Material.PISTON,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.COMPRESSOR_MANUAL.Name"),Language.getList("Manuals.COMPRESSOR_MANUAL.Lore"));
+ public static final SlimefunItemStack PRESSURE_MANUAL=AddUtils.themed("PRESSURE_MANUAL",Material.GLASS,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.PRESSURE_MANUAL.Name"),Language.getList("Manuals.PRESSURE_MANUAL.Lore"));
+ public static final SlimefunItemStack MAGIC_WORKBENCH_MANUAL=AddUtils.themed("MAGIC_WORKBENCH_MANUAL",Material.BOOKSHELF,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.MAGIC_WORKBENCH_MANUAL.Name"),Language.getList("Manuals.MAGIC_WORKBENCH_MANUAL.Lore"));
+ public static final SlimefunItemStack ORE_WASHER_MANUAL=AddUtils.themed("ORE_WASHER_MANUAL",Material.BLUE_STAINED_GLASS,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.ORE_WASHER_MANUAL.Name"),Language.getList("Manuals.ORE_WASHER_MANUAL.Lore"));
+ public static final SlimefunItemStack GOLD_PAN_MANUAL=AddUtils.themed("GOLD_PAN_MANUAL",Material.BROWN_TERRACOTTA,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.GOLD_PAN_MANUAL.Name"),Language.getList("Manuals.GOLD_PAN_MANUAL.Lore"));
+ public static final SlimefunItemStack ANCIENT_ALTAR_MANUAL=AddUtils.themed("ANCIENT_ALTAR_MANUAL",Material.ENCHANTING_TABLE,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.ANCIENT_ALTAR_MANUAL.Name"),Language.getList("Manuals.ANCIENT_ALTAR_MANUAL.Lore"));
+ public static final SlimefunItemStack SMELTERY_MANUAL=AddUtils.themed("SMELTERY_MANUAL",Material.BLAST_FURNACE,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.SMELTERY_MANUAL.Name"),Language.getList("Manuals.SMELTERY_MANUAL.Lore"));
+ public static final SlimefunItemStack CRUCIBLE_MANUAL=AddUtils.themed("CRUCIBLE_MANUAL",Material.RED_TERRACOTTA,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.CRUCIBLE_MANUAL.Name"),Language.getList("Manuals.CRUCIBLE_MANUAL.Lore"));
+ public static final SlimefunItemStack PULVERIZER_MANUAL=AddUtils.themed("PULVERIZER_MANUAL",Material.GRINDSTONE,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.PULVERIZER_MANUAL.Name"),Language.getList("Manuals.PULVERIZER_MANUAL.Lore"));
+ public static final SlimefunItemStack MULTICRAFTTABLE_MANUAL=AddUtils.themed("MULTICRAFTTABLE_MANUAL",Material.CRAFTING_TABLE,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.MULTICRAFTTABLE_MANUAL.Name"),Language.getList("Manuals.MULTICRAFTTABLE_MANUAL.Lore"));
+ public static final SlimefunItemStack TABLESAW_MANUAL=AddUtils.themed("TABLESAW_MANUAL",Material.STONECUTTER,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.TABLESAW_MANUAL.Name"),Language.getList("Manuals.TABLESAW_MANUAL.Lore"));
+ public static final SlimefunItemStack COMPOSTER=AddUtils.themed("COMPOSTER",Material.CAULDRON,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.COMPOSTER.Name"),Language.getList("Manuals.COMPOSTER.Lore"));
+ public static final SlimefunItemStack MULTIMACHINE_MANUAL=AddUtils.themed("MULTIMACHINE_MANUAL",Material.GRAY_STAINED_GLASS,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.MULTIMACHINE_MANUAL.Name"),Language.getList("Manuals.MULTIMACHINE_MANUAL.Lore"));
+ public static final SlimefunItemStack MOBDATA_MANUAL=AddUtils.themed("MOBDATA_MANUAL",Material.LODESTONE,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.MOBDATA_MANUAL.Name"),Language.getList("Manuals.MOBDATA_MANUAL.Lore"));
+ public static final SlimefunItemStack INFINITY_MANUAL=AddUtils.themed("INFINITY_MANUAL",Material.RESPAWN_ANCHOR,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.INFINITY_MANUAL.Name"),Language.getList("Manuals.INFINITY_MANUAL.Lore"));
+ public static final SlimefunItemStack NTWWORKBENCH_MANUAL=AddUtils.themed("NTWWORKBENCH_MANUAL",Material.BAMBOO_BLOCK,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.NTWWORKBENCH_MANUAL.Name"),Language.getList("Manuals.NTWWORKBENCH_MANUAL.Lore"));
+ public static final SlimefunItemStack MULTIBLOCK_MANUAL=AddUtils.themed("MULTIBLOCK_MANUAL",Material.BRICKS,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.MULTIBLOCK_MANUAL.Name"),Language.getList("Manuals.MULTIBLOCK_MANUAL.Lore"));
+ public static final SlimefunItemStack FINAL_MANUAL=AddUtils.themed("FINAL_MANUAL",Material.REINFORCED_DEEPSLATE,AddUtils.Theme.MANUAL1,
+ Language.get("Manuals.FINAL_MANUAL.Name"),Language.getList("Manuals.FINAL_MANUAL.Lore"));
+ public static final SlimefunItemStack REPLACE_CARD=AddUtils.themed("REPLACE_CARD",Material.PRIZE_POTTERY_SHERD,AddUtils.Theme.ITEM1,
+ Language.get("Manuals.REPLACE_CARD.Name"),Language.getList("Manuals.REPLACE_CARD.Lore"));
+ public static final SlimefunItemStack CARD_MAKER=AddUtils.themed("CARD_MAKER",Material.FLETCHING_TABLE,AddUtils.Theme.MACHINE1,
+ Language.get("Manuals.CARD_MAKER.Name"),Language.getList("Manuals.CARD_MAKER.Lore"));
+ //generators
+ public static final SlimefunItemStack MAGIC_STONE=AddUtils.themed("MAGIC_STONE",Material.COBBLESTONE,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.MAGIC_STONE.Name"),Language.getList("Generators.MAGIC_STONE.Lore"));
+ public static final SlimefunItemStack BOOL_MG=AddUtils.themed("BOOL_MG",Material.REDSTONE_TORCH,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.BOOL_MG.Name"),Language.getList("Generators.BOOL_MG.Lore"));
+ public static final SlimefunItemStack OVERWORLD_MINER=AddUtils.themed("OVERWORLD_MINER",Material.SMOOTH_STONE,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.OVERWORLD_MINER.Name"),Language.getList("Generators.OVERWORLD_MINER.Lore"));
+ public static final SlimefunItemStack NETHER_MINER=AddUtils.themed("NETHER_MINER",Material.CRIMSON_NYLIUM,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.NETHER_MINER.Name"),Language.getList("Generators.NETHER_MINER.Lore"));
+ public static final SlimefunItemStack END_MINER =AddUtils.themed("END_MINER",Material.END_STONE_BRICKS,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.END_MINER.Name"),Language.getList("Generators.END_MINER.Lore"));
+ public static final SlimefunItemStack DIMENSION_MINER=AddUtils.themed("DIMENSION_MINER",Material.CRYING_OBSIDIAN,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.DIMENSION_MINER.Name"),Language.getList("Generators.DIMENSION_MINER.Lore"));
+ public static final SlimefunItemStack REDSTONE_MG=AddUtils.themed("REDSTONE_MG",Material.OBSERVER,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.REDSTONE_MG.Name"),Language.getList("Generators.REDSTONE_MG.Lore"));
+ public static final SlimefunItemStack DUPE_MG=AddUtils.themed("DUPE_MG",Material.STICKY_PISTON,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.DUPE_MG.Name"),Language.getList("Generators.DUPE_MG.Lore"));
+ public static final SlimefunItemStack ENDDUPE_MG=AddUtils.themed("ENDDUPE_MG",Material.END_PORTAL_FRAME,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.ENDDUPE_MG.Name"),Language.getList("Generators.ENDDUPE_MG.Lore"));
+ public static final SlimefunItemStack STACKMGENERATOR=AddUtils.themed("STACKMGENERATOR",Material.SMOOTH_STONE,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.STACKMGENERATOR.Name"),Language.getList("Generators.STACKMGENERATOR.Lore"));
+ public static final SlimefunItemStack REVERSE_GENERATOR=AddUtils.themed("REVERSE_GENERATOR",CustomHead.REVERSE.getItem(), AddUtils.Theme.MACHINE2,
+ Language.get("Generators.REVERSE_GENERATOR.Name"),Language.getList("Generators.REVERSE_GENERATOR.Lore"));
+ public static final SlimefunItemStack VIRTUAL_MINER=AddUtils.themed("VIRTUAL_MINER",Material.CHERRY_WOOD,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.VIRTUAL_MINER.Name"),Language.getList("Generators.VIRTUAL_MINER.Lore"));
+ public static final SlimefunItemStack VIRTUAL_PLANT=AddUtils.themed("VIRTUAL_PLANT",Material.STRIPPED_CHERRY_WOOD,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.VIRTUAL_PLANT.Name"),Language.getList("Generators.VIRTUAL_PLANT.Lore"));
+ public static final SlimefunItemStack MAGIC_PLANT=AddUtils.themed("MAGIC_PLANT",Material.DIRT,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.MAGIC_PLANT.Name"),Language.getList("Generators.MAGIC_PLANT.Lore"));
+ public static final SlimefunItemStack OVERWORLD_PLANT=AddUtils.themed("OVERWORLD_PLANT",Material.PODZOL,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.OVERWORLD_PLANT.Name"),Language.getList("Generators.OVERWORLD_PLANT.Lore"));
+ public static final SlimefunItemStack NETHER_PLANT=AddUtils.themed("NETHER_PLANT",Material.WARPED_NYLIUM,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.NETHER_PLANT.Name"),Language.getList("Generators.NETHER_PLANT.Lore"));
+ public static final SlimefunItemStack END_PLANT=AddUtils.themed("END_PLANT",Material.END_STONE,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.END_PLANT.Name"),Language.getList("Generators.END_PLANT.Lore"));
+ public static final SlimefunItemStack SMELTRY=AddUtils.themed("SMELTRY",Material.FURNACE,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.SMELTRY.Name"),Language.getList("Machines.SMELTRY.Lore"));
+ public static final SlimefunItemStack STONE_FACTORY=AddUtils.themed("STONE_FACTORY",Material.STONE_BRICKS,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.STONE_FACTORY.Name"),Language.getList("Generators.STONE_FACTORY.Lore"));
+ public static final SlimefunItemStack TNT_MG=AddUtils.themed("TNT_MG",Material.ANCIENT_DEBRIS,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.TNT_MG.Name"),Language.getList("Generators.TNT_MG.Lore"));
+ //cargos
+ public static final SlimefunItemStack CARGO_PART=AddUtils.themed("CARGO_PART",Material.SHAPER_ARMOR_TRIM_SMITHING_TEMPLATE,AddUtils.Theme.ITEM1,
+ Language.get("Items.CARGO_PART.Name"),Language.getList("Items.CARGO_PART.Lore"));
+ public static final SlimefunItemStack CARGO_CONFIG=AddUtils.themed("CARGO_CONFIG",Material.TIDE_ARMOR_TRIM_SMITHING_TEMPLATE,AddUtils.Theme.ITEM1,
+ Language.get("Items.CARGO_CONFIG.Name"),Language.getList("Items.CARGO_CONFIG.Lore"));
+ public static final SlimefunItemStack CARGO_CONFIGURATOR=AddUtils.themed("CARGO_CONFIGURATOR",Material.JUKEBOX,AddUtils.Theme.CARGO1,
+ Language.get("Items.CARGO_CONFIGURATOR.Name"),Language.getList("Items.CARGO_CONFIGURATOR.Lore"));
+ public static final SlimefunItemStack SIMPLE_CARGO=AddUtils.themed("SIMPLE_CARGO",Material.TARGET,AddUtils.Theme.CARGO1,
+ Language.get("Cargo.SIMPLE_CARGO.Name"),Language.getList("Cargo.SIMPLE_CARGO.Lore"));
+ public static final SlimefunItemStack REMOTE_CARGO=AddUtils.themed("REMOTE_CARGO",Material.CALIBRATED_SCULK_SENSOR,AddUtils.Theme.CARGO1,
+ Language.get("Cargo.REMOTE_CARGO.Name"),Language.getList("Cargo.REMOTE_CARGO.Lore"));
+ public static final SlimefunItemStack LINE_CARGO=AddUtils.themed("LINE_CARGO",Material.OBSERVER,AddUtils.Theme.CARGO1,
+ Language.get("Cargo.LINE_CARGO.Name"),Language.getList("Cargo.LINE_CARGO.Lore"));
+ public static final SlimefunItemStack BISORTER=AddUtils.themed("BISORTER",Material.VERDANT_FROGLIGHT,AddUtils.Theme.CARGO1,
+ Language.get("Cargo.BISORTER.Name"),Language.getList("Cargo.BISORTER.Lore"));
+ public static final SlimefunItemStack QUARSORTER=AddUtils.themed("QUARSORTER",Material.PEARLESCENT_FROGLIGHT,AddUtils.Theme.CARGO1,
+ Language.get("Cargo.QUARSORTER.Name"),Language.getList("Cargo.QUARSORTER.Lore"));
+ public static final SlimefunItemStack OCTASORTER=AddUtils.themed("OCTASORTER",Material.OCHRE_FROGLIGHT,AddUtils.Theme.CARGO1,
+ Language.get("Cargo.OCTASORTER.Name"),Language.getList("Cargo.OCTASORTER.Lore"));
+ public static final SlimefunItemStack ADV_TRASH=AddUtils.themed("ADV_TRASH",CustomHead.FIRE_GENERATOR.getItem(), AddUtils.Theme.CARGO1,
+ Language.get("Cargo.ADV_TRASH.Name"),Language.getList("Cargo.ADV_TRASH.Lore"));
+ public static final SlimefunItemStack STORAGE_OPERATOR=AddUtils.themed("STORAGE_OPERATOR",Material.CARTOGRAPHY_TABLE,AddUtils.Theme.CARGO1,
+ Language.get("Cargo.STORAGE_OPERATOR.Name"),Language.getList("Cargo.STORAGE_OPERATOR.Lore"));
+ public static final SlimefunItemStack ADV_ADJACENT_CARGO=AddUtils.themed("ADV_ADJACENT_CARGO",Material.TARGET,AddUtils.Theme.CARGO1,
+ Language.get("Cargo.ADV_ADJACENT_CARGO.Name"),Language.getList("Cargo.ADV_ADJACENT_CARGO.Lore"));
+ public static final SlimefunItemStack ADV_REMOTE_CARGO=AddUtils.themed("ADV_REMOTE_CARGO",Material.CALIBRATED_SCULK_SENSOR,AddUtils.Theme.CARGO1,
+ Language.get("Cargo.ADV_REMOTE_CARGO.Name"),Language.getList("Cargo.ADV_REMOTE_CARGO.Lore"));
+ public static final SlimefunItemStack ADV_LINE_CARGO=AddUtils.themed("ADV_LINE_CARGO",Material.OBSERVER,AddUtils.Theme.CARGO1,
+ Language.get("Cargo.ADV_LINE_CARGO.Name"),Language.getList("Cargo.ADV_LINE_CARGO.Lore"));
+ public static final SlimefunItemStack REDSTONE_ADJACENT_CARGO=AddUtils.themed("REDSTONE_ADJACENT_CARGO",Material.REDSTONE_LAMP,AddUtils.Theme.CARGO1,
+ Language.get("Cargo.REDSTONE_ADJACENT_CARGO.Name"),Language.getList("Cargo.REDSTONE_ADJACENT_CARGO.Lore"));
+ public static final SlimefunItemStack CHIP_ADJ_CARGO=AddUtils.themed("CHIP_ADJ_CARGO",Material.SHROOMLIGHT,AddUtils.Theme.CARGO1,
+ Language.get("Cargo.CHIP_ADJ_CARGO.Name"),Language.getList("Cargo.CHIP_ADJ_CARGO.Lore"));
+ public static final SlimefunItemStack RESETTER=AddUtils.themed("RESETTER",Material.FLETCHING_TABLE,AddUtils.Theme.CARGO1,
+ Language.get("Cargo.RESETTER.Name"),Language.getList("Cargo.RESETTER.Lore"));
+ public static final SlimefunItemStack STORAGE_SINGULARITY= AddUtils.themed("STORAGE_SINGULARITY",Material.NETHER_STAR,AddUtils.Theme.ITEM1,
+ Language.get("Cargo.STORAGE_SINGULARITY.Name"),Language.getList("Cargo.STORAGE_SINGULARITY.Lore"));
+ public static final SlimefunItemStack QUANTUM_LINK=AddUtils.themed("QUANTUM_LINK",Material.NETHER_STAR,AddUtils.Theme.ITEM1,
+ Language.get("Cargo.QUANTUM_LINK.Name"),Language.getList("Cargo.QUANTUM_LINK.Lore"));
+ public static final SlimefunItemStack INPORT=AddUtils.themed("INPORT",Material.END_STONE,AddUtils.Theme.MACHINE1,
+ Language.get("Cargo.INPORT.Name"),Language.getList("Cargo.INPORT.Lore"));
+ public static final SlimefunItemStack OUTPORT=AddUtils.themed("OUTPORT",Material.END_STONE,AddUtils.Theme.MACHINE1,
+ Language.get("Cargo.OUTPORT.Name"),Language.getList("Cargo.OUTPORT.Lore"));
+ public static final SlimefunItemStack IOPORT=AddUtils.themed("IOPORT",Material.PURPUR_PILLAR,AddUtils.Theme.ITEM1,
+ Language.get("Cargo.IOPORT.Name"),Language.getList("Cargo.IOPORT.Lore"));
+ public static final SlimefunItemStack STORAGE=AddUtils.themed("STORAGE",Material.LIGHT_GRAY_STAINED_GLASS,AddUtils.Theme.CARGO1,
+ Language.get("Cargo.STORAGE.Name"),Language.getList("Cargo.STORAGE.Lore"));
+ public static final SlimefunItemStack STORAGE_INPUT=AddUtils.themed("STORAGE_INPUT",Material.BLUE_STAINED_GLASS,AddUtils.Theme.CARGO1,
+ Language.get("Cargo.STORAGE_INPUT.Name"),Language.getList("Cargo.STORAGE_INPUT.Lore"));
+ public static final SlimefunItemStack STORAGE_OUTPUT=AddUtils.themed("STORAGE_OUTPUT",Material.RED_STAINED_GLASS,AddUtils.Theme.CARGO1,
+ Language.get("Cargo.STORAGE_OUTPUT.Name"),Language.getList("Cargo.STORAGE_OUTPUT.Lore"));
+ public static final SlimefunItemStack BIFILTER=AddUtils.themed("BIFILTER",Material.PRISMARINE,AddUtils.Theme.ITEM1,
+ Language.get("Cargo.BIFILTER.Name"),Language.getList("Cargo.BIFILTER.Lore"));
+ public static final SlimefunItemStack QUARFILTER=AddUtils.themed("QUARFILTER",Material.PRISMARINE_BRICKS,AddUtils.Theme.ITEM1,
+ Language.get("Cargo.QUARFILTER.Name"),Language.getList("Cargo.QUARFILTER.Lore"));
+ public static final SlimefunItemStack OCTAFILTER=AddUtils.themed("OCTAFILTER",Material.DARK_PRISMARINE,AddUtils.Theme.ITEM1,
+ Language.get("Cargo.OCTAFILTER.Name"),Language.getList("Cargo.OCTAFILTER.Lore"));
+ //multiblock
+ public static final SlimefunItemStack PORTAL_CORE=AddUtils.themed("PORTAL_CORE",Material.CRYING_OBSIDIAN,AddUtils.Theme.MULTIBLOCK1,
+ Language.get("MultiBlock.PORTAL_CORE.Name"),Language.getList("MultiBlock.PORTAL_CORE.Lore"));
+ public static final SlimefunItemStack PORTAL_FRAME=AddUtils.themed("PORTAL_FRAME",Material.IRON_BLOCK,AddUtils.Theme.MULTIBLOCK2,
+ Language.get("MultiBlock.PORTAL_FRAME.Name"),Language.getList("MultiBlock.PORTAL_FRAME.Lore"));
+ public static final SlimefunItemStack SOLAR_REACTOR=AddUtils.themed("SOLAR_REACTOR",Material.LODESTONE,AddUtils.Theme.MULTIBLOCK1,
+ Language.get("MultiBlock.SOLAR_REACTOR.Name"),Language.getList("MultiBlock.SOLAR_REACTOR.Lore"));
+ public static final SlimefunItemStack SOLAR_REACTOR_FRAME=AddUtils.themed("SOLAR_REACTOR_FRAME",Material.CHISELED_QUARTZ_BLOCK,AddUtils.Theme.MULTIBLOCK2,
+ Language.get("MultiBlock.SOLAR_REACTOR_FRAME.Name"),Language.getList("MultiBlock.SOLAR_REACTOR_FRAME.Lore"));
+ public static final SlimefunItemStack SOLAR_REACTOR_GLASS=AddUtils.themed("SOLAR_REACTOR_GLASS",Material.TINTED_GLASS,AddUtils.Theme.MULTIBLOCK2,
+ Language.get("MultiBlock.SOLAR_REACTOR_GLASS.Name"),Language.getList("MultiBlock.SOLAR_REACTOR_GLASS.Lore"));
+ public static final SlimefunItemStack SOLAR_INPUT=AddUtils.themed("SOLAR_INPUT",Material.WAXED_OXIDIZED_COPPER,AddUtils.Theme.MULTIBLOCK2,
+ Language.get("MultiBlock.SOLAR_INPUT.Name"),Language.getList("MultiBlock.SOLAR_INPUT.Lore"));
+ public static final SlimefunItemStack SOLAR_OUTPUT=AddUtils.themed("SOLAR_OUTPUT",Material.WAXED_COPPER_BLOCK,AddUtils.Theme.MULTIBLOCK2,
+ Language.get("MultiBlock.SOLAR_OUTPUT.Name"),Language.getList("MultiBlock.SOLAR_OUTPUT.Lore"));
+ public static final SlimefunItemStack TRANSMUTATOR_FRAME=AddUtils.themed("TRANSMUTATOR_FRAME",Material.SMOOTH_STONE, AddUtils.Theme.MULTIBLOCK2,
+ Language.get("MultiBlock.TRANSMUTATOR_FRAME.Name"),Language.getList("MultiBlock.TRANSMUTATOR_FRAME.Lore"));
+ public static final SlimefunItemStack TRANSMUTATOR_GLASS=AddUtils.themed("TRANSMUTATOR_GLASS",Material.LIGHT_GRAY_STAINED_GLASS,AddUtils.Theme.MULTIBLOCK2,
+ Language.get("MultiBlock.TRANSMUTATOR_GLASS.Name"),Language.getList("MultiBlock.TRANSMUTATOR_GLASS.Lore"));
+ public static final SlimefunItemStack TRANSMUTATOR_ROD=AddUtils.themed("TRANSMUTATOR_ROD",Material.REINFORCED_DEEPSLATE,AddUtils.Theme.MULTIBLOCK2,
+ Language.get("MultiBlock.TRANSMUTATOR_ROD.Name"),Language.getList("MultiBlock.TRANSMUTATOR_ROD.Lore"));
+ public static final SlimefunItemStack TRANSMUTATOR=AddUtils.themed("TRANSMUTATOR",Material.FURNACE,AddUtils.Theme.MULTIBLOCK1,
+ Language.get("MultiBlock.TRANSMUTATOR.Name"),Language.getList("MultiBlock.TRANSMUTATOR.Lore"));
+ public static final SlimefunItemStack FINAL_BASE=AddUtils.themed("FINAL_BASE",Material.POLISHED_DEEPSLATE,AddUtils.Theme.MULTIBLOCK1,
+ Language.get("MultiBlock.FINAL_BASE.Name"),Language.getList("MultiBlock.FINAL_BASE.Lore"));
+ public static final SlimefunItemStack FINAL_ALTAR=AddUtils.themed("FINAL_ALTAR",Material.CHISELED_DEEPSLATE,AddUtils.Theme.MULTIBLOCK2,
+ Language.get("MultiBlock.FINAL_ALTAR.Name"),Language.getList("MultiBlock.FINAL_ALTAR.Lore"));
+
+ //feat
+ public static final SlimefunItemStack CUSTOM1=
+ AddUtils.themed("CUSTOM1",new ItemStack(Material.COMMAND_BLOCK),AddUtils.Theme.ITEM1,"测试物件1","只是一个简单的测试");
+ public static final SlimefunItemStack MACHINE1=
+ AddUtils.themed("MACHINE1",new ItemStack(Material.FURNACE),AddUtils.Theme.MACHINE1,"测试机器1","tnnd对照组");
+ public static final SlimefunItemStack MACHINE2=
+ AddUtils.themed("MACHINE2",new ItemStack(Material.FURNACE),AddUtils.Theme.MACHINE1,"测试机2","tnnd实验组");
+ public static final SlimefunItemStack MACHINE3=
+ AddUtils.themed("MACHINE3",new ItemStack(Material.FURNACE),AddUtils.Theme.MACHINE1,"测试机3","tnnd测试组 AbstractProcessor");
+ public static final SlimefunItemStack MACHINE4=
+ AddUtils.themed("MACHINE4",new ItemStack(Material.FURNACE),AddUtils.Theme.MACHINE1,"测试机4","tnnd测试组 AbstractAdvancedProcessor");
+ public static final SlimefunItemStack SMG1=
+ AddUtils.themed("SMG1",new ItemStack(Material.DIAMOND_BLOCK),AddUtils.Theme.MACHINE2,"测试生成器1","测测我的");
+ public static final SlimefunItemStack MMG1=
+ AddUtils.themed("MMG1",new ItemStack(Material.EMERALD_BLOCK),AddUtils.Theme.MACHINE2,"定向生成器1","测测我的");
+ public static final SlimefunItemStack MANUAL1=
+ AddUtils.themed("MANUAL1",new ItemStack(Material.CRAFTING_TABLE),AddUtils.Theme.MANUAL1,"测试快捷机器","强化工作台");
+ public static final SlimefunItemStack MANUAL_MULTI=
+ AddUtils.themed("MANUAL_MULTI",new ItemStack(Material.CRAFTING_TABLE),AddUtils.Theme.MANUAL1,"测试快捷机器","多方块机器");
+ public static final SlimefunItemStack MANUAL_KILL=
+ AddUtils.themed("MANUAL_KILL",new ItemStack(Material.RESPAWN_ANCHOR),AddUtils.Theme.MANUAL1,"测试快捷机器","击杀掉落");
+ public static final SlimefunItemStack MANUAL_INF=
+ AddUtils.themed("MANUAL_INF",new ItemStack(Material.RESPAWN_ANCHOR),AddUtils.Theme.MANUAL1,"测试快捷机器","无尽工作台");
+ public static final SlimefunItemStack MANUAL_MOB=
+ AddUtils.themed("MANUAL_MOB",new ItemStack(Material.LODESTONE),AddUtils.Theme.MANUAL1,"测试快捷机器","无尽芯片注入");
+ public static final SlimefunItemStack MANUAL_NTWBENCH=
+ AddUtils.themed("MANUAL_NTWBENCH",new ItemStack(Material.DRIED_KELP_BLOCK),AddUtils.Theme.MANUAL1,"测试快捷机器","网络工作台");
+ public static final SlimefunItemStack AUTOSMELTING1=
+ AddUtils.themed("AUTOCRAFT_SMELT",new ItemStack(Material.FURNACE),AddUtils.Theme.MANUAL1,"测试AutoCraft","冶炼炉");
+ public static final SlimefunItemStack AUTO_INF=
+ AddUtils.themed("AUTOCRAFT_INF",new ItemStack(Material.RESPAWN_ANCHOR),AddUtils.Theme.MANUAL1,"测试定向合成机","无尽工作台");
+
+// public static final SlimefunItemStack INPORT=
+// AddUtils.themed("INPORT",new ItemStack(Material.END_STONE),AddUtils.Theme.CARGO1,"存入接口","较快的将物品存入奇点...");
+// public static final SlimefunItemStack OUTPORT=
+// AddUtils.themed("OUTPORT",new ItemStack(Material.END_STONE),AddUtils.Theme.CARGO1,"取出接口","较快的将物品取出奇点...");
+ public static final SlimefunItemStack TESTUNIT1=
+ AddUtils.themed("TESTUNIT1",new ItemStack(Material.GLASS),AddUtils.Theme.CARGO1,"测试存储单元","啥用都没");
+ public static final SlimefunItemStack TESTUNIT2=
+ AddUtils.themed("TESTUNIT2",new ItemStack(Material.GLASS),AddUtils.Theme.CARGO1,"测试存储单元2","啥用都没");
+ public static final SlimefunItemStack TESTUNIT3=
+ AddUtils.themed("TESTUNIT3",new ItemStack(Material.GLASS),AddUtils.Theme.CARGO1,"测试存储单元3","啥用都没");
+ public static final SlimefunItemStack AUTO_SPECIAL=
+ AddUtils.themed("AUTOCRAFT_SPECIAL",new ItemStack(Material.LOOM),AddUtils.Theme.MACHINE2,"测试特殊合成机","测试测试");
+ public static final SlimefunItemStack AUTO_MULTIBLOCK=
+ AddUtils.themed("AUTOCRAFT_MULTIBLOCK",new ItemStack(Material.BRICKS),AddUtils.Theme.MANUAL1,"测试快捷多方块","测试测试");
+ public static final SlimefunItemStack ANTIGRAVITY=
+ AddUtils.themed("ANTI_GRAVITY_ITEM",new ItemStack(Material.NETHERITE_INGOT),AddUtils.Theme.ITEM1,"反重力装置","测试测试");
+ public static final SlimefunItemStack WORKBENCH1=
+ AddUtils.themed("WORKBENCH1",new ItemStack(Material.ENCHANTING_TABLE),AddUtils.Theme.BENCH1,"测试工作站","测试测试");
+ //final
+ public static final SlimefunItemStack FINAL_SEQUENTIAL=AddUtils.themed("FINAL_SEQUENTIAL",Material.STRIPPED_BAMBOO_BLOCK,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.FINAL_SEQUENTIAL.Name"),Language.getList("Machines.FINAL_SEQUENTIAL.Lore"));
+
+ public static final SlimefunItemStack FINAL_STACKMACHINE=AddUtils.themed("FINAL_STACKMACHINE",Material.BLAST_FURNACE,AddUtils.Theme.MACHINE1,
+ Language.get("Machines.FINAL_STACKMACHINE.Name"),Language.getList("Machines.FINAL_STACKMACHINE.Lore"));
+ public static final SlimefunItemStack FINAL_STACKMGENERATOR=AddUtils.themed("FINAL_STACKMGENERATOR",Material.POLISHED_ANDESITE,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.FINAL_STACKMGENERATOR.Name"),Language.getList("Generators.FINAL_STACKMGENERATOR.Lore"));
+ public static final SlimefunItemStack FINAL_STONE_MG=AddUtils.themed("FINAL_STONE_MG",Material.DEEPSLATE_TILES,AddUtils.Theme.MACHINE2,
+ Language.get("Generators.FINAL_STONE_MG.Name"),Language.getList("Generators.FINAL_STONE_MG.Lore"));
+
+ public static final SlimefunItemStack TESTPART=AddUtils.themed("TEST_MPART",Material.OBSIDIAN,AddUtils.Theme.MACHINE1,"测试多方块部件","测试测试");
+ public static final SlimefunItemStack TESTCORE=AddUtils.themed("TEST_MCORE",Material.IRON_BLOCK,AddUtils.Theme.MACHINE1,"测试多方块核心","测试测试");
+ public static final SlimefunItemStack TEST_SEQ=AddUtils.themed("TEST_SEQ",Material.LOOM,AddUtils.Theme.MACHINE1,
+ Language.get("Items.TEST_SEQ.Name"),Language.getList("Items.TEST_SEQ.Lore"));
+
+ //tmp占位符
+ public static final SlimefunItemStack TMP1= new SlimefunItemStack("TMP1",Material.STONE,"&b占位符","&7暂未开发");
+ public static final SlimefunItemStack RESOLVE_FAILED=AddUtils.themed("RESOLVE_FAILED",Material.STRUCTURE_VOID,AddUtils.Theme.NONE,
+ Language.get("Items.RESOLVE_FAILED.Name"),Language.getList("Items.RESOLVE_FAILED.Lore"));
+ public static final SlimefunItemStack SHELL=AddUtils.themed("SHELL",Material.BOOK,AddUtils.Theme.ITEM1,
+ Language.get("Items.SHELL.Name"),Language.getList("Items.SHELL.Lore"));
+ public static final HashSet ADDGLOW=new HashSet<>(){{
+ add(RESOLVE_FAILED);
+ add(BUG);
+ add(INFO);
+ add(BEYOND);
+ add(TRUE_);
+ add(CHIP_INGOT);
+ add(PARADOX);
+ add(NOLOGIC);
+ add(DIMENSIONAL_SHARD);
+ add(WORLD_FEAT);
+ add(NETHER_FEAT);
+ add(END_FEAT);
+ add(REINFORCED_CHIP_INGOT);
+ add(ABSTRACT_INGOT);
+ add(STAR_GOLD_INGOT);
+ add(METAL_CORE);
+ add(TECH_CORE);
+ add(SMELERY_CORE);
+ add(MASS_CORE);
+ add(PORTAL_FRAME);
+ add(LSINGULARITY);
+ add(ATOM_INGOT);
+ add(PAGOLD);
+ add(BISILVER);
+ add(STACKFRAME);
+ add(MULTIBLOCK_MANUAL);
+ add(ADVANCED_CHIP_MAKER);
+ add(ADV_ADJACENT_CARGO);
+ add(ADV_REMOTE_CARGO);
+ add(ADV_LINE_CARGO);
+ add(ENERGY_AMPLIFIER);
+ add(MORE2);
+ add(INF_MOBSIMULATION);
+ add(ENTITY_FEAT);
+ add(WITHERPROOF_REDSTONE);
+ add(WITHERPROOF_REDS);
+ add(BEDROCK_BREAKER);
+ add(TRACE_ARROW);
+ }};
+}
diff --git a/src/main/java/me/matl114/logitech/SlimefunItem/AddSlimefunItems.java b/src/main/java/me/matl114/logitech/SlimefunItem/AddSlimefunItems.java
index 654b299..4ab3dd8 100644
--- a/src/main/java/me/matl114/logitech/SlimefunItem/AddSlimefunItems.java
+++ b/src/main/java/me/matl114/logitech/SlimefunItem/AddSlimefunItems.java
@@ -53,13 +53,18 @@
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.DirtyChestMenu;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
+import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.block.Biome;
import org.bukkit.block.Block;
+import org.bukkit.block.BlockState;
+import org.bukkit.block.data.BlockData;
+import org.bukkit.block.data.Waterlogged;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
+import org.bukkit.event.block.SpongeAbsorbEvent;
import org.bukkit.inventory.ItemStack;
import java.util.*;
@@ -962,6 +967,94 @@ public void onClickAction(PlayerRightClickEvent event) {
}
}
.register();
+ public static final SlimefunItem SUPERSPONGE=new CustomProps(AddGroups.VANILLA,AddItem.SUPERSPONGE,RecipeType.ENHANCED_CRAFTING_TABLE,
+ recipe("SPONGE","PISTON","SPONGE",AddItem.WITHERPROOF_REDS,AddItem.REDSTONE_ENGINE,AddItem.WITHERPROOF_REDS,
+ "WET_SPONGE","PISTON","WET_SPONGE")){
+ protected final int SEARCH_RANGE=10;
+ protected final Set COOL_DOWN=ConcurrentHashMap.newKeySet();
+ public void onClickAction(PlayerRightClickEvent event){
+ Player p=event.getPlayer();
+ if(p!=null){
+ if(COOL_DOWN.contains(p)){
+ AddUtils.sendMessage(p,"&c物品冷却中");
+ }else{
+
+ Location loc=p.getLocation();
+ if(WorldUtils.hasPermission(p,loc,Interaction.INTERACT_BLOCK,Interaction.PLACE_BLOCK)&&canUse(p,true)){
+ ItemStack stack= event.getItem();
+ stack.setAmount(stack.getAmount()-1);
+ AddUtils.forceGive(p,AddItem.SUPERSPONGE_USED,1);
+ final HashSet liquids=new HashSet<>();
+ final HashSet blockInLiquids=new HashSet<>();
+ Schedules.launchSchedules(()->{
+ COOL_DOWN.add(p);
+ try{
+ int dx=loc.getBlockX();
+ int dy=loc.getBlockY();
+ int dz=loc.getBlockZ();
+ AddUtils.sendMessage(p,"&a开始搜索");
+ for(int i=-SEARCH_RANGE;i<=SEARCH_RANGE;i++){
+ for(int j=-SEARCH_RANGE;j<=SEARCH_RANGE;j++){
+ for(int k=-SEARCH_RANGE;k<=SEARCH_RANGE;k++){
+ Block checkBlock=loc.getWorld().getBlockAt(dx+i,dy+j,dz+k);
+ if(checkBlock!=null){
+ if(WorldUtils.isLiquid( checkBlock)){
+ liquids.add(checkBlock);
+ }
+ else if(WorldUtils.isWaterLogged(checkBlock)){
+ blockInLiquids.add(checkBlock);
+ }
+ }
+
+ }
+ }
+ }
+ List blocksToBeChanged=new ArrayList<>(liquids.size()+blockInLiquids.size()+2);
+ for(Block b:liquids){
+ blocksToBeChanged.add(b.getState());
+ }
+ for(Block b:blockInLiquids){
+ blocksToBeChanged.add(b.getState());
+ }
+ if(!blocksToBeChanged.isEmpty()){
+ AddUtils.sendMessage(p,"&a搜索完成,正在吸取液体");
+ BukkitUtils.executeSync(()->{
+ SpongeAbsorbEvent spongeAbsorbEvent=new SpongeAbsorbEvent(loc.getBlock(),blocksToBeChanged);
+ Bukkit.getPluginManager().callEvent(spongeAbsorbEvent);
+ if(spongeAbsorbEvent.isCancelled()){
+ AddUtils.sendMessage(p,"&c抱歉,你没有在这里吸取液体的权限");
+ }else {
+ for(Block b:liquids){
+ b.setType(Material.AIR);
+ }
+ for(Block b:blockInLiquids){
+ BlockData data=b.getBlockData();
+ if(data instanceof Waterlogged wl){
+ wl.setWaterlogged(false);
+ b.setBlockData(data,true);
+ }
+ }
+ AddUtils.sendMessage(p,"&a成功移除液体!");
+ }
+ });
+ }else{
+ AddUtils.sendMessage(p,"&c附近没有剩余的液体");
+ }
+ }finally {
+ COOL_DOWN.remove(p);
+ }
+ },0,false,0);
+ }
+ else{
+ AddUtils.sendMessage(p,"&c抱歉,你没有在这里吸水的权限");
+ }
+
+ }
+ }
+ event.cancel();
+ }
+ }
+ .register();
//Material Generators
public static final SlimefunItem MAGIC_STONE=new SMGenerator(AddGroups.GENERATORS, AddItem.MAGIC_STONE,RecipeType.ENHANCED_CRAFTING_TABLE,
@@ -2073,6 +2166,10 @@ public void onClickAction(PlayerRightClickEvent event) {
recipe(AddItem.STAR_GOLD_INGOT, AddItem.LSINGULARITY, AddItem.STAR_GOLD_INGOT, "ENERGIZED_CAPACITOR", AddItem.LASER, "ENERGIZED_CAPACITOR",
AddItem.STAR_GOLD_INGOT, AddItem.LSINGULARITY, AddItem.STAR_GOLD_INGOT))
.register();
+ public static final SlimefunItem TRACE_ARROW=new TrackingArrowLauncher(AddGroups.SPECIAL,AddItem.TRACE_ARROW,RecipeType.ENHANCED_CRAFTING_TABLE,
+ recipe(AddItem.LSINGULARITY,"EXPLOSIVE_BOW",AddItem.LSINGULARITY,"ENERGIZED_CAPACITOR",AddItem.ATOM_INGOT,"ENERGIZED_CAPACITOR",
+ AddItem.LSINGULARITY,"ICY_BOW",AddItem.LSINGULARITY))
+ .register();
public static final SlimefunItem RADIATION_CLEAR=new CustomProps(AddGroups.SPECIAL, AddItem.RADIATION_CLEAR, RecipeType.NULL,
AddUtils.NULL_RECIPE.clone(), null) {
public void onClickAction(PlayerRightClickEvent event) {
diff --git a/src/main/java/me/matl114/logitech/SlimefunItem/Blocks/Laser.java b/src/main/java/me/matl114/logitech/SlimefunItem/Blocks/Laser.java
index e66dcc3..5a98535 100644
--- a/src/main/java/me/matl114/logitech/SlimefunItem/Blocks/Laser.java
+++ b/src/main/java/me/matl114/logitech/SlimefunItem/Blocks/Laser.java
@@ -1,173 +1,175 @@
-package me.matl114.logitech.SlimefunItem.Blocks;
-
-import com.xzavier0722.mc.plugin.slimefun4.storage.controller.SlimefunBlockData;
-import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
-import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem;
-import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
-import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType;
-import me.matl114.logitech.Schedule.PersistentEffects.CustomEffects;
-import me.matl114.logitech.Schedule.PersistentEffects.PlayerEffects;
-import me.matl114.logitech.Schedule.Schedules;
-import me.matl114.logitech.SlimefunItem.Blocks.MultiBlock.FinalAltarCore;
-import me.matl114.logitech.SlimefunItem.Machines.AbstractMachine;
-import me.matl114.logitech.SlimefunItem.Machines.MenuBlock;
-import me.matl114.logitech.Utils.*;
-import me.matl114.logitech.Utils.UtilClass.CargoClass.Directions;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
-import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
-import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
-import org.bukkit.Location;
-import org.bukkit.Particle;
-import org.bukkit.block.Block;
-import org.bukkit.block.data.BlockData;
-import org.bukkit.block.data.Directional;
-import org.bukkit.block.data.type.Dispenser;
-import org.bukkit.entity.Damageable;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.Player;
-import org.bukkit.event.block.BlockPlaceEvent;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.util.BoundingBox;
-
-import javax.annotation.Nullable;
-import java.util.*;
-
-public class Laser extends AbstractMachine implements MultiBlockPart, FinalAltarCore.FinalAltarChargable, MenuBlock.MenuNotAccessible {
- public int[] getInputSlots(){
- return new int[0];
- }
- public int[] getOutputSlots(){
- return new int[0];
- }
- public List getMachineRecipes(){
- return new ArrayList<>();
- }
- public final String PARTID;
- public Laser(ItemGroup category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe,
- int energybuffer, int energyConsumption,String partId) {
- super(category, item, recipeType, recipe, energybuffer, energyConsumption);
- this.PARTID=partId;
- this.setDisplayRecipes(Utils.list(
- AddUtils.getInfoShow("&f机制 - &c激光",
- "&7该机器满足指定条件会发射激光并消耗电力",
- "&7可选条件1: 被红石充能",
- "&7可选条件2: 置于终极祭坛上",
- "&7发射的激光等级lvl为%d+(祭坛等级)*%d".formatted(DEFAULT_LVL,FORCE_INCREASE),
- "&7激光会杀死非玩家实体,并对玩家造成0.5*(lvl)^2的真实伤害",
- "&7激光会沿该方块朝向进行延申,直至碰见首个非空气方块",
- "&7或者达到最大长度 %d 格".formatted(MAX_SEARCH_LEN)),null,
- AddUtils.getInfoShow("&f机制 - &c充能",
- "&7当置于终极祭坛上时",
- "&7该机器会尝试对激光最末端的机器尝试充能",
- "&7仅有特定机器才能被激光充能",
- "&7一般用于机器激活的前置条件"),null
- ));
- }
- public String getPartId(){
- return PARTID;
- }
- public String POWERED_KEY="po";
- public String DIRECTION="dir";
- public int MAX_SEARCH_LEN=32;
- public void process(Block b, @Nullable BlockMenu menu, SlimefunBlockData data){
-
- }
- protected final int DEFAULT_LVL=3;
- protected final int FORCE_INCREASE=6;
- protected static final HashMap DIR_KEYS=new LinkedHashMap<>(){{
- for(Directions dir:Directions.values()) {
- put(dir, AddUtils.concat("f_",dir.toString()));
- }
- }};
- public interface LaserChargable{
- default int hasCharged(SlimefunBlockData data,Directions dir){
- return DataCache.getCustomData(data,Laser.DIR_KEYS.get(dir),0);
- }
- static void setCharged(SlimefunBlockData data ,Directions dir,int charge){
- DataCache.setCustomData(data,Laser.DIR_KEYS.get(dir),charge);
- }
- }
- @Override
- public void tick(Block b, BlockMenu menu, SlimefunBlockData data, int ticker){
- if(conditionHandle(b,menu)){
- final int force=this.mayForced(data);
- Location loc=b.getLocation();
- int charged= DataCache.getCustomData(loc,POWERED_KEY,0);
- if(force>0||charged!=0){
- int direction=DataCache.getCustomData(data,DIRECTION,-1);
- if(direction>=0){
- progressorCost(b,menu);
- Directions dir= Directions.fromInt(direction);
- Schedules.launchSchedules(()->{
- Location loc2=loc.clone();
- int i=0;
- for (;i0){
- //给机器充能
- // Debug.debug(loc2);
- SlimefunItem it=DataCache.getSfItem(loc2);
- if(it instanceof LaserChargable lc){
- SlimefunBlockData data2=DataCache.safeLoadBlock(loc2);
- LaserChargable.setCharged(data2,dir,2);
- }
- }
- Location end=dir.remote(launcher,i+1);
- WorldUtils.spawnLineParticle(launcher,end, Particle.END_ROD,5*i);
- Runnable killingThread=()->{
- BoundingBox box=new BoundingBox(loc.getX(),loc.getY(),loc.getZ(),end.getX()+0.5,end.getY()+0.5,end.getZ()+0.5);
- Collection entities=loc.getWorld().getNearbyEntities(box);
- for (Entity e :entities){
- if(e instanceof Player p){
- PlayerEffects.grantEffect(CustomEffects.LASER,p,DEFAULT_LVL+force*FORCE_INCREASE,1);
- }else if(e instanceof Damageable dm){
- dm.damage(114);
- }else {
- e.remove();
- }
- }
- };
- Schedules.launchSchedules(killingThread,0,true,0);
- Schedules.launchSchedules(killingThread,6,true,0);
- //FIXME async thread of searching nonair blocks, and find out the killing bounding box
- },0,false,0);
- }
- }
- Schedules.launchSchedules(()->{
- //FIXME change this to observer or dropper
- if(force>0){
- return;
- }
- BlockData data1=b.getBlockData();
- if(data1 instanceof Dispenser dp){
- DataCache.setCustomData(data,POWERED_KEY,dp.isTriggered()?1:0);
- }
-
- },0,false,0);
- }
- }
- public void onPlace(BlockPlaceEvent e,Block b){
- super.onPlace(e,b);
- BlockData data1=b.getBlockData();
- if(data1 instanceof Directional dp){
- DataCache.setCustomData(b.getLocation(),DIRECTION,Directions.fromBlockFace(dp.getFacing()).toInt());
- }
- }
- public boolean redirectMenu(){
- return false;
- }
- public void constructMenu(BlockMenuPreset preset){
-
- }
- public void registerBlockMenu(SlimefunItem that){
- //handle blockPlaceEvent
- handleBlock(that);
- }
-
-}
+package me.matl114.logitech.SlimefunItem.Blocks;
+
+import com.xzavier0722.mc.plugin.slimefun4.storage.controller.SlimefunBlockData;
+import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
+import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem;
+import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
+import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType;
+import me.matl114.logitech.Schedule.PersistentEffects.CustomEffects;
+import me.matl114.logitech.Schedule.PersistentEffects.PlayerEffects;
+import me.matl114.logitech.Schedule.Schedules;
+import me.matl114.logitech.SlimefunItem.Blocks.MultiBlock.FinalAltarCore;
+import me.matl114.logitech.SlimefunItem.Machines.AbstractMachine;
+import me.matl114.logitech.SlimefunItem.Machines.MenuBlock;
+import me.matl114.logitech.Utils.*;
+import me.matl114.logitech.Utils.UtilClass.CargoClass.Directions;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
+import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
+import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
+import org.bukkit.Location;
+import org.bukkit.Particle;
+import org.bukkit.block.Block;
+import org.bukkit.block.data.BlockData;
+import org.bukkit.block.data.Directional;
+import org.bukkit.block.data.type.Dispenser;
+import org.bukkit.entity.Damageable;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Player;
+import org.bukkit.event.block.BlockPlaceEvent;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.util.BoundingBox;
+
+import javax.annotation.Nullable;
+import java.util.*;
+
+public class Laser extends AbstractMachine implements MultiBlockPart, FinalAltarCore.FinalAltarChargable, MenuBlock.MenuNotAccessible {
+ public int[] getInputSlots(){
+ return new int[0];
+ }
+ public int[] getOutputSlots(){
+ return new int[0];
+ }
+ public List getMachineRecipes(){
+ return new ArrayList<>();
+ }
+ public final String PARTID;
+ public Laser(ItemGroup category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe,
+ int energybuffer, int energyConsumption,String partId) {
+ super(category, item, recipeType, recipe, energybuffer, energyConsumption);
+ this.PARTID=partId;
+ this.setDisplayRecipes(Utils.list(
+ AddUtils.getInfoShow("&f机制 - &c激光",
+ "&7该机器满足指定条件会发射激光并消耗电力",
+ "&7可选条件1: 被红石充能",
+ "&7可选条件2: 置于终极祭坛上",
+ "&7发射的激光等级lvl为%d+(祭坛等级)*%d".formatted(DEFAULT_LVL,FORCE_INCREASE),
+ "&7激光会杀死非玩家实体,并对玩家造成0.5*(lvl)^2的真实伤害",
+ "&7激光会沿该方块朝向进行延申,直至碰见首个非空气方块",
+ "&7或者达到最大长度 %d 格".formatted(MAX_SEARCH_LEN)),null,
+ AddUtils.getInfoShow("&f机制 - &c充能",
+ "&7当置于终极祭坛上时",
+ "&7该机器会尝试对激光最末端的机器尝试充能",
+ "&7仅有特定机器才能被激光充能",
+ "&7一般用于机器激活的前置条件"),null
+ ));
+ }
+ public String getPartId(){
+ return PARTID;
+ }
+ public String POWERED_KEY="po";
+ public String DIRECTION="dir";
+ public int MAX_SEARCH_LEN=32;
+ public void process(Block b, @Nullable BlockMenu menu, SlimefunBlockData data){
+
+ }
+ protected final int DEFAULT_LVL=3;
+ protected final int FORCE_INCREASE=6;
+ protected static final HashMap DIR_KEYS=new LinkedHashMap<>(){{
+ for(Directions dir:Directions.values()) {
+ put(dir, AddUtils.concat("f_",dir.toString()));
+ }
+ }};
+ public interface LaserChargable{
+ default int hasCharged(SlimefunBlockData data,Directions dir){
+ return DataCache.getCustomData(data,Laser.DIR_KEYS.get(dir),0);
+ }
+ static void setCharged(SlimefunBlockData data ,Directions dir,int charge){
+ DataCache.setCustomData(data,Laser.DIR_KEYS.get(dir),charge);
+ }
+ }
+ //FIXME powered wrongly
+ //FIXME charge machine wrongly
+ @Override
+ public void tick(Block b, BlockMenu menu, SlimefunBlockData data, int ticker){
+ if(conditionHandle(b,menu)){
+ final int force=this.mayForced(data);
+ Location loc=b.getLocation();
+ int charged= DataCache.getCustomData(loc,POWERED_KEY,0);
+ if(force>0||charged!=0){
+ int direction=DataCache.getCustomData(data,DIRECTION,-1);
+ if(direction>=0){
+ progressorCost(b,menu);
+ Directions dir= Directions.fromInt(direction);
+ Schedules.launchSchedules(()->{
+ Location loc2=loc.clone();
+ int i=0;
+ for (;i0){
+ //给机器充能
+ // Debug.debug(loc2);
+ SlimefunItem it=DataCache.getSfItem(loc2);
+ if(it instanceof LaserChargable lc){
+ SlimefunBlockData data2=DataCache.safeLoadBlock(loc2);
+ LaserChargable.setCharged(data2,dir,2);
+ }
+ }
+ Location end=dir.remote(launcher,i+1);
+ WorldUtils.spawnLineParticle(launcher,end, Particle.END_ROD,5*i);
+ Runnable killingThread=()->{
+ BoundingBox box=new BoundingBox(loc.getX(),loc.getY(),loc.getZ(),end.getX()+0.5,end.getY()+0.5,end.getZ()+0.5);
+ Collection entities=loc.getWorld().getNearbyEntities(box);
+ for (Entity e :entities){
+ if(e instanceof Player p){
+ PlayerEffects.grantEffect(CustomEffects.LASER,p,DEFAULT_LVL+force*FORCE_INCREASE,1);
+ }else if(e instanceof Damageable dm){
+ dm.damage(114);
+ }else {
+ e.remove();
+ }
+ }
+ };
+ Schedules.launchSchedules(killingThread,0,true,0);
+ Schedules.launchSchedules(killingThread,6,true,0);
+ //FIXME async thread of searching nonair blocks, and find out the killing bounding box
+ },0,false,0);
+ }
+ }
+ Schedules.launchSchedules(()->{
+ //FIXME change this to observer or dropper
+ if(force>0){
+ return;
+ }
+ BlockData data1=b.getBlockData();
+ if(data1 instanceof Dispenser dp){
+ DataCache.setCustomData(data,POWERED_KEY,dp.isTriggered()?1:0);
+ }
+
+ },0,false,0);
+ }
+ }
+ public void onPlace(BlockPlaceEvent e,Block b){
+ super.onPlace(e,b);
+ BlockData data1=b.getBlockData();
+ if(data1 instanceof Directional dp){
+ DataCache.setCustomData(b.getLocation(),DIRECTION,Directions.fromBlockFace(dp.getFacing()).toInt());
+ }
+ }
+ public boolean redirectMenu(){
+ return false;
+ }
+ public void constructMenu(BlockMenuPreset preset){
+
+ }
+ public void registerBlockMenu(SlimefunItem that){
+ //handle blockPlaceEvent
+ handleBlock(that);
+ }
+
+}
diff --git a/src/main/java/me/matl114/logitech/SlimefunItem/Blocks/MultiBlock/FinalAltarCore.java b/src/main/java/me/matl114/logitech/SlimefunItem/Blocks/MultiBlock/FinalAltarCore.java
index 59dfb52..046d2a8 100644
--- a/src/main/java/me/matl114/logitech/SlimefunItem/Blocks/MultiBlock/FinalAltarCore.java
+++ b/src/main/java/me/matl114/logitech/SlimefunItem/Blocks/MultiBlock/FinalAltarCore.java
@@ -1,231 +1,235 @@
-package me.matl114.logitech.SlimefunItem.Blocks.MultiBlock;
-
-import com.xzavier0722.mc.plugin.slimefun4.storage.controller.SlimefunBlockData;
-import com.xzavier0722.mc.plugin.slimefun4.storage.util.StorageCacheUtils;
-import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
-import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem;
-import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
-import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType;
-import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack;
-import io.github.thebusybiscuit.slimefun4.utils.ChestMenuUtils;
-import me.matl114.logitech.SlimefunItem.AddItem;
-import me.matl114.logitech.SlimefunItem.Blocks.MultiBlockTypes;
-import me.matl114.logitech.SlimefunItem.Blocks.MultiCore;
-import me.matl114.logitech.Utils.AddUtils;
-import me.matl114.logitech.Utils.DataCache;
-import me.matl114.logitech.Utils.Settings;
-import me.matl114.logitech.Utils.UtilClass.MultiBlockClass.*;
-import me.matl114.logitech.Utils.UtilClass.MultiBlockClass.MultiLevelBlock.MultiLevelBlock;
-import me.matl114.logitech.Utils.UtilClass.MultiBlockClass.MultiLevelBlock.MultiLevelBlockType;
-import me.matl114.logitech.Utils.Utils;
-import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
-import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.event.block.BlockBreakEvent;
-import org.bukkit.inventory.ItemStack;
-
-import java.util.HashMap;
-
-public class FinalAltarCore extends MultiCore {
- protected static final String LVL_KEY="lv";
- public interface FinalAltarChargable{
- public static String FORCE_STATE="fi";
- default int getForced(SlimefunBlockData data){
- return DataCache.getCustomData(data,FORCE_STATE,0);
- }
- static void setForced(SlimefunBlockData data,int lvl){
- DataCache.setCustomString(data,FORCE_STATE,String.valueOf(lvl));
- }
- default int mayForced(SlimefunBlockData data){
- //TODO 完成多方块结构 完成多级激活模式
- //TODO 暂时不知道咋做,先写着
- int forcelvl=DataCache.getCustomData(data,FORCE_STATE,0);
- if(forcelvl>0){
- return forcelvl;
- }
- Location loc=data.getLocation().clone().add(0,-1,0);
- if(DataCache.getSfItem(loc) instanceof FinalAltarCore){
- int lv=DataCache.getCustomData(loc,FinalAltarCore.LVL_KEY,0);
- if(lv>0){
- DataCache.setCustomData(data,FORCE_STATE,lv);
- return lv;
- }
- }
- return 0;
- }
- static void clearForced(Location loc){
- SlimefunItem it=DataCache.getSfItem(loc);
- if(it instanceof FinalAltarChargable fac){
- DataCache.setCustomData(loc,FORCE_STATE,0);
- }
- }
- }
- //TODO set force level when mulitblock broke down
-
- protected final int[] BORDER=new int[]{0,1,2,3,5,6,7};
- protected final int HOLOGRAM_SLOT=8;
- protected final int STATUS_SLOT=4;
- protected final ItemStack STATUS_ITEM_ON_1=new CustomItemStack(Material.GREEN_STAINED_GLASS_PANE,
- "&6点击切换祭坛状态","&6shift点击尝试刷新祭坛","&7祭坛状态: &a开启","&7等级: &6壹","&7关闭祭坛不会破坏祭坛本体,只会取消上方机器的激活状态");
- protected final ItemStack STATUS_ITEM_ON_2=new CustomItemStack(Material.GREEN_STAINED_GLASS_PANE,
- "&6点击切换祭坛状态","&6shift点击尝试刷新祭坛","&7祭坛状态: &a开启","&7等级: &6贰","&7关闭祭坛不会破坏祭坛本体,只会取消上方机器的激活状态");
- protected final ItemStack STATUS_ITEM_OFF=new CustomItemStack(Material.RED_STAINED_GLASS_PANE,
- "&6点击切换祭坛状态","&6shift点击尝试刷新祭坛","&7祭坛状态: &c关闭","&7关闭祭坛不会破坏祭坛本体,只会取消上方机器的激活状态");
- protected final ItemStack HOLOGRAM_ITEM_ON=new CustomItemStack(Material.GREEN_STAINED_GLASS_PANE,"&6点击切换全息投影","&7当前状态: &a一级祭坛");
- protected final ItemStack HOLOGRAM_ITEM_ON_2=new CustomItemStack(Material.GREEN_STAINED_GLASS_PANE,"&6点击切换全息投影","&7当前状态: &a二级祭坛");
- protected final ItemStack HOLOGRAM_ITEM_OFF=new CustomItemStack(Material.RED_STAINED_GLASS_PANE,"&6点击切换全息投影","&7当前状态: &c关闭");
- protected final MultiLevelBlockType MBTYPE;
- public HashMap MBID_TO_ITEM=new HashMap<>(){{
- put("final.sub", AddItem.FINAL_LASER.clone());
- put("final.frame", AddItem.FINAL_FRAME.clone());
- put("final.base", AddItem.FINAL_BASE.clone());
- }};
- public int[] getInputSlots(){
- return new int[0];
- }
- public int[] getOutputSlots(){
- return new int[0];
- }
- public FinalAltarCore(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType,
- ItemStack[] recipe, String blockId){
- super(itemGroup, item, recipeType, recipe, blockId);
- this.MBTYPE = MultiBlockTypes.FINAL_ALTAR;
- this.setDisplayRecipes(Utils.list(
- AddUtils.getInfoShow("&f机制 - &c多级多方块机器",
- "&7终极祭坛拥有两个等级",
- "&7其中,贰级终极祭坛需要在壹级终极祭坛上增加额外的多方块结构",
- "&7两者的构造在内置的投影中均可查看",
- "&7当你需要在壹,贰级终极祭坛切换时,请关闭多方块并重启,或者尝试点击刷新祭坛按钮")
- ));
- }
- public MultiLevelBlockType getMultiBlockType(){
- return MBTYPE;
- }
- public MultiBlockService.MultiBlockBuilder BUILDER=( (core, type, uid) -> {
- AbstractMultiBlockHandler blockHandler=MultiBlockHandler.createHandler(core,type,uid);
- AbstractMultiBlock block=blockHandler.getMultiBlock();
- int level=0;
- if(block instanceof MultiLevelBlock lb){
- level=lb.getLevel();
- }
- DataCache.setCustomData(core,LVL_KEY,level);
- return blockHandler;
- });
- public MultiBlockService.MultiBlockBuilder getBuilder(){
- return BUILDER;
- }
-
- public void constructMenu(BlockMenuPreset inv) {
- int[] border = BORDER;
- int len = border.length;
- for (int i = 0; i < len; i++) {
- inv.addItem(border[i], ChestMenuUtils.getBackground(), ChestMenuUtils.getEmptyClickHandler());
- }
- inv.addItem(HOLOGRAM_SLOT, HOLOGRAM_ITEM_OFF);
- }
- public void onMultiBlockDisable(Location loc, AbstractMultiBlockHandler handler, MultiBlockService.DeleteCause cause){
- super.onMultiBlockDisable(loc,handler,cause);
- //要设置上面的机器,清除里面的force level数据
- Location poweredLoc =loc.clone().add(0,1,0);
- FinalAltarChargable.clearForced(poweredLoc);
- BlockMenu inv= StorageCacheUtils.getMenu(loc);
- if(inv!=null){
- inv.replaceExistingItem(STATUS_SLOT,STATUS_ITEM_OFF);
- }
- }
- public void onMultiBlockEnable(Location loc,AbstractMultiBlockHandler handler){
- super.onMultiBlockEnable(loc,handler);
- }
- public void updateMenu(BlockMenu inv, Block block, Settings mod){
- int holoStatus=DataCache.getCustomData(inv.getLocation(),"holo",0);
- if(holoStatus==0){
- inv.replaceExistingItem(HOLOGRAM_SLOT,HOLOGRAM_ITEM_OFF);
-
- }else if(holoStatus==1){
- inv.replaceExistingItem(HOLOGRAM_SLOT,HOLOGRAM_ITEM_ON);
-
- }else{
- inv.replaceExistingItem(HOLOGRAM_SLOT,HOLOGRAM_ITEM_ON_2);
- }
- }
- public void newMenuInstance(BlockMenu inv, Block block){
- Location loc2=block.getLocation();
- if (MultiBlockService.getStatus(loc2)!=0){
- int lvl=DataCache.getCustomData(inv.getLocation(),LVL_KEY,0);
- inv.replaceExistingItem(STATUS_SLOT,lvl==1? STATUS_ITEM_ON_1:STATUS_ITEM_ON_2);
- }else {
- inv.replaceExistingItem(STATUS_SLOT,STATUS_ITEM_OFF);
- }
- inv.addMenuClickHandler(STATUS_SLOT,((player, i, itemStack, clickAction) -> {
- Location loc=inv.getLocation();
- if(MultiBlockService.getStatus(loc)==0){//not working
- if(MultiBlockService.createNewHandler(loc,getBuilder(),getMultiBlockType())){
- int code=DataCache.getCustomData(loc,LVL_KEY,0);
- if(code>0){
- inv.replaceExistingItem(STATUS_SLOT,code==1? STATUS_ITEM_ON_1:STATUS_ITEM_ON_2);
- AddUtils.sendMessage(player,"&a成功激活终极祭坛!");
- }else {
- MultiBlockService.deleteMultiBlock(loc,MultiBlockService.GENERIC);
- AddUtils.sendMessage(player,"&c构建祭坛时出现未知方块数据错误!请联系管理员");
- }
- }else {
- AddUtils.sendMessage(player,"&c终极祭坛结构不完整或者结构冲突!");
- inv.replaceExistingItem(STATUS_SLOT,STATUS_ITEM_OFF);
- }
-
- }else {//working toggle off
- MultiBlockService.deleteMultiBlock(loc,MultiBlockService.MANUALLY);
- AddUtils.sendMessage(player,"&a终极祭坛成功关闭");
- inv.replaceExistingItem(STATUS_SLOT,STATUS_ITEM_OFF);
- }
- return false;
- }));
- DataCache.setCustomData(inv.getLocation(),"holo",0);
- inv.addMenuClickHandler(HOLOGRAM_SLOT,((player, i, itemStack, clickAction) -> {
- Location loc=inv.getLocation();
- int holoStatus=DataCache.getCustomData(inv.getLocation(),"holo",0);
- int statusCode=MultiBlockService.getStatus(loc);
- MultiBlockService.removeHologramSync(loc);
- if(statusCode==0){
- if(holoStatus==0){
- AddUtils.sendMessage(player,"&a全息投影已切换至一级祭坛!");
- MultiBlockService.createHologram(loc,MBTYPE.getSubParts(0), MultiBlockService.Direction.NORTH, MBID_TO_ITEM);
- DataCache.setCustomData(loc,"holo",1);
- }else if(holoStatus==1){
- AddUtils.sendMessage(player,"&a全息投影已切换至二级祭坛!");
- MultiBlockService.createHologram(loc,MBTYPE, MultiBlockService.Direction.WEST, MBID_TO_ITEM);
- DataCache.setCustomData(loc,"holo",2);
- }else {
- AddUtils.sendMessage(player,"&a全息投影已关闭!");
- }
- }
- updateMenu(inv,block,Settings.RUN);
- return false;
- }));
- updateMenu(inv,block,Settings.RUN);
- }
- public void tick(Block b, BlockMenu menu,SlimefunBlockData data, int tickCount){
- //in this case .blockMenu is null
-
- if(MultiBlockService.acceptCoreRequest(b.getLocation(),getBuilder(),getMultiBlockType())){
- int autoCode=DataCache.getCustomData(data,"auto",0);
- runtimeCheck(menu.getLocation(),data,autoCode);
- processCore(b,menu);
- }
- process(b,menu,data);
- }
- public void processCore(Block b, BlockMenu menu){
- if(menu.hasViewer()){
- updateMenu(menu,b,Settings.RUN);
- }
- }
-
- public void onBreak(BlockBreakEvent e, BlockMenu inv){
- super.onBreak(e,inv);
- }
-
-
-
-}
+package me.matl114.logitech.SlimefunItem.Blocks.MultiBlock;
+
+import com.xzavier0722.mc.plugin.slimefun4.storage.controller.SlimefunBlockData;
+import com.xzavier0722.mc.plugin.slimefun4.storage.util.StorageCacheUtils;
+import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
+import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem;
+import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
+import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType;
+import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack;
+import io.github.thebusybiscuit.slimefun4.utils.ChestMenuUtils;
+import me.matl114.logitech.SlimefunItem.AddItem;
+import me.matl114.logitech.SlimefunItem.Blocks.MultiBlockTypes;
+import me.matl114.logitech.SlimefunItem.Blocks.MultiCore;
+import me.matl114.logitech.Utils.AddUtils;
+import me.matl114.logitech.Utils.DataCache;
+import me.matl114.logitech.Utils.Settings;
+import me.matl114.logitech.Utils.UtilClass.MultiBlockClass.*;
+import me.matl114.logitech.Utils.UtilClass.MultiBlockClass.MultiLevelBlock.MultiLevelBlock;
+import me.matl114.logitech.Utils.UtilClass.MultiBlockClass.MultiLevelBlock.MultiLevelBlockType;
+import me.matl114.logitech.Utils.Utils;
+import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
+import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.event.block.BlockBreakEvent;
+import org.bukkit.inventory.ItemStack;
+
+import java.util.HashMap;
+
+public class FinalAltarCore extends MultiCore {
+ protected static final String LVL_KEY="lv";
+ public interface FinalAltarChargable{
+ public static String FORCE_STATE="fi";
+ default int getForced(SlimefunBlockData data){
+ return DataCache.getCustomData(data,FORCE_STATE,0);
+ }
+ static void setForced(SlimefunBlockData data,int lvl){
+ DataCache.setCustomString(data,FORCE_STATE,String.valueOf(lvl));
+ }
+ default int mayForced(SlimefunBlockData data){
+ //TODO 完成多方块结构 完成多级激活模式
+ //TODO 暂时不知道咋做,先写着
+ int forcelvl=DataCache.getCustomData(data,FORCE_STATE,0);
+ if(forcelvl>0){
+ return forcelvl;
+ }
+ Location loc=data.getLocation().clone().add(0,-1,0);
+ //check if multiblock active
+ if(DataCache.getSfItem(loc) instanceof FinalAltarCore && MultiBlockService.getStatus(loc)!=0){
+ //get lvl key in active multiblock
+ int lv=DataCache.getCustomData(loc,FinalAltarCore.LVL_KEY,0);
+ if(lv>0){
+ DataCache.setCustomData(data,FORCE_STATE,lv);
+ return lv;
+ }
+ }
+ return 0;
+ }
+ static void clearForced(Location loc){
+ SlimefunItem it=DataCache.getSfItem(loc);
+ if(it instanceof FinalAltarChargable fac){
+ DataCache.setCustomData(loc,FORCE_STATE,0);
+ }
+ }
+ }
+ //TODO set force level when mulitblock broke down
+
+ protected final int[] BORDER=new int[]{0,1,2,3,5,6,7};
+ protected final int HOLOGRAM_SLOT=8;
+ protected final int STATUS_SLOT=4;
+ protected final ItemStack STATUS_ITEM_ON_1=new CustomItemStack(Material.GREEN_STAINED_GLASS_PANE,
+ "&6点击切换祭坛状态","&6shift点击尝试刷新祭坛","&7祭坛状态: &a开启","&7等级: &6壹","&7关闭祭坛不会破坏祭坛本体,只会取消上方机器的激活状态");
+ protected final ItemStack STATUS_ITEM_ON_2=new CustomItemStack(Material.GREEN_STAINED_GLASS_PANE,
+ "&6点击切换祭坛状态","&6shift点击尝试刷新祭坛","&7祭坛状态: &a开启","&7等级: &6贰","&7关闭祭坛不会破坏祭坛本体,只会取消上方机器的激活状态");
+ protected final ItemStack STATUS_ITEM_OFF=new CustomItemStack(Material.RED_STAINED_GLASS_PANE,
+ "&6点击切换祭坛状态","&6shift点击尝试刷新祭坛","&7祭坛状态: &c关闭","&7关闭祭坛不会破坏祭坛本体,只会取消上方机器的激活状态");
+ protected final ItemStack HOLOGRAM_ITEM_ON=new CustomItemStack(Material.GREEN_STAINED_GLASS_PANE,"&6点击切换全息投影","&7当前状态: &a一级祭坛");
+ protected final ItemStack HOLOGRAM_ITEM_ON_2=new CustomItemStack(Material.GREEN_STAINED_GLASS_PANE,"&6点击切换全息投影","&7当前状态: &a二级祭坛");
+ protected final ItemStack HOLOGRAM_ITEM_OFF=new CustomItemStack(Material.RED_STAINED_GLASS_PANE,"&6点击切换全息投影","&7当前状态: &c关闭");
+ protected final MultiLevelBlockType MBTYPE;
+ public HashMap MBID_TO_ITEM=new HashMap<>(){{
+ put("final.sub", AddItem.FINAL_LASER.clone());
+ put("final.frame", AddItem.FINAL_FRAME.clone());
+ put("final.base", AddItem.FINAL_BASE.clone());
+ }};
+ public int[] getInputSlots(){
+ return new int[0];
+ }
+ public int[] getOutputSlots(){
+ return new int[0];
+ }
+ public FinalAltarCore(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType,
+ ItemStack[] recipe, String blockId){
+ super(itemGroup, item, recipeType, recipe, blockId);
+ this.MBTYPE = MultiBlockTypes.FINAL_ALTAR;
+ this.setDisplayRecipes(Utils.list(
+ AddUtils.getInfoShow("&f机制 - &c多级多方块机器",
+ "&7终极祭坛拥有两个等级",
+ "&7其中,贰级终极祭坛需要在壹级终极祭坛上增加额外的多方块结构",
+ "&7两者的构造在内置的投影中均可查看",
+ "&7当你需要在壹,贰级终极祭坛切换时,请关闭多方块并重启,或者尝试点击刷新祭坛按钮")
+ ));
+ }
+ public MultiLevelBlockType getMultiBlockType(){
+ return MBTYPE;
+ }
+ public MultiBlockService.MultiBlockBuilder BUILDER=( (core, type, uid) -> {
+ AbstractMultiBlockHandler blockHandler=MultiBlockHandler.createHandler(core,type,uid);
+ AbstractMultiBlock block=blockHandler.getMultiBlock();
+ int level=0;
+ if(block instanceof MultiLevelBlock lb){
+ level=lb.getLevel();
+ }
+ DataCache.setCustomData(core,LVL_KEY,level);
+ return blockHandler;
+ });
+ public MultiBlockService.MultiBlockBuilder getBuilder(){
+ return BUILDER;
+ }
+
+ public void constructMenu(BlockMenuPreset inv) {
+ int[] border = BORDER;
+ int len = border.length;
+ for (int i = 0; i < len; i++) {
+ inv.addItem(border[i], ChestMenuUtils.getBackground(), ChestMenuUtils.getEmptyClickHandler());
+ }
+ inv.addItem(HOLOGRAM_SLOT, HOLOGRAM_ITEM_OFF);
+ }
+ public void onMultiBlockDisable(Location loc, AbstractMultiBlockHandler handler, MultiBlockService.DeleteCause cause){
+ super.onMultiBlockDisable(loc,handler,cause);
+ //这里也要清除,lvl数据 防止上面重新读取回来
+ DataCache.setCustomString(loc,LVL_KEY,"0");
+ //要设置上面的机器,清除里面的force level数据
+ Location poweredLoc =loc.clone().add(0,1,0);
+ FinalAltarChargable.clearForced(poweredLoc);
+ BlockMenu inv= StorageCacheUtils.getMenu(loc);
+ if(inv!=null){
+ inv.replaceExistingItem(STATUS_SLOT,STATUS_ITEM_OFF);
+ }
+ }
+ public void onMultiBlockEnable(Location loc,AbstractMultiBlockHandler handler){
+ super.onMultiBlockEnable(loc,handler);
+ }
+ public void updateMenu(BlockMenu inv, Block block, Settings mod){
+ int holoStatus=DataCache.getCustomData(inv.getLocation(),"holo",0);
+ if(holoStatus==0){
+ inv.replaceExistingItem(HOLOGRAM_SLOT,HOLOGRAM_ITEM_OFF);
+
+ }else if(holoStatus==1){
+ inv.replaceExistingItem(HOLOGRAM_SLOT,HOLOGRAM_ITEM_ON);
+
+ }else{
+ inv.replaceExistingItem(HOLOGRAM_SLOT,HOLOGRAM_ITEM_ON_2);
+ }
+ }
+ public void newMenuInstance(BlockMenu inv, Block block){
+ Location loc2=block.getLocation();
+ if (MultiBlockService.getStatus(loc2)!=0){
+ int lvl=DataCache.getCustomData(inv.getLocation(),LVL_KEY,0);
+ inv.replaceExistingItem(STATUS_SLOT,lvl==1? STATUS_ITEM_ON_1:STATUS_ITEM_ON_2);
+ }else {
+ inv.replaceExistingItem(STATUS_SLOT,STATUS_ITEM_OFF);
+ }
+ inv.addMenuClickHandler(STATUS_SLOT,((player, i, itemStack, clickAction) -> {
+ Location loc=inv.getLocation();
+ if(MultiBlockService.getStatus(loc)==0){//not working
+ if(MultiBlockService.createNewHandler(loc,getBuilder(),getMultiBlockType())){
+ int code=DataCache.getCustomData(loc,LVL_KEY,0);
+ if(code>0){
+ inv.replaceExistingItem(STATUS_SLOT,code==1? STATUS_ITEM_ON_1:STATUS_ITEM_ON_2);
+ AddUtils.sendMessage(player,"&a成功激活终极祭坛!");
+ }else {
+ MultiBlockService.deleteMultiBlock(loc,MultiBlockService.GENERIC);
+ AddUtils.sendMessage(player,"&c构建祭坛时出现未知方块数据错误!请联系管理员");
+ }
+ }else {
+ AddUtils.sendMessage(player,"&c终极祭坛结构不完整或者结构冲突!");
+ inv.replaceExistingItem(STATUS_SLOT,STATUS_ITEM_OFF);
+ }
+
+ }else {//working toggle off
+ MultiBlockService.deleteMultiBlock(loc,MultiBlockService.MANUALLY);
+ AddUtils.sendMessage(player,"&a终极祭坛成功关闭");
+ inv.replaceExistingItem(STATUS_SLOT,STATUS_ITEM_OFF);
+ }
+ return false;
+ }));
+ DataCache.setCustomData(inv.getLocation(),"holo",0);
+ inv.addMenuClickHandler(HOLOGRAM_SLOT,((player, i, itemStack, clickAction) -> {
+ Location loc=inv.getLocation();
+ int holoStatus=DataCache.getCustomData(inv.getLocation(),"holo",0);
+ int statusCode=MultiBlockService.getStatus(loc);
+ MultiBlockService.removeHologramSync(loc);
+ if(statusCode==0){
+ if(holoStatus==0){
+ AddUtils.sendMessage(player,"&a全息投影已切换至一级祭坛!");
+ MultiBlockService.createHologram(loc,MBTYPE.getSubParts(0), MultiBlockService.Direction.NORTH, MBID_TO_ITEM);
+ DataCache.setCustomData(loc,"holo",1);
+ }else if(holoStatus==1){
+ AddUtils.sendMessage(player,"&a全息投影已切换至二级祭坛!");
+ MultiBlockService.createHologram(loc,MBTYPE, MultiBlockService.Direction.WEST, MBID_TO_ITEM);
+ DataCache.setCustomData(loc,"holo",2);
+ }else {
+ AddUtils.sendMessage(player,"&a全息投影已关闭!");
+ }
+ }
+ updateMenu(inv,block,Settings.RUN);
+ return false;
+ }));
+ updateMenu(inv,block,Settings.RUN);
+ }
+ public void tick(Block b, BlockMenu menu,SlimefunBlockData data, int tickCount){
+ //in this case .blockMenu is null
+
+ if(MultiBlockService.acceptCoreRequest(b.getLocation(),getBuilder(),getMultiBlockType())){
+ int autoCode=DataCache.getCustomData(data,"auto",0);
+ runtimeCheck(menu.getLocation(),data,autoCode);
+ processCore(b,menu);
+ }
+ process(b,menu,data);
+ }
+ public void processCore(Block b, BlockMenu menu){
+ if(menu.hasViewer()){
+ updateMenu(menu,b,Settings.RUN);
+ }
+ }
+
+ public void onBreak(BlockBreakEvent e, BlockMenu inv){
+ super.onBreak(e,inv);
+ }
+
+
+
+}
diff --git a/src/main/java/me/matl114/logitech/SlimefunItem/Blocks/SpreadBlock.java b/src/main/java/me/matl114/logitech/SlimefunItem/Blocks/SpreadBlock.java
index c0669d5..b1e2ccc 100644
--- a/src/main/java/me/matl114/logitech/SlimefunItem/Blocks/SpreadBlock.java
+++ b/src/main/java/me/matl114/logitech/SlimefunItem/Blocks/SpreadBlock.java
@@ -1,151 +1,152 @@
-package me.matl114.logitech.SlimefunItem.Blocks;
-
-import com.xzavier0722.mc.plugin.slimefun4.storage.controller.SlimefunBlockData;
-import com.xzavier0722.mc.plugin.slimefun4.storage.util.StorageCacheUtils;
-import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
-import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem;
-import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
-import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType;
-import me.matl114.logitech.Schedule.Schedules;
-import me.matl114.logitech.SlimefunItem.AddItem;
-import me.matl114.logitech.SlimefunItem.AddSlimefunItems;
-import me.matl114.logitech.Utils.*;
-import me.matl114.logitech.Utils.UtilClass.TickerClass.Ticking;
-import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
-import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.entity.Player;
-import org.bukkit.event.block.BlockPlaceEvent;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.util.Vector;
-
-import javax.annotation.Nullable;
-import javax.annotation.ParametersAreNonnullByDefault;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Random;
-import java.util.concurrent.ConcurrentHashMap;
-
-public class SpreadBlock extends AbstractBlock implements Ticking {
- protected final SlimefunItem RESULT;
- protected final Material SPREAD_MATERIAL;
- protected final Material RESULT_MATERIAL;
- public SpreadBlock(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe,SlimefunItem result,
- Material spreadMaterial,Material finalMaterial) {
- super(itemGroup, item, recipeType, recipe);
- this.RESULT = result;
- this.SPREAD_MATERIAL = spreadMaterial;
- this.RESULT_MATERIAL = finalMaterial;
- this.setDisplayRecipes(
- Utils.list(
- AddUtils.getInfoShow("&f机制 - &c同化",
- "&7该物品拥有着将邻接的方块同化为自身的能力",
- "&7方块尝试同化邻接方块的行为,我们称之为一次同化",
- "&7被玩家放下或者被同化出来的方块会进行一次同化",
- "&a进行同化行为后该位置的方块将将不会继续同化,也不会被同化",
- "&7在随机的时长后被该位置的方块将会转变为目标物品",
- "&e当转变为目标物品时,将有%d%%的概率不改变方块材质".formatted(CHANCE_KEEP_MATERIAL)),AddUtils.addLore( result.getItem(),"&a同化最终的结果"),
- AddUtils.getInfoShow("&f机制 - &c反能量",
- "&7该物品同化的能量来源是所谓的\"反能量值\"",
- "&7当玩家放下时候,方块反能量值为%d".formatted(LIFE_DEFAULT),
- "&7被同化出的方块将会继承同化者的反能量值,并有60%的概率衰减1",
- "&7同化进行后的方块每sft将有60%的概率将自身反能量值衰减1",
- "&7当反能量值为0的时候,方块将转变为目标物品"),null,
- AddUtils.getInfoShow("&f机制 - &c数量阈值",
- "&7整个服务器中最多有%d个方块同时进行同化行为".formatted(ONE_TICK_SPREAD_MAXCNT),
- "&7当超过该阈值后余下的方块将&c停止运行",
- "&a因此该物品并不会对服务器tps造成影响")
- )
- );
- }
- protected Random rand = new Random();
- protected final int LIFE_DEFAULT=13;
- protected final int ONE_TICK_SPREAD_MAXCNT=2000;
- protected final int CHANCE_KEEP_MATERIAL=5;
- protected final ConcurrentHashMap SPREAD_PLAYER=new ConcurrentHashMap<>();
- public Map getSpreadOwner(){
- return SPREAD_PLAYER;
- }
- protected final ConcurrentHashMap SPREAD_TICKER=new ConcurrentHashMap<>();
- public Map getSpreadTicker(){
- return SPREAD_TICKER;
- }
- protected final Vector[] SPREAD_DELTA=new Vector[]{
- new Vector(1,0,0),
- new Vector(0,0,1),
- new Vector(-1,0,0),
- new Vector(0,0,-1),
- new Vector(0,1,0),
- new Vector(0,-1,0),
- };
- public void registerTick(SlimefunItem item){
- item.addItemHandler(
- new BlockTicker() {
- int runPerTick=0;
- public boolean isSynchronized() {
- return isSync();
- }
-
- @ParametersAreNonnullByDefault
- public void tick(Block b, SlimefunItem item, SlimefunBlockData data) {
- if(runPerTick>ONE_TICK_SPREAD_MAXCNT)return;
- BlockMenu menu = data.getBlockMenu();
- //BlockMenu menu = BlockStorage.getInventory(b);
- Location loc = data.getLocation();
- Integer life=SPREAD_TICKER.get(loc);
- if(life==null||life==0){
- Player player=SPREAD_PLAYER.remove(loc);
- SPREAD_TICKER.remove(loc);
- WorldUtils.createSlimefunBlock(loc,player,RESULT,(rand.nextInt(100)<(100-CHANCE_KEEP_MATERIAL))? RESULT_MATERIAL:SPREAD_MATERIAL,true);
- }else if(life<0){
- SPREAD_TICKER.put(loc, life+rand.nextInt(100)<60?1:0);
- }
- else {
- int lifeToSet=life-(rand.nextInt(100)<60?1:0);
- Player player=SPREAD_PLAYER.get(loc);
- for (int i=0;i SPREAD_PLAYER=new ConcurrentHashMap<>();
+ public Map getSpreadOwner(){
+ return SPREAD_PLAYER;
+ }
+ protected final ConcurrentHashMap SPREAD_TICKER=new ConcurrentHashMap<>();
+ public Map getSpreadTicker(){
+ return SPREAD_TICKER;
+ }
+ protected final Vector[] SPREAD_DELTA=new Vector[]{
+ new Vector(1,0,0),
+ new Vector(0,0,1),
+ new Vector(-1,0,0),
+ new Vector(0,0,-1),
+ new Vector(0,1,0),
+ new Vector(0,-1,0),
+ };
+ public void registerTick(SlimefunItem item){
+ item.addItemHandler(
+ new BlockTicker() {
+ int runPerTick=0;
+ public boolean isSynchronized() {
+ return isSync();
+ }
+
+ @ParametersAreNonnullByDefault
+ public void tick(Block b, SlimefunItem item, SlimefunBlockData data) {
+ if(runPerTick>ONE_TICK_SPREAD_MAXCNT)return;
+ BlockMenu menu = data.getBlockMenu();
+ //BlockMenu menu = BlockStorage.getInventory(b);
+ Location loc = data.getLocation();
+ Integer life=SPREAD_TICKER.get(loc);
+ if(life==null||life==0){
+ Player player=SPREAD_PLAYER.remove(loc);
+ SPREAD_TICKER.remove(loc);
+ WorldUtils.createSlimefunBlock(loc,player,RESULT,(rand.nextInt(100)<(100-CHANCE_KEEP_MATERIAL))? RESULT_MATERIAL:SPREAD_MATERIAL,true);
+ }else if(life<0){
+ SPREAD_TICKER.put(loc, life+rand.nextInt(100)<60?1:0);
+ }
+ else {
+ int lifeToSet=life-(rand.nextInt(100)<60?1:0);
+ Player player=SPREAD_PLAYER.get(loc);
+ for (int i=0;i PLAYERCOOLDOWN=ConcurrentHashMap.newKeySet();
- @Override
- public void onClickAction(PlayerRightClickEvent event) {
- event.cancel();
- Player p=event.getPlayer();
- ItemStack stack=event.getItem();
- if(p==null||stack==null){
- return;
- }
- onLaser(p,stack,false,true);
-
- }
- public void onLaser(Player p,ItemStack stack,boolean onHead,boolean withWarning){
- if(PLAYERCOOLDOWN.contains(p)){
- if(withWarning){
- AddUtils.sendMessage(p,"&c物品冷却中");
- }
- return;
- }
- float charge=getItemCharge(stack);
- if(charge>=CONSUMPTION){
- //setItemCharge(stack,);
- if(canUse(p,withWarning)){
- setItemCharge(stack,charge-CONSUMPTION);
- launchLaser(p,onHead);
- PLAYERCOOLDOWN.add(p);
- Schedules.launchSchedules(()->{
- PLAYERCOOLDOWN.remove(p);
- },10,false,0);
-
- }
- }else {
- if(withWarning){
- AddUtils.sendMessage(p,AddUtils.concat("&c电力不足! ",String.valueOf(charge),"J/",String.valueOf(CONSUMPTION),"J"));
- }
- }
- }
- public void launchLaser(Player p,boolean fromEye){
- Location loc=p.getEyeLocation().clone();
- if(!fromEye){
- Location playerLocation=p.getLocation();
- loc.add(playerLocation.subtract(loc).multiply(0.25).toVector());
- }
- final Pair endLocaion=WorldUtils.rayTraceLocation(p.getLocation().getDirection(), loc, 0.25, 100, new Predicate() {
- HashSet testHistory=new HashSet<>();
- public boolean testIsAir(Location loc){
- Location blockLocation=WorldUtils.getBlockLocation(loc);
- if(testHistory.contains(loc)){
- return true;
- }else if(WorldUtils.isLightPassableBlock(blockLocation.getBlock())) {
-
- testHistory.add(loc);
- return true;
-
- }else return false;
- }
- @Override
- public boolean test(Location location) {
- if(testIsAir(location)){
-
- Collection entities=location.getWorld().getNearbyEntities(location,0.4,0.4,0.4);
- if(!entities.isEmpty()){
- boolean hasTarget=false;
- for(Entity entity:entities){
-
- if(entity instanceof Player player){
- if(p!=player){
- hasTarget=true;
-
- if(WorldUtils.testAttackPermission(p,player)){
- PlayerEffects.grantEffect(CustomEffects.LASER,player,6,1);
- }
- }
- }else {
- if(entity instanceof Damageable le){
- hasTarget=true;
- if(WorldUtils.testAttackPermission(p,le)){
- le.damage(100,p);
- }
- }
- }
- }
- return !hasTarget;
-
- }else {
- return true;
- }
- }else {
- return false;
- }
- }
- });
- WorldUtils.spawnLineParticle(loc,endLocaion.getSecondValue(), Particle.END_ROD,endLocaion.getFirstValue());
-
- }
-}
+package me.matl114.logitech.SlimefunItem.Items;
+
+import io.github.thebusybiscuit.slimefun4.api.events.PlayerRightClickEvent;
+import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
+import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
+import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType;
+import io.github.thebusybiscuit.slimefun4.libraries.dough.collections.Pair;
+import io.github.thebusybiscuit.slimefun4.libraries.dough.protection.Interaction;
+import me.matl114.logitech.Schedule.PersistentEffects.CustomEffects;
+import me.matl114.logitech.Schedule.PersistentEffects.PlayerEffects;
+import me.matl114.logitech.Schedule.Schedules;
+import me.matl114.logitech.Utils.AddUtils;
+import me.matl114.logitech.Utils.Debug;
+import me.matl114.logitech.Utils.WorldUtils;
+import org.bukkit.*;
+import org.bukkit.damage.DamageSource;
+import org.bukkit.entity.*;
+import org.bukkit.event.entity.EntityDamageEvent;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.persistence.PersistentDataContainer;
+import org.bukkit.persistence.PersistentDataType;
+import org.bukkit.util.Vector;
+
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Predicate;
+
+public class LaserGun extends ChargableProps{
+ protected final NamespacedKey LEVEL_KEY=AddUtils.getNameKey("laser-lvl");
+ protected final String LEVEL_PREFIX= AddUtils.resolveColor("&x&E&B&3&3&E&B发射器功率: &a");
+ protected final int getLevel(ItemMeta meta){
+ PersistentDataContainer container = meta.getPersistentDataContainer();
+ if(container.has(LEVEL_KEY, PersistentDataType.INTEGER)){
+ return container.get(LEVEL_KEY, PersistentDataType.INTEGER);
+ }else {
+ return 0;
+ }
+ }
+ protected final void setLevel(ItemMeta meta, int level){
+ PersistentDataContainer container = meta.getPersistentDataContainer();
+ container.set(LEVEL_KEY, PersistentDataType.INTEGER, level);
+ List lores=meta.getLore();
+ if(lores.size()>1){
+ lores.set(lores.size()-2, AddUtils.concat(LEVEL_PREFIX,"第",String.valueOf(level+1),"档/共",String.valueOf(MAX_LEVEL),"档"));
+ }
+ meta.setLore(lores);
+ }
+ protected final int MAX_LEVEL=5;
+ public LaserGun(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe){
+ super(itemGroup, item, recipeType, recipe);
+ }
+ public void addInfo(ItemStack stack){
+ super.addInfo(stack);
+ ItemMeta meta=stack.getItemMeta();
+ setLevel(meta,0);
+ stack.setItemMeta(meta);
+ }
+ float MAX_BUFFER=9_999_999.0F;
+ float CONSUMPTION=640.0F;
+ @Override
+ public float getMaxItemCharge(ItemStack var1) {
+ return MAX_BUFFER;
+ }
+ public Set PLAYERCOOLDOWN=ConcurrentHashMap.newKeySet();
+ @Override
+ public void onClickAction(PlayerRightClickEvent event) {
+ event.cancel();
+ Player p=event.getPlayer();
+ ItemStack stack=event.getItem();
+ if(p==null||stack==null){
+ return;
+ }
+ if(!p.isSneaking()){
+ onLaser(p,stack,false,true);
+ }else{
+ onLaserLevelAdd(p,stack);
+ }
+
+ }
+ public void onLaserLevelAdd(Player p,ItemStack stack){
+ ItemMeta meta=stack.getItemMeta();
+ int level=getLevel(meta);
+ level=(level+1)%MAX_LEVEL;
+ setLevel(meta,level);
+ stack.setItemMeta(meta);
+ AddUtils.sendMessage(p,"&a激光发射器功率切换成功.当前为 &6第%d档".formatted(level+1));
+ }
+ public void onLaser(Player p,ItemStack stack,boolean onHead,boolean withWarning){
+ if(PLAYERCOOLDOWN.contains(p)){
+ if(withWarning){
+ AddUtils.sendMessage(p,"&c物品冷却中");
+ }
+ return;
+ }
+ float charge=getItemCharge(stack);
+ int level =getLevel(stack.getItemMeta());
+ float consumption=CONSUMPTION*((float)Math.pow(10,level));
+ if(charge>=consumption){
+ //setItemCharge(stack,);
+ if(canUse(p,withWarning)){
+ setItemCharge(stack,charge-consumption);
+ launchLaser(p,level,onHead);
+ PLAYERCOOLDOWN.add(p);
+ Schedules.launchSchedules(()->{
+ PLAYERCOOLDOWN.remove(p);
+ },10,false,0);
+
+ }
+ }else {
+ //if(withWarning){
+ AddUtils.sendMessage(p,AddUtils.concat("&c电力不足! ",String.valueOf(charge),"J/",String.valueOf(consumption),"J"));
+ //}
+ }
+ }
+ public void launchLaser(Player p,int level,boolean fromEye){
+ Location loc;
+ if(!fromEye){
+ loc=WorldUtils.getHandLocation(p);
+ }else {
+ loc=p.getEyeLocation();
+ }
+ final Pair endLocaion=WorldUtils.rayTraceLocation(p.getLocation().getDirection(), loc, 0.25, 100, new Predicate() {
+ HashSet testHistory=new HashSet<>();
+ public boolean testIsAir(Location loc){
+ Location blockLocation=WorldUtils.getBlockLocation(loc);
+ if(testHistory.contains(loc)){
+ return true;
+ }else if(WorldUtils.isLightPassableBlock(blockLocation.getBlock())) {
+
+ testHistory.add(loc);
+ return true;
+
+ }else return false;
+ }
+ @Override
+ public boolean test(Location location) {
+ if(testIsAir(location)){
+
+ Collection entities=location.getWorld().getNearbyEntities(location,0.4,0.4,0.4);
+ if(!entities.isEmpty()){
+ boolean hasTarget=false;
+ for(Entity entity:entities){
+
+ if(entity instanceof Player player){
+ if(p!=player){
+ hasTarget=true;
+
+ if(WorldUtils.testAttackPermission(p,player)){
+ PlayerEffects.grantEffect(CustomEffects.LASER,player,4*(level+1),1);
+ }
+ }
+ }else {
+ if(entity instanceof Damageable le){
+ hasTarget=true;
+ if(WorldUtils.testAttackPermission(p,le)){
+ le.damage(100*(level+1),p);
+ }
+ }
+ }
+ }
+ return !hasTarget;
+
+ }else {
+ return true;
+ }
+ }else {
+ return false;
+ }
+ }
+ });
+ WorldUtils.spawnLineParticle(loc,endLocaion.getSecondValue(), Particle.END_ROD,endLocaion.getFirstValue());
+
+ }
+}
diff --git a/src/main/java/me/matl114/logitech/SlimefunItem/Items/TrackingArrowLauncher.java b/src/main/java/me/matl114/logitech/SlimefunItem/Items/TrackingArrowLauncher.java
new file mode 100644
index 0000000..3b773f9
--- /dev/null
+++ b/src/main/java/me/matl114/logitech/SlimefunItem/Items/TrackingArrowLauncher.java
@@ -0,0 +1,183 @@
+package me.matl114.logitech.SlimefunItem.Items;
+
+import io.github.thebusybiscuit.slimefun4.api.events.PlayerRightClickEvent;
+import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup;
+import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
+import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType;
+import me.matl114.logitech.Schedule.Schedules;
+import me.matl114.logitech.Utils.AddUtils;
+import me.matl114.logitech.Utils.BukkitUtils;
+import me.matl114.logitech.Utils.Debug;
+import me.matl114.logitech.Utils.WorldUtils;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.Particle;
+import org.bukkit.enchantments.Enchantment;
+import org.bukkit.entity.*;
+import org.bukkit.event.player.PlayerMoveEvent;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.scheduler.BukkitRunnable;
+
+import java.util.*;
+
+public class TrackingArrowLauncher extends ChargableProps {
+ public TrackingArrowLauncher(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe){
+ super(itemGroup, item, recipeType, recipe);
+ }
+ protected final float MAX_CHARGE=9_000_000.0f;
+ protected Random rand = new Random();
+ protected final float ARROW_SPEED=1.2F;
+ protected final int ARROW_AMOUNT=10;
+ protected final int ARROW_EXIST_TIME=15;
+ protected final float RAYTRACE_RANGE=60;
+ protected final int MAX_TRACETIME=150;
+ protected final int PERIOD_TRACETIME=2;
+ protected final int BASIC_DAMAGE=80;
+ protected final float ENERGYCONSUMPTION=640.0f;
+ protected final float DEFLECTION_RATE=0.15f;
+ protected final float LOCATION_DELTA=0.4f;
+ protected final float SIGHT_DELTA=10f;
+ public float getMaxItemCharge(ItemStack var1){
+ return MAX_CHARGE;
+ }
+
+ @Override
+ public void onClickAction(PlayerRightClickEvent event) {
+ Player p=event.getPlayer();
+ if(p!=null){
+ ItemStack item=event.getItem();
+ float charge=this.getItemCharge(item);
+ if(charge arrows=new HashSet<>();
+ for(int i=0;i targetEntities= WorldUtils.getEntityInDistance(targetCenter,1.2*RAYTRACE_RANGE,(e)->{return e!=p
+ && WorldUtils.isLivingEntity(e);});
+ //索敌算法
+ HashSet livingEntities=new HashSet<>();
+ for(Entity entity:targetEntities){
+ if(entity instanceof LivingEntity li){
+ livingEntities.add(li);
+ }
+ }
+ launchAutoTrace(arrows,livingEntities);
+ }
+ public Arrow spawnArrowRandomly(Location loc,Player p,int damage){
+ //0.5的生成位置偏移
+ Location loc2=loc.clone().add(rand.nextFloat(-LOCATION_DELTA,LOCATION_DELTA),rand.nextFloat(-LOCATION_DELTA/4,0),rand.nextFloat(-LOCATION_DELTA,LOCATION_DELTA));
+ //10度的偏差
+ loc2.setPitch(loc2.getPitch()+rand.nextFloat(-SIGHT_DELTA,SIGHT_DELTA));
+ loc2.setYaw(loc2.getYaw()+rand.nextFloat(-SIGHT_DELTA,SIGHT_DELTA));
+ Arrow a= loc.getWorld().spawnArrow(loc2,loc2.getDirection(),ARROW_SPEED,ARROW_EXIST_TIME);
+ a.setPickupStatus(AbstractArrow.PickupStatus.CREATIVE_ONLY);
+ a.setDamage(damage);
+ a.setCritical(false);
+ a.setShooter(p);
+ a.setGravity(false);
+ a.setPierceLevel(4);
+ return a;
+ }
+ public void launchAutoTrace(HashSet arrows,HashSet targetEntities){
+ HashSet runningArrows=new HashSet<>(arrows);
+ BukkitRunnable task = new BukkitRunnable() {
+ protected int runTime;
+ protected boolean isRunning=false;
+
+ public void run(){
+ if(isRunning){
+ return;
+ }
+ isRunning=true;
+ if(runTime>=MAX_TRACETIME){
+ this.cancel();
+ }else {
+ runTime++;
+ try{
+ if(runTime>5){
+ Iterator iterator=runningArrows.iterator();
+ HashMap targetMap=new HashMap<>();
+ while(iterator.hasNext()){
+ Arrow arrow=iterator.next();
+ if(arrow.isOnGround()||arrow.isDead()||!arrow.isValid()||arrow.isInBlock()){
+ iterator.remove();
+ arrows.remove(arrow);
+ }else if(arrow.getPierceLevel()<=0){
+ iterator.remove();
+ }
+ else {
+ Location loc=arrow.getLocation();
+ float minDistance=RAYTRACE_RANGE;
+ LivingEntity choosedEntity=null;
+ Iterator iterator2=targetEntities.iterator();
+ while(iterator2.hasNext()){
+ LivingEntity targetEntity=iterator2.next();
+ if(targetEntity.isDead()||!targetEntity.isValid()){
+ iterator2.remove();
+ }else {
+ float distance=(float) loc.distance(targetEntity.getLocation());
+ if(distance{
+ for(Map.Entry entry:targetMap.entrySet()){
+ retrackArrow(entry.getKey(),entry.getValue());
+ }
+ });
+ }
+ for(Arrow arrow:arrows){
+ arrow.getWorld().spawnParticle(Particle.CHERRY_LEAVES,arrow.getLocation(),3,0.0,0.0,0.0,1,null,true);
+ if(runTime%2==0&&runTime>5)
+ arrow.getWorld().spawnParticle(Particle.FLAME,arrow.getLocation(),0,0.0,0.0,0.0,1,null,true);
+ }
+ }finally {
+ isRunning=false;
+ }
+ }
+ }
+ };
+ Schedules.launchSchedules(task,2*PERIOD_TRACETIME,false,PERIOD_TRACETIME);
+ }
+ public void retrackArrow(Arrow arrow,LivingEntity target){
+ Location loc=arrow.getLocation();
+ Location targetLoc=target.getEyeLocation();
+ if(loc.distance(targetLoc)<2.0f){
+ return;
+ }else {
+ arrow.setVelocity(targetLoc.subtract(loc).toVector().normalize().multiply(ARROW_SPEED*DEFLECTION_RATE).add(arrow.getVelocity().multiply(1.0f-DEFLECTION_RATE)));
+ }
+ }
+}
diff --git a/src/main/java/me/matl114/logitech/SlimefunItem/Machines/SpecialMachines/TntGenerator.java b/src/main/java/me/matl114/logitech/SlimefunItem/Machines/SpecialMachines/TntGenerator.java
index 487f0dd..a036424 100644
--- a/src/main/java/me/matl114/logitech/SlimefunItem/Machines/SpecialMachines/TntGenerator.java
+++ b/src/main/java/me/matl114/logitech/SlimefunItem/Machines/SpecialMachines/TntGenerator.java
@@ -205,7 +205,7 @@ public void newMenuInstance(BlockMenu menu, Block block){
dh.setInt(2,delay);
dh.setInt(3,0);
if(menu.getItemInSlot(START_SLOT)==null){
- menu.replaceExistingItem(START_SLOT,START_ITEM_OFF);
+ menu.replaceExistingItem(START_SLOT,START_ITEM_ON);
}
menu.addMenuClickHandler(START_SLOT,((player, i, itemStack, clickAction) -> {
if(itemStack!=null&&itemStack.getType()!=Material.GREEN_STAINED_GLASS_PANE){
@@ -213,7 +213,7 @@ public void newMenuInstance(BlockMenu menu, Block block){
}else {
menu.replaceExistingItem(START_SLOT,START_ITEM_OFF);
}
- menu.getLocation().getBlock().getState().update(true,true);
+ menu.getLocation().getBlock().setBlockData(menu.getLocation().getBlock().getBlockData(),true); // .getState().update(true,true);
return false;
}));
menu.replaceExistingItem(ADJUSTMENT_SLOT,getAdjustmentDisplay(dh));
diff --git a/src/main/java/me/matl114/logitech/Unittest.java b/src/main/java/me/matl114/logitech/Unittest.java
index 8047f82..aa35ce0 100644
--- a/src/main/java/me/matl114/logitech/Unittest.java
+++ b/src/main/java/me/matl114/logitech/Unittest.java
@@ -1,12 +1,17 @@
-package me.matl114.logitech;
-
-public class Unittest {
- //为什么要单开一个文件夹?
- //好问题
-
- //测试1 测试dataload和menu的 顺序
- //测试2 测试dataload时候区块的加载状态
- //测试3 测试chunkloadEvent调用顺序
- //修改DataCache为不加载的反射方法
- public static boolean SFDATA_TEST =false;
-}
+package me.matl114.logitech;
+
+public class Unittest {
+ //为什么要单开一个文件夹?
+ //好问题
+
+ //测试1 测试dataload和menu的 顺序
+ //测试2 测试dataload时候区块的加载状态
+ //测试3 测试chunkloadEvent调用顺序
+ //修改DataCache为不加载的反射方法
+ public static boolean SFDATA_TEST =false;
+ //TOdo 增加玩家编辑器
+ //TODO 空间塔
+ //TODO 时间加速器
+ //TODO 随机传送装置
+ //TODO 物品命名机
+}
diff --git a/src/main/java/me/matl114/logitech/Utils/AddUtils.java b/src/main/java/me/matl114/logitech/Utils/AddUtils.java
index 29e89c4..a9d7843 100644
--- a/src/main/java/me/matl114/logitech/Utils/AddUtils.java
+++ b/src/main/java/me/matl114/logitech/Utils/AddUtils.java
@@ -1,882 +1,882 @@
-package me.matl114.logitech.Utils;
-
-import com.google.common.base.Preconditions;
-import io.github.thebusybiscuit.slimefun4.api.SlimefunAddon;
-import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem;
-import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack;
-import io.github.thebusybiscuit.slimefun4.implementation.Slimefun;
-import io.github.thebusybiscuit.slimefun4.libraries.dough.chat.ChatInput;
-import io.github.thebusybiscuit.slimefun4.libraries.dough.collections.Pair;
-import io.github.thebusybiscuit.slimefun4.libraries.dough.common.ChatColors;
-import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack;
-import io.github.thebusybiscuit.slimefun4.utils.LoreBuilder;
-import me.matl114.logitech.Language;
-import me.matl114.logitech.MyAddon;
-import me.matl114.logitech.SlimefunItem.AddItem;
-import me.matl114.logitech.Utils.UtilClass.ItemClass.*;
-import me.matl114.logitech.Utils.UtilClass.FunctionalClass.LoreDecorator;
-import me.matl114.logitech.Utils.UtilClass.FunctionalClass.StringDecorator;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
-import net.md_5.bungee.api.ChatColor;
-import net.md_5.bungee.api.chat.ClickEvent;
-import net.md_5.bungee.api.chat.HoverEvent;
-import net.md_5.bungee.api.chat.TextComponent;
-import net.md_5.bungee.api.chat.hover.content.Text;
-import org.bukkit.Material;
-import org.bukkit.NamespacedKey;
-import org.bukkit.enchantments.Enchantment;
-import org.bukkit.entity.Damageable;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.ItemFlag;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
-
-import javax.annotation.Nonnull;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-import java.util.*;
-import java.util.concurrent.ThreadLocalRandom;
-import java.util.function.Consumer;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class AddUtils {
- public static final String ADDON_NAME="逻辑工艺";
- public static final String ADDON_ID="LOGITECH";
- public static final SlimefunAddon ADDON_INSTANCE=MyAddon.getInstance();
- public static boolean USE_IDDECORATOR=true;
- private static final double SF_TPS = 20.0 / (double) Slimefun.getTickerTask().getTickRate();
- private static final DecimalFormat FORMAT = new DecimalFormat("###,###,###,###,###,###.#");
- private static Random random=new Random();
- public static String formatDouble(double s){
- return FORMAT.format(s);
- }
- public static String idDecorator(String b){
- if(USE_IDDECORATOR){
- return ADDON_ID+"_"+b;
- }
- else return b;
- }
- public static NamespacedKey getNameKey(String str) {
- return new NamespacedKey(MyAddon.getInstance(),str);
- }
- public static String desc(String str) {
- return "&7" + str;
- }
- public static String addonTag(String str) {
- return "&3"+ADDON_NAME+" " + str;
- }
- public static final String[] COLOR_MAP=new String[]{"&0","&1","&2","&3","&4","&5","&6","&7","&8","&9","&a","&b","&c","&d","&e","&f"};
- public static String resolveRGB(int rgb){
- if(rgb>16777216){
- rgb=16777216;
- }
- else if (rgb<0){
- rgb=0;
- }
- String prefix="";
- for(int i=0;i<6;i++){
- int r=rgb%16;
- rgb=rgb/16;
- prefix=COLOR_MAP[r]+prefix;
- }
- prefix="&x"+prefix;
- return prefix;
- }
-
- public static String resolveRGB(String rgb) throws IllegalArgumentException {
- if(rgb.length()!=6){
- throw new IllegalArgumentException("Invalid RGB String");
- }
- String prefix="&x";
- for (int i=0;i<6;i++){
- prefix=prefix+"&"+rgb.substring(i,i+1);
- }
- return prefix;
- }
- public static int rgb2int(String rgb) throws IllegalArgumentException{
- if(rgb.length()!=6){
- throw new IllegalArgumentException("Invalid RGB String");
- }
- int value=0;
- for (int i=0;i<6;i++){
- char c=rgb.charAt(i);
- if(Character.isDigit(c)){
- value=value*16+(c-'0');
- }
- else if(c>='a'&&c<='f'){
- value=value*16+(c-'a'+10);
- }
- else if(c>='A'&&c<='F'){
- value=value*16+(c-'A'+10);
- }
- else throw new IllegalArgumentException("Invalid RGB String");
- }
- return value;
- }
- public static final int START_CODE=rgb2int("eb33eb");
- //15409899;
- public static final int END_CODE=rgb2int("970097");
- public static String color(String str){
- return resolveRGB(START_CODE)+str;
- }
- public static String colorful(String str) {
- int len=str.length()-1;
- if(len<=0){
- return resolveRGB(START_CODE)+str;
- }
- else{
- int start=START_CODE;
- int end=END_CODE;
- int[] rgbs=new int[9];
- for(int i=0;i<3;++i){
- rgbs[i]=start%256;
- rgbs[i+3]=end%256;
- rgbs[i+6]=rgbs[i+3]-rgbs[i];
- start=start/256;
- end=end/256;
- }
- String str2="";
- for(int i=0;i<=len;i++){
- str2=str2+resolveRGB(START_CODE+65536*((rgbs[8]*i)/len)+256*((rgbs[7]*i)/len)+((rgbs[6]*i)/len))+str.substring(i,i+1);
- }
- return str2;
-
- }
- }
- public static final ItemStack[] NULL_RECIPE=new ItemStack[]{null,null,null,null,null,null,null,null,null} ;
- public static final ItemMeta NULL_META=null;
- public enum Theme{
- NONE(
- ((a)->{return a;}),
- ((a)->{return a;})
- ),
- DEFAULT(
- ((a)->{return a;}),
- ((List a)->{{
- List finallist=new ArrayList<>() ;
- for(String i:a){
- finallist.add(desc(i));
- }
- return finallist;
- }
- })
- ),
- ITEM1(
- AddUtils::color,
- ((List a)->{{
- List finallist=new ArrayList<>() ;
- for(String i:a){
- finallist.add(desc(i));
- }
- //减少开销
-// finallist.add("");
-// finallist.add(addonTag(Language.get("Theme.ITEM1.Name")));
- return finallist;
- }
- })
- ),
- ITEM2(
- AddUtils::colorful,
- ((List a)->{{
- List finallist=new ArrayList<>() ;
- for(String i:a){
- finallist.add(desc(i));
- }
- //减少开销
- finallist.add("");
- finallist.add(addonTag(Language.get("Theme.ITEM1.Name")));
- return finallist;
- }
- })
- ),
- MACHINE1(
- AddUtils::colorful,
- ((List a)->{{
- List finallist=new ArrayList<>() ;
- for(String i:a){
- finallist.add(desc(i));
- }
- finallist.add("");
- finallist.add(addonTag(Language.get("Theme.MACHINE1.Name")));
- return finallist;
- }
- })
- ),
- MACHINE2(
- AddUtils::colorful,
- ((List a)->{{
- List finallist=new ArrayList<>() ;
- for(String i:a){
- finallist.add(desc(i));
- }
- finallist.add("");
- finallist.add(addonTag(Language.get("Theme.MACHINE2.Name")));
- return finallist;
- }
- })
- ),
- MULTIBLOCK1(
- AddUtils::colorful,
- ((List a)->{{
- List finallist=new ArrayList<>() ;
- for(String i:a){
- finallist.add(desc(i));
- }
- finallist.add("");
- finallist.add(addonTag(Language.get("Theme.MULTIBLOCK1.Name")));
- return finallist;
- }
- })
- ),
- MULTIBLOCK2(
- AddUtils::colorful,
- ((List a)->{{
- List finallist=new ArrayList<>() ;
- for(String i:a){
- finallist.add(desc(i));
- }
- finallist.add("");
- finallist.add(addonTag(Language.get("Theme.MULTIBLOCK2.Name")));
- return finallist;
- }
- })
- ),
- MANUAL1(
- AddUtils::colorful,
- ((List a)->{{
- List finallist=new ArrayList<>() ;
- for(String i:a){
- finallist.add(desc(i));
- }
- finallist.add("");
- finallist.add(addonTag(Language.get("Theme.MANUAL1.Name")));
- return finallist;
- }
- })
- ),
- ADVANCED1(
- AddUtils::colorful,
- ((List a)->{{
- List finallist=new ArrayList<>() ;
- for(String i:a){
- finallist.add(desc(i));
- }
- finallist.add("");
- finallist.add(addonTag(Language.get("Theme.ADVANCED1.Name")));
- return finallist;
- }
- })
- ),
- CARGO1(
- AddUtils::colorful,
- ((List a)->{{
- List finallist=new ArrayList<>() ;
- for(String i:a){
- finallist.add(desc(i));
- }
- finallist.add("");
- finallist.add(addonTag(Language.get("Theme.CARGO1.Name")));
- return finallist;
- }
- })
- ),
- BENCH1(
- AddUtils::colorful,
- ((List a)->{{
- List finallist=new ArrayList<>() ;
- for(String i:a){
- finallist.add(desc(i));
- }
- finallist.add("");
- finallist.add(addonTag(Language.get("Theme.BENCH1.Name")));
- return finallist;
- }
- })
- ),
- CATEGORY(
- ((a)->{return a;}),
- ((List a)->{{
- List finallist=new ArrayList<>() ;
- //finallist.add("");
- for(String i:a){
- finallist.add(desc(i));
- }
- finallist.add("");
- finallist.add(Language.get("Theme.CATEGORY.Name"));
- return finallist;
- }
- })
- ),
- CATEGORY2(
- ((a)->{return a;}),
- ((List a)->{{
- List finallist=new ArrayList<>() ;
- //finallist.add("");
- for(String i:a){
- finallist.add(desc(i));
- }
- finallist.add("");
- finallist.add(Language.get("Theme.CATEGORY2.Name"));
- return finallist;
- }
- })),
- INFO1(
- ((a)->{return a;}),
- ((List a)->{{
- List finallist=new ArrayList<>() ;
- for(String i:a){
- finallist.add(desc(i));
- }
- finallist.add("");
- finallist.add(Language.get("Theme.INFO1.Name"));
- return finallist;
- }
- })
- ),
- MENU1(
- ((a)->{return a;}),
- ((List a)->{{
- List finallist=new ArrayList<>() ;
- for(String i:a){
- finallist.add(desc(i));
- }
- finallist.add("");
- finallist.add(Language.get("Theme.MENU1.Name"));
- return finallist;
- }
- })
- )
- ;
- private final StringDecorator NAME_DEC;
- private final LoreDecorator LORE_DEC;
- Theme(StringDecorator nameDec, LoreDecorator loreDec){
- NAME_DEC=nameDec;
- LORE_DEC=loreDec;
- }
-
- }
- public static SlimefunItemStack themed(String id, Material itemStack, String name, String... lore){
- return themed(id,new ItemStack(itemStack),name,lore);
- }
- public static SlimefunItemStack themed(String id, ItemStack itemStack, String name, String... lore){
- return themed(id, itemStack, name, Arrays.asList(lore));
- }
- public static SlimefunItemStack themed(String id ,Material itemStack ,String name,List lore){
- return themed(id,new ItemStack(itemStack),name,lore);
- }
- public static SlimefunItemStack themed(String id ,ItemStack itemstack ,String name,List lore){
- return themed(id,itemstack,Theme.DEFAULT,name,lore);
- }
- public static SlimefunItemStack themed(String id, Material itemStack, Theme themeType, String name, String... lore){
- return themed(id,new ItemStack(itemStack),themeType,name,lore);
- }
- public static SlimefunItemStack themed(String id, ItemStack itemStack, Theme themeType, String name, String... lore){
- return themed(id,itemStack,themeType,name,Arrays.asList(lore));
- }
- public static SlimefunItemStack themed(String id, Material itemStack, Theme themeType, String name, List lore){
- return themed(id,new ItemStack(itemStack),themeType,name,lore);
- }
- public static SlimefunItemStack themed(String id, ItemStack itemStack, Theme themeType, String name, List lore){
- List finallist=themeType.LORE_DEC.decorator(lore);
- return new SlimefunItemStack(
- idDecorator(id),
- itemStack,
- themeType.NAME_DEC.decorate(name),
- finallist.toArray(String[]::new)
- );
- }
- public static ItemStack themed(Material material, Theme themeType, String name, String... lore){
- return themed(material,themeType,name,Arrays.asList(lore));
- }
- public static ItemStack themed(Material material, Theme themeType, String name, List lore){
- return themed(new ItemStack(material),themeType,name,lore);
- }
- public static ItemStack themed(ItemStack itemStack, Theme themeType, String name, String... lore){
- return themed(itemStack,themeType,name,Arrays.asList(lore));
- }
- public static ItemStack themed(ItemStack itemStack, Theme themeType, String name, List lore){
- List finallist=themeType.LORE_DEC.decorator(lore);
- return new CustomItemStack(
- itemStack,
- themeType.NAME_DEC.decorate(name),
- finallist.toArray(String[]::new)
- );
- }
- public static ItemStack themed(Material material, String name, String... lore){
- return themed(material,Theme.DEFAULT,name,lore);
- }
- public static ItemStack themed(ItemStack itemStack, String name, String... lore){
- return themed(itemStack,Theme.DEFAULT,name,lore);
- }
- public static String getItemId(ItemStack its){
- if(its==null)return null;
- SlimefunItem sfitem=SlimefunItem.getByItem(its);
- if(sfitem==null){
- return (its.getAmount()==1?"":String.valueOf(its.getAmount()))+its.getType().toString().toUpperCase(Locale.ROOT);
- }else {
- return (its.getAmount()==1?"":String.valueOf(its.getAmount()))+sfitem.getId();
- }
- }
- public static ItemStack resolveItem(Object a){
- if(a==null)return null;
- if(a instanceof ItemStack){
- return (ItemStack) a;
- }else if(a instanceof SlimefunItem){
- return ((SlimefunItem) a).getItem().clone();
- }else if(a instanceof Material){
- return new ItemStack((Material) a);
- }else if(a instanceof String){
- Pattern re=Pattern.compile("^([0-9]*)(.*)$");
- Matcher info= re.matcher((String)a);
- int cnt=-1;
- String id;
- if(info.find()){
- String amount=info.group(1);
- id=info.group(2);
- try{
- cnt=Integer.parseInt(amount);
- }catch(NumberFormatException e){
- cnt=-1;
- }
- }
- else{
- id=(String) a;
- }
- try{
- ItemStack b=SlimefunItem.getById(id).getItem();
- if(cnt>0&&cnt!=b.getAmount()){
- b=b.clone();
- b.setAmount(cnt);
- }
- return b;
- }catch (Exception e){
- try{
- ItemStack b=new ItemStack( Material.getMaterial(id));
- if(cnt>0&&cnt!=b.getAmount()){
- b=b.clone();
- b.setAmount(cnt);
- }
- return b;
- }catch (Exception e2){
- Debug.logger("WARNING: Object %s can not be solved ! Required Addon not installed ! Disabling relavent recipes...".formatted(a));
- return AddItem.RESOLVE_FAILED;
- }
- }
- } else {
- Debug.logger("WARNING: failed to solve Object "+a.toString());
- return AddItem.RESOLVE_FAILED;
- }
-
- }
- public static Pair buildRecipes(Pair