diff --git a/CHANGELOG.md b/CHANGELOG.md
index 53ec4cbc7..71a947226 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,8 @@
**Table of contents**
-- [Release Candidate 14 (TBD)](#release-candidate-14-tbd)
+- [Release Candidate 15 (TBD)](#release-candidate-15-tbd)
+- [Release Candidate 14 (12 Jul 2020)](#release-candidate-14-12-jul-2020)
- [Release Candidate 13 (16 Jun 2020)](#release-candidate-13-16-jun-2020)
- [Release Candidate 12 (27 May 2020)](#release-candidate-12-27-may-2020)
- [Release Candidate 11 (25 Apr 2020)](#release-candidate-11-25-apr-2020)
@@ -19,7 +20,14 @@
-## Release Candidate 14 (TBD)
+## Release Candidate 15 (TBD)
+
+#### Additions
+* Added Reinforced Cloth
+* Added Bee protection to Hazmat Suit
+* Added Enchantment Rune
+
+## Release Candidate 14 (12 Jul 2020)
#### Additions
* Added support for Minecraft 1.16
@@ -42,9 +50,7 @@
* Added runtime deprecation warnings for ItemHandlers and Attributes used by Addons
* Added a proper lag profiler
* Added per-plugin lag info to /sf timings
-* Added Reinforced Cloth
-* Added Bee protection to Hazmat Suit
-* Added Enchantment Rune
+* Added Indonesian translations
#### Changes
* Coolant Cells now last twice as long
@@ -65,9 +71,15 @@
* performance improvements to Generators and Electric Machines
* Cargo timings will now be attributed to the corresponding node and not the Cargo manager
* Thunderstorms now count as night time for Solar Generators
+<<<<<<< HEAD
* Fixed an issue with moving androids getting stuck
* Changed recipe of Hazmat Suits
* Uranium can no longer be placed down
+=======
+* Coolant Cells can no longer be placed on the ground
+* Crafting Nether Ice Coolant Cells now results in 4 items
+* Moved Soulbound Backpack to the "Magical Gadgets" Category
+>>>>>>> branch 'master' of https://github.com/TheBusyBiscuit/Slimefun4
#### Fixes
* Fixed #2005
@@ -92,6 +104,12 @@
* Fixed #2066
* Fixed Rainbow Glass Panes not properly connecting to blocks
* Fixed Androids turning in the wrong direction
+* Fixed contributors losing their texture after restarts
+* Fixed "korean" showing up as "null"
+* Fixed an issue with moving androids getting stuck
+* Fixed Cargo nodes sometimes preventing chunks from unloading
+* Fixed #2081
+* Fixed a NullPointerException when Generators throw an Error Report
## Release Candidate 13 (16 Jun 2020)
https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#13
diff --git a/README.md b/README.md
index 32fc24d49..b7ffc8315 100644
--- a/README.md
+++ b/README.md
@@ -30,7 +30,7 @@ Here is a full summary of the differences between the two different versions of
| | development (latest) | "stable" |
| ------------------ | -------- | -------- |
-| **Minecraft version(s)** | :video_game: **1.13.\* - 1.16.\*** | :video_game: **1.13.\* - 1.15.\*** |
+| **Minecraft version(s)** | :video_game: **1.13.\* - 1.16.\*** | :video_game: **1.13.\* - 1.16.\*** |
| **automatic updates** | :heavy_check_mark: | :heavy_check_mark: |
| **frequent updates** | :heavy_check_mark: | :x: |
| **latest content** | :heavy_check_mark: | :x: |
@@ -114,6 +114,8 @@ To compile Slimefun yourself, follow these steps:
If you are already using an IDE, make sure to import the project via git and set it as a *Maven project*. Then you should be able build it via Maven using the goals `clean package`.
+If you have any further questions, then please join our [Discord Support Server](#discord) and ask your questions in the `#programming-help` channel. Note that we will not accept any bug reports from custom-compiled versions of Slimefun.
+
### Code Quality
Slimefun uses [Sonarcloud.io](https://sonarcloud.io/dashboard?id=TheBusyBiscuit_Slimefun4) to monitor Code Quality.
diff --git a/pom.xml b/pom.xml
index 128eb224b..460e4bfc6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -60,7 +60,7 @@
https://repo.destroystokyo.com/repository/maven-public/
- worldedit-worldguard-repo
+ worldedit-repo
https://maven.sk89q.com/repo/
@@ -298,7 +298,7 @@
org.mockito
mockito-core
- 3.3.3
+ 3.4.0
test
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/ErrorReport.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/ErrorReport.java
index 365fa129f..2bdcc717b 100644
--- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/ErrorReport.java
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/ErrorReport.java
@@ -1,7 +1,6 @@
package io.github.thebusybiscuit.slimefun4.api;
import java.io.File;
-import java.io.IOException;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
@@ -92,7 +91,7 @@ public class ErrorReport {
addon.getLogger().log(Level.WARNING, "");
}
- catch (IOException x) {
+ catch (Exception x) {
addon.getLogger().log(Level.SEVERE, x, () -> "An Error occurred while saving an Error-Report for Slimefun " + SlimefunPlugin.getVersion());
}
});
@@ -116,6 +115,12 @@ public class ErrorReport {
stream.println();
}
+ if (item.getEnergyTicker() != null) {
+ stream.println("Ticker-Info:");
+ stream.println(" Type: Indirect (Energy Network)");
+ stream.println();
+ }
+
stream.println("Slimefun Data:");
stream.println(" ID: " + item.getID());
stream.println(" Inventory: " + BlockStorage.getStorage(l.getWorld()).hasInventory(l));
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/exceptions/WrongItemStackException.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/exceptions/WrongItemStackException.java
new file mode 100644
index 000000000..9b8c647ec
--- /dev/null
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/exceptions/WrongItemStackException.java
@@ -0,0 +1,36 @@
+package io.github.thebusybiscuit.slimefun4.api.exceptions;
+
+import org.bukkit.inventory.ItemStack;
+
+import io.github.thebusybiscuit.slimefun4.core.attributes.DamageableItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
+
+/**
+ * A {@link WrongItemStackException} is thrown when someone tries to alter an {@link ItemStack}
+ * but actually wanted to alter a different one.
+ *
+ * If for example a {@link DamageableItem} accidentally damages the original {@link SlimefunItem}
+ * instead of the held {@link ItemStack}, this will be thrown.
+ *
+ * @author TheBusyBiscuit
+ *
+ * @see SlimefunItemStack
+ * @see SlimefunItem
+ *
+ */
+public class WrongItemStackException extends RuntimeException {
+
+ private static final long serialVersionUID = 9144658137363309071L;
+
+ /**
+ * This constructs a new {@link WrongItemStackException} with the given error context.
+ *
+ * @param message
+ * An error message to display
+ */
+ public WrongItemStackException(String message) {
+ super("You probably wanted alter a different ItemStack: " + message);
+ }
+
+}
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/gps/GPSNetwork.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/gps/GPSNetwork.java
index 8694c661b..511c8e418 100644
--- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/gps/GPSNetwork.java
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/gps/GPSNetwork.java
@@ -54,7 +54,7 @@ public class GPSNetwork {
private final Map> transmitters = new HashMap<>();
private final TeleportationManager teleportation = new TeleportationManager();
- private final ResourceManager resourceManager = new ResourceManager(SlimefunPlugin.instance);
+ private final ResourceManager resourceManager = new ResourceManager(SlimefunPlugin.instance());
/**
* This method updates the status of a {@link GPSTransmitter}.
@@ -256,7 +256,7 @@ public class GPSNetwork {
SlimefunPlugin.getLocalization().sendMessage(p, "gps.waypoint.new", true);
p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 0.5F, 1F);
- ChatInput.waitForPlayer(SlimefunPlugin.instance, p, message -> addWaypoint(p, message, l));
+ ChatInput.waitForPlayer(SlimefunPlugin.instance(), p, message -> addWaypoint(p, message, l));
});
}
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/network/Network.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/network/Network.java
index 6980314ea..495211b1d 100644
--- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/network/Network.java
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/network/Network.java
@@ -225,6 +225,10 @@ public abstract class Network {
});
}
+ public Location getRegulator() {
+ return regulator;
+ }
+
public void tick() {
discoverStep();
}
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java
index 50d58337b..896cf84ae 100644
--- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/player/PlayerProfile.java
@@ -372,7 +372,7 @@ public final class PlayerProfile {
return true;
}
- Bukkit.getScheduler().runTaskAsynchronously(SlimefunPlugin.instance, () -> {
+ Bukkit.getScheduler().runTaskAsynchronously(SlimefunPlugin.instance(), () -> {
PlayerProfile pp = new PlayerProfile(p);
SlimefunPlugin.getRegistry().getPlayerProfiles().put(uuid, pp);
callback.accept(pp);
@@ -393,7 +393,7 @@ public final class PlayerProfile {
public static boolean request(OfflinePlayer p) {
if (!SlimefunPlugin.getRegistry().getPlayerProfiles().containsKey(p.getUniqueId())) {
// Should probably prevent multiple requests for the same profile in the future
- Bukkit.getScheduler().runTaskAsynchronously(SlimefunPlugin.instance, () -> {
+ Bukkit.getScheduler().runTaskAsynchronously(SlimefunPlugin.instance(), () -> {
PlayerProfile pp = new PlayerProfile(p);
SlimefunPlugin.getRegistry().getPlayerProfiles().put(p.getUniqueId(), pp);
});
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/attributes/RandomMobDrop.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/attributes/RandomMobDrop.java
new file mode 100644
index 000000000..a873b8620
--- /dev/null
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/attributes/RandomMobDrop.java
@@ -0,0 +1,35 @@
+package io.github.thebusybiscuit.slimefun4.core.attributes;
+
+import org.bukkit.entity.EntityType;
+import org.bukkit.entity.Player;
+import org.bukkit.event.entity.EntityDeathEvent;
+
+import io.github.thebusybiscuit.slimefun4.implementation.items.misc.BasicCircuitBoard;
+import io.github.thebusybiscuit.slimefun4.implementation.listeners.MobDropListener;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+
+/**
+ * This interface, when attached to a {@link SlimefunItem}, provides an easy method for adding
+ * a % chance to drop for an {@link SlimefunItem} on {@link EntityDeathEvent}, this chance is 0-100
+ * and used in conjunction with the MOB_DROP {@link RecipeType}.
+ *
+ * @author dNiym
+ *
+ * @see BasicCircuitBoard
+ * @see MobDropListener
+ *
+ */
+@FunctionalInterface
+public interface RandomMobDrop extends ItemAttribute {
+
+ /**
+ * Implement this method to make the object have a variable chance of being
+ * added to the dropList when {@link EntityType} (specified in the recipe)
+ * is killed by the {@link Player}
+ *
+ * @return The integer chance (0-100%) {@link SlimefunItem} has to drop.
+ */
+ int getMobDropChance();
+
+}
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/attributes/RechargeableHelper.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/attributes/RechargeableHelper.java
index 29f6c8180..ec46fc522 100644
--- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/attributes/RechargeableHelper.java
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/attributes/RechargeableHelper.java
@@ -14,6 +14,7 @@ import io.github.thebusybiscuit.cscorelib2.chat.ChatColors;
import io.github.thebusybiscuit.slimefun4.api.MinecraftVersion;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
import io.github.thebusybiscuit.slimefun4.utils.PatternUtils;
+import net.md_5.bungee.api.ChatColor;
/**
* This is just a simple helper class to provide static methods to the {@link Rechargeable}
@@ -26,7 +27,7 @@ import io.github.thebusybiscuit.slimefun4.utils.PatternUtils;
*/
final class RechargeableHelper {
- private static final NamespacedKey CHARGE_KEY = new NamespacedKey(SlimefunPlugin.instance, "item_charge");
+ private static final NamespacedKey CHARGE_KEY = new NamespacedKey(SlimefunPlugin.instance(), "item_charge");
private static final String LORE_PREFIX = ChatColors.color("&8\u21E8 &e\u26A1 &7");
private static final Pattern REGEX = Pattern.compile(ChatColors.color("(&c&o)?" + LORE_PREFIX) + "[0-9\\.]+ \\/ [0-9\\.]+ J");
@@ -69,7 +70,8 @@ final class RechargeableHelper {
if (meta.hasLore()) {
for (String line : meta.getLore()) {
if (REGEX.matcher(line).matches()) {
- return Float.parseFloat(PatternUtils.SLASH_SEPARATOR.split(line)[0].replace(LORE_PREFIX, ""));
+ String data = ChatColor.stripColor(PatternUtils.SLASH_SEPARATOR.split(line)[0].replace(LORE_PREFIX, ""));
+ return Float.parseFloat(data);
}
}
}
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/ContributorsMenu.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/ContributorsMenu.java
index 2dd9ce001..3b89ff019 100644
--- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/ContributorsMenu.java
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/ContributorsMenu.java
@@ -60,13 +60,19 @@ final class ContributorsMenu {
menu.addItem(46, ChestMenuUtils.getPreviousButton(p, page + 1, pages));
menu.addMenuClickHandler(46, (pl, slot, item, action) -> {
- if (page > 0) open(pl, page - 1);
+ if (page > 0) {
+ open(pl, page - 1);
+ }
+
return false;
});
menu.addItem(52, ChestMenuUtils.getNextButton(p, page + 1, pages));
menu.addMenuClickHandler(52, (pl, slot, item, action) -> {
- if (page + 1 < pages) open(pl, page + 1);
+ if (page + 1 < pages) {
+ open(pl, page + 1);
+ }
+
return false;
});
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/FireworksOption.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/FireworksOption.java
index e6ac96373..9563e42f6 100644
--- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/FireworksOption.java
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/FireworksOption.java
@@ -16,12 +16,12 @@ class FireworksOption implements SlimefunGuideOption {
@Override
public SlimefunAddon getAddon() {
- return SlimefunPlugin.instance;
+ return SlimefunPlugin.instance();
}
@Override
public NamespacedKey getKey() {
- return new NamespacedKey(SlimefunPlugin.instance, "research_fireworks");
+ return new NamespacedKey(SlimefunPlugin.instance(), "research_fireworks");
}
@Override
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/GuideLayoutOption.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/GuideLayoutOption.java
index 16173c9ba..e6fe73e3a 100644
--- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/GuideLayoutOption.java
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/GuideLayoutOption.java
@@ -22,12 +22,12 @@ class GuideLayoutOption implements SlimefunGuideOption {
@Override
public SlimefunAddon getAddon() {
- return SlimefunPlugin.instance;
+ return SlimefunPlugin.instance();
}
@Override
public NamespacedKey getKey() {
- return new NamespacedKey(SlimefunPlugin.instance, "guide_layout");
+ return new NamespacedKey(SlimefunPlugin.instance(), "guide_layout");
}
@Override
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/PlayerLanguageOption.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/PlayerLanguageOption.java
index ffd660b1a..6d55090a2 100644
--- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/PlayerLanguageOption.java
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/options/PlayerLanguageOption.java
@@ -23,7 +23,7 @@ class PlayerLanguageOption implements SlimefunGuideOption {
@Override
public SlimefunAddon getAddon() {
- return SlimefunPlugin.instance;
+ return SlimefunPlugin.instance();
}
@Override
@@ -93,7 +93,7 @@ class PlayerLanguageOption implements SlimefunGuideOption {
String defaultLanguageString = SlimefunPlugin.getLocalization().getMessage(p, "languages.default");
menu.addItem(9, new CustomItem(defaultLanguage.getItem(), ChatColor.GRAY + defaultLanguageString + ChatColor.DARK_GRAY + " (" + defaultLanguage.getName(p) + ")", "", "&7\u21E8 &e" + SlimefunPlugin.getLocalization().getMessage(p, "guide.languages.select-default")), (pl, i, item, action) -> {
- SlimefunPlugin.instance.getServer().getPluginManager().callEvent(new PlayerLanguageChangeEvent(pl, SlimefunPlugin.getLocalization().getLanguage(pl), defaultLanguage));
+ SlimefunPlugin.instance().getServer().getPluginManager().callEvent(new PlayerLanguageChangeEvent(pl, SlimefunPlugin.getLocalization().getLanguage(pl), defaultLanguage));
setSelectedOption(pl, guide, null);
SlimefunPlugin.getLocalization().sendMessage(pl, "guide.languages.updated", msg -> msg.replace("%lang%", defaultLanguageString));
@@ -106,7 +106,7 @@ class PlayerLanguageOption implements SlimefunGuideOption {
for (Language language : SlimefunPlugin.getLocalization().getLanguages()) {
menu.addItem(slot, new CustomItem(language.getItem(), ChatColor.GREEN + language.getName(p), "&b" + SlimefunPlugin.getLocalization().getProgress(language) + '%', "", "&7\u21E8 &e" + SlimefunPlugin.getLocalization().getMessage(p, "guide.languages.select")), (pl, i, item, action) -> {
- SlimefunPlugin.instance.getServer().getPluginManager().callEvent(new PlayerLanguageChangeEvent(pl, SlimefunPlugin.getLocalization().getLanguage(pl), language));
+ SlimefunPlugin.instance().getServer().getPluginManager().callEvent(new PlayerLanguageChangeEvent(pl, SlimefunPlugin.getLocalization().getLanguage(pl), language));
setSelectedOption(pl, guide, language.getId());
String name = language.getName(pl);
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/EntityInteractHandler.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/EntityInteractHandler.java
index 5f35f94dd..919275888 100644
--- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/EntityInteractHandler.java
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/EntityInteractHandler.java
@@ -6,7 +6,7 @@ import org.bukkit.event.player.PlayerInteractAtEntityEvent;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler;
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/EntityKillHandler.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/EntityKillHandler.java
index adaa86513..919da18a9 100644
--- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/EntityKillHandler.java
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/EntityKillHandler.java
@@ -5,7 +5,7 @@ import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.inventory.ItemStack;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler;
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/ItemConsumptionHandler.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/ItemConsumptionHandler.java
index 6599fc4b9..3e7756cf8 100644
--- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/ItemConsumptionHandler.java
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/ItemConsumptionHandler.java
@@ -4,9 +4,9 @@ import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.inventory.ItemStack;
+import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem;
import io.github.thebusybiscuit.slimefun4.implementation.items.food.DietCookie;
import io.github.thebusybiscuit.slimefun4.implementation.items.food.FortuneCookie;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler;
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/ItemUseHandler.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/ItemUseHandler.java
index ebc661018..cccbb295c 100644
--- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/ItemUseHandler.java
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/handlers/ItemUseHandler.java
@@ -3,7 +3,7 @@ package io.github.thebusybiscuit.slimefun4.core.handlers;
import org.bukkit.entity.Player;
import io.github.thebusybiscuit.slimefun4.api.events.PlayerRightClickEvent;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import io.github.thebusybiscuit.slimefun4.implementation.items.SimpleSlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler;
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoNet.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoNet.java
index d38d1a675..f8df07d58 100644
--- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoNet.java
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/networks/cargo/CargoNet.java
@@ -1,6 +1,5 @@
package io.github.thebusybiscuit.slimefun4.core.networks.cargo;
-import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
@@ -8,23 +7,18 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
-import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Level;
import org.bukkit.Location;
import org.bukkit.block.Block;
-import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import io.github.thebusybiscuit.slimefun4.api.network.Network;
import io.github.thebusybiscuit.slimefun4.api.network.NetworkComponent;
-import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
import io.github.thebusybiscuit.slimefun4.utils.holograms.SimpleHologram;
-import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
-import me.mrCookieSlime.Slimefun.api.inventory.DirtyChestMenu;
/**
* The {@link CargoNet} is a type of {@link Network} which deals with {@link ItemStack} transportation.
@@ -49,7 +43,7 @@ public class CargoNet extends ChestTerminalNetwork {
private final Set inputNodes = new HashSet<>();
private final Set outputNodes = new HashSet<>();
- private final Map roundRobin = new HashMap<>();
+ protected final Map roundRobin = new HashMap<>();
private int tickDelayThreshold = 0;
public static CargoNet getNetworkFromLocation(Location l) {
@@ -182,7 +176,9 @@ public class CargoNet extends ChestTerminalNetwork {
}
SlimefunPlugin.getProfiler().scheduleEntries(1 + inputNodes.size());
- Slimefun.runSync(() -> run(inputs, outputs, chestTerminalInputs, chestTerminalOutputs));
+
+ CargoNetworkTask runnable = new CargoNetworkTask(this, inputs, outputs, chestTerminalInputs, chestTerminalOutputs);
+ Slimefun.runSync(runnable);
}
}
@@ -240,135 +236,6 @@ public class CargoNet extends ChestTerminalNetwork {
return output;
}
- private void run(Map inputs, Map> outputs, Set chestTerminalInputs, Set chestTerminalOutputs) {
- long timestamp = System.nanoTime();
-
- // Chest Terminal Code
- if (SlimefunPlugin.getThirdPartySupportService().isChestTerminalInstalled()) {
- handleItemRequests(chestTerminalInputs, chestTerminalOutputs);
- }
-
- // All operations happen here: Everything gets iterated from the Input Nodes.
- // (Apart from ChestTerminal Buses)
- for (Map.Entry entry : inputs.entrySet()) {
- long nodeTimestamp = System.nanoTime();
- Location input = entry.getKey();
- Optional attachedBlock = getAttachedBlock(input.getBlock());
-
- if (attachedBlock.isPresent()) {
- routeItems(input, attachedBlock.get(), entry.getValue(), outputs);
- }
-
- // This will prevent this timings from showing up for the Cargo Manager
- timestamp += SlimefunPlugin.getProfiler().closeEntry(entry.getKey(), SlimefunItems.CARGO_INPUT_NODE.getItem(), nodeTimestamp);
- }
-
- // Chest Terminal Code
- if (SlimefunPlugin.getThirdPartySupportService().isChestTerminalInstalled()) {
- updateTerminals(chestTerminalInputs);
- }
-
- // Submit a timings report
- SlimefunPlugin.getProfiler().closeEntry(regulator, SlimefunItems.CARGO_MANAGER.getItem(), timestamp);
- }
-
- private void routeItems(Location inputNode, Block inputTarget, int frequency, Map> outputNodes) {
- AtomicReference