mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 03:35:51 +00:00
Merge remote-tracking branch 'refs/remotes/TheBusyBiscuit/master'
This commit is contained in:
commit
5c9943de17
41
.github/CONTRIBUTING.md
vendored
Normal file
41
.github/CONTRIBUTING.md
vendored
Normal file
@ -0,0 +1,41 @@
|
||||
# Slimefun Community Guidelines
|
||||
|
||||
Slimefun is a community project, everyone is welcome to open Issues, make Pull Requests or make Pull Requests for an opened Issue.
|
||||
Without your help, this project is going to die.
|
||||
|
||||
## General Guidelines
|
||||
|
||||
Rules for all types of posts:
|
||||
|
||||
1. Follow our Templates for Issues and Pull Request, they are designed to tell you what exact Information we need and how you should present it to us.
|
||||
2. Be nice and give constructive critism. Insulting, Harassment, Racism, Sexism or any form of bullying or discrimination is not tolerated.
|
||||
3. Try to engage in conversations by pointing out scenarios to replicate Issues, providing fix approaches or other kind of help.
|
||||
4. Advertisement is inappropriate and will be removed, especially advertisement for Minecraft Servers is completely unaccepted.
|
||||
|
||||
## GitHub Issues
|
||||
|
||||
Rules for posting an Issue on GitHub:
|
||||
|
||||
1. This Issue Section is ONLY for Slimefun-related Issues, Issues about other Plugins or Slimefun Addons should not be posted here.
|
||||
2. Check other Issues before posting to make sure you are not posting a duplicate.
|
||||
3. Do not put any Tags inside your title like [IMPORTANT], [URGENT] or [SUGGESTION]. Try to be professional by making your title as short as possible, we will assign it the required labels if necessary.
|
||||
4. Do not post your Issue more than once, this is considered spam and does not benefit our community in any way. Do not repost your Issue if it was closed either.
|
||||
5. Give us all available information right away, it may be a bit of time-wasting for us to keep asking for more Info. And this includes any Information to reproduce your Issue step-by-step.
|
||||
6. Check whether there are newer versions available than the ones you are using, it might be that your Issue has been fixed already.
|
||||
7. All text logs must be posted via a link to http://pastebin.com or similiar websites.
|
||||
8. Please read the [FAQ Section](#frequently-asked-questions) before posting.
|
||||
|
||||
Your Issue will be CLOSED WITHOUT WARNING if we think you violated these Rules.
|
||||
|
||||
## Pull Requests
|
||||
|
||||
Guidelines for making a Pull Request on GitHub:
|
||||
|
||||
1. Try to be reasonable with your additions. No, a Bacon flavoured unicorn that flies on a rainbow while dancing Gangnam Style is NOT a reasonable addition to this Project.
|
||||
2. Try to make your values configurable in the config.yml / Items.yml or any additional file. This may not be necessary at every instance but it does give the end-users a way to customize their experience.
|
||||
3. If your Pull Request is made in response to an Issue opened on GitHub, comment on that Issue and reference your Pull Request to show that you are proposing a fix for it.
|
||||
|
||||
## Frequently Asked Questions
|
||||
|
||||
### Slimefun does not work!?
|
||||
> Install CS-CoreLib...
|
16
.github/ISSUE_TEMPLATE.md
vendored
Normal file
16
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
## Description
|
||||
Describe your Issue AS DETAILED AS POSSIBLE.
|
||||
|
||||
## Server Log
|
||||
Upload your FULL SERVER LOG (/logs/latest.log) to http://pastebin.com/ and paste your link in here.
|
||||
Without this File, we may not be able to help you at all.
|
||||
|
||||
## Evidence / Proof
|
||||
Attach as many Screenshots or Videos if possible.
|
||||
Anything that helps us understand the Issue better, is gonna get your Issue fixed even faster.
|
||||
|
||||
## Environment
|
||||
We need the EXACT VERSIONS of the Software you are using.
|
||||
This includes your Minecraft Version, your CS-CoreLib version and your Slimefun Version.
|
||||
If you cannot figure out what versions you are running, then please run /sf versions and
|
||||
show us the output of that command.
|
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
/bin/
|
||||
.classpath
|
||||
.project
|
||||
/.settings/
|
@ -7,3 +7,4 @@ This Project was built using the following external Libraries:
|
||||
* WorldEdit v6.1.1
|
||||
* CS-CoreLib v1.5.2
|
||||
* EmeraldEnchants v2.0
|
||||
* CoreProtect v2.14.2
|
@ -1,21 +0,0 @@
|
||||
!!! BEFORE POSTING !!!
|
||||
|
||||
1. Do not adress Issues that don't regard Slimefun, even Issues about Slimefun Addons are not allowed to be posted here.
|
||||
2. Make sure to check other Issues before posting yours, we do not want any duplicates!
|
||||
3. Please don't put Tags like [IMPORTANT] or [BUG], [QUESTION] or anything similiar in your title.
|
||||
4. Your Issue will be CLOSED WITHOUT WARNING if you do not match the above mentioned criteria.
|
||||
|
||||
## Description
|
||||
Describe your Issue AS DETAILED AS POSSIBLE.
|
||||
|
||||
## Server Log
|
||||
Please upload your FULL SERVER LOG (/logs/latest.log) to http://pastebin.com/ and paste your link in here.
|
||||
Without this File, we may not be able to help you at all.
|
||||
|
||||
## Evidence / Proof
|
||||
Attach as many Screenshots or Videos if possible.
|
||||
Anything that helps us understand the Issue better, is gonna get your Issue fixed even faster.
|
||||
|
||||
## Environment
|
||||
Please state what Version of Minecraft, CS-CoreLib and Slimefun you're using
|
||||
"latest" is not enough, we need the EXACT VERSIONS.
|
12
README.md
12
README.md
@ -17,17 +17,7 @@ Check the license for more Info on redistributing and modifying Slimefun 4.
|
||||
|
||||
### Contributors
|
||||
|
||||
Here is a list of all people who contributed to Slimefun 4 by submitting Code.
|
||||
I will keep this list updated myself, please don't edit it yourself.
|
||||
|
||||
* TheBusyBiscuit
|
||||
* John000708
|
||||
* st392
|
||||
* DeathlyPanda
|
||||
* BlackBeltPanda
|
||||
* Poslovitch
|
||||
* alekso56
|
||||
* NathanAdhitya
|
||||
[Here is a list of all people who contributed to Slimefun 4 by submitting Code.](https://github.com/TheBusyBiscuit/Slimefun4/graphs/contributors)
|
||||
|
||||
## Wiki
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
package me.mrCookieSlime.CSCoreLibSetup;
|
||||
package me.mrCookieSlime.Slimefun.CSCoreLibSetup;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.BufferedReader;
|
||||
@ -35,18 +35,17 @@ public class CSCoreLibLoader {
|
||||
if (plugin.getServer().getPluginManager().isPluginEnabled("CS-CoreLib")) return true;
|
||||
else {
|
||||
System.err.println(" ");
|
||||
System.err.println("#################### - FATAL ERROR - ####################");
|
||||
System.err.println("#################### - INFO - ####################");
|
||||
System.err.println(" ");
|
||||
System.err.println(plugin.getName() + " could not be properly installed!");
|
||||
System.err.println(plugin.getName() + " could not be loaded.");
|
||||
System.err.println("It appears that you have not installed CS-CoreLib");
|
||||
System.err.println("And because of that, CS-CoreLib is now going to be");
|
||||
System.err.println("downloaded and installed.");
|
||||
System.err.println("But for the time being " + plugin.getName() + " will remain disabled");
|
||||
System.err.println("After the installation process has finished,");
|
||||
System.out.println("you will be asked to restart your Server.");
|
||||
System.err.println("- mrCookieSlime");
|
||||
System.err.println("Your Server will now try to download and install");
|
||||
System.err.println("CS-CoreLib for you.");
|
||||
System.err.println("You will be asked to restart your Server when it's finished.");
|
||||
System.err.println("If this somehow fails, please download and install CS-CoreLib manually:");
|
||||
System.err.println("https://dev.bukkit.org/projects/cs-corelib");
|
||||
System.err.println(" ");
|
||||
System.err.println("#################### - FATAL ERROR - ####################");
|
||||
System.err.println("#################### - INFO - ####################");
|
||||
System.err.println(" ");
|
||||
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
|
||||
|
||||
@ -74,11 +73,13 @@ public class CSCoreLibLoader {
|
||||
return true;
|
||||
} catch (IOException e) {
|
||||
System.err.println(" ");
|
||||
System.err.println("#################### - FATAL ERROR - ####################");
|
||||
System.err.println("#################### - WARNING - ####################");
|
||||
System.err.println(" ");
|
||||
System.err.println("Could not connect to BukkitDev, is it down?");
|
||||
System.err.println("Could not connect to BukkitDev.");
|
||||
System.err.println("Please download & install CS-CoreLib manually:");
|
||||
System.err.println("https://dev.bukkit.org/projects/cs-corelib");
|
||||
System.err.println(" ");
|
||||
System.err.println("#################### - FATAL ERROR - ####################");
|
||||
System.err.println("#################### - WARNING - ####################");
|
||||
System.err.println(" ");
|
||||
return false;
|
||||
}
|
||||
@ -105,7 +106,7 @@ public class CSCoreLibLoader {
|
||||
break;
|
||||
}
|
||||
|
||||
return connection.getURL();
|
||||
return new URL(connection.getURL().toString().replaceAll(" ", "%20"));
|
||||
}
|
||||
|
||||
private void install() {
|
||||
@ -122,23 +123,25 @@ public class CSCoreLibLoader {
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
System.err.println(" ");
|
||||
System.err.println("#################### - FATAL ERROR - ####################");
|
||||
System.err.println("#################### - WARNING - ####################");
|
||||
System.err.println(" ");
|
||||
System.err.println("Could not download CS-CoreLib");
|
||||
System.err.println("Failed to download CS-CoreLib");
|
||||
System.err.println("Please download & install CS-CoreLib manually:");
|
||||
System.err.println("https://dev.bukkit.org/projects/cs-corelib");
|
||||
System.err.println(" ");
|
||||
System.err.println("#################### - FATAL ERROR - ####################");
|
||||
System.err.println("#################### - WARNING - ####################");
|
||||
System.err.println(" ");
|
||||
} finally {
|
||||
try {
|
||||
if (input != null) input.close();
|
||||
if (output != null) output.close();
|
||||
System.err.println(" ");
|
||||
System.err.println("#################### - WARNING - ####################");
|
||||
System.err.println("#################### - INFO - ####################");
|
||||
System.err.println(" ");
|
||||
System.err.println("Please restart your Server to finish the Installation");
|
||||
System.err.println("of " + plugin.getName() + " and CS-CoreLib");
|
||||
System.err.println(" ");
|
||||
System.err.println("#################### - WARNING - ####################");
|
||||
System.err.println("#################### - INFO - ####################");
|
||||
System.err.println(" ");
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
@ -18,9 +18,11 @@ import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Variable;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Chat.CommandHelp;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Player.Players;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Reflection.ReflectionUtils;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.World.TitleBuilder;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.World.TitleBuilder.TitleType;
|
||||
import me.mrCookieSlime.Slimefun.SlimefunGuide;
|
||||
@ -152,21 +154,34 @@ public class SlimefunCommand implements CommandExecutor, Listener {
|
||||
}
|
||||
else if (args[0].equalsIgnoreCase("versions")) {
|
||||
if (sender.hasPermission("slimefun.command.versions")|| sender instanceof ConsoleCommandSender) {
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a" + Bukkit.getName() + " &2" + ReflectionUtils.getVersion()));
|
||||
sender.sendMessage("");
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&aCS-CoreLib &2v" + CSCoreLib.getLib().getDescription().getVersion()));
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&aSlimefun &2v" + plugin.getDescription().getVersion()));
|
||||
sender.sendMessage("");
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7&oInstalled Addons:"));
|
||||
|
||||
List<String> addons = new ArrayList<String>();
|
||||
|
||||
for (Plugin plugin: Bukkit.getPluginManager().getPlugins()) {
|
||||
if (plugin.getDescription().getDepend().contains("Slimefun") || plugin.getDescription().getSoftDepend().contains("Slimefun")) {
|
||||
if (Bukkit.getPluginManager().isPluginEnabled(plugin)) {
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', " &a" + plugin.getName() + " &2v" + plugin.getDescription().getVersion()));
|
||||
addons.add(ChatColor.translateAlternateColorCodes('&', " &a" + plugin.getName() + " &2v" + plugin.getDescription().getVersion()));
|
||||
}
|
||||
else {
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', " &c" + plugin.getName() + " &4v" + plugin.getDescription().getVersion()));
|
||||
addons.add(ChatColor.translateAlternateColorCodes('&', " &c" + plugin.getName() + " &4v" + plugin.getDescription().getVersion()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7Installed Addons &8(" + addons.size() + ")"));
|
||||
|
||||
for (String addon: addons) {
|
||||
sender.sendMessage(addon);
|
||||
}
|
||||
}
|
||||
else {
|
||||
Messages.local.sendTranslation(sender, "messages.no-permission", true);
|
||||
}
|
||||
else Messages.local.sendTranslation(sender, "messages.no-permission", true);
|
||||
}
|
||||
else if (args[0].equalsIgnoreCase("give")) {
|
||||
if (args.length == 3) {
|
||||
|
@ -0,0 +1,18 @@
|
||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||
|
||||
public class SlimefunBackpack extends SlimefunItem {
|
||||
|
||||
public int size;
|
||||
|
||||
public SlimefunBackpack(int size, Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
|
||||
super(category, item, name, recipeType, recipe);
|
||||
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
}
|
@ -59,6 +59,7 @@ public class SlimefunItem {
|
||||
Set<ItemHandler> itemhandlers;
|
||||
URID urid;
|
||||
boolean ticking = false;
|
||||
boolean addon = false;
|
||||
BlockTicker ticker;
|
||||
EnergyTicker energy;
|
||||
|
||||
@ -173,6 +174,7 @@ public class SlimefunItem {
|
||||
}
|
||||
|
||||
public void register(boolean slimefun) {
|
||||
addon = !slimefun;
|
||||
try {
|
||||
if (recipe.length < 9) recipe = new ItemStack[] {null, null, null, null, null, null, null, null, null};
|
||||
all.add(this);
|
||||
@ -251,6 +253,7 @@ public class SlimefunItem {
|
||||
if (sfi instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi;
|
||||
else if (sfi instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi;
|
||||
else if (sfi instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi;
|
||||
else if (sfi instanceof SlimefunBackpack && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi;
|
||||
else if (SlimefunManager.isItemSimiliar(item, sfi.getItem(), true)) return sfi;
|
||||
}
|
||||
return null;
|
||||
@ -469,4 +472,8 @@ public class SlimefunItem {
|
||||
public void addWikipage(String page) {
|
||||
Slimefun.addWikiPage(this.getName(), "https://github.com/mrCookieSlime/Slimefun4/wiki/" + page);
|
||||
}
|
||||
|
||||
public boolean isAddonItem() {
|
||||
return this.addon;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,17 @@
|
||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
||||
|
||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class SoulboundBackpack extends SlimefunBackpack {
|
||||
|
||||
public SoulboundBackpack(int size, Category category, ItemStack item, String name, ItemStack[] recipe) {
|
||||
super(size, category, item, name, RecipeType.MAGIC_WORKBENCH, recipe);
|
||||
}
|
||||
public SoulboundBackpack(int size, Category category, ItemStack item, String name, RecipeType type, ItemStack[] recipe) {
|
||||
super(size, category, item, name, type, recipe);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||
|
||||
public class VanillaItem extends SlimefunItem {
|
||||
|
||||
public VanillaItem(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
|
||||
super(category, item, name, recipeType, recipe);
|
||||
}
|
||||
}
|
@ -6,17 +6,18 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
|
||||
import me.mrCookieSlime.Slimefun.SlimefunStartup;
|
||||
import me.mrCookieSlime.Slimefun.Lists.Categories;
|
||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.VanillaItem;
|
||||
|
||||
public class SlimefunManager {
|
||||
|
||||
@ -38,7 +39,7 @@ public class SlimefunManager {
|
||||
}
|
||||
}
|
||||
|
||||
public static void registerArmorSet(ItemStack baseComponent, ItemStack[] items, String idSyntax, boolean slimefun) {
|
||||
public static void registerArmorSet(ItemStack baseComponent, ItemStack[] items, String idSyntax, boolean slimefun, boolean vanilla) {
|
||||
String[] components = new String[] {"_HELMET", "_CHESTPLATE", "_LEGGINGS", "_BOOTS"};
|
||||
Category cat = Categories.ARMOR;
|
||||
List<ItemStack[]> recipes = new ArrayList<ItemStack[]>();
|
||||
@ -47,7 +48,11 @@ public class SlimefunManager {
|
||||
recipes.add(new ItemStack[] {baseComponent, baseComponent, baseComponent, baseComponent, null, baseComponent, baseComponent, null, baseComponent});
|
||||
recipes.add(new ItemStack[] {null, null, null, baseComponent, null, baseComponent, baseComponent, null, baseComponent});
|
||||
for (int i = 0; i < 4; i++) {
|
||||
new SlimefunItem(cat, items[i], idSyntax + components[i], RecipeType.ARMOR_FORGE, recipes.get(i)).register(slimefun);
|
||||
if (vanilla) {
|
||||
new VanillaItem(cat, items[i], idSyntax + components[i], RecipeType.ARMOR_FORGE, recipes.get(i)).register(slimefun);
|
||||
} else {
|
||||
new SlimefunItem(cat, items[i], idSyntax + components[i], RecipeType.ARMOR_FORGE, recipes.get(i)).register(slimefun);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,19 +1,23 @@
|
||||
package me.mrCookieSlime.Slimefun.Setup;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.*;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.*;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.Chest;
|
||||
import org.bukkit.block.CreatureSpawner;
|
||||
import org.bukkit.block.Dispenser;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.ArmorStand;
|
||||
import org.bukkit.entity.Arrow;
|
||||
@ -81,14 +85,17 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.MultiTool;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingAlloy;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingItem;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBackpack;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBow;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SolarHelmet;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundBackpack;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundItem;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Talisman;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.VanillaItem;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AReactor;
|
||||
@ -101,7 +108,38 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BowShootHandler;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.ItemInteractionHandler;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.MultiBlockInteractionHandler;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AdvancedCargoOutputNode;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AnimalGrowthAccelerator;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoAnvil;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoBreeder;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoDisenchanter;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoEnchanter;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutomatedCraftingChamber;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CarbonPress;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CargoInputNode;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CargoOutputNode;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ChargingBench;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CropGrowthAccelerator;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricDustWasher;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricFurnace;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricGoldPan;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricIngotFactory;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricSmeltery;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectrifiedCrucible;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.FluidPump;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.FoodComposter;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.FoodFabricator;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Freezer;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.HeatedPressureChamber;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.NetherDrill;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.OilPump;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ReactorAccessPort;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Refinery;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.TrashCan;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.WitherAssembler;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.XPCollector;
|
||||
import me.mrCookieSlime.Slimefun.Objects.tasks.RainbowTicker;
|
||||
import me.mrCookieSlime.Slimefun.api.Backpacks;
|
||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
||||
@ -167,18 +205,84 @@ public class SlimefunSetup {
|
||||
boolean craft = true;
|
||||
for (int j = 0; j < inv.getContents().length; j++) {
|
||||
if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], true)) {
|
||||
craft = false;
|
||||
break;
|
||||
if (SlimefunItem.getByItem(inputs.get(i)[j]) instanceof SlimefunBackpack) {
|
||||
if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], false)) {
|
||||
craft = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
craft = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (craft) {
|
||||
final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i));
|
||||
final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)).clone();
|
||||
if (Slimefun.hasUnlocked(p, adding, true)) {
|
||||
Inventory inv2 = Bukkit.createInventory(null, 9, "test");
|
||||
for (int j = 0; j < inv.getContents().length; j++) {
|
||||
inv2.setItem(j, inv.getContents()[j] != null ? (inv.getContents()[j].getAmount() > 1 ? new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1): null): null);
|
||||
}
|
||||
if (InvUtils.fits(inv2, adding)) {
|
||||
SlimefunItem sfItem = SlimefunItem.getByItem(adding);
|
||||
|
||||
if (sfItem instanceof SlimefunBackpack) {
|
||||
ItemStack backpack = null;
|
||||
|
||||
for (int j = 0; j < 9; j++) {
|
||||
if (inv.getContents()[j] != null) {
|
||||
if (inv.getContents()[j].getType() != Material.AIR) {
|
||||
if (SlimefunItem.getByItem(inv.getContents()[j]) instanceof SlimefunBackpack) {
|
||||
backpack = inv.getContents()[j];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
String id = "";
|
||||
int size = ((SlimefunBackpack) sfItem).size;
|
||||
|
||||
if (backpack != null) {
|
||||
for (String line: backpack.getItemMeta().getLore()) {
|
||||
if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&7ID: ")) && line.contains("#")) {
|
||||
id = line.replace(ChatColor.translateAlternateColorCodes('&', "&7ID: "), "");
|
||||
Config cfg = new Config(new File("data-storage/Slimefun/Players/" + id.split("#")[0] + ".yml"));
|
||||
cfg.setValue("backpacks." + id.split("#")[1] + ".size", size);
|
||||
cfg.save();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (id.equals("")) {
|
||||
for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) {
|
||||
if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: <ID>"))) {
|
||||
ItemMeta im = adding.getItemMeta();
|
||||
List<String> lore = im.getLore();
|
||||
lore.set(line, lore.get(line).replace("<ID>", Backpacks.createBackpack(p, size)));
|
||||
im.setLore(lore);
|
||||
adding.setItemMeta(im);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) {
|
||||
if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: <ID>"))) {
|
||||
ItemMeta im = adding.getItemMeta();
|
||||
List<String> lore = im.getLore();
|
||||
lore.set(line, lore.get(line).replace("<ID>", id));
|
||||
im.setLore(lore);
|
||||
adding.setItemMeta(im);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (int j = 0; j < 9; j++) {
|
||||
if (inv.getContents()[j] != null) {
|
||||
if (inv.getContents()[j].getType() != Material.AIR) {
|
||||
@ -189,6 +293,7 @@ public class SlimefunSetup {
|
||||
}
|
||||
}
|
||||
p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1);
|
||||
|
||||
inv.addItem(adding);
|
||||
}
|
||||
else Messages.local.sendTranslation(p, "machines.full-inventory", true);
|
||||
@ -735,11 +840,11 @@ public class SlimefunSetup {
|
||||
SlimefunManager.registerArmorSet(new ItemStack(Material.GLOWSTONE), new ItemStack[] {SlimefunItems.GLOWSTONE_HELMET, SlimefunItems.GLOWSTONE_CHESTPLATE, SlimefunItems.GLOWSTONE_LEGGINGS, SlimefunItems.GLOWSTONE_BOOTS}, "GLOWSTONE",
|
||||
new PotionEffect[][] {new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}, new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}, new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}, new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}}, true, true);
|
||||
|
||||
SlimefunManager.registerArmorSet(SlimefunItems.DAMASCUS_STEEL_INGOT, new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_HELMET, SlimefunItems.DAMASCUS_STEEL_CHESTPLATE, SlimefunItems.DAMASCUS_STEEL_LEGGINGS, SlimefunItems.DAMASCUS_STEEL_BOOTS}, "DAMASCUS_STEEL", true);
|
||||
SlimefunManager.registerArmorSet(SlimefunItems.DAMASCUS_STEEL_INGOT, new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_HELMET, SlimefunItems.DAMASCUS_STEEL_CHESTPLATE, SlimefunItems.DAMASCUS_STEEL_LEGGINGS, SlimefunItems.DAMASCUS_STEEL_BOOTS}, "DAMASCUS_STEEL", true, false);
|
||||
|
||||
SlimefunManager.registerArmorSet(SlimefunItems.REINFORCED_ALLOY_INGOT, new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_HELMET, SlimefunItems.REINFORCED_ALLOY_CHESTPLATE, SlimefunItems.REINFORCED_ALLOY_LEGGINGS, SlimefunItems.REINFORCED_ALLOY_BOOTS}, "REINFORCED_ALLOY", true);
|
||||
SlimefunManager.registerArmorSet(SlimefunItems.REINFORCED_ALLOY_INGOT, new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_HELMET, SlimefunItems.REINFORCED_ALLOY_CHESTPLATE, SlimefunItems.REINFORCED_ALLOY_LEGGINGS, SlimefunItems.REINFORCED_ALLOY_BOOTS}, "REINFORCED_ALLOY", true, false);
|
||||
|
||||
SlimefunManager.registerArmorSet(new ItemStack(Material.CACTUS), new ItemStack[] {SlimefunItems.CACTUS_HELMET, SlimefunItems.CACTUS_CHESTPLATE, SlimefunItems.CACTUS_LEGGINGS, SlimefunItems.CACTUS_BOOTS}, "CACTUS", true);
|
||||
SlimefunManager.registerArmorSet(new ItemStack(Material.CACTUS), new ItemStack[] {SlimefunItems.CACTUS_HELMET, SlimefunItems.CACTUS_CHESTPLATE, SlimefunItems.CACTUS_LEGGINGS, SlimefunItems.CACTUS_BOOTS}, "CACTUS", true, false);
|
||||
|
||||
new Alloy(SlimefunItems.REINFORCED_ALLOY_INGOT, "REINFORCED_ALLOY_INGOT",
|
||||
new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.GOLD_24K, null, null, null})
|
||||
@ -1411,7 +1516,7 @@ public class SlimefunSetup {
|
||||
new ItemStack[] {SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.ALUMINUM_DUST, SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.THIN_GLASS), null, null, null, null, null})
|
||||
.register(true);
|
||||
|
||||
SlimefunManager.registerArmorSet(SlimefunItems.CHAIN, new ItemStack[] {new ItemStack(Material.CHAINMAIL_HELMET), new ItemStack(Material.CHAINMAIL_CHESTPLATE), new ItemStack(Material.CHAINMAIL_LEGGINGS), new ItemStack(Material.CHAINMAIL_BOOTS)}, "CHAIN", true);
|
||||
SlimefunManager.registerArmorSet(SlimefunItems.CHAIN, new ItemStack[] {new ItemStack(Material.CHAINMAIL_HELMET), new ItemStack(Material.CHAINMAIL_CHESTPLATE), new ItemStack(Material.CHAINMAIL_LEGGINGS), new ItemStack(Material.CHAINMAIL_BOOTS)}, "CHAIN", true, true);
|
||||
|
||||
new Talisman(SlimefunItems.TALISMAN_WHIRLWIND, "WHIRLWIND_TALISMAN",
|
||||
new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.STAFF_WIND, SlimefunItems.TALISMAN_TRAVELLER, SlimefunItems.STAFF_WIND, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}
|
||||
@ -1467,7 +1572,7 @@ public class SlimefunSetup {
|
||||
new ItemStack[] {SlimefunItems.HEAVY_CREAM, SlimefunItems.SALT, null, null, null, null, null, null, null})
|
||||
.register(true);
|
||||
|
||||
SlimefunManager.registerArmorSet(SlimefunItems.GILDED_IRON, new ItemStack[] {SlimefunItems.GILDED_IRON_HELMET, SlimefunItems.GILDED_IRON_CHESTPLATE, SlimefunItems.GILDED_IRON_LEGGINGS, SlimefunItems.GILDED_IRON_BOOTS}, "GILDED_IRON", true);
|
||||
SlimefunManager.registerArmorSet(SlimefunItems.GILDED_IRON, new ItemStack[] {SlimefunItems.GILDED_IRON_HELMET, SlimefunItems.GILDED_IRON_CHESTPLATE, SlimefunItems.GILDED_IRON_LEGGINGS, SlimefunItems.GILDED_IRON_BOOTS}, "GILDED_IRON", true, false);
|
||||
|
||||
new SlimefunArmorPiece(Categories.ARMOR, SlimefunItems.SCUBA_HELMET, "SCUBA_HELMET", RecipeType.ARMOR_FORGE,
|
||||
new ItemStack[] {new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new ItemStack(Material.THIN_GLASS), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), null, null, null},
|
||||
@ -1515,7 +1620,7 @@ public class SlimefunSetup {
|
||||
new ItemStack[] {new ItemStack(Material.REDSTONE), new ItemStack(Material.REDSTONE_BLOCK), SlimefunItems.FERROSILICON, SlimefunItems.HARDENED_METAL_INGOT, null, null, null, null, null})
|
||||
.register(true);
|
||||
|
||||
SlimefunManager.registerArmorSet(SlimefunItems.GOLD_12K, new ItemStack[] {SlimefunItems.GOLD_HELMET, SlimefunItems.GOLD_CHESTPLATE, SlimefunItems.GOLD_LEGGINGS, SlimefunItems.GOLD_BOOTS}, "GOLD_12K", true);
|
||||
SlimefunManager.registerArmorSet(SlimefunItems.GOLD_12K, new ItemStack[] {SlimefunItems.GOLD_HELMET, SlimefunItems.GOLD_CHESTPLATE, SlimefunItems.GOLD_LEGGINGS, SlimefunItems.GOLD_BOOTS}, "GOLD_12K", true, false);
|
||||
|
||||
new SlimefunItem(Categories.MISC, SlimefunItems.CLOTH, "CLOTH", RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new ItemStack[] {new ItemStack(Material.WOOL), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CLOTH, 8))
|
||||
@ -2161,19 +2266,19 @@ public class SlimefunSetup {
|
||||
}
|
||||
});
|
||||
|
||||
new SlimefunItem(Categories.PORTABLE, SlimefunItems.BACKPACK_SMALL, "SMALL_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new SlimefunBackpack(9, Categories.PORTABLE, SlimefunItems.BACKPACK_SMALL, "SMALL_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_6K, new ItemStack(Material.CHEST), SlimefunItems.GOLD_6K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)})
|
||||
.register(true);
|
||||
|
||||
new SlimefunItem(Categories.PORTABLE, SlimefunItems.BACKPACK_MEDIUM, "MEDIUM_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new SlimefunBackpack(18, Categories.PORTABLE, SlimefunItems.BACKPACK_MEDIUM, "MEDIUM_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_10K, SlimefunItems.BACKPACK_SMALL, SlimefunItems.GOLD_10K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)})
|
||||
.register(true);
|
||||
|
||||
new SlimefunItem(Categories.PORTABLE, SlimefunItems.BACKPACK_LARGE, "LARGE_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new SlimefunBackpack(27, Categories.PORTABLE, SlimefunItems.BACKPACK_LARGE, "LARGE_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_14K, SlimefunItems.BACKPACK_MEDIUM, SlimefunItems.GOLD_14K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)})
|
||||
.register(true);
|
||||
|
||||
new SlimefunItem(Categories.PORTABLE, SlimefunItems.WOVEN_BACKPACK, "WOVEN_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new SlimefunBackpack(36, Categories.PORTABLE, SlimefunItems.WOVEN_BACKPACK, "WOVEN_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new ItemStack[] {SlimefunItems.CLOTH, null, SlimefunItems.CLOTH, SlimefunItems.GOLD_16K, SlimefunItems.BACKPACK_LARGE, SlimefunItems.GOLD_16K, SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH})
|
||||
.register(true);
|
||||
|
||||
@ -2336,7 +2441,7 @@ public class SlimefunSetup {
|
||||
}
|
||||
});
|
||||
|
||||
new SlimefunItem(Categories.PORTABLE, SlimefunItems.GILDED_BACKPACK, "GILDED_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new SlimefunBackpack(45, Categories.PORTABLE, SlimefunItems.GILDED_BACKPACK, "GILDED_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE,
|
||||
new ItemStack[] {SlimefunItems.GOLD_22K, null, SlimefunItems.GOLD_22K, new ItemStack(Material.LEATHER), SlimefunItems.WOVEN_BACKPACK, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_22K, null, SlimefunItems.GOLD_22K})
|
||||
.register(true);
|
||||
|
||||
@ -2360,7 +2465,7 @@ public class SlimefunSetup {
|
||||
new ItemStack[] {SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_EARTH, SlimefunItems.NECROTIC_SKULL, SlimefunItems.RUNE_FIRE, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_WATER, SlimefunItems.ENDER_LUMP_3})
|
||||
.register(true);
|
||||
|
||||
new SoulboundItem(Categories.PORTABLE, SlimefunItems.BOUND_BACKPACK, "BOUND_BACKPACK",
|
||||
new SoulboundBackpack(36, Categories.PORTABLE, SlimefunItems.BOUND_BACKPACK, "BOUND_BACKPACK",
|
||||
new ItemStack[] {SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.GILDED_BACKPACK, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2})
|
||||
.register(true);
|
||||
|
||||
@ -2375,12 +2480,12 @@ public class SlimefunSetup {
|
||||
.register(true);
|
||||
|
||||
new JetBoots(SlimefunItems.BILLON_JETBOOTS, "BILLON_JETBOOTS",
|
||||
new ItemStack[] {null, null, SlimefunItems.BILLON_INGOT, null, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BILLON_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER},
|
||||
new ItemStack[] {null, null, null, SlimefunItems.BILLON_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BILLON_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER},
|
||||
0.45)
|
||||
.register(true);
|
||||
|
||||
new JetBoots(SlimefunItems.STEEL_JETBOOTS, "STEEL_JETBOOTS",
|
||||
new ItemStack[] {null, null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER},
|
||||
new ItemStack[] {null, null, null, SlimefunItems.STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER},
|
||||
0.5)
|
||||
.register(true);
|
||||
|
||||
@ -2477,7 +2582,7 @@ public class SlimefunSetup {
|
||||
Block b = block.getBlock();
|
||||
b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType());
|
||||
for (ItemStack drop: b.getDrops()) {
|
||||
b.getWorld().dropItemNaturally(b.getLocation(), b.getType().toString().endsWith("_ORE") ? new CustomItem(drop, fortune): drop);
|
||||
b.getWorld().dropItemNaturally(b.getLocation(), (!drop.getType().isBlock()) ? new CustomItem(drop, fortune): drop);
|
||||
}
|
||||
b.setType(Material.AIR);
|
||||
}
|
||||
@ -4242,7 +4347,7 @@ public class SlimefunSetup {
|
||||
new ItemStack[] {SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_ENDER, new ItemStack(Material.FEATHER), SlimefunItems.RUNE_ENDER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3})
|
||||
.register(true);
|
||||
|
||||
new SlimefunItem(Categories.MAGIC, SlimefunItems.ELYTRA, "ELYTRA", RecipeType.ANCIENT_ALTAR,
|
||||
new VanillaItem(Categories.MAGIC, SlimefunItems.ELYTRA, "ELYTRA", RecipeType.ANCIENT_ALTAR,
|
||||
new ItemStack[] {SlimefunItems.ELYTRA_SCALE, SlimefunItems.RUNE_AIR, SlimefunItems.ELYTRA_SCALE, SlimefunItems.RUNE_AIR, new ItemStack(Material.LEATHER_CHESTPLATE), SlimefunItems.RUNE_AIR, SlimefunItems.ELYTRA_SCALE, SlimefunItems.RUNE_AIR, SlimefunItems.ELYTRA_SCALE})
|
||||
.register(true);
|
||||
|
||||
|
@ -218,6 +218,15 @@ public class WikiSetup {
|
||||
Slimefun.addOfficialWikiPage("SOLAR_GENERATOR_4", "Solar-Generator");
|
||||
Slimefun.addOfficialWikiPage("AUTO_ENCHANTER", "Auto-Enchanter");
|
||||
Slimefun.addOfficialWikiPage("AUTO_DISENCHANTER", "Auto-Disenchanter");
|
||||
|
||||
//Cargo Management
|
||||
Slimefun.addOfficialWikiPage("CARGO_MOTOR", "Cargo-Motor");
|
||||
Slimefun.addOfficialWikiPage("CARGO_MANAGER", "Cargo-Manager");
|
||||
Slimefun.addOfficialWikiPage("CARGO_NODE", "Cargo-Nodes");
|
||||
Slimefun.addOfficialWikiPage("CARGO_INPUT", "Cargo-Nodes");
|
||||
Slimefun.addOfficialWikiPage("CARGO_OUTPUT", "Cargo-Nodes");
|
||||
Slimefun.addOfficialWikiPage("CARGO_OUTPUT_ADVANCED", "Cargo-Nodes");
|
||||
Slimefun.addOfficialWikiPage("TRASH_CAN", "Trash-Can");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -861,7 +861,7 @@ public class SlimefunGuide {
|
||||
if (survival && !Slimefun.hasUnlocked(p, sfitem.getItem(), false) && sfitem.getResearch() != null) {
|
||||
if (Slimefun.hasPermission(p, sfitem, false)) {
|
||||
final int cost = SlimefunStartup.getResearchCfg().getInt(sfitem.getResearch().getID() + ".cost");
|
||||
menu.addItem(index, new CustomItem(Material.BARRIER, StringUtils.formatItemName(sfitem.getItem(), false), 0, new String[] {"&4&lLOCKED", "", "&a> Click to unlock", "", "&7Cost: &b" + cost + " Level"}));
|
||||
menu.addItem(index, new CustomItem(Material.BARRIER, "&r" + StringUtils.formatItemName(sfitem.getItem(), false), 0, new String[] {"&4&lLOCKED", "", "&a> Click to unlock", "", "&7Cost: &b" + cost + " Level"}));
|
||||
menu.addMenuClickHandler(index, new MenuClickHandler() {
|
||||
|
||||
@Override
|
||||
|
@ -1,26 +1,9 @@
|
||||
package me.mrCookieSlime.Slimefun;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoEnchanter;
|
||||
import net.coreprotect.CoreProtect;
|
||||
import net.coreprotect.CoreProtectAPI;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
@ -37,10 +20,9 @@ import org.bukkit.scheduler.BukkitRunnable;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.PluginUtils;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Clock;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Reflection.ReflectionUtils;
|
||||
import me.mrCookieSlime.CSCoreLibSetup.CSCoreLibLoader;
|
||||
import me.mrCookieSlime.Slimefun.AncientAltar.Pedestals;
|
||||
import me.mrCookieSlime.Slimefun.CSCoreLibSetup.CSCoreLibLoader;
|
||||
import me.mrCookieSlime.Slimefun.Commands.SlimefunCommand;
|
||||
import me.mrCookieSlime.Slimefun.Commands.SlimefunTabCompleter;
|
||||
import me.mrCookieSlime.Slimefun.GEO.OreGenSystem;
|
||||
@ -55,6 +37,7 @@ import me.mrCookieSlime.Slimefun.Objects.Research;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoEnchanter;
|
||||
import me.mrCookieSlime.Slimefun.Setup.Files;
|
||||
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
||||
import me.mrCookieSlime.Slimefun.Setup.MiscSetup;
|
||||
@ -66,6 +49,7 @@ import me.mrCookieSlime.Slimefun.URID.URID;
|
||||
import me.mrCookieSlime.Slimefun.WorldEdit.WESlimefunManager;
|
||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||
import me.mrCookieSlime.Slimefun.api.SlimefunBackup;
|
||||
import me.mrCookieSlime.Slimefun.api.TickerTask;
|
||||
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
||||
import me.mrCookieSlime.Slimefun.api.energy.EnergyNet;
|
||||
@ -89,6 +73,8 @@ import me.mrCookieSlime.Slimefun.listeners.ItemListener;
|
||||
import me.mrCookieSlime.Slimefun.listeners.TalismanListener;
|
||||
import me.mrCookieSlime.Slimefun.listeners.TeleporterListener;
|
||||
import me.mrCookieSlime.Slimefun.listeners.ToolListener;
|
||||
import net.coreprotect.CoreProtect;
|
||||
import net.coreprotect.CoreProtectAPI;
|
||||
|
||||
public class SlimefunStartup extends JavaPlugin {
|
||||
|
||||
@ -170,6 +156,7 @@ public class SlimefunStartup extends JavaPlugin {
|
||||
if (!new File("data-storage/Slimefun/blocks").exists()) new File("data-storage/Slimefun/blocks").mkdirs();
|
||||
if (!new File("data-storage/Slimefun/stored-blocks").exists()) new File("data-storage/Slimefun/stored-blocks").mkdirs();
|
||||
if (!new File("data-storage/Slimefun/stored-inventories").exists()) new File("data-storage/Slimefun/stored-inventories").mkdirs();
|
||||
if (!new File("data-storage/Slimefun/stored-chunks").exists()) new File("data-storage/Slimefun/stored-chunks").mkdirs();
|
||||
if (!new File("data-storage/Slimefun/universal-inventories").exists()) new File("data-storage/Slimefun/universal-inventories").mkdirs();
|
||||
if (!new File("data-storage/Slimefun/waypoints").exists()) new File("data-storage/Slimefun/waypoints").mkdirs();
|
||||
if (!new File("data-storage/Slimefun/block-backups").exists()) new File("data-storage/Slimefun/block-backups").mkdirs();
|
||||
@ -374,7 +361,7 @@ public class SlimefunStartup extends JavaPlugin {
|
||||
connector.pullFile();
|
||||
}
|
||||
}
|
||||
}, 60L, 20 * 60 * 20L);
|
||||
}, 80L, 60 * 60 * 20L);
|
||||
|
||||
// Hooray!
|
||||
System.out.println("[Slimefun] Finished!");
|
||||
@ -408,109 +395,22 @@ public class SlimefunStartup extends JavaPlugin {
|
||||
public void onDisable() {
|
||||
Bukkit.getScheduler().cancelTasks(this);
|
||||
|
||||
try {
|
||||
for (Map.Entry<Block, Block> entry: ticker.move.entrySet()) {
|
||||
BlockStorage._integrated_moveBlockInfo(entry.getKey(), entry.getValue());
|
||||
}
|
||||
ticker.move.clear();
|
||||
// Finishes all started movements/removals of block data
|
||||
ticker.HALTED = true;
|
||||
ticker.run();
|
||||
|
||||
try {
|
||||
for (World world: Bukkit.getWorlds()) {
|
||||
BlockStorage storage = BlockStorage.getStorage(world);
|
||||
if (storage != null) storage.save(true);
|
||||
else System.err.println("[Slimefun] Could not save Slimefun Blocks for World \"" + world.getName() + "\"");
|
||||
}
|
||||
|
||||
File folder = new File("data-storage/Slimefun/block-backups");
|
||||
List<File> backups = Arrays.asList(folder.listFiles());
|
||||
if (backups.size() > 20) {
|
||||
Collections.sort(backups, new Comparator<File>() {
|
||||
|
||||
@Override
|
||||
public int compare(File f1, File f2) {
|
||||
try {
|
||||
return (int) (new SimpleDateFormat("yyyy-MM-dd-HH-mm").parse(f1.getName().replace(".zip", "")).getTime() - new SimpleDateFormat("yyyy-MM-dd-HH-mm").parse(f2.getName().replace(".zip", "")).getTime());
|
||||
} catch (ParseException e) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
for (int i = backups.size() - 20; i > 0; i--) {
|
||||
backups.get(i).delete();
|
||||
if (storage != null) {
|
||||
storage.save(true);
|
||||
}
|
||||
else {
|
||||
System.err.println("[Slimefun] Could not save Slimefun Blocks for World \"" + world.getName() + "\"");
|
||||
}
|
||||
}
|
||||
|
||||
File file = new File("data-storage/Slimefun/block-backups/" + Clock.format(new Date()) + ".zip");
|
||||
byte[] buffer = new byte[1024];
|
||||
|
||||
if (file.exists()) file.delete();
|
||||
|
||||
try {
|
||||
file.createNewFile();
|
||||
|
||||
ZipOutputStream output = new ZipOutputStream(new FileOutputStream(file));
|
||||
|
||||
for (File f1: new File("data-storage/Slimefun/stored-blocks/").listFiles()) {
|
||||
for (File f: f1.listFiles()) {
|
||||
ZipEntry entry = new ZipEntry("stored-blocks/" + f1.getName() + "/" + f.getName());
|
||||
output.putNextEntry(entry);
|
||||
FileInputStream input = new FileInputStream(f);
|
||||
|
||||
int length;
|
||||
while ((length = input.read(buffer)) > 0) {
|
||||
output.write(buffer, 0, length);
|
||||
}
|
||||
|
||||
input.close();
|
||||
output.closeEntry();
|
||||
}
|
||||
}
|
||||
|
||||
for (File f: new File("data-storage/Slimefun/universal-inventories/").listFiles()) {
|
||||
ZipEntry entry = new ZipEntry("universal-inventories/" + f.getName());
|
||||
output.putNextEntry(entry);
|
||||
FileInputStream input = new FileInputStream(f);
|
||||
|
||||
int length;
|
||||
while ((length = input.read(buffer)) > 0) {
|
||||
output.write(buffer, 0, length);
|
||||
}
|
||||
|
||||
input.close();
|
||||
output.closeEntry();
|
||||
}
|
||||
|
||||
for (File f: new File("data-storage/Slimefun/stored-inventories/").listFiles()) {
|
||||
ZipEntry entry = new ZipEntry("stored-inventories/" + f.getName());
|
||||
output.putNextEntry(entry);
|
||||
FileInputStream input = new FileInputStream(f);
|
||||
|
||||
int length;
|
||||
while ((length = input.read(buffer)) > 0) {
|
||||
output.write(buffer, 0, length);
|
||||
}
|
||||
|
||||
input.close();
|
||||
output.closeEntry();
|
||||
}
|
||||
|
||||
ZipEntry entry = new ZipEntry("stored-chunks/chunks.sfc");
|
||||
output.putNextEntry(entry);
|
||||
FileInputStream input = new FileInputStream(new File("data-storage/Slimefun/stored-chunks/chunks.sfc"));
|
||||
|
||||
int length;
|
||||
while ((length = input.read(buffer)) > 0) {
|
||||
output.write(buffer, 0, length);
|
||||
}
|
||||
|
||||
input.close();
|
||||
output.closeEntry();
|
||||
|
||||
output.close();
|
||||
System.out.println("[Slimfun] Backed up Blocks to " + file.getName());
|
||||
} catch(IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
SlimefunBackup.start();
|
||||
} catch(Exception x) {
|
||||
}
|
||||
|
||||
|
@ -303,15 +303,6 @@ public class BlockStorage {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
if (json != null && json.length() > 2) {
|
||||
String[] entries = json.substring(2, json.length() - 2).split("\",\"");
|
||||
|
||||
for (String entry: entries) {
|
||||
String[] components = entry.split("\":\"");
|
||||
map.put(components[0], components[1]);
|
||||
}
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
|
@ -6,17 +6,18 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||
import me.mrCookieSlime.Slimefun.SlimefunStartup;
|
||||
import me.mrCookieSlime.Slimefun.GPS.GPSNetwork;
|
||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||
import me.mrCookieSlime.Slimefun.Objects.Research;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.VanillaItem;
|
||||
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class Slimefun {
|
||||
|
||||
public static Map<Integer, List<GuideHandler>> guide_handlers = new HashMap<Integer, List<GuideHandler>>();
|
||||
@ -61,7 +62,7 @@ public class Slimefun {
|
||||
SlimefunItem sfItem = SlimefunItem.getByItem(item);
|
||||
if (sfItem == null) {
|
||||
if (SlimefunItem.isDisabled(item)) {
|
||||
if (message) Messages.local.sendTranslation(p, "messages.disabled-item", true);
|
||||
if (message && !(sfItem instanceof VanillaItem)) Messages.local.sendTranslation(p, "messages.disabled-item", true);
|
||||
return false;
|
||||
}
|
||||
else return true;
|
||||
@ -70,7 +71,7 @@ public class Slimefun {
|
||||
if (sfItem.getResearch() == null) return true;
|
||||
else if (sfItem.getResearch().hasUnlocked(p)) return true;
|
||||
else {
|
||||
if (message) Messages.local.sendTranslation(p, "messages.not-researched", true);
|
||||
if (message && !(sfItem instanceof VanillaItem)) Messages.local.sendTranslation(p, "messages.not-researched", true);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -82,7 +83,7 @@ public class Slimefun {
|
||||
if (sfItem.getResearch() == null) return true;
|
||||
else if (sfItem.getResearch().hasUnlocked(p)) return true;
|
||||
else {
|
||||
if (message) Messages.local.sendTranslation(p, "messages.not-researched", true);
|
||||
if (message && !(sfItem instanceof VanillaItem)) Messages.local.sendTranslation(p, "messages.not-researched", true);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
119
src/me/mrCookieSlime/Slimefun/api/SlimefunBackup.java
Normal file
119
src/me/mrCookieSlime/Slimefun/api/SlimefunBackup.java
Normal file
@ -0,0 +1,119 @@
|
||||
package me.mrCookieSlime.Slimefun.api;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Clock;
|
||||
|
||||
public class SlimefunBackup {
|
||||
|
||||
public static void start() {
|
||||
File folder = new File("data-storage/Slimefun/block-backups");
|
||||
List<File> backups = Arrays.asList(folder.listFiles());
|
||||
if (backups.size() > 20) {
|
||||
Collections.sort(backups, new Comparator<File>() {
|
||||
|
||||
@Override
|
||||
public int compare(File f1, File f2) {
|
||||
try {
|
||||
return (int) (new SimpleDateFormat("yyyy-MM-dd-HH-mm").parse(f1.getName().replace(".zip", "")).getTime() - new SimpleDateFormat("yyyy-MM-dd-HH-mm").parse(f2.getName().replace(".zip", "")).getTime());
|
||||
} catch (ParseException e) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
for (int i = backups.size() - 20; i > 0; i--) {
|
||||
backups.get(i).delete();
|
||||
}
|
||||
}
|
||||
|
||||
File file = new File("data-storage/Slimefun/block-backups/" + Clock.format(new Date()) + ".zip");
|
||||
byte[] buffer = new byte[1024];
|
||||
|
||||
if (file.exists()) {
|
||||
file.delete();
|
||||
}
|
||||
|
||||
try {
|
||||
file.createNewFile();
|
||||
|
||||
ZipOutputStream output = new ZipOutputStream(new FileOutputStream(file));
|
||||
|
||||
for (File f1: new File("data-storage/Slimefun/stored-blocks/").listFiles()) {
|
||||
for (File f: f1.listFiles()) {
|
||||
ZipEntry entry = new ZipEntry("stored-blocks/" + f1.getName() + "/" + f.getName());
|
||||
output.putNextEntry(entry);
|
||||
FileInputStream input = new FileInputStream(f);
|
||||
|
||||
int length;
|
||||
while ((length = input.read(buffer)) > 0) {
|
||||
output.write(buffer, 0, length);
|
||||
}
|
||||
|
||||
input.close();
|
||||
output.closeEntry();
|
||||
}
|
||||
}
|
||||
|
||||
for (File f: new File("data-storage/Slimefun/universal-inventories/").listFiles()) {
|
||||
ZipEntry entry = new ZipEntry("universal-inventories/" + f.getName());
|
||||
output.putNextEntry(entry);
|
||||
FileInputStream input = new FileInputStream(f);
|
||||
|
||||
int length;
|
||||
while ((length = input.read(buffer)) > 0) {
|
||||
output.write(buffer, 0, length);
|
||||
}
|
||||
|
||||
input.close();
|
||||
output.closeEntry();
|
||||
}
|
||||
|
||||
for (File f: new File("data-storage/Slimefun/stored-inventories/").listFiles()) {
|
||||
ZipEntry entry = new ZipEntry("stored-inventories/" + f.getName());
|
||||
output.putNextEntry(entry);
|
||||
FileInputStream input = new FileInputStream(f);
|
||||
|
||||
int length;
|
||||
while ((length = input.read(buffer)) > 0) {
|
||||
output.write(buffer, 0, length);
|
||||
}
|
||||
|
||||
input.close();
|
||||
output.closeEntry();
|
||||
}
|
||||
|
||||
if (new File("data-storage/Slimefun/stored-chunks/chunks.sfc").exists()) {
|
||||
ZipEntry entry = new ZipEntry("stored-chunks/chunks.sfc");
|
||||
output.putNextEntry(entry);
|
||||
FileInputStream input = new FileInputStream(new File("data-storage/Slimefun/stored-chunks/chunks.sfc"));
|
||||
|
||||
int length;
|
||||
while ((length = input.read(buffer)) > 0) {
|
||||
output.write(buffer, 0, length);
|
||||
}
|
||||
|
||||
input.close();
|
||||
output.closeEntry();
|
||||
}
|
||||
|
||||
output.close();
|
||||
System.out.println("[Slimfun] Backed up Blocks to " + file.getName());
|
||||
} catch(IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -23,6 +23,8 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
|
||||
|
||||
public class TickerTask implements Runnable {
|
||||
|
||||
public boolean HALTED = false;
|
||||
|
||||
public Map<Block, Block> move = new HashMap<Block, Block>();
|
||||
public Map<Location, Boolean> delete = new HashMap<Location, Boolean>();
|
||||
|
||||
@ -42,6 +44,7 @@ public class TickerTask implements Runnable {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
long timestamp = System.currentTimeMillis();
|
||||
|
||||
skipped = 0;
|
||||
@ -65,57 +68,59 @@ public class TickerTask implements Runnable {
|
||||
delete.remove(entry.getKey());
|
||||
}
|
||||
|
||||
for (final String c: BlockStorage.getTickingChunks()) {
|
||||
long timestamp2 = System.currentTimeMillis();
|
||||
chunks++;
|
||||
if (!HALTED) {
|
||||
for (final String c: BlockStorage.getTickingChunks()) {
|
||||
long timestamp2 = System.currentTimeMillis();
|
||||
chunks++;
|
||||
|
||||
blocks:
|
||||
for (final Block b: BlockStorage.getTickingBlocks(c)) {
|
||||
if (b.getChunk().isLoaded()) {
|
||||
final Location l = b.getLocation();
|
||||
final SlimefunItem item = BlockStorage.check(l);
|
||||
if (item != null) {
|
||||
machines++;
|
||||
try {
|
||||
item.getTicker().update();
|
||||
if (item.getTicker().isSynchronized()) {
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() {
|
||||
blocks:
|
||||
for (final Block b: BlockStorage.getTickingBlocks(c)) {
|
||||
if (b.getChunk().isLoaded()) {
|
||||
final Location l = b.getLocation();
|
||||
final SlimefunItem item = BlockStorage.check(l);
|
||||
if (item != null) {
|
||||
machines++;
|
||||
try {
|
||||
item.getTicker().update();
|
||||
if (item.getTicker().isSynchronized()) {
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
long timestamp3 = System.currentTimeMillis();
|
||||
item.getTicker().tick(b, item, BlockStorage.getBlockInfo(l));
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
long timestamp3 = System.currentTimeMillis();
|
||||
item.getTicker().tick(b, item, BlockStorage.getBlockInfo(l));
|
||||
|
||||
map_machinetime.put(item.getName(), (map_machinetime.containsKey(item.getName()) ? map_machinetime.get(item.getName()): 0) + (System.currentTimeMillis() - timestamp3));
|
||||
map_chunk.put(c, (map_chunk.containsKey(c) ? map_chunk.get(c): 0) + 1);
|
||||
map_machine.put(item.getName(), (map_machine.containsKey(item.getName()) ? map_machine.get(item.getName()): 0) + 1);
|
||||
block_timings.put(l, System.currentTimeMillis() - timestamp3);
|
||||
} catch(Exception x) {
|
||||
int errors = 0;
|
||||
if (bugged.containsKey(l)) errors = bugged.get(l);
|
||||
errors++;
|
||||
map_machinetime.put(item.getName(), (map_machinetime.containsKey(item.getName()) ? map_machinetime.get(item.getName()): 0) + (System.currentTimeMillis() - timestamp3));
|
||||
map_chunk.put(c, (map_chunk.containsKey(c) ? map_chunk.get(c): 0) + 1);
|
||||
map_machine.put(item.getName(), (map_machine.containsKey(item.getName()) ? map_machine.get(item.getName()): 0) + 1);
|
||||
block_timings.put(l, System.currentTimeMillis() - timestamp3);
|
||||
} catch(Exception x) {
|
||||
int errors = 0;
|
||||
if (bugged.containsKey(l)) errors = bugged.get(l);
|
||||
errors++;
|
||||
|
||||
if (errors == 1) {
|
||||
File file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + ".err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(2).err");
|
||||
if (errors == 1) {
|
||||
File file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + ".err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(3).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(2).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(4).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(3).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(5).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(4).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(6).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(5).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(7).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(6).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(8).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(7).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(9).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(8).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(10).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(9).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(10).err");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -124,113 +129,113 @@ public class TickerTask implements Runnable {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
try {
|
||||
PrintStream stream = new PrintStream(file);
|
||||
stream.println();
|
||||
stream.println("Server Software: " + Bukkit.getName());
|
||||
stream.println(" Build: " + Bukkit.getVersion());
|
||||
stream.println(" Minecraft: " + Bukkit.getBukkitVersion());
|
||||
stream.println();
|
||||
stream.println("Installed Plugins (" + Bukkit.getPluginManager().getPlugins().length + ")");
|
||||
for (Plugin p: Bukkit.getPluginManager().getPlugins()) {
|
||||
if (Bukkit.getPluginManager().isPluginEnabled(p)) {
|
||||
stream.println(" + " + p.getName() + " " + p.getDescription().getVersion());
|
||||
try {
|
||||
PrintStream stream = new PrintStream(file);
|
||||
stream.println();
|
||||
stream.println("Server Software: " + Bukkit.getName());
|
||||
stream.println(" Build: " + Bukkit.getVersion());
|
||||
stream.println(" Minecraft: " + Bukkit.getBukkitVersion());
|
||||
stream.println();
|
||||
stream.println("Installed Plugins (" + Bukkit.getPluginManager().getPlugins().length + ")");
|
||||
for (Plugin p: Bukkit.getPluginManager().getPlugins()) {
|
||||
if (Bukkit.getPluginManager().isPluginEnabled(p)) {
|
||||
stream.println(" + " + p.getName() + " " + p.getDescription().getVersion());
|
||||
}
|
||||
else {
|
||||
stream.println(" - " + p.getName() + " " + p.getDescription().getVersion());
|
||||
}
|
||||
}
|
||||
else {
|
||||
stream.println(" - " + p.getName() + " " + p.getDescription().getVersion());
|
||||
}
|
||||
}
|
||||
stream.println();
|
||||
stream.println("Ticked Block:");
|
||||
stream.println(" World: " + l.getWorld().getName());
|
||||
stream.println(" X: " + l.getBlockX());
|
||||
stream.println(" Y: " + l.getBlockY());
|
||||
stream.println(" Z: " + l.getBlockZ());
|
||||
stream.println();
|
||||
stream.println("Slimefun Data:");
|
||||
stream.println(" ID: " + item.getName());
|
||||
stream.println(" Inventory: " + BlockStorage.getStorage(l.getWorld()).hasInventory(l));
|
||||
stream.println(" Data: " + BlockStorage.getBlockInfoAsJson(l));
|
||||
stream.println();
|
||||
stream.println("Stacktrace:");
|
||||
stream.println();
|
||||
x.printStackTrace(stream);
|
||||
stream.println();
|
||||
stream.println("Ticked Block:");
|
||||
stream.println(" World: " + l.getWorld().getName());
|
||||
stream.println(" X: " + l.getBlockX());
|
||||
stream.println(" Y: " + l.getBlockY());
|
||||
stream.println(" Z: " + l.getBlockZ());
|
||||
stream.println();
|
||||
stream.println("Slimefun Data:");
|
||||
stream.println(" ID: " + item.getName());
|
||||
stream.println(" Inventory: " + BlockStorage.getStorage(l.getWorld()).hasInventory(l));
|
||||
stream.println(" Data: " + BlockStorage.getBlockInfoAsJson(l));
|
||||
stream.println();
|
||||
stream.println("Stacktrace:");
|
||||
stream.println();
|
||||
x.printStackTrace(stream);
|
||||
|
||||
stream.close();
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
System.err.println("[Slimefun] Exception caught while ticking a Block:" + x.getClass().getName());
|
||||
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ());
|
||||
System.err.println("[Slimefun] Saved as: ");
|
||||
System.err.println("[Slimefun] /plugins/Slimefun/error-reports/" + file.getName());
|
||||
System.err.println("[Slimefun] Please consider sending this File to the developer(s) of Slimefun, sending this Error won't get you any help though.");
|
||||
System.err.println("[Slimefun] ");
|
||||
|
||||
bugged_blocks.put(l, errors);
|
||||
}
|
||||
else if (errors == 4) {
|
||||
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getName() + ")");
|
||||
System.err.println("[Slimefun] has thrown 4 Exceptions in the last 4 Ticks, the Block has been terminated.");
|
||||
System.err.println("[Slimefun] Check your /plugins/Slimefun/error-reports/ folder for details.");
|
||||
System.err.println("[Slimefun] ");
|
||||
|
||||
BlockStorage._integrated_removeBlockInfo(l, true);
|
||||
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
l.getBlock().setType(Material.AIR);
|
||||
stream.close();
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
else {
|
||||
bugged_blocks.put(l, errors);
|
||||
System.err.println("[Slimefun] Exception caught while ticking a Block:" + x.getClass().getName());
|
||||
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ());
|
||||
System.err.println("[Slimefun] Saved as: ");
|
||||
System.err.println("[Slimefun] /plugins/Slimefun/error-reports/" + file.getName());
|
||||
System.err.println("[Slimefun] Please consider sending this File to the developer(s) of Slimefun, sending this Error won't get you any help though.");
|
||||
System.err.println("[Slimefun] ");
|
||||
|
||||
bugged_blocks.put(l, errors);
|
||||
}
|
||||
else if (errors == 4) {
|
||||
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getName() + ")");
|
||||
System.err.println("[Slimefun] has thrown 4 Exceptions in the last 4 Ticks, the Block has been terminated.");
|
||||
System.err.println("[Slimefun] Check your /plugins/Slimefun/error-reports/ folder for details.");
|
||||
System.err.println("[Slimefun] ");
|
||||
|
||||
BlockStorage._integrated_removeBlockInfo(l, true);
|
||||
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
l.getBlock().setType(Material.AIR);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
else {
|
||||
bugged_blocks.put(l, errors);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
long timestamp3 = System.currentTimeMillis();
|
||||
item.getTicker().tick(b, item, BlockStorage.getBlockInfo(l));
|
||||
});
|
||||
}
|
||||
else {
|
||||
long timestamp3 = System.currentTimeMillis();
|
||||
item.getTicker().tick(b, item, BlockStorage.getBlockInfo(l));
|
||||
|
||||
map_machinetime.put(item.getName(), (map_machinetime.containsKey(item.getName()) ? map_machinetime.get(item.getName()): 0) + (System.currentTimeMillis() - timestamp3));
|
||||
map_chunk.put(c, (map_chunk.containsKey(c) ? map_chunk.get(c): 0) + 1);
|
||||
map_machine.put(item.getName(), (map_machine.containsKey(item.getName()) ? map_machine.get(item.getName()): 0) + 1);
|
||||
block_timings.put(l, System.currentTimeMillis() - timestamp3);
|
||||
}
|
||||
tickers.add(item.getTicker());
|
||||
} catch(Exception x) {
|
||||
map_machinetime.put(item.getName(), (map_machinetime.containsKey(item.getName()) ? map_machinetime.get(item.getName()): 0) + (System.currentTimeMillis() - timestamp3));
|
||||
map_chunk.put(c, (map_chunk.containsKey(c) ? map_chunk.get(c): 0) + 1);
|
||||
map_machine.put(item.getName(), (map_machine.containsKey(item.getName()) ? map_machine.get(item.getName()): 0) + 1);
|
||||
block_timings.put(l, System.currentTimeMillis() - timestamp3);
|
||||
}
|
||||
tickers.add(item.getTicker());
|
||||
} catch(Exception x) {
|
||||
|
||||
int errors = 0;
|
||||
if (bugged.containsKey(l)) errors = bugged.get(l);
|
||||
errors++;
|
||||
int errors = 0;
|
||||
if (bugged.containsKey(l)) errors = bugged.get(l);
|
||||
errors++;
|
||||
|
||||
if (errors == 1) {
|
||||
File file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + ".err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(2).err");
|
||||
if (errors == 1) {
|
||||
File file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + ".err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(3).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(2).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(4).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(3).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(5).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(4).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(6).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(5).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(7).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(6).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(8).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(7).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(9).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(8).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(10).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(9).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(10).err");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -239,86 +244,86 @@ public class TickerTask implements Runnable {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
try {
|
||||
PrintStream stream = new PrintStream(file);
|
||||
stream.println();
|
||||
stream.println("Server Software: " + Bukkit.getName());
|
||||
stream.println(" Build: " + Bukkit.getVersion());
|
||||
stream.println(" Minecraft: " + Bukkit.getBukkitVersion());
|
||||
stream.println();
|
||||
stream.println("Installed Plugins (" + Bukkit.getPluginManager().getPlugins().length + ")");
|
||||
for (Plugin p: Bukkit.getPluginManager().getPlugins()) {
|
||||
if (Bukkit.getPluginManager().isPluginEnabled(p)) {
|
||||
stream.println(" + " + p.getName() + " " + p.getDescription().getVersion());
|
||||
try {
|
||||
PrintStream stream = new PrintStream(file);
|
||||
stream.println();
|
||||
stream.println("Server Software: " + Bukkit.getName());
|
||||
stream.println(" Build: " + Bukkit.getVersion());
|
||||
stream.println(" Minecraft: " + Bukkit.getBukkitVersion());
|
||||
stream.println();
|
||||
stream.println("Installed Plugins (" + Bukkit.getPluginManager().getPlugins().length + ")");
|
||||
for (Plugin p: Bukkit.getPluginManager().getPlugins()) {
|
||||
if (Bukkit.getPluginManager().isPluginEnabled(p)) {
|
||||
stream.println(" + " + p.getName() + " " + p.getDescription().getVersion());
|
||||
}
|
||||
else {
|
||||
stream.println(" - " + p.getName() + " " + p.getDescription().getVersion());
|
||||
}
|
||||
}
|
||||
else {
|
||||
stream.println(" - " + p.getName() + " " + p.getDescription().getVersion());
|
||||
}
|
||||
}
|
||||
stream.println();
|
||||
stream.println("Ticked Block:");
|
||||
stream.println(" World: " + l.getWorld().getName());
|
||||
stream.println(" X: " + l.getBlockX());
|
||||
stream.println(" Y: " + l.getBlockY());
|
||||
stream.println(" Z: " + l.getBlockZ());
|
||||
stream.println();
|
||||
stream.println("Slimefun Data:");
|
||||
stream.println(" ID: " + item.getName());
|
||||
stream.println(" Inventory: " + BlockStorage.getStorage(l.getWorld()).hasInventory(l));
|
||||
stream.println(" Data: " + BlockStorage.getBlockInfoAsJson(l));
|
||||
stream.println();
|
||||
stream.println("Stacktrace:");
|
||||
stream.println();
|
||||
x.printStackTrace(stream);
|
||||
stream.println();
|
||||
stream.println("Ticked Block:");
|
||||
stream.println(" World: " + l.getWorld().getName());
|
||||
stream.println(" X: " + l.getBlockX());
|
||||
stream.println(" Y: " + l.getBlockY());
|
||||
stream.println(" Z: " + l.getBlockZ());
|
||||
stream.println();
|
||||
stream.println("Slimefun Data:");
|
||||
stream.println(" ID: " + item.getName());
|
||||
stream.println(" Inventory: " + BlockStorage.getStorage(l.getWorld()).hasInventory(l));
|
||||
stream.println(" Data: " + BlockStorage.getBlockInfoAsJson(l));
|
||||
stream.println();
|
||||
stream.println("Stacktrace:");
|
||||
stream.println();
|
||||
x.printStackTrace(stream);
|
||||
|
||||
stream.close();
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
System.err.println("[Slimefun] Exception caught while ticking a Block:" + x.getClass().getName());
|
||||
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ());
|
||||
System.err.println("[Slimefun] Saved as: ");
|
||||
System.err.println("[Slimefun] /plugins/Slimefun/error-reports/" + file.getName());
|
||||
System.err.println("[Slimefun] Please consider sending this File to the developer(s) of Slimefun, sending this Error won't get you any help though.");
|
||||
System.err.println("[Slimefun] ");
|
||||
|
||||
bugged_blocks.put(l, errors);
|
||||
}
|
||||
else if (errors == 4) {
|
||||
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getName() + ")");
|
||||
System.err.println("[Slimefun] has thrown 4 Exceptions in the last 4 Ticks, the Block has been terminated.");
|
||||
System.err.println("[Slimefun] Check your /plugins/Slimefun/error-reports/ folder for details.");
|
||||
System.err.println("[Slimefun] ");
|
||||
|
||||
BlockStorage._integrated_removeBlockInfo(l, true);
|
||||
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
l.getBlock().setType(Material.AIR);
|
||||
stream.close();
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
else {
|
||||
bugged_blocks.put(l, errors);
|
||||
System.err.println("[Slimefun] Exception caught while ticking a Block:" + x.getClass().getName());
|
||||
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ());
|
||||
System.err.println("[Slimefun] Saved as: ");
|
||||
System.err.println("[Slimefun] /plugins/Slimefun/error-reports/" + file.getName());
|
||||
System.err.println("[Slimefun] Please consider sending this File to the developer(s) of Slimefun, sending this Error won't get you any help though.");
|
||||
System.err.println("[Slimefun] ");
|
||||
|
||||
bugged_blocks.put(l, errors);
|
||||
}
|
||||
else if (errors == 4) {
|
||||
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getName() + ")");
|
||||
System.err.println("[Slimefun] has thrown 4 Exceptions in the last 4 Ticks, the Block has been terminated.");
|
||||
System.err.println("[Slimefun] Check your /plugins/Slimefun/error-reports/ folder for details.");
|
||||
System.err.println("[Slimefun] ");
|
||||
|
||||
BlockStorage._integrated_removeBlockInfo(l, true);
|
||||
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
l.getBlock().setType(Material.AIR);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
else {
|
||||
bugged_blocks.put(l, errors);
|
||||
}
|
||||
}
|
||||
}
|
||||
else skipped++;
|
||||
}
|
||||
else {
|
||||
skipped += BlockStorage.getTickingBlocks(c).size();
|
||||
skipped_chunks.add(c);
|
||||
chunks--;
|
||||
break blocks;
|
||||
}
|
||||
else skipped++;
|
||||
}
|
||||
else {
|
||||
skipped += BlockStorage.getTickingBlocks(c).size();
|
||||
skipped_chunks.add(c);
|
||||
chunks--;
|
||||
break blocks;
|
||||
}
|
||||
}
|
||||
|
||||
map_chunktime.put(c, System.currentTimeMillis() - timestamp2);
|
||||
map_chunktime.put(c, System.currentTimeMillis() - timestamp2);
|
||||
}
|
||||
}
|
||||
|
||||
for (Map.Entry<Block, Block> entry: move.entrySet()) {
|
||||
@ -336,6 +341,8 @@ public class TickerTask implements Runnable {
|
||||
|
||||
public void info(CommandSender sender) {
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&2== &aSlimefun Diagnostic Tool &2=="));
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Halted: &e&l" + String.valueOf(HALTED).toUpperCase()));
|
||||
sender.sendMessage("");
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Impact: &e" + time + "ms / 50-750ms"));
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Ticked Chunks: &e" + chunks));
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Ticked Machines: &e" + machines));
|
||||
|
@ -3,15 +3,15 @@ package me.mrCookieSlime.Slimefun.api.inventory;
|
||||
import java.io.File;
|
||||
import java.util.Iterator;
|
||||
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu;
|
||||
|
||||
public class BlockMenu extends ChestMenu {
|
||||
|
||||
BlockMenuPreset preset;
|
||||
@ -59,7 +59,10 @@ public class BlockMenu extends ChestMenu {
|
||||
}
|
||||
|
||||
public void save(Location l) {
|
||||
if (changes == 0) return;
|
||||
if (changes == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// To force CS-CoreLib to build the Inventory
|
||||
this.getContents();
|
||||
|
||||
@ -117,6 +120,16 @@ public class BlockMenu extends ChestMenu {
|
||||
changes++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChestMenu addMenuOpeningHandler(MenuOpeningHandler handler) {
|
||||
if (handler instanceof SaveHandler) {
|
||||
return super.addMenuOpeningHandler(new SaveHandler(this, ((SaveHandler) handler).handler));
|
||||
}
|
||||
else {
|
||||
return super.addMenuOpeningHandler(new SaveHandler(this, handler));
|
||||
}
|
||||
}
|
||||
|
||||
public void close() {
|
||||
Iterator<HumanEntity> iterator = toInventory().getViewers().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
@ -125,4 +138,21 @@ public class BlockMenu extends ChestMenu {
|
||||
}
|
||||
}
|
||||
|
||||
public class SaveHandler implements MenuOpeningHandler {
|
||||
|
||||
BlockMenu menu;
|
||||
MenuOpeningHandler handler;
|
||||
|
||||
public SaveHandler(BlockMenu menu, MenuOpeningHandler handler) {
|
||||
this.handler = handler;
|
||||
this.menu = menu;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onOpen(Player p) {
|
||||
handler.onOpen(p);
|
||||
menu.changes++;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -269,7 +269,7 @@ public class CargoNet {
|
||||
}
|
||||
c_index++;
|
||||
}
|
||||
else c_index = 0;
|
||||
else c_index = 1;
|
||||
|
||||
round_robin.put(entry.getKey(), c_index);
|
||||
}
|
||||
@ -513,15 +513,15 @@ public class CargoNet {
|
||||
if (!blocks.contains(l)) {
|
||||
String id = BlockStorage.checkID(l);
|
||||
if (id == null) return true;
|
||||
if (id.equals("CARGO_MANAGER")) return false;
|
||||
if (id.equals("CARGO_NODE")) {
|
||||
else if (id.equals("CARGO_MANAGER")) return false;
|
||||
else if (id.equals("CARGO_NODE")) {
|
||||
blocks.add(l);
|
||||
l1.add(source);
|
||||
l2.add(l);
|
||||
scan(l, blocks, l1, l2, axis, input, output, terminals, providers, destinations, imports, exports);
|
||||
if (blocks.isEmpty()) return false;
|
||||
}
|
||||
if (id.equals("CARGO_NODE_INPUT")) {
|
||||
else if (id.equals("CARGO_NODE_INPUT")) {
|
||||
blocks.add(l);
|
||||
l1.add(source);
|
||||
l2.add(l);
|
||||
@ -529,25 +529,25 @@ public class CargoNet {
|
||||
if (freq == 16) providers.add(l);
|
||||
else input.put(l, freq);
|
||||
}
|
||||
if (id.equals("CHEST_TERMINAL")) {
|
||||
else if (id.equals("CHEST_TERMINAL")) {
|
||||
blocks.add(l);
|
||||
l1.add(source);
|
||||
l2.add(l);
|
||||
terminals.add(l);
|
||||
}
|
||||
if (id.equals("CT_IMPORT_BUS")) {
|
||||
else if (id.equals("CT_IMPORT_BUS")) {
|
||||
blocks.add(l);
|
||||
l1.add(source);
|
||||
l2.add(l);
|
||||
imports.add(l);
|
||||
}
|
||||
if (id.equals("CT_EXPORT_BUS")) {
|
||||
else if (id.equals("CT_EXPORT_BUS")) {
|
||||
blocks.add(l);
|
||||
l1.add(source);
|
||||
l2.add(l);
|
||||
exports.add(l);
|
||||
}
|
||||
if (id.equals("CARGO_NODE_OUTPUT")) {
|
||||
else if (id.equals("CARGO_NODE_OUTPUT")) {
|
||||
blocks.add(l);
|
||||
l1.add(source);
|
||||
l2.add(l);
|
||||
@ -560,7 +560,7 @@ public class CargoNet {
|
||||
output.put(freq, list);
|
||||
}
|
||||
}
|
||||
if (id.equals("CARGO_NODE_OUTPUT_ADVANCED")) {
|
||||
else if (id.equals("CARGO_NODE_OUTPUT_ADVANCED")) {
|
||||
blocks.add(l);
|
||||
l1.add(source);
|
||||
l2.add(l);
|
||||
@ -645,8 +645,8 @@ public class CargoNet {
|
||||
if (!sources.contains(l)) {
|
||||
String id = BlockStorage.checkID(l);
|
||||
if (id == null) return false;
|
||||
if (id.equals("CARGO_MANAGER")) return true;
|
||||
if (id.equals("CARGO_NODE")) return passiveScan(l, axis, sources);
|
||||
else if (id.equals("CARGO_MANAGER")) return true;
|
||||
else if (id.equals("CARGO_NODE")) return passiveScan(l, axis, sources);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -70,7 +70,9 @@ public class TalismanListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void onItemBreak(PlayerItemBreakEvent e) {
|
||||
if (Talisman.checkFor(e, SlimefunItem.getByName("ANVIL_TALISMAN"))) e.getBrokenItem().setAmount(1);
|
||||
if (Talisman.checkFor(e, SlimefunItem.getByName("ANVIL_TALISMAN")))
|
||||
e.getBrokenItem().setDurability((short)0);
|
||||
e.getPlayer().getInventory().addItem(e.getBrokenItem());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
@ -1,5 +1,5 @@
|
||||
name: Slimefun
|
||||
version: 4.1.3
|
||||
version: 4.1.6
|
||||
authors: [mrCookieSlime, John000708, st392, DeathlyPanda, BlackBeltPanda]
|
||||
description: Slimefun basically turns your entire Server into a FTB modpack without installing a single mod
|
||||
website: http://TheBusyBiscuit.github.io/
|
||||
|
Loading…
Reference in New Issue
Block a user