1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-20 03:35:51 +00:00

Merge branch 'master' into master

This commit is contained in:
LinoxGH 2019-09-01 12:41:22 +03:00 committed by GitHub
commit 0cd5e79ddd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
134 changed files with 1886 additions and 2077 deletions

View File

@ -123,7 +123,7 @@
<dependency>
<groupId>com.github.thebusybiscuit</groupId>
<artifactId>CS-CoreLib2</artifactId>
<version>0.3.8</version>
<version>0.3.9</version>
<scope>compile</scope>
</dependency>
<dependency>

View File

@ -1,25 +1,27 @@
package me.mrCookieSlime.Slimefun.GEO;
import java.util.Collection;
import java.util.logging.Level;
import org.bukkit.Chunk;
import org.bukkit.block.Biome;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
public final class OreGenSystem {
private OreGenSystem() {}
public static Collection<OreGenResource> listResources() {
return SlimefunStartup.instance.getUtilities().resources.values();
return SlimefunPlugin.getUtilities().resources.values();
}
public static void registerResource(OreGenResource resource) {
SlimefunStartup.instance.getUtilities().resources.put(resource.getName(), resource);
System.out.println("[Slimefun - GEO] Registering Ore Gen: " + resource.getName());
SlimefunPlugin.getUtilities().resources.put(resource.getName(), resource);
Slimefun.getLogger().log(Level.INFO, "Registering Ore Gen: " + resource.getName());
Config cfg = new Config("plugins/Slimefun/generators/" + resource.getName() + ".cfg");
for (Biome biome: Biome.values()) {
@ -29,7 +31,7 @@ public final class OreGenSystem {
}
public static OreGenResource getResource(String name) {
return SlimefunStartup.instance.getUtilities().resources.get(name);
return SlimefunPlugin.getUtilities().resources.get(name);
}
private static int getDefault(OreGenResource resource, Biome biome) {

View File

@ -15,7 +15,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.CustomBookOverlay;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.MenuHelper;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
@ -35,7 +35,7 @@ public final class Elevator {
pl.sendMessage("");
MenuHelper.awaitChatInput(pl, (player, message) -> {
BlockStorage.addBlockInfo(b, "floor", message.replaceAll("&", "&"));
BlockStorage.addBlockInfo(b, "floor", message.replace(ChatColor.COLOR_CHAR, '&'));
player.sendMessage("");
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4&l>> &eSuccessfully named this Floor:"));
@ -53,7 +53,7 @@ public final class Elevator {
}
public static void openDialogue(Player p, Block b) {
Set<UUID> elevatorUsers = SlimefunStartup.instance.getUtilities().elevatorUsers;
Set<UUID> elevatorUsers = SlimefunPlugin.getUtilities().elevatorUsers;
if (elevatorUsers.contains(p.getUniqueId())) {
elevatorUsers.remove(p.getUniqueId());

View File

@ -5,6 +5,7 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@ -24,7 +25,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.MenuHelper;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.GEO.OreGenResource;
import me.mrCookieSlime.Slimefun.GEO.OreGenSystem;
import me.mrCookieSlime.Slimefun.Setup.Messages;
@ -69,7 +70,7 @@ public class GPSNetwork {
else return transmitters.get(uuid).size();
}
public void openTransmitterControlPanel(Player p) throws Exception {
public void openTransmitterControlPanel(Player p) {
ChestMenu menu = new ChestMenu("&9Control Panel");
for (int slot : border) {
@ -78,37 +79,35 @@ public class GPSNetwork {
);
}
menu.addItem(2, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&7Transmitter Overview &e(Selected)"));
menu.addMenuClickHandler(2,
(pl, slot, item, action) -> false
);
menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGRjZmJhNThmYWYxZjY0ODQ3ODg0MTExODIyYjY0YWZhMjFkN2ZjNjJkNDQ4MWYxNGYzZjNiY2I2MzMwIn19fQ=="), "&7Network Info", "", "&8\u21E8 &7Status: " + (getNetworkComplexity(p.getUniqueId()) > 0 ? "&2&lONLINE": "&4&lOFFLINE"), "&8\u21E8 &7Complexity: &r" + getNetworkComplexity(p.getUniqueId())));
menu.addMenuClickHandler(4,
(pl, slot, item, action) -> false
);
menu.addItem(6, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &r(Select)"));
menu.addMenuClickHandler(6, (pl, slot, item, action) -> {
try {
openWaypointControlPanel(pl);
} catch (Exception e) {
e.printStackTrace();
}
return false;
});
int index = 0;
for (Location l : getTransmitters(p.getUniqueId())) {
if (index >= inventory.length) break;
int slot = inventory[index];
menu.addItem(slot, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&bGPS Transmitter", "&8\u21E8 &7World: &r" + l.getWorld().getName(), "&8\u21E8 &7X: &r" + l.getX(), "&8\u21E8 &7Y: &r" + l.getY(), "&8\u21E8 &7Z: &r" + l.getZ(), "", "&8\u21E8 &7Signal Strength: &r" + l.getBlockY(), "&8\u21E8 &7Ping: &r" + DoubleHandler.fixDouble(1000D / l.getY()) + "ms"));
menu.addMenuClickHandler(slot,
(pl, slotn, item, action) -> false
try {
menu.addItem(2, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&7Transmitter Overview &e(Selected)"));
menu.addMenuClickHandler(2,
(pl, slot, item, action) -> false
);
index++;
menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGRjZmJhNThmYWYxZjY0ODQ3ODg0MTExODIyYjY0YWZhMjFkN2ZjNjJkNDQ4MWYxNGYzZjNiY2I2MzMwIn19fQ=="), "&7Network Info", "", "&8\u21E8 &7Status: " + (getNetworkComplexity(p.getUniqueId()) > 0 ? "&2&lONLINE": "&4&lOFFLINE"), "&8\u21E8 &7Complexity: &r" + getNetworkComplexity(p.getUniqueId())));
menu.addMenuClickHandler(4,
(pl, slot, item, action) -> false
);
menu.addItem(6, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &r(Select)"));
menu.addMenuClickHandler(6, (pl, slot, item, action) -> {
openWaypointControlPanel(pl);
return false;
});
int index = 0;
for (Location l : getTransmitters(p.getUniqueId())) {
if (index >= inventory.length) break;
int slot = inventory[index];
menu.addItem(slot, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&bGPS Transmitter", "&8\u21E8 &7World: &r" + l.getWorld().getName(), "&8\u21E8 &7X: &r" + l.getX(), "&8\u21E8 &7Y: &r" + l.getY(), "&8\u21E8 &7Z: &r" + l.getZ(), "", "&8\u21E8 &7Signal Strength: &r" + l.getBlockY(), "&8\u21E8 &7Ping: &r" + DoubleHandler.fixDouble(1000D / l.getY()) + "ms"));
menu.addMenuClickHandler(slot, (pl, slotn, item, action) -> false);
index++;
}
} catch(Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating the GPS Transmitter Panel for Slimefun " + Slimefun.getVersion(), x);
}
menu.open(p);
@ -131,57 +130,53 @@ public class GPSNetwork {
}
}
public void openWaypointControlPanel(Player p) throws Exception {
public void openWaypointControlPanel(Player p) {
ChestMenu menu = new ChestMenu("&9Control Panel");
for (int slot: border) {
menu.addItem(slot, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
(pl, slotn, item, action) -> false
);
menu.addItem(slot, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (pl, slotn, item, action) -> false);
}
menu.addItem(2, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&7Transmitter Overview &r(Select)"));
menu.addMenuClickHandler(2, (pl, slot, item, action) -> {
try {
try {
menu.addItem(2, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&7Transmitter Overview &r(Select)"));
menu.addMenuClickHandler(2, (pl, slot, item, action) -> {
openTransmitterControlPanel(pl);
} catch (Exception e) {
e.printStackTrace();
}
return false;
});
menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGRjZmJhNThmYWYxZjY0ODQ3ODg0MTExODIyYjY0YWZhMjFkN2ZjNjJkNDQ4MWYxNGYzZjNiY2I2MzMwIn19fQ=="), "&7Network Info", "", "&8\u21E8 &7Status: " + (getNetworkComplexity(p.getUniqueId()) > 0 ? "&2&lONLINE": "&4&lOFFLINE"), "&8\u21E8 &7Complexity: &r" + getNetworkComplexity(p.getUniqueId())));
menu.addMenuClickHandler(4, (pl, slot, item, action) -> false);
menu.addItem(6, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &e(Selected)"));
menu.addMenuClickHandler(6, (pl, slot, item, action) -> false);
int index = 0;
for (final Map.Entry<String, Location> entry : getWaypoints(p.getUniqueId()).entrySet()) {
if (index >= inventory.length) break;
int slot = inventory[index];
Location l = entry.getValue();
ItemStack globe = getPlanet(entry);
menu.addItem(slot, new CustomItem(globe, entry.getKey(), "&8\u21E8 &7World: &r" + l.getWorld().getName(), "&8\u21E8 &7X: &r" + l.getX(), "&8\u21E8 &7Y: &r" + l.getY(), "&8\u21E8 &7Z: &r" + l.getZ(), "", "&8\u21E8 &cClick to delete"));
menu.addMenuClickHandler(slot, (pl, slotn, item, action) -> {
String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', entry.getKey())).toUpperCase().replace(" ", "_");
Config cfg = new Config("data-storage/Slimefun/waypoints/" + pl.getUniqueId().toString() + ".yml");
cfg.setValue(id, null);
cfg.save();
pl.playSound(pl.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1F);
try {
openWaypointControlPanel(pl);
} catch (Exception e) {
e.printStackTrace();
}
return false;
});
index++;
menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGRjZmJhNThmYWYxZjY0ODQ3ODg0MTExODIyYjY0YWZhMjFkN2ZjNjJkNDQ4MWYxNGYzZjNiY2I2MzMwIn19fQ=="), "&7Network Info", "", "&8\u21E8 &7Status: " + (getNetworkComplexity(p.getUniqueId()) > 0 ? "&2&lONLINE": "&4&lOFFLINE"), "&8\u21E8 &7Complexity: &r" + getNetworkComplexity(p.getUniqueId())));
menu.addMenuClickHandler(4, (pl, slot, item, action) -> false);
menu.addItem(6, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &e(Selected)"));
menu.addMenuClickHandler(6, (pl, slot, item, action) -> false);
int index = 0;
for (final Map.Entry<String, Location> entry : getWaypoints(p.getUniqueId()).entrySet()) {
if (index >= inventory.length) break;
int slot = inventory[index];
Location l = entry.getValue();
ItemStack globe = getPlanet(entry);
menu.addItem(slot, new CustomItem(globe, entry.getKey(), "&8\u21E8 &7World: &r" + l.getWorld().getName(), "&8\u21E8 &7X: &r" + l.getX(), "&8\u21E8 &7Y: &r" + l.getY(), "&8\u21E8 &7Z: &r" + l.getZ(), "", "&8\u21E8 &cClick to delete"));
menu.addMenuClickHandler(slot, (pl, slotn, item, action) -> {
String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', entry.getKey())).toUpperCase().replace(" ", "_");
Config cfg = new Config("data-storage/Slimefun/waypoints/" + pl.getUniqueId().toString() + ".yml");
cfg.setValue(id, null);
cfg.save();
pl.playSound(pl.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1F);
openWaypointControlPanel(pl);
return false;
});
index++;
}
}
catch(Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating the GPS Waypoint Panel for Slimefun " + Slimefun.getVersion(), x);
}
menu.open(p);
}
@ -239,24 +234,22 @@ public class GPSNetwork {
for (OreGenResource resource: OreGenSystem.listResources()) {
int supply = OreGenSystem.getSupplies(resource, chunk, true);
menu.addItem(index, new CustomItem(resource.getIcon(), "&7Resource: &e" + resource.getName(), "", "&7Scanned Chunk:", "&8\u21E8 &7X: " + chunk.getX() + " Z: " + chunk.getZ(), "", "&7Result: &e" + supply + " " + resource.getMeasurementUnit()),
(pl, slot, item, action) -> false
);
menu.addItem(index, new CustomItem(resource.getIcon(), "&7Resource: &e" + resource.getName(), "", "&7Scanned Chunk:", "&8\u21E8 &7X: " + chunk.getX() + " Z: " + chunk.getZ(), "", "&7Result: &e" + supply + " " + resource.getMeasurementUnit()), (pl, slot, item, action) -> false);
index++;
}
menu.open(p);
}
public static void openTeleporterGUI(Player p, UUID uuid, Block b, final int complexity) throws Exception {
if (SlimefunStartup.instance.getUtilities().teleporterUsers.contains(p.getUniqueId())) return;
public static void openTeleporterGUI(Player p, UUID uuid, Block b, final int complexity) {
if (SlimefunPlugin.getUtilities().teleporterUsers.contains(p.getUniqueId())) return;
p.playSound(p.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1F);
SlimefunStartup.instance.getUtilities().teleporterUsers.add(p.getUniqueId());
SlimefunPlugin.getUtilities().teleporterUsers.add(p.getUniqueId());
ChestMenu menu = new ChestMenu("&3Teleporter");
menu.addMenuCloseHandler(pl -> SlimefunStartup.instance.getUtilities().teleporterUsers.remove(pl.getUniqueId()));
menu.addMenuCloseHandler(pl -> SlimefunPlugin.getUtilities().teleporterUsers.remove(pl.getUniqueId()));
for (int slot : teleporter_border) {
menu.addItem(slot, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
@ -264,26 +257,31 @@ public class GPSNetwork {
);
}
menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &e(Select a Destination)"));
menu.addMenuClickHandler(4, (pl, slot, item, action) -> false);
final Location source = new Location(b.getWorld(), b.getX() + 0.5D, b.getY() + 2D, b.getZ() + 0.5D);
int index = 0;
for (final Map.Entry<String, Location> entry: Slimefun.getGPSNetwork().getWaypoints(uuid).entrySet()) {
if (index >= teleporter_inventory.length) break;
int slot = teleporter_inventory[index];
try {
menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &e(Select a Destination)"));
menu.addMenuClickHandler(4, (pl, slot, item, action) -> false);
final Location l = entry.getValue();
ItemStack globe = getPlanet(entry);
menu.addItem(slot, new CustomItem(globe, entry.getKey(), "&8\u21E8 &7World: &r" + l.getWorld().getName(), "&8\u21E8 &7X: &r" + l.getX(), "&8\u21E8 &7Y: &r" + l.getY(), "&8\u21E8 &7Z: &r" + l.getZ(), "&8\u21E8 &7Estimated Teleportation Time: &r" + (50 / TeleportationSequence.getSpeed(Slimefun.getGPSNetwork().getNetworkComplexity(uuid), source, l)) + "s", "", "&8\u21E8 &cClick to select"));
menu.addMenuClickHandler(slot, (pl, slotn, item, action) -> {
pl.closeInventory();
TeleportationSequence.start(pl.getUniqueId(), complexity, source, l, false);
return false;
});
index++;
final Location source = new Location(b.getWorld(), b.getX() + 0.5D, b.getY() + 2D, b.getZ() + 0.5D);
int index = 0;
for (final Map.Entry<String, Location> entry: Slimefun.getGPSNetwork().getWaypoints(uuid).entrySet()) {
if (index >= teleporter_inventory.length) break;
int slot = teleporter_inventory[index];
final Location l = entry.getValue();
ItemStack globe = getPlanet(entry);
menu.addItem(slot, new CustomItem(globe, entry.getKey(), "&8\u21E8 &7World: &r" + l.getWorld().getName(), "&8\u21E8 &7X: &r" + l.getX(), "&8\u21E8 &7Y: &r" + l.getY(), "&8\u21E8 &7Z: &r" + l.getZ(), "&8\u21E8 &7Estimated Teleportation Time: &r" + (50 / TeleportationSequence.getSpeed(Slimefun.getGPSNetwork().getNetworkComplexity(uuid), source, l)) + "s", "", "&8\u21E8 &cClick to select"));
menu.addMenuClickHandler(slot, (pl, slotn, item, action) -> {
pl.closeInventory();
TeleportationSequence.start(pl.getUniqueId(), complexity, source, l, false);
return false;
});
index++;
}
}
catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating a Teleporter Menu for Slimefun " + Slimefun.getVersion(), x);
}
menu.open(p);

View File

@ -1,6 +1,7 @@
package me.mrCookieSlime.Slimefun.GPS;
import java.util.UUID;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@ -13,14 +14,15 @@ import org.bukkit.potion.PotionEffectType;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.TitleBuilder;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.TitleBuilder.TitleType;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.api.Slimefun;
public final class TeleportationSequence {
private TeleportationSequence() {}
public static void start(UUID uuid, int complexity, Location source, Location destination, boolean resistance) {
SlimefunStartup.instance.getUtilities().teleporterUsers.add(uuid);
SlimefunPlugin.getUtilities().teleporterUsers.add(uuid);
updateProgress(uuid, getSpeed(complexity, source, destination), 1, source, destination, resistance);
}
@ -48,7 +50,7 @@ public final class TeleportationSequence {
}
private static void cancel(UUID uuid, Player p) {
SlimefunStartup.instance.getUtilities().teleporterUsers.remove(uuid);
SlimefunPlugin.getUtilities().teleporterUsers.remove(uuid);
if (p != null) {
try {
@ -58,7 +60,7 @@ public final class TeleportationSequence {
title.send(TitleType.TITLE, p);
subtitle.send(TitleType.SUBTITLE, p);
} catch(Exception x) {
x.printStackTrace();
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while cancelling a Teleportation Sequence for Slimefun " + Slimefun.getVersion(), x);
}
}
}
@ -83,7 +85,7 @@ public final class TeleportationSequence {
destination.getWorld().spawnParticle(Particle.PORTAL,new Location(destination.getWorld(), destination.getX(), destination.getY() + 1, destination.getZ()),progress * 2, 0.2F, 0.8F, 0.2F );
destination.getWorld().playSound(destination, Sound.ENTITY_BLAZE_DEATH, 2F, 1.4F);
SlimefunStartup.instance.getUtilities().teleporterUsers.remove(uuid);
SlimefunPlugin.getUtilities().teleporterUsers.remove(uuid);
}
else {
TitleBuilder title = (TitleBuilder) new TitleBuilder(0, 60, 0).addText(ChatColor.translateAlternateColorCodes('&', "&3Teleporting..."));
@ -95,10 +97,10 @@ public final class TeleportationSequence {
source.getWorld().spawnParticle(Particle.PORTAL, source, progress * 2, 0.2F, 0.8F, 0.2F);
source.getWorld().playSound(source, Sound.UI_BUTTON_CLICK, 1.7F, 0.6F);
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> updateProgress(uuid, speed, progress + speed, source, destination, resistance), 10L);
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> updateProgress(uuid, speed, progress + speed, source, destination, resistance), 10L);
}
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured during a Teleportation Sequence for Slimefun " + Slimefun.getVersion(), x);
}
}
else cancel(uuid, p);

View File

@ -1,5 +1,7 @@
package me.mrCookieSlime.Slimefun.Lists;
import java.util.logging.Level;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
@ -10,6 +12,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.LockedCategory;
import me.mrCookieSlime.Slimefun.Objects.SeasonalCategory;
import me.mrCookieSlime.Slimefun.api.Slimefun;
/**
* Built-in categories.
@ -22,24 +25,26 @@ public final class Categories {
private Categories() {}
public static final Category WEAPONS = new Category(new CustomItem(Material.GOLDEN_SWORD, "&7Weapons", "", "&a> Click to open"), 1);
public static final Category PORTABLE = new Category(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDBjYjFlNjdiNTEyYWIyZDRiZjNkN2FjZTBlYWFmNjFjMzJjZDQ2ODFkZGMzOTg3Y2ViMzI2NzA2YTMzZmEifX19"), "&7Items", "", "&a> Click to open"), 1);
public static final Category FOOD = new Category(new CustomItem(Material.APPLE, "&7Food", "", "&a> Click to open"), 2);
public static final Category MACHINES_1 = new Category(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&7Basic Machines", "", "&a> Click to open"), 1);
public static final LockedCategory ELECTRICITY = new LockedCategory(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTU4NDQzMmFmNmYzODIxNjcxMjAyNThkMWVlZThjODdjNmU3NWQ5ZTQ3OWU3YjBkNGM3YjZhZDQ4Y2ZlZWYifX19"), "&bEnergy and Electricity", "", "&a> Click to open"), 4, MACHINES_1);
public static final LockedCategory GPS = new LockedCategory(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&bGPS-based Machines", "", "&a> Click to open"), 4, MACHINES_1);
public static final Category ARMOR = new Category(new CustomItem(Material.IRON_CHESTPLATE, "&7Armor", "", "&a> Click to open"), 2);
public static final Category LUMPS_AND_MAGIC = new Category(new CustomItem(SlimefunItems.RUNE_ENDER, "&7Magical Items", "", "&a> Click to open"), 2);
public static final Category MAGIC = new Category(new CustomItem(SlimefunItems.ENDER_BACKPACK, "&7Magical Gadgets", "", "&a> Click to open"), 3);
public static final Category MISC = new Category(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTRkYTk3ZjA4MGUzOTViODQyYzRjYzgyYTg0MDgyM2Q0ZGJkOGNhNjg4YTIwNjg1M2U1NzgzZTRiZmRjMDEyIn19fQ=="), "&7Miscellaneous", "", "&a> Click to open"), 2);
public static final Category TECH = new Category(new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&7Technical Gadgets", "", "&a> Click to open"), Color.SILVER), 3);
public static final Category RESOURCES = new Category(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2U4ZjVhZGIxNGQ2YzlmNmI4MTBkMDI3NTQzZjFhOGMxZjQxN2UyZmVkOTkzYzk3YmNkODljNzRmNWUyZTgifX19"), "&7Resources", "", "&a> Click to open"), 1);
public static final Category CARGO = new LockedCategory(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTUxMGJjODUzNjJhMTMwYTZmZjlkOTFmZjExZDZmYTQ2ZDdkMTkxMmEzNDMxZjc1MTU1OGVmM2M0ZDljMiJ9fX0="), "&cCargo Management", "", "&a> Click to open"), 4, MACHINES_1);
public static final Category TECH_MISC = new Category(new CustomItem(SlimefunItems.HEATING_COIL, "&7Technical Components", "", "&a> Click to open"), 2);
public static final Category MAGIC_ARMOR = new Category(new CustomItem(SlimefunItems.ENDER_HELMET, "&7Magical Armor", "", "&a> Click to open"), 2);
public static final Category TALISMANS_1 = new Category(new CustomItem(Material.EMERALD, "&7Talismans - &aTier I", "", "&a> Click to open"), 2);
public static final LockedCategory TALISMANS_2 = new LockedCategory(new CustomItem(Material.EMERALD, "&7Talismans - &aTier II", "", "&a> Click to open"), 3, TALISMANS_1);
public static final Category TOOLS = new Category(new CustomItem(Material.GOLDEN_PICKAXE, "&7Tools", "", "&a> Click to open"), 1);
private static final String lore = "&a> Click to open";
public static final Category WEAPONS = new Category(new CustomItem(Material.GOLDEN_SWORD, "&7Weapons", "", lore), 1);
public static final Category PORTABLE = new Category(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDBjYjFlNjdiNTEyYWIyZDRiZjNkN2FjZTBlYWFmNjFjMzJjZDQ2ODFkZGMzOTg3Y2ViMzI2NzA2YTMzZmEifX19"), "&7Items", "", lore), 1);
public static final Category FOOD = new Category(new CustomItem(Material.APPLE, "&7Food", "", lore), 2);
public static final Category MACHINES_1 = new Category(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&7Basic Machines", "", lore), 1);
public static final LockedCategory ELECTRICITY = new LockedCategory(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTU4NDQzMmFmNmYzODIxNjcxMjAyNThkMWVlZThjODdjNmU3NWQ5ZTQ3OWU3YjBkNGM3YjZhZDQ4Y2ZlZWYifX19"), "&bEnergy and Electricity", "", lore), 4, MACHINES_1);
public static final LockedCategory GPS = new LockedCategory(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&bGPS-based Machines", "", lore), 4, MACHINES_1);
public static final Category ARMOR = new Category(new CustomItem(Material.IRON_CHESTPLATE, "&7Armor", "", lore), 2);
public static final Category LUMPS_AND_MAGIC = new Category(new CustomItem(SlimefunItems.RUNE_ENDER, "&7Magical Items", "", lore), 2);
public static final Category MAGIC = new Category(new CustomItem(SlimefunItems.ENDER_BACKPACK, "&7Magical Gadgets", "", lore), 3);
public static final Category MISC = new Category(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTRkYTk3ZjA4MGUzOTViODQyYzRjYzgyYTg0MDgyM2Q0ZGJkOGNhNjg4YTIwNjg1M2U1NzgzZTRiZmRjMDEyIn19fQ=="), "&7Miscellaneous", "", lore), 2);
public static final Category TECH = new Category(new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&7Technical Gadgets", "", lore), Color.SILVER), 3);
public static final Category RESOURCES = new Category(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2U4ZjVhZGIxNGQ2YzlmNmI4MTBkMDI3NTQzZjFhOGMxZjQxN2UyZmVkOTkzYzk3YmNkODljNzRmNWUyZTgifX19"), "&7Resources", "", lore), 1);
public static final Category CARGO = new LockedCategory(new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTUxMGJjODUzNjJhMTMwYTZmZjlkOTFmZjExZDZmYTQ2ZDdkMTkxMmEzNDMxZjc1MTU1OGVmM2M0ZDljMiJ9fX0="), "&cCargo Management", "", lore), 4, MACHINES_1);
public static final Category TECH_MISC = new Category(new CustomItem(SlimefunItems.HEATING_COIL, "&7Technical Components", "", lore), 2);
public static final Category MAGIC_ARMOR = new Category(new CustomItem(SlimefunItems.ENDER_HELMET, "&7Magical Armor", "", lore), 2);
public static final Category TALISMANS_1 = new Category(new CustomItem(Material.EMERALD, "&7Talismans - &aTier I", "", lore), 2);
public static final LockedCategory TALISMANS_2 = new LockedCategory(new CustomItem(Material.EMERALD, "&7Talismans - &aTier II", "", lore), 3, TALISMANS_1);
public static final Category TOOLS = new Category(new CustomItem(Material.GOLDEN_PICKAXE, "&7Tools", "", lore), 1);
public static final SeasonalCategory CHRISTMAS = new SeasonalCategory(12, 1, new CustomItem(Material.NETHER_STAR, "&aC&ch&ar&ci&as&ct&am&ca&as", "", "&c> Click to help &aSanta"));
public static final SeasonalCategory VALENTINES_DAY = new SeasonalCategory(2, 2, new CustomItem(Material.POPPY, "&dValentine's Day", "", "&d> Click to celebrate Love"));
public static final SeasonalCategory EASTER = new SeasonalCategory(4, 2, new CustomItem(Material.EGG, "&6Easter", "", "&a> Click to paint some Eggs"));
@ -50,7 +55,7 @@ public final class Categories {
return CustomSkull.getItem(texture);
}
catch(Exception x) {
x.printStackTrace();
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while initializing the Categories for Slimefun " + Slimefun.getVersion(), x);
return new ItemStack(Material.PLAYER_HEAD);
}

View File

@ -2,6 +2,7 @@ package me.mrCookieSlime.Slimefun.Lists;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import org.bukkit.ChatColor;
import org.bukkit.Color;
@ -19,6 +20,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomPotion;
import me.mrCookieSlime.CSCoreLibPlugin.general.String.Christmas;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
import me.mrCookieSlime.Slimefun.api.Slimefun;
public final class SlimefunItems {
@ -773,7 +775,7 @@ public final class SlimefunItems {
return CustomSkull.getItem(texture);
}
catch(Exception x) {
x.printStackTrace();
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while initializing the Items for Slimefun " + Slimefun.getVersion(), x);
return new ItemStack(Material.PLAYER_HEAD);
}

View File

@ -1,9 +0,0 @@
package me.mrCookieSlime.Slimefun.Misc;
public enum BookDesign {
BOOK,
CHEST,
CHEAT_SHEET;
}

View File

@ -7,9 +7,9 @@ import java.util.List;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.Categories;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.api.Slimefun;
/**
* Statically handles categories.
@ -76,11 +76,11 @@ public class Category {
Collections.sort(list, new CategorySorter());
if (this instanceof SeasonalCategory) {
if (((SeasonalCategory) this).isUnlocked()) Slimefun.current_categories.add(this);
if (((SeasonalCategory) this).isUnlocked()) SlimefunPlugin.getUtilities().currentlyEnabledCategories.add(this);
}
else Slimefun.current_categories.add(this);
else SlimefunPlugin.getUtilities().currentlyEnabledCategories.add(this);
Collections.sort(Slimefun.current_categories, new CategorySorter());
Collections.sort(SlimefunPlugin.getUtilities().currentlyEnabledCategories, new CategorySorter());
}
/**

View File

@ -38,40 +38,38 @@ public class MultiBlock {
}
public boolean isMultiBlock(SlimefunItem machine) {
if (machine == null) return false;
else if (!(machine instanceof SlimefunMachine)) return false;
else if (machine instanceof SlimefunMachine) {
MultiBlock mb = ((SlimefunMachine) machine).toMultiBlock();
if (trigger == mb.getTriggerBlock()) {
for (int i = 0; i < mb.getBuild().length; i++) {
if (mb.getBuild()[i] != null) {
if (MaterialHelper.isLog( mb.getBuild()[i])) {
if (!MaterialHelper.isLog(blocks[i])) return false;
}
else if (mb.getBuild()[i] != blocks[i]) return false;
}
}
return true;
}
else return false;
if (machine instanceof SlimefunMachine) {
return isMultiBlock(((SlimefunMachine) machine).toMultiBlock());
}
else return false;
}
public boolean isMultiBlock(MultiBlock mb) {
if (mb == null) return false;
else if (trigger == mb.getTriggerBlock()) {
if (trigger == mb.getTriggerBlock()) {
for (int i = 0; i < mb.getBuild().length; i++) {
if (mb.getBuild()[i] != null) {
if (MaterialHelper.isLog(mb.getBuild()[i])) {
if (!MaterialHelper.isLog(blocks[i])) return false;
}
else if (mb.getBuild()[i] != blocks[i]) return false;
}
if (!compareBlocks(blocks[i], mb.getBuild()[i])) return false;
}
return true;
}
else return false;
return false;
}
private boolean compareBlocks(Material a, Material b) {
if (b != null) {
if (MaterialHelper.isLog(b)) {
return MaterialHelper.isLog(a);
}
if (b != a) {
return false;
}
}
return true;
}
}

View File

@ -7,6 +7,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@ -17,7 +18,7 @@ import org.bukkit.entity.Player;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Variable;
import me.mrCookieSlime.CSCoreLibPlugin.general.Particles.FireworkShow;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Events.ResearchUnlockEvent;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Setup.Messages;
@ -80,7 +81,7 @@ public class Research {
}
public boolean isEnabled() {
return SlimefunStartup.instance.getSettings().RESEARCHES_ENABLED && enabled;
return SlimefunPlugin.getSettings().researchesEnabled && enabled;
}
/**
@ -214,7 +215,7 @@ public class Research {
*/
public boolean canUnlock(Player p) {
if (!isEnabled()) return true;
return (p.getGameMode() == GameMode.CREATIVE && SlimefunStartup.instance.getSettings().RESEARCHES_FREE_IN_CREATIVE) || p.getLevel() >= this.cost;
return (p.getGameMode() == GameMode.CREATIVE && SlimefunPlugin.getSettings().researchesFreeInCreative) || p.getLevel() >= this.cost;
}
/**
@ -247,29 +248,29 @@ public class Research {
PlayerProfile.fromUUID(p.getUniqueId()).setResearched(this, true);
Messages.local.sendTranslation(p, "messages.unlocked", true, new Variable("%research%", getName()));
if (SlimefunStartup.getCfg().getBoolean("options.research-unlock-fireworks")) {
if (SlimefunPlugin.getCfg().getBoolean("options.research-unlock-fireworks")) {
FireworkShow.launchRandom(p, 1);
}
};
if (!event.isCancelled()) {
if (instant) runnable.run();
else if (!SlimefunStartup.instance.getUtilities().researching.contains(p.getUniqueId())){
SlimefunStartup.instance.getUtilities().researching.add(p.getUniqueId());
else if (!SlimefunPlugin.getUtilities().researching.contains(p.getUniqueId())){
SlimefunPlugin.getUtilities().researching.add(p.getUniqueId());
Messages.local.sendTranslation(p, "messages.research.start", true, new Variable("%research%", getName()));
for (int i = 1; i < research_progress.length + 1; i++) {
int j = i;
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
p.playSound(p.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 0.7F, 1F);
Messages.local.sendTranslation(p, "messages.research.progress", true, new Variable("%research%", getName()), new Variable("%progress%", research_progress[j - 1] + "%"));
}, i * 20L);
}
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
runnable.run();
SlimefunStartup.instance.getUtilities().researching.remove(p.getUniqueId());
SlimefunPlugin.getUtilities().researching.remove(p.getUniqueId());
}, (research_progress.length + 1) * 20L);
}
}
@ -282,9 +283,9 @@ public class Research {
* @since 4.0
*/
public void register() {
SlimefunStartup.getResearchCfg().setDefaultValue("enable-researching", true);
SlimefunPlugin.getResearchCfg().setDefaultValue("enable-researching", true);
if (SlimefunStartup.getResearchCfg().contains(this.getID() + ".enabled") && !SlimefunStartup.getResearchCfg().getBoolean(this.getID() + ".enabled")) {
if (SlimefunPlugin.getResearchCfg().contains(this.getID() + ".enabled") && !SlimefunPlugin.getResearchCfg().getBoolean(this.getID() + ".enabled")) {
Iterator<SlimefunItem> iterator = items.iterator();
while (iterator.hasNext()) {
SlimefunItem item = iterator.next();
@ -294,16 +295,18 @@ public class Research {
return;
}
SlimefunStartup.getResearchCfg().setDefaultValue(this.getID() + ".name", this.getName());
SlimefunStartup.getResearchCfg().setDefaultValue(this.getID() + ".cost", this.getCost());
SlimefunStartup.getResearchCfg().setDefaultValue(this.getID() + ".enabled", true);
SlimefunPlugin.getResearchCfg().setDefaultValue(this.getID() + ".name", this.getName());
SlimefunPlugin.getResearchCfg().setDefaultValue(this.getID() + ".cost", this.getCost());
SlimefunPlugin.getResearchCfg().setDefaultValue(this.getID() + ".enabled", true);
this.name = SlimefunStartup.getResearchCfg().getString(this.getID() + ".name");
this.cost = SlimefunStartup.getResearchCfg().getInt(this.getID() + ".cost");
this.enabled = SlimefunStartup.getResearchCfg().getBoolean(this.getID() + ".enabled");
this.name = SlimefunPlugin.getResearchCfg().getString(this.getID() + ".name");
this.cost = SlimefunPlugin.getResearchCfg().getInt(this.getID() + ".cost");
this.enabled = SlimefunPlugin.getResearchCfg().getBoolean(this.getID() + ".enabled");
list.add(this);
if (SlimefunStartup.getCfg().getBoolean("options.print-out-loading")) System.out.println("[Slimefun] Loaded Research \"" + this.getName() + "\"");
if (SlimefunPlugin.getSettings().printOutLoading) {
Slimefun.getLogger().log(Level.INFO, "Loaded Research \"" + this.getName() + "\"");
}
}
/**
@ -327,7 +330,7 @@ public class Research {
* @since 4.0
*/
public static boolean isResearching(Player p) {
return SlimefunStartup.instance.getUtilities().researching.contains(p.getUniqueId());
return SlimefunPlugin.getUtilities().researching.contains(p.getUniqueId());
}
/**

View File

@ -7,6 +7,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@ -15,7 +16,7 @@ import org.bukkit.block.Block;
import org.bukkit.entity.EntityType;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
@ -29,7 +30,7 @@ import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.energy.EnergyNet;
import me.mrCookieSlime.Slimefun.api.energy.EnergyNet.NetworkComponent;
import me.mrCookieSlime.Slimefun.api.energy.EnergyNetComponent;
import me.mrCookieSlime.Slimefun.api.energy.EnergyTicker;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
@ -37,7 +38,7 @@ public class SlimefunItem {
public static List<SlimefunItem> items = new ArrayList<>();
public static Map<String, SlimefunItem> map_id = new HashMap<>();
public static Map<String, SlimefunItem> mapID = new HashMap<>();
public static List<ItemStack> radioactive = new ArrayList<>();
public static Set<String> tickers = new HashSet<>();
@ -67,6 +68,7 @@ public class SlimefunItem {
private EnergyTicker energyTicker;
private String[] keys = null;
private Object[] values = null;
private String wiki = null;
/**
* Defines whether a SlimefunItem is enabled, disabled or fall-back to its vanilla behavior.
@ -209,46 +211,46 @@ public class SlimefunItem {
public void register(boolean slimefun) {
this.addon = !slimefun;
try {
if (map_id.containsKey(this.id)) throw new IllegalArgumentException("ID \"" + this.id + "\" already exists");
if (mapID.containsKey(this.id)) throw new IllegalArgumentException("ID \"" + this.id + "\" already exists");
if (this.recipe.length < 9) this.recipe = new ItemStack[] {null, null, null, null, null, null, null, null, null};
all.add(this);
SlimefunStartup.getItemCfg().setDefaultValue(this.id + ".enabled", true);
SlimefunStartup.getItemCfg().setDefaultValue(this.id + ".can-be-used-in-workbenches", this.replacing);
SlimefunStartup.getItemCfg().setDefaultValue(this.id + ".hide-in-guide", this.hidden);
SlimefunStartup.getItemCfg().setDefaultValue(this.id + ".allow-enchanting", this.enchantable);
SlimefunStartup.getItemCfg().setDefaultValue(this.id + ".allow-disenchanting", this.disenchantable);
SlimefunStartup.getItemCfg().setDefaultValue(this.id + ".required-permission", this.permission);
SlimefunPlugin.getItemCfg().setDefaultValue(this.id + ".enabled", true);
SlimefunPlugin.getItemCfg().setDefaultValue(this.id + ".can-be-used-in-workbenches", this.replacing);
SlimefunPlugin.getItemCfg().setDefaultValue(this.id + ".hide-in-guide", this.hidden);
SlimefunPlugin.getItemCfg().setDefaultValue(this.id + ".allow-enchanting", this.enchantable);
SlimefunPlugin.getItemCfg().setDefaultValue(this.id + ".allow-disenchanting", this.disenchantable);
SlimefunPlugin.getItemCfg().setDefaultValue(this.id + ".required-permission", this.permission);
if (this.keys != null && this.values != null) {
for (int i = 0; i < this.keys.length; i++) {
SlimefunStartup.getItemCfg().setDefaultValue(this.id + "." + this.keys[i], this.values[i]);
SlimefunPlugin.getItemCfg().setDefaultValue(this.id + "." + this.keys[i], this.values[i]);
}
}
for (World world: Bukkit.getWorlds()) {
SlimefunStartup.getWhitelist().setDefaultValue(world.getName() + ".enabled", true);
SlimefunStartup.getWhitelist().setDefaultValue(world.getName() + ".enabled-items." + this.id, true);
SlimefunPlugin.getWhitelist().setDefaultValue(world.getName() + ".enabled", true);
SlimefunPlugin.getWhitelist().setDefaultValue(world.getName() + ".enabled-items." + this.id, true);
}
if (this.ticking && !SlimefunStartup.getCfg().getBoolean("URID.enable-tickers")) {
if (this.ticking && !SlimefunPlugin.getCfg().getBoolean("URID.enable-tickers")) {
this.state = State.DISABLED;
return;
}
if (SlimefunStartup.getItemCfg().getBoolean(id + ".enabled")) {
if (SlimefunPlugin.getItemCfg().getBoolean(id + ".enabled")) {
if (!Category.list().contains(category)) category.register();
this.state = State.ENABLED;
this.replacing = SlimefunStartup.getItemCfg().getBoolean(this.id + ".can-be-used-in-workbenches");
this.hidden = SlimefunStartup.getItemCfg().getBoolean(this.id + ".hide-in-guide");
this.enchantable = SlimefunStartup.getItemCfg().getBoolean(this.id + ".allow-enchanting");
this.disenchantable = SlimefunStartup.getItemCfg().getBoolean(this.id + ".allow-disenchanting");
this.permission = SlimefunStartup.getItemCfg().getString(this.id + ".required-permission");
this.replacing = SlimefunPlugin.getItemCfg().getBoolean(this.id + ".can-be-used-in-workbenches");
this.hidden = SlimefunPlugin.getItemCfg().getBoolean(this.id + ".hide-in-guide");
this.enchantable = SlimefunPlugin.getItemCfg().getBoolean(this.id + ".allow-enchanting");
this.disenchantable = SlimefunPlugin.getItemCfg().getBoolean(this.id + ".allow-disenchanting");
this.permission = SlimefunPlugin.getItemCfg().getString(this.id + ".required-permission");
items.add(this);
if (slimefun) SlimefunStartup.instance.getUtilities().vanillaItems++;
map_id.put(this.id, this);
if (slimefun) SlimefunPlugin.getUtilities().vanillaItems++;
mapID.put(this.id, this);
this.create();
for (ItemHandler handler: itemhandlers) {
@ -257,15 +259,16 @@ public class SlimefunItem {
handlers.put(handler.toCodename(), handlerset);
}
if (SlimefunStartup.getCfg().getBoolean("options.print-out-loading")) System.out.println("[Slimefun] Loaded Item \"" + this.id + "\"");
if (SlimefunPlugin.getSettings().printOutLoading) {
Slimefun.getLogger().log(Level.INFO, "Loaded Item \"{0}\"", this.id);
}
}
else {
if (this instanceof VanillaItem) this.state = State.VANILLA;
else this.state = State.DISABLED;
}
} catch(Exception x) {
System.err.println("[Slimefun] Item Registration failed: " + this.id);
x.printStackTrace();
Slimefun.getLogger().log(Level.WARNING, "Registering the Item '" + id + "' for Slimefun " + Slimefun.getVersion() + " has failed", x);
}
}
@ -308,24 +311,26 @@ public class SlimefunItem {
*/
@Deprecated
public static SlimefunItem getByName(String name) {
return map_id.get(name);
return mapID.get(name);
}
/**
* @since 4.1.11, rename of {@link #getByName(String)}.
*/
public static SlimefunItem getByID(String id) {
return map_id.get(id);
return mapID.get(id);
}
public static SlimefunItem getByItem(ItemStack item) {
if (item == null) return null;
for (SlimefunItem sfi: items) {
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;
if ((sfi instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) ||
(sfi instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) ||
(sfi instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) ||
(sfi instanceof SlimefunBackpack && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) ||
SlimefunManager.isItemSimiliar(item, sfi.getItem(), true))
return sfi;
}
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) return getByID("BROKEN_SPAWNER");
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) return getByID("REINFORCED_SPAWNER");
@ -347,13 +352,14 @@ public class SlimefunItem {
if (recipeOutput != null) output = recipeOutput.clone();
if (recipeType.toItem().isSimilar(RecipeType.MOB_DROP.toItem())) {
String mob = ChatColor.stripColor(recipe[4].getItemMeta().getDisplayName()).toUpperCase().replace(" ", "_");
try {
EntityType entity = EntityType.valueOf(ChatColor.stripColor(recipe[4].getItemMeta().getDisplayName()).toUpperCase().replace(" ", "_"));
List<ItemStack> dropping = new ArrayList<>();
if (SlimefunManager.drops.containsKey(entity)) dropping = SlimefunManager.drops.get(entity);
EntityType entity = EntityType.valueOf(mob);
List<ItemStack> dropping = SlimefunPlugin.getUtilities().drops.getOrDefault(entity, new ArrayList<>());
dropping.add(output);
SlimefunManager.drops.put(entity, dropping);
SlimefunPlugin.getUtilities().drops.put(entity, dropping);
} catch(Exception x) {
Slimefun.getLogger().log(Level.WARNING, "An Exception occured when setting a Drop for the Mob: " + mob + " (" + x.getClass().getSimpleName() + ")");
}
}
else if (recipeType.toItem().isSimilar(RecipeType.ANCIENT_ALTAR.toItem())) {
@ -362,9 +368,10 @@ public class SlimefunItem {
else if (recipeType.getMachine() != null && getByID(recipeType.getMachine().getID()) instanceof SlimefunMachine) {
((SlimefunMachine) getByID(recipeType.getMachine().getID())).addRecipe(recipe, output);
}
install();
} catch(Exception x) {
System.err.println("[Slimefun] Item Initialization failed: " + id);
Slimefun.getLogger().log(Level.WARNING, "Item Setup failed: " + id + " (" + x.getClass().getSimpleName() + ")");
}
}
@ -405,7 +412,7 @@ public class SlimefunItem {
}
else if (h instanceof EnergyTicker) {
this.energyTicker = (EnergyTicker) h;
EnergyNet.registerComponent(getID(), NetworkComponent.SOURCE);
EnergyNet.registerComponent(getID(), EnergyNetComponent.SOURCE);
}
}
}
@ -458,13 +465,14 @@ public class SlimefunItem {
public static void patchExistingItem(String id, ItemStack stack) {
SlimefunItem item = getByID(id);
if (item != null) {
System.out.println("[Slimefun] WARNING - Patching existing Item - " + id);
System.out.println("[Slimefun] This might take a while");
Slimefun.getLogger().log(Level.INFO, "Patching existing Item... {0}", id);
Slimefun.getLogger().log(Level.INFO, "This might take a while");
final ItemStack old = item.getItem();
item.setItem(stack);
for (SlimefunItem sfi: list()) {
ItemStack[] recipe = sfi.getRecipe();
for (int i = 0; i < 9; i++) {
if (SlimefunManager.isItemSimiliar(recipe[i], old, true)) recipe[i] = stack;
}
@ -480,7 +488,7 @@ public class SlimefunItem {
public void registerChargeableBlock(boolean slimefun, int capacity) {
this.register(slimefun);
ChargableBlock.registerChargableBlock(id, capacity, true);
EnergyNet.registerComponent(id, NetworkComponent.CONSUMER);
EnergyNet.registerComponent(id, EnergyNetComponent.CONSUMER);
}
public void registerUnrechargeableBlock(boolean slimefun, int capacity) {
@ -495,12 +503,12 @@ public class SlimefunItem {
public void registerEnergyDistributor(boolean slimefun) {
this.register(slimefun);
EnergyNet.registerComponent(id, NetworkComponent.DISTRIBUTOR);
EnergyNet.registerComponent(id, EnergyNetComponent.DISTRIBUTOR);
}
public void registerDistibutingCapacitor(boolean slimefun, final int capacity) {
this.register(slimefun);
EnergyNet.registerComponent(id, NetworkComponent.DISTRIBUTOR);
EnergyNet.registerComponent(id, EnergyNetComponent.DISTRIBUTOR);
ChargableBlock.registerCapacitor(id, capacity);
}
@ -526,7 +534,15 @@ public class SlimefunItem {
}
public void addWikipage(String page) {
Slimefun.addWikiPage(this.getID(), "https://github.com/TheBusyBiscuit/Slimefun4/wiki/" + page);
wiki = "https://github.com/TheBusyBiscuit/Slimefun4/wiki/" + page;
}
public boolean hasWiki() {
return wiki != null;
}
public String getWiki() {
return wiki;
}
@Override

View File

@ -65,8 +65,9 @@ public class SlimefunMachine extends SlimefunItem {
public void install() {
for (ItemStack i: this.getDisplayRecipes()) {
SlimefunItem item = SlimefunItem.getByItem(i);
if (item == null) this.recipes.add(new ItemStack[] {i});
else if (!SlimefunItem.isDisabled(i)) this.recipes.add(new ItemStack[] {i});
if (item == null || !SlimefunItem.isDisabled(i))
this.recipes.add(new ItemStack[] {i});
}
}

View File

@ -55,10 +55,6 @@ public abstract class AContainer extends SlimefunItem {
constructMenu(this);
}
@Override
public void newInstance(BlockMenu menu, Block b) {
}
@Override
public boolean canOpen(Block b, Player p) {
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
@ -73,10 +69,6 @@ public abstract class AContainer extends SlimefunItem {
registerBlockHandler(id, new SlimefunBlockHandler() {
@Override
public void onPlace(Player p, Block b, SlimefunItem item) {
}
@Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
BlockMenu inv = BlockStorage.getInventory(b);
@ -87,6 +79,7 @@ public abstract class AContainer extends SlimefunItem {
inv.replaceExistingItem(slot, null);
}
}
for (int slot : getOutputSlots()) {
if (inv.getItemInSlot(slot) != null) {
b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
@ -94,6 +87,7 @@ public abstract class AContainer extends SlimefunItem {
}
}
}
progress.remove(b);
processing.remove(b);
return true;
@ -141,11 +135,14 @@ public abstract class AContainer extends SlimefunItem {
public abstract String getInventoryTitle();
public abstract ItemStack getProgressBar();
public abstract void registerDefaultRecipes();
public abstract int getEnergyConsumption();
public abstract int getSpeed();
public abstract String getMachineIdentifier();
public void registerDefaultRecipes() {
// Override this method to register your machine recipes
}
public int[] getInputSlots() {
return new int[] {19, 20};
}

View File

@ -21,7 +21,6 @@ import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
@ -77,10 +76,6 @@ public abstract class ADrill extends AContainer {
}
}
@Override
public void newInstance(BlockMenu menu, Block b) {
}
@Override
public boolean canOpen(Block b, Player p) {
if (!(p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true))) {

View File

@ -41,11 +41,6 @@ public abstract class AFarm extends SlimefunItem {
constructMenu(this);
}
@Override
public void newInstance(BlockMenu menu, Block b) {
}
@Override
public boolean canOpen(Block b, Player p) {
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
@ -60,10 +55,6 @@ public abstract class AFarm extends SlimefunItem {
registerBlockHandler(id, new SlimefunBlockHandler() {
@Override
public void onPlace(Player p, Block b, SlimefunItem item) {
}
@Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
BlockMenu inv = BlockStorage.getInventory(b);
@ -89,11 +80,7 @@ public abstract class AFarm extends SlimefunItem {
public void init() {
constructMenu(this);
}
@Override
public void newInstance(BlockMenu menu, Block b) {
}
@Override
public boolean canOpen(Block b, Player p) {
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
@ -108,10 +95,6 @@ public abstract class AFarm extends SlimefunItem {
registerBlockHandler(id, new SlimefunBlockHandler() {
@Override
public void onPlace(Player p, Block b, SlimefunItem item) {
}
@Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
BlockMenu inv = BlockStorage.getInventory(b);

View File

@ -59,10 +59,6 @@ public abstract class AGenerator extends SlimefunItem {
constructMenu(this);
}
@Override
public void newInstance(BlockMenu menu, Block b) {
}
@Override
public boolean canOpen(Block b, Player p) {
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
@ -77,10 +73,6 @@ public abstract class AGenerator extends SlimefunItem {
registerBlockHandler(id, new SlimefunBlockHandler() {
@Override
public void onPlace(Player p, Block b, SlimefunItem item) {
}
@Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
BlockMenu inv = BlockStorage.getInventory(b);

View File

@ -8,6 +8,7 @@ import java.util.Map;
import java.util.Optional;
import java.util.Random;
import java.util.Set;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.Location;
@ -24,7 +25,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
@ -34,6 +35,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ReactorAccessPort;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.energy.EnergyTicker;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
@ -83,6 +85,7 @@ public abstract class AReactor extends SlimefunItem {
if (BlockStorage.getLocationInfo(b.getLocation(), "reactor-mode") == null){
BlockStorage.addBlockInfo(b, "reactor-mode", "generator");
}
if (!BlockStorage.hasBlockInfo(b) || BlockStorage.getLocationInfo(b.getLocation(), "reactor-mode").equals("generator")) {
menu.replaceExistingItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&7Focus: &eElectricity", "", "&6Your Reactor will focus on Power Generation", "&6If your Energy Network doesn't need Power", "&6it will not produce any either", "", "&7> Click to change the Focus to &eProduction"));
menu.addMenuClickHandler(4, (p, slot, item, action) -> {
@ -99,16 +102,18 @@ public abstract class AReactor extends SlimefunItem {
return false;
});
}
BlockMenu ap = getAccessPort(b.getLocation());
if(ap != null) {
BlockMenu port = getAccessPort(b.getLocation());
if (port != null) {
menu.replaceExistingItem(infoSlot, new CustomItem(new ItemStack(Material.GREEN_WOOL), "&7Access Port", "", "&6Detected", "", "&7> Click to view Access Port"));
menu.addMenuClickHandler(infoSlot, (p, slot, item, action) -> {
ap.open(p);
port.open(p);
newInstance(menu, b);
return false;
});
} else {
}
else {
menu.replaceExistingItem(infoSlot, new CustomItem(new ItemStack(Material.RED_WOOL), "&7Access Port", "", "&cNot detected", "", "&7Access Port must be", "&7placed 3 blocks above", "&7a reactor!"));
menu.addMenuClickHandler(infoSlot, (p, slot, item, action) -> {
newInstance(menu, b);
@ -118,6 +123,7 @@ public abstract class AReactor extends SlimefunItem {
}
} catch(Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured when creating a Reactor Menu for Slimefun " + Slimefun.getVersion(), x);
}
}
@ -135,10 +141,6 @@ public abstract class AReactor extends SlimefunItem {
registerBlockHandler(id, new SlimefunBlockHandler() {
@Override
public void onPlace(Player p, Block b, SlimefunItem item) {
}
@Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
BlockMenu inv = BlockStorage.getInventory(b);
@ -149,12 +151,14 @@ public abstract class AReactor extends SlimefunItem {
inv.replaceExistingItem(slot, null);
}
}
for (int slot : getCoolantSlots()) {
if (inv.getItemInSlot(slot) != null) {
b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
inv.replaceExistingItem(slot, null);
}
}
for (int slot : getOutputSlots()) {
if (inv.getItemInSlot(slot) != null) {
b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
@ -162,6 +166,7 @@ public abstract class AReactor extends SlimefunItem {
}
}
}
progress.remove(b.getLocation());
processing.remove(b.getLocation());
ReactorHologram.remove(b.getLocation());
@ -174,35 +179,23 @@ public abstract class AReactor extends SlimefunItem {
private void constructMenu(BlockMenuPreset preset) {
for (int i : border) {
preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
(p, slot, item, action) -> false
);
preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
for (int i : border_1) {
preset.addItem(i, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), " "),
(p, slot, item, action) -> false
);
preset.addItem(i, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
for (int i : border_3) {
preset.addItem(i, new CustomItem(new ItemStack(Material.GREEN_STAINED_GLASS_PANE), " "),
(p, slot, item, action) -> false
);
preset.addItem(i, new CustomItem(new ItemStack(Material.GREEN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
preset.addItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "),
(p, slot, item, action) -> false
);
preset.addItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
preset.addItem(1, new CustomItem(SlimefunItems.URANIUM, "&7Fuel Slot", "", "&rThis Slot accepts radioactive Fuel such as:", "&2Uranium &ror &aNeptunium"),
(p, slot, item, action) -> false
);
preset.addItem(1, new CustomItem(SlimefunItems.URANIUM, "&7Fuel Slot", "", "&rThis Slot accepts radioactive Fuel such as:", "&2Uranium &ror &aNeptunium"), (p, slot, item, action) -> false);
for (int i : border_2) {
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
(p, slot, item, action) -> false
);
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
if (needsCooling()) {
@ -212,9 +205,7 @@ public abstract class AReactor extends SlimefunItem {
preset.addItem(7, new CustomItem(new ItemStack(Material.BARRIER), "&bCoolant Slot", "", "&rThis Slot accepts Coolant Cells"));
for (int i : border_4) {
preset.addItem(i, new CustomItem(new ItemStack(Material.BARRIER), "&cNo Coolant Required"),
(p, slot, item, action) -> false
);
preset.addItem(i, new CustomItem(new ItemStack(Material.BARRIER), "&cNo Coolant Required"), (p, slot, item, action) -> false);
}
}
}
@ -284,7 +275,7 @@ public abstract class AReactor extends SlimefunItem {
if (space >= produced || !BlockStorage.getLocationInfo(l, "reactor-mode").equals("generator")) {
progress.put(l, timeleft - 1);
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
if (!l.getBlock().getRelative(cooling[new Random().nextInt(cooling.length)]).isLiquid()) explode.add(l);
});
@ -377,7 +368,7 @@ public abstract class AReactor extends SlimefunItem {
if (explosion) {
BlockStorage.getInventory(l).close();
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> ReactorHologram.remove(l), 0);
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> ReactorHologram.remove(l), 0);
explode.remove(l);
processing.remove(l);

View File

@ -3,7 +3,9 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems;
import org.bukkit.ChatColor;
import org.bukkit.inventory.ItemStack;
public class MachineHelper {
public final class MachineHelper {
private MachineHelper() {}
public static String getTimeLeft(int l) {
String timeleft = "";

View File

@ -1,4 +1,6 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo;
import java.util.logging.Level;
import org.bukkit.Material;
import org.bukkit.block.Block;
@ -19,6 +21,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
@ -105,7 +108,7 @@ public class AdvancedCargoOutputNode extends SlimefunItem {
menu.addMenuClickHandler(41, (p, slot, item, action) -> {
int channel = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) - 1;
if (channel < 0) {
if (CargoNet.EXTRA_CHANNELS) channel = 16;
if (CargoNet.extraChannels) channel = 16;
else channel = 15;
}
BlockStorage.addBlockInfo(b, "frequency", String.valueOf(channel));
@ -132,7 +135,7 @@ public class AdvancedCargoOutputNode extends SlimefunItem {
menu.addMenuClickHandler(43, (p, slot, item, action) -> {
int channeln = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) + 1;
if (CargoNet.EXTRA_CHANNELS) {
if (CargoNet.extraChannels) {
if (channeln > 16) channeln = 0;
}
else {
@ -144,8 +147,8 @@ public class AdvancedCargoOutputNode extends SlimefunItem {
return false;
});
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating the Inventory of an Advanced Cargo Output Node for Slimefun " + Slimefun.getVersion(), x);
}
}

View File

@ -1,6 +1,9 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo;
import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
import java.util.logging.Level;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
@ -19,6 +22,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
@ -63,6 +67,7 @@ public class CargoInputNode extends SlimefunItem {
Damageable dmg = (Damageable) is.getItemMeta();
dmg.setDamage(20);
is.setItemMeta((ItemMeta) dmg);
menu.replaceExistingItem(16, new CustomItem(is, "&7Include Sub-IDs/Durability: &4\u2718", "", "&e> Click to toggle whether the Durability has to match"));
menu.addMenuClickHandler(16, (p, slot, item, action) -> {
BlockStorage.addBlockInfo(b, "filter-durability", "true");
@ -75,6 +80,7 @@ public class CargoInputNode extends SlimefunItem {
Damageable dmg = (Damageable) is.getItemMeta();
dmg.setDamage(20);
is.setItemMeta((ItemMeta) dmg);
menu.replaceExistingItem(16, new CustomItem(is, "&7Include Sub-IDs/Durability: &2\u2714", "", "&e> Click to toggle whether the Durability has to match"));
menu.addMenuClickHandler(16, (p, slot, item, action) -> {
BlockStorage.addBlockInfo(b, "filter-durability", "false");
@ -121,7 +127,7 @@ public class CargoInputNode extends SlimefunItem {
menu.addMenuClickHandler(41, (p, slot, item, action) -> {
int channel = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) - 1;
if (channel < 0) {
if (CargoNet.EXTRA_CHANNELS) channel = 16;
if (CargoNet.extraChannels) channel = 16;
else channel = 15;
}
BlockStorage.addBlockInfo(b, "frequency", String.valueOf(channel));
@ -148,7 +154,7 @@ public class CargoInputNode extends SlimefunItem {
menu.addMenuClickHandler(43, (p, slot, item, action) -> {
int channeln = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) + 1;
if (CargoNet.EXTRA_CHANNELS) {
if (CargoNet.extraChannels) {
if (channeln > 16) channeln = 0;
}
else {
@ -160,8 +166,8 @@ public class CargoInputNode extends SlimefunItem {
return false;
});
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating a Cargo Input Node for Slimefun " + Slimefun.getVersion(), x);
}
}
@ -196,6 +202,7 @@ public class CargoInputNode extends SlimefunItem {
@Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
BlockMenu inv = BlockStorage.getInventory(b);
if (inv != null) {
for (int slot : getInputSlots()) {
if (inv.getItemInSlot(slot) != null) {
@ -211,14 +218,10 @@ public class CargoInputNode extends SlimefunItem {
protected void constructMenu(BlockMenuPreset preset) {
for (int i : border) {
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
(p, slot, item, action) -> false
);
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
preset.addItem(2, new CustomItem(new ItemStack(Material.PAPER), "&3Items", "", "&bPut in all Items you want to", "&bblacklist/whitelist"),
(p, slot, item, action) -> false
);
preset.addItem(2, new CustomItem(new ItemStack(Material.PAPER), "&3Items", "", "&bPut in all Items you want to", "&bblacklist/whitelist"), (p, slot, item, action) -> false);
}
public int[] getInputSlots() {

View File

@ -1,4 +1,6 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo;
import java.util.logging.Level;
import org.bukkit.Material;
import org.bukkit.block.Block;
@ -17,6 +19,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
@ -40,12 +43,11 @@ public class CargoOutputNode extends SlimefunItem {
@Override
public void newInstance(final BlockMenu menu, final Block b) {
try {
menu.replaceExistingItem(12, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjI1OTliZDk4NjY1OWI4Y2UyYzQ5ODg1MjVjOTRlMTlkZGQzOWZhZDA4YTM4Mjg0YTE5N2YxYjcwNjc1YWNjIn19fQ=="), "&bChannel", "", "&e> Click to decrease the Channel ID by 1"));
menu.addMenuClickHandler(12, (p, slot, item, action) -> {
int channel = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) - 1;
if (channel < 0) {
if (CargoNet.EXTRA_CHANNELS) channel = 16;
if (CargoNet.extraChannels) channel = 16;
else channel = 15;
}
BlockStorage.addBlockInfo(b, "frequency", String.valueOf(channel));
@ -72,7 +74,7 @@ public class CargoOutputNode extends SlimefunItem {
menu.addMenuClickHandler(14, (p, slot, item, action) -> {
int channeln = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) + 1;
if (CargoNet.EXTRA_CHANNELS) {
if (CargoNet.extraChannels) {
if (channeln > 16) channeln = 0;
}
else {
@ -84,8 +86,8 @@ public class CargoOutputNode extends SlimefunItem {
return false;
});
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating a Cargo Output Node for Slimefun " + Slimefun.getVersion(), x);
}
}
@ -121,9 +123,7 @@ public class CargoOutputNode extends SlimefunItem {
protected void constructMenu(BlockMenuPreset preset) {
for (int i : border) {
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
(p, slot, item, action) -> false
);
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
}

View File

@ -0,0 +1,76 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.Effect;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.Dispenser;
import org.bukkit.event.block.BlockDispenseEvent;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.handlers.AutonomousMachineHandler;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
public class BlockPlacer extends SlimefunItem {
public BlockPlacer(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) {
super(category, item, id, recipeType, recipe, keys, values);
}
@Override
public void register(boolean slimefun) {
Object value = Slimefun.getItemValue(getID(), "unplaceable-blocks");
String[] blacklist = ((List<?>) value).stream().toArray(String[]::new);
addItemHandler(new AutonomousMachineHandler() {
@Override
public boolean onBlockDispense(final BlockDispenseEvent e, Block dispenser, final Dispenser d, Block block, Block chest, SlimefunItem machine) {
if (machine.getID().equalsIgnoreCase(getID())) {
e.setCancelled(true);
if ((block.getType() == null || block.getType() == Material.AIR) && e.getItem().getType().isBlock()) {
for (String blockType : blacklist) {
if (e.getItem().getType().toString().equals(blockType)) {
return false;
}
}
SlimefunItem sfItem = SlimefunItem.getByItem(e.getItem());
if (sfItem != null) {
if (!SlimefunItem.blockhandler.containsKey(sfItem.getID())) {
block.setType(e.getItem().getType());
BlockStorage.store(block, sfItem.getID());
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, e.getItem().getType());
if (d.getInventory().containsAtLeast(e.getItem(), 2)) d.getInventory().removeItem(new CustomItem(e.getItem(), 1));
else {
Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> d.getInventory().removeItem(e.getItem()), 2L);
}
}
}
else {
block.setType(e.getItem().getType());
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, e.getItem().getType());
if (d.getInventory().containsAtLeast(e.getItem(), 2)) d.getInventory().removeItem(new CustomItem(e.getItem(), 1));
else {
Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> d.getInventory().removeItem(e.getItem()), 2L);
}
}
}
return true;
}
else return false;
}
});
super.register(slimefun);
}
}

View File

@ -1,123 +0,0 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
public class CargoCraftingNode extends SlimefunItem {
private static final int[] border = {0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 22, 23, 24, 25, 26, 27, 31, 32, 33, 34, 35, 36, 40, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53};
public CargoCraftingNode(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
new BlockMenuPreset(name, "&3Input Node") {
@Override
public void init() {
constructMenu(this);
}
@Override
public void newInstance(final BlockMenu menu, final Block b) {
try {
menu.replaceExistingItem(41, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjI1OTliZDk4NjY1OWI4Y2UyYzQ5ODg1MjVjOTRlMTlkZGQzOWZhZDA4YTM4Mjg0YTE5N2YxYjcwNjc1YWNjIn19fQ=="), "&bChannel", "", "&e> Click to decrease the Channel ID by 1"));
menu.addMenuClickHandler(41, (p, slot, item, action) -> {
int channel = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) - 1;
if (channel < 0) channel = 15;
BlockStorage.addBlockInfo(b, "frequency", String.valueOf(channel));
newInstance(menu, b);
return false;
});
menu.replaceExistingItem(42, new CustomItem(new ItemStack(((!BlockStorage.hasBlockInfo(b) || BlockStorage.getLocationInfo(b.getLocation(), "frequency") == null) ? Material.WHITE_WOOL : MaterialHelper.WoolColours[(Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")))])), "&bChannel ID: &3" + (((!BlockStorage.hasBlockInfo(b) || BlockStorage.getLocationInfo(b.getLocation(), "frequency") == null) ? 0: (Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")))) + 1)));
menu.addMenuClickHandler(42,
(p, slot, item, action) -> false
);
menu.replaceExistingItem(43, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzJmOTEwYzQ3ZGEwNDJlNGFhMjhhZjZjYzgxY2Y0OGFjNmNhZjM3ZGFiMzVmODhkYjk5M2FjY2I5ZGZlNTE2In19fQ=="), "&bChannel", "", "&e> Click to increase the Channel ID by 1"));
menu.addMenuClickHandler(43, (p, slot, item, action) -> {
int channel = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) + 1;
if (channel > 15) channel = 0;
BlockStorage.addBlockInfo(b, "frequency", String.valueOf(channel));
newInstance(menu, b);
return false;
});
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public boolean canOpen(Block b, Player p) {
boolean open = CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b) || p.hasPermission("slimefun.cargo.bypass");
if (!open) {
Messages.local.sendTranslation(p, "inventory.no-access", true);
}
return open;
}
@Override
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
return new int[0];
}
};
registerBlockHandler(name, new SlimefunBlockHandler() {
@Override
public void onPlace(Player p, Block b, SlimefunItem item) {
BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString());
BlockStorage.addBlockInfo(b, "frequency", "0");
}
@Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
BlockMenu inv = BlockStorage.getInventory(b);
if (inv != null) {
for (int slot : getInputSlots()) {
if (inv.getItemInSlot(slot) != null) {
b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
inv.replaceExistingItem(slot, null);
}
}
}
return true;
}
});
}
protected void constructMenu(BlockMenuPreset preset) {
for (int i : border) {
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
(p, slot, item, action) -> false
);
}
preset.addItem(2, new CustomItem(new ItemStack(Material.CRAFTING_TABLE), "&eRecipe", "", "&bPut in the Recipe you want to craft"),
(p, slot, item, action) -> false
);
}
public int[] getInputSlots() {
return new int[] {19, 20, 21, 28, 29, 30, 37, 38, 39};
}
}

View File

@ -11,7 +11,7 @@ import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget;
@ -49,7 +49,7 @@ public class Composter extends SlimefunGadget {
for (int i = 1; i < 12; i++) {
int j = i;
Bukkit.getScheduler().runTaskLater(SlimefunStartup.instance, () -> {
Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> {
if (j < 11) {
b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType().isBlock() ? input.getType() : Material.HAY_BLOCK);
}

View File

@ -12,7 +12,7 @@ import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget;
@ -49,7 +49,7 @@ public class Crucible extends SlimefunGadget {
for (int i = 1; i < 9; i++) {
int j = 8 - i;
Bukkit.getScheduler().runTaskLater(SlimefunStartup.instance, () -> {
Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> {
if (input.getType() == Material.COBBLESTONE || input.getType() == Material.TERRACOTTA || MaterialHelper.isTerracotta(input.getType())) {
block.setType(Material.LAVA);
Levelled le = (Levelled) block.getBlockData();

View File

@ -42,11 +42,6 @@ public class ReactorAccessPort extends SlimefunItem {
constructMenu(this);
}
@Override
public void newInstance(BlockMenu menu, Block b) {
}
@Override
public boolean canOpen(Block b, Player p) {
if(p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(),b,true)) {
@ -103,11 +98,6 @@ public class ReactorAccessPort extends SlimefunItem {
registerBlockHandler(name, new SlimefunBlockHandler() {
@Override
public void onPlace(Player p, Block b, SlimefunItem item) {
}
@Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
BlockMenu inv = BlockStorage.getInventory(b);

View File

@ -30,10 +30,6 @@ public class TrashCan extends SlimefunItem {
constructMenu(this);
}
@Override
public void newInstance(final BlockMenu menu, final Block b) {
}
@Override
public boolean canOpen(Block b, Player p) {
return true;

View File

@ -1,6 +1,7 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
import java.util.Iterator;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.Material;
@ -21,6 +22,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
@ -41,10 +43,6 @@ public class XPCollector extends SlimefunItem {
constructMenu(this);
}
@Override
public void newInstance(BlockMenu menu, Block b) {
}
@Override
public boolean canOpen(Block b, Player p) {
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
@ -130,8 +128,8 @@ public class XPCollector extends SlimefunItem {
public void tick(Block b, SlimefunItem sf, Config data) {
try {
XPCollector.this.tick(b);
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while ticking an Exp Collector for Slimefun " + Slimefun.getVersion(), x);
}
}

View File

@ -1,4 +1,6 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.logging.Level;
import org.bukkit.Material;
import org.bukkit.Particle;
@ -22,6 +24,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
@ -42,10 +45,6 @@ public class AnimalGrowthAccelerator extends SlimefunItem {
constructMenu(this);
}
@Override
public void newInstance(BlockMenu menu, Block b) {
}
@Override
public boolean canOpen(Block b, Player p) {
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
@ -60,11 +59,6 @@ public class AnimalGrowthAccelerator extends SlimefunItem {
registerBlockHandler(name, new SlimefunBlockHandler() {
@Override
public void onPlace(Player p, Block b, SlimefunItem item) {
}
@Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
AnimalGrowthAcceleratorHologram.remove(b);
@ -106,8 +100,8 @@ public class AnimalGrowthAccelerator extends SlimefunItem {
public void tick(Block b, SlimefunItem sf, Config data) {
try {
AnimalGrowthAccelerator.this.tick(b);
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while ticking an Animal Growth Accelerator for Slimefun " + Slimefun.getVersion(), x);
}
}

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.ArrayList;
import java.util.List;
@ -37,9 +37,6 @@ public abstract class AutoAnvil extends AContainer {
public ItemStack getProgressBar() {
return new ItemStack(Material.IRON_PICKAXE);
}
@Override
public void registerDefaultRecipes() {}
@Override
public int getSpeed() {

View File

@ -1,4 +1,6 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.logging.Level;
import org.bukkit.Material;
import org.bukkit.Particle;
@ -22,6 +24,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
@ -42,10 +45,6 @@ public class AutoBreeder extends SlimefunItem {
constructMenu(this);
}
@Override
public void newInstance(BlockMenu menu, Block b) {
}
@Override
public boolean canOpen(Block b, Player p) {
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
@ -60,10 +59,6 @@ public class AutoBreeder extends SlimefunItem {
registerBlockHandler(name, new SlimefunBlockHandler() {
@Override
public void onPlace(Player p, Block b, SlimefunItem item) {
}
@Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
AutoBreederHologram.remove(b);
@ -83,9 +78,7 @@ public class AutoBreeder extends SlimefunItem {
protected void constructMenu(BlockMenuPreset preset) {
for (int i : border) {
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
(p, slot, item, action) -> false
);
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
}
@ -105,8 +98,8 @@ public class AutoBreeder extends SlimefunItem {
public void tick(Block b, SlimefunItem sf, Config data) {
try {
AutoBreeder.this.tick(b);
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while ticking an Auto Breeder for Slimefun " + Slimefun.getVersion(), x);
}
}

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.ArrayList;
import java.util.HashMap;
@ -19,6 +19,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.EmeraldEnchants.EmeraldEnchants;
import me.mrCookieSlime.EmeraldEnchants.ItemEnchantment;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
@ -26,7 +27,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineHelper;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
@ -46,9 +46,6 @@ public class AutoDisenchanter extends AContainer {
return new ItemStack(Material.DIAMOND_CHESTPLATE);
}
@Override
public void registerDefaultRecipes() {}
@Override
public int getEnergyConsumption() {
return 9;
@ -112,7 +109,7 @@ public class AutoDisenchanter extends AContainer {
enchantments.put(e.getKey(), e.getValue());
amount++;
}
if (Slimefun.isEmeraldEnchantsInstalled()) {
if (SlimefunPlugin.getHooks().isEmeraldEnchantsInstalled()) {
for (ItemEnchantment enchantment: EmeraldEnchants.getInstance().getRegistry().getEnchantments(item)) {
amount++;
enchantments2.add(enchantment);

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
@ -35,9 +35,6 @@ public class AutoDrier extends AContainer {
return new ItemStack(Material.FLINT_AND_STEEL);
}
@Override
public void registerDefaultRecipes() { }
@Override
protected void tick(Block b) {
if (isProcessing(b)) {

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.ArrayList;
import java.util.HashMap;
@ -19,7 +19,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.EmeraldEnchants.EmeraldEnchants;
import me.mrCookieSlime.EmeraldEnchants.ItemEnchantment;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
@ -27,7 +27,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineHelper;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
@ -47,9 +46,6 @@ public class AutoEnchanter extends AContainer {
return new ItemStack(Material.GOLDEN_CHESTPLATE);
}
@Override
public void registerDefaultRecipes() {}
@Override
public int getEnergyConsumption() {
return 9;
@ -105,7 +101,7 @@ public class AutoEnchanter extends AContainer {
Map<Enchantment, Integer> enchantments = new HashMap<>();
Set<ItemEnchantment> enchantments2 = new HashSet<>();
int amount = 0;
int special_amount = 0;
int specialAmount = 0;
EnchantmentStorageMeta meta = (EnchantmentStorageMeta) item.getItemMeta();
for (Map.Entry<Enchantment, Integer> e: meta.getStoredEnchants().entrySet()) {
@ -115,18 +111,18 @@ public class AutoEnchanter extends AContainer {
}
}
if (Slimefun.isEmeraldEnchantsInstalled()) {
if (SlimefunPlugin.getHooks().isEmeraldEnchantsInstalled()) {
for (ItemEnchantment enchantment: EmeraldEnchants.getInstance().getRegistry().getEnchantments(item)) {
if (EmeraldEnchants.getInstance().getRegistry().isApplicable(target, enchantment.getEnchantment()) && EmeraldEnchants.getInstance().getRegistry().getEnchantmentLevel(target, enchantment.getEnchantment().getName()) < enchantment.getLevel()) {
amount++;
special_amount++;
specialAmount++;
enchantments2.add(enchantment);
}
}
special_amount += EmeraldEnchants.getInstance().getRegistry().getEnchantments(target).size();
specialAmount += EmeraldEnchants.getInstance().getRegistry().getEnchantments(target).size();
}
if (amount > 0 && special_amount <= SlimefunStartup.instance.getSettings().EMERALD_ENCHANTS_LIMIT) {
if (amount > 0 && specialAmount <= SlimefunPlugin.getSettings().emeraldEnchantsLimit) {
ItemStack newItem = target.clone();
for (Map.Entry<Enchantment, Integer> e: enchantments.entrySet()) {
newItem.addUnsafeEnchantment(e.getKey(), e.getValue());

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.ArrayList;
import java.util.Collections;

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;

View File

@ -1,4 +1,9 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
@ -7,15 +12,9 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.energy.ItemEnergy;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public class ChargingBench extends AContainer {
public ChargingBench(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
@ -28,10 +27,6 @@ public class ChargingBench extends AContainer {
constructMenu(this);
}
@Override
public void newInstance(BlockMenu menu, Block b) {
}
@Override
public boolean canOpen(Block b, Player p) {
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
@ -60,9 +55,6 @@ public class ChargingBench extends AContainer {
return 10;
}
@Override
public void registerDefaultRecipes() {}
@Override
protected void tick(Block b) {
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;

View File

@ -1,7 +1,8 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.EnumMap;
import java.util.Map;
import java.util.logging.Level;
import org.bukkit.Material;
import org.bukkit.Particle;
@ -23,6 +24,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
@ -54,10 +56,6 @@ public abstract class CropGrowthAccelerator extends SlimefunItem {
constructMenu(this);
}
@Override
public void newInstance(BlockMenu menu, Block b) {
}
@Override
public boolean canOpen(Block b, Player p) {
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
@ -72,10 +70,6 @@ public abstract class CropGrowthAccelerator extends SlimefunItem {
registerBlockHandler(name, new SlimefunBlockHandler() {
@Override
public void onPlace(Player p, Block b, SlimefunItem item) {
}
@Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
BlockMenu inv = BlockStorage.getInventory(b);
@ -116,8 +110,8 @@ public abstract class CropGrowthAccelerator extends SlimefunItem {
public void tick(Block b, SlimefunItem sf, Config data) {
try {
CropGrowthAccelerator.this.tick(b);
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while ticking a Crop Growth Accelerator for Slimefun " + Slimefun.getVersion(), x);
}
}

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.ArrayList;
import java.util.List;
@ -12,7 +12,7 @@ import org.bukkit.inventory.meta.ItemMeta;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
@ -39,9 +39,6 @@ public abstract class ElectricDustWasher extends AContainer {
public ItemStack getProgressBar() {
return new ItemStack(Material.GOLDEN_SHOVEL);
}
@Override
public void registerDefaultRecipes() {}
public abstract int getSpeed();
@ -84,20 +81,21 @@ public abstract class ElectricDustWasher extends AContainer {
else {
for (int slot: getInputSlots()) {
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.SIFTED_ORE, true)) {
if (!SlimefunStartup.instance.getSettings().DUST_WASHER_LEGACY) {
boolean empty_slot = false;
if (!SlimefunPlugin.getSettings().legacyDustWasher) {
boolean emptySlot = false;
for (int output_slot: getOutputSlots()) {
if (BlockStorage.getInventory(b).getItemInSlot(output_slot) == null) {
empty_slot = true;
emptySlot = true;
break;
}
}
if (!empty_slot) return;
if (!emptySlot) return;
}
ItemStack adding = OreWasher.items[new Random().nextInt(OreWasher.items.length)];
MachineRecipe r = new MachineRecipe(4 / getSpeed(), new ItemStack[0], new ItemStack[] {adding});
if (SlimefunStartup.instance.getSettings().DUST_WASHER_LEGACY && !fits(b, r.getOutput())) return;
if (SlimefunPlugin.getSettings().legacyDustWasher && !fits(b, r.getOutput())) return;
BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
processing.put(b, r);
progress.put(b, r.getTicks());

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.Iterator;
@ -30,8 +30,9 @@ public abstract class ElectricFurnace extends AContainer {
}
//Bukkit Recipe Iterator does not seem to include _LOG's of any type for charcoal... Manually adding them all.
for(Material mat:Tag.LOGS.getValues())
for (Material mat:Tag.LOGS.getValues()) {
registerRecipe(4, new ItemStack[] {new ItemStack(mat,1)}, new ItemStack[] {new ItemStack(Material.CHARCOAL, 1)});
}
}
@Override

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.ArrayList;
import java.util.List;
@ -37,9 +37,6 @@ public abstract class ElectricGoldPan extends AContainer {
public ItemStack getProgressBar() {
return new ItemStack(Material.DIAMOND_SHOVEL);
}
@Override
public void registerDefaultRecipes() {}
public abstract int getSpeed();

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.ArrayList;
import java.util.Collections;
@ -51,10 +51,6 @@ public abstract class ElectricSmeltery extends AContainer {
constructMenu(this);
}
@Override
public void newInstance(BlockMenu menu, Block b) {
}
@Override
public boolean canOpen(Block b, Player p) {
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
@ -96,10 +92,6 @@ public abstract class ElectricSmeltery extends AContainer {
registerBlockHandler(name, new SlimefunBlockHandler() {
@Override
public void onPlace(Player p, Block b, SlimefunItem item) {
}
@Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
BlockMenu inv = BlockStorage.getInventory(b);

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
import org.bukkit.Material;
@ -18,9 +18,11 @@ public abstract class ElectrifiedCrucible extends AContainer {
public void registerDefaultRecipes() {
registerRecipe(10, new ItemStack[] {new ItemStack(Material.BUCKET), new ItemStack(Material.COBBLESTONE, 16)}, new ItemStack[]{new ItemStack(Material.LAVA_BUCKET)});
registerRecipe(8, new ItemStack[] {new ItemStack(Material.BUCKET), new ItemStack(Material.TERRACOTTA, 12)}, new ItemStack[]{new ItemStack(Material.LAVA_BUCKET)});
for (Material coloured_terracotta : MaterialHelper.TerracottaColours){
registerRecipe(8, new ItemStack[] {new ItemStack(Material.BUCKET), new ItemStack(coloured_terracotta, 12)}, new ItemStack[]{new ItemStack(Material.LAVA_BUCKET)});
}
registerRecipe(10, new ItemStack[] {new ItemStack(Material.BUCKET), new ItemStack(Material.OAK_LEAVES, 16)}, new ItemStack[]{new ItemStack(Material.WATER_BUCKET)});
registerRecipe(10, new ItemStack[] {new ItemStack(Material.BUCKET), new ItemStack(Material.BIRCH_LEAVES, 16)}, new ItemStack[]{new ItemStack(Material.WATER_BUCKET)});
registerRecipe(10, new ItemStack[] {new ItemStack(Material.BUCKET), new ItemStack(Material.SPRUCE_LEAVES, 16)}, new ItemStack[]{new ItemStack(Material.WATER_BUCKET)});

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.ArrayList;
import java.util.HashMap;
@ -30,7 +30,6 @@ import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
@ -53,10 +52,6 @@ public class FluidPump extends SlimefunItem{
constructMenu(this);
}
@Override
public void newInstance(BlockMenu menu, Block b) {
}
@Override
public boolean canOpen(Block b, Player p) {
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.ArrayList;
import java.util.Collections;
@ -45,10 +45,6 @@ public abstract class HeatedPressureChamber extends AContainer {
constructMenu(this);
}
@Override
public void newInstance(BlockMenu menu, Block b) {
}
@Override
public boolean canOpen(Block b, Player p) {
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.ArrayList;
import java.util.List;
@ -24,7 +24,6 @@ import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
@ -40,10 +39,6 @@ public abstract class OilPump extends AContainer {
constructMenu(this);
}
@Override
public void newInstance(BlockMenu menu, Block b) {
}
@Override
public boolean canOpen(Block b, Player p) {
if (!(p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true))) {
@ -80,9 +75,6 @@ public abstract class OilPump extends AContainer {
return new ItemStack(Material.DIAMOND_SHOVEL);
}
@Override
public void registerDefaultRecipes() {}
@Override
protected void tick(Block b) {
if (isProcessing(b)) {

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.ArrayList;
import java.util.List;
@ -36,9 +36,6 @@ public abstract class Refinery extends AContainer {
public ItemStack getProgressBar() {
return new ItemStack(Material.FLINT_AND_STEEL);
}
@Override
public void registerDefaultRecipes() {}
@Override
public String getMachineIdentifier() {

View File

@ -1,4 +1,6 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.Location;
@ -13,7 +15,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
@ -22,6 +24,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
@ -75,7 +78,7 @@ public class WitherAssembler extends SlimefunItem {
return false;
});
} catch(Exception x) {
x.printStackTrace();
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating a Wither Assembler for Slimefun " + Slimefun.getVersion(), x);
}
}
@ -245,7 +248,7 @@ public class WitherAssembler extends SlimefunItem {
final double offset = Double.parseDouble(BlockStorage.getLocationInfo(b.getLocation(), "offset"));
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> b.getWorld().spawnEntity(new Location(b.getWorld(), b.getX() + 0.5D, b.getY() + offset, b.getZ() + 0.5D), EntityType.WITHER));
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> b.getWorld().spawnEntity(new Location(b.getWorld(), b.getX() + 0.5D, b.getY() + offset, b.getZ() + 0.5D), EntityType.WITHER));
}
}
}

View File

@ -13,7 +13,7 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.Categories;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
@ -61,7 +61,7 @@ public class ArmorForge extends MultiBlockMachine {
for (int j = 0; j < 4; j++) {
int current = j;
Bukkit.getScheduler().runTaskLater(SlimefunStartup.instance, () -> {
Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> {
if (current < 3) {
p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ANVIL_USE, 1F, 2F);
}

View File

@ -0,0 +1,68 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks;
import java.util.Random;
import org.bukkit.Bukkit;
import org.bukkit.Effect;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.general.Player.PlayerInventory;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.Categories;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.api.Slimefun;
public class AutomatedPanningMachine extends MultiBlockMachine {
private Random random = new Random();
public AutomatedPanningMachine() {
super(
Categories.MACHINES_1,
SlimefunItems.AUTOMATED_PANNING_MACHINE,
"AUTOMATED_PANNING_MACHINE",
new ItemStack[] {null, null, null, null, new ItemStack(Material.OAK_TRAPDOOR), null, null, new ItemStack(Material.CAULDRON), null},
new ItemStack[] {
new ItemStack(Material.GRAVEL), new ItemStack(Material.FLINT),
new ItemStack(Material.GRAVEL), new ItemStack(Material.CLAY_BALL),
new ItemStack(Material.GRAVEL), SlimefunItems.SIFTED_ORE
},
Material.OAK_TRAPDOOR
);
}
@Override
public void onInteract(Player p, Block b) {
final ItemStack input = p.getInventory().getItemInMainHand();
ItemStack output = null;
if (random.nextInt(100) < (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.SIFTED_ORE")) output = SlimefunItems.SIFTED_ORE;
else if (random.nextInt(100) < (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.CLAY")) output = new ItemStack(Material.CLAY_BALL);
else if (random.nextInt(100) < (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.FLINT")) output = new ItemStack(Material.FLINT);
final ItemStack drop = output;
if (input != null && input.getType() == Material.GRAVEL) {
PlayerInventory.consumeItemInHand(p);
for (int i = 1; i < 7; i++) {
int j = i;
Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> {
b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL);
if (j == 6) {
if (drop != null) b.getWorld().dropItemNaturally(b.getLocation(), drop);
p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F);
}
}, i * 30L);
}
}
Messages.local.sendTranslation(p, "machines.wrong-item", true);
}
}

View File

@ -11,7 +11,7 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.Categories;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
@ -54,7 +54,7 @@ public class Compressor extends MultiBlockMachine {
for (int i = 0; i < 4; i++) {
int j = i;
Bukkit.getScheduler().runTaskLater(SlimefunStartup.instance, () -> {
Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> {
if (j < 3) {
p.getWorld().playSound(p.getLocation(), j == 1 ? Sound.BLOCK_PISTON_CONTRACT : Sound.BLOCK_PISTON_EXTEND, 1F, j == 0 ? 1F : 2F);
}

View File

@ -16,7 +16,7 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.Categories;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
@ -143,7 +143,7 @@ public class MagicWorkbench extends MultiBlockMachine {
}
for (int j = 0; j < 4; j++) {
int current = j;
Bukkit.getScheduler().runTaskLater(SlimefunStartup.instance, () -> {
Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> {
p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1);
p.getWorld().playEffect(b.getLocation(), Effect.ENDER_SIGNAL, 1);
if (current < 3) {

View File

@ -13,7 +13,7 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.Categories;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Setup.Messages;
@ -56,7 +56,7 @@ public class OreWasher extends MultiBlockMachine {
ItemStack adding = items[new Random().nextInt(items.length)];
Inventory outputInv = null;
if (!SlimefunStartup.instance.getSettings().ORE_WASHER_LEGACY) {
if (!SlimefunPlugin.getSettings().legacyOreWasher) {
// This is a fancy way of checking if there is empty space in the inv; by checking if an unobtainable item could fit in it.
// However, due to the way the method findValidOutputInv() functions, the dummyAdding will never actually be added to the real inventory,
// so it really doesn't matter what item the ItemStack is made by. SlimefunItems.DEBUG_FISH however, signals that it's

View File

@ -12,7 +12,7 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.Categories;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
@ -26,7 +26,7 @@ public class PressureChamber extends MultiBlockMachine {
Categories.MACHINES_1,
SlimefunItems.PRESSURE_CHAMBER,
"PRESSURE_CHAMBER",
new ItemStack[] {new ItemStack(Material.STONE_SLAB), new CustomItem(Material.DISPENSER, "Dispenser (Facing down)"), new ItemStack(Material.STONE_SLAB), new ItemStack(Material.PISTON), new ItemStack(Material.GLASS), new ItemStack(Material.PISTON), new ItemStack(Material.PISTON), new ItemStack(Material.CAULDRON), new ItemStack(Material.PISTON)},
new ItemStack[] {new ItemStack(Material.SMOOTH_STONE_SLAB), new CustomItem(Material.DISPENSER, "Dispenser (Facing down)"), new ItemStack(Material.SMOOTH_STONE_SLAB), new ItemStack(Material.PISTON), new ItemStack(Material.GLASS), new ItemStack(Material.PISTON), new ItemStack(Material.PISTON), new ItemStack(Material.CAULDRON), new ItemStack(Material.PISTON)},
new ItemStack[] {
SlimefunItems.CARBON_CHUNK, SlimefunItems.SYNTHETIC_DIAMOND,
SlimefunItems.RAW_CARBONADO, SlimefunItems.CARBONADO
@ -40,6 +40,7 @@ public class PressureChamber extends MultiBlockMachine {
Block dispBlock = b.getRelative(BlockFace.UP).getRelative(BlockFace.UP);
Dispenser disp = (Dispenser) dispBlock.getState();
final Inventory inv = disp.getInventory();
for (ItemStack current: inv.getContents()) {
for (ItemStack convert: RecipeType.getRecipeInputs(this)) {
if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) {
@ -52,7 +53,7 @@ public class PressureChamber extends MultiBlockMachine {
for (int i = 0; i < 4; i++) {
int j = i;
Bukkit.getScheduler().runTaskLater(SlimefunStartup.instance, () -> {
Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> {
p.getWorld().playSound(b.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1);
p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4);
p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4);

View File

@ -17,7 +17,7 @@ import org.bukkit.inventory.meta.Damageable;
import org.bukkit.inventory.meta.ItemMeta;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.Categories;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
@ -77,7 +77,7 @@ public class Smeltery extends MultiBlockMachine {
Hopper chamber = findHopper(dispBlock, BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST);
if (new Random().nextInt(100) < SlimefunStartup.instance.getSettings().SMELTERY_FIRE_BREAK_CHANCE) {
if (new Random().nextInt(100) < SlimefunPlugin.getSettings().smelteryFireBreakChance) {
if (chamber != null) {
if (chamber.getInventory().contains(Material.FLINT_AND_STEEL)) {
ItemStack item = chamber.getInventory().getItem(chamber.getInventory().first(Material.FLINT_AND_STEEL));

View File

@ -0,0 +1,42 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks;
import org.bukkit.Effect;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
import me.mrCookieSlime.Slimefun.Lists.Categories;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
public class TableSaw extends MultiBlockMachine {
public TableSaw() {
super(
Categories.MACHINES_1,
SlimefunItems.TABLE_SAW,
"TABLE_SAW",
new ItemStack[] {null, null, null, new ItemStack(Material.SMOOTH_STONE_SLAB), new ItemStack(Material.STONECUTTER), new ItemStack(Material.SMOOTH_STONE_SLAB), null, new ItemStack(Material.IRON_BLOCK), null},
new ItemStack[0],
Material.STONECUTTER
);
}
@Override
public void onInteract(Player p, Block b) {
ItemStack log = p.getInventory().getItemInMainHand();
ItemStack item = new ItemStack(MaterialHelper.getWoodFromLog(log.getType()), 8);
if(item == null || item.getType() == Material.AIR) return;
b.getWorld().dropItemNaturally(b.getLocation(), item);
b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, log.getType());
log.setAmount(log.getAmount() -1);
if(log.getAmount() <= 0) {
p.getInventory().setItemInMainHand(new ItemStack(Material.AIR));
}
}
}

View File

@ -10,6 +10,7 @@ import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.logging.Level;
import org.bukkit.plugin.Plugin;
@ -17,6 +18,8 @@ import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import me.mrCookieSlime.Slimefun.api.Slimefun;
public class CSCoreLibLoader {
private Plugin plugin;
@ -35,19 +38,19 @@ public class CSCoreLibLoader {
public boolean load() {
if (plugin.getServer().getPluginManager().isPluginEnabled("CS-CoreLib")) return true;
else {
System.err.println(" ");
System.err.println("#################### - INFO - ####################");
System.err.println(" ");
System.err.println(plugin.getName() + " could not be loaded.");
System.err.println("It appears that you have not installed CS-CoreLib");
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("#################### - INFO - ####################");
System.err.println(" ");
Slimefun.getLogger().log(Level.INFO, " ");
Slimefun.getLogger().log(Level.INFO, "#################### - INFO - ####################");
Slimefun.getLogger().log(Level.INFO, " ");
Slimefun.getLogger().log(Level.INFO, plugin.getName() + " could not be loaded.");
Slimefun.getLogger().log(Level.INFO, "It appears that you have not installed CS-CoreLib");
Slimefun.getLogger().log(Level.INFO, "Your Server will now try to download and install");
Slimefun.getLogger().log(Level.INFO, "CS-CoreLib for you.");
Slimefun.getLogger().log(Level.INFO, "You will be asked to restart your Server when it's finished.");
Slimefun.getLogger().log(Level.INFO, "If this somehow fails, please download and install CS-CoreLib manually:");
Slimefun.getLogger().log(Level.INFO, "https://dev.bukkit.org/projects/cs-corelib");
Slimefun.getLogger().log(Level.INFO, " ");
Slimefun.getLogger().log(Level.INFO, "#################### - INFO - ####################");
Slimefun.getLogger().log(Level.INFO, " ");
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> {
if (connect()) install();
}, 10L);
@ -71,15 +74,15 @@ public class CSCoreLibLoader {
return true;
} catch (IOException e) {
System.err.println(" ");
System.err.println("#################### - WARNING - ####################");
System.err.println(" ");
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("#################### - WARNING - ####################");
System.err.println(" ");
Slimefun.getLogger().log(Level.WARNING, " ");
Slimefun.getLogger().log(Level.WARNING, "#################### - WARNING - ####################");
Slimefun.getLogger().log(Level.WARNING, " ");
Slimefun.getLogger().log(Level.WARNING, "Could not connect to BukkitDev.");
Slimefun.getLogger().log(Level.WARNING, "Please download & install CS-CoreLib manually:");
Slimefun.getLogger().log(Level.WARNING, "https://dev.bukkit.org/projects/cs-corelib");
Slimefun.getLogger().log(Level.WARNING, " ");
Slimefun.getLogger().log(Level.WARNING, "#################### - WARNING - ####################");
Slimefun.getLogger().log(Level.WARNING, " ");
return false;
}
}
@ -121,29 +124,29 @@ public class CSCoreLibLoader {
output.write(data, 0, read);
}
} catch (Exception ex) {
System.err.println(" ");
System.err.println("#################### - WARNING - ####################");
System.err.println(" ");
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("#################### - WARNING - ####################");
System.err.println(" ");
Slimefun.getLogger().log(Level.WARNING, " ");
Slimefun.getLogger().log(Level.WARNING, "#################### - WARNING - ####################");
Slimefun.getLogger().log(Level.WARNING, " ");
Slimefun.getLogger().log(Level.WARNING, "Failed to download CS-CoreLib");
Slimefun.getLogger().log(Level.WARNING, "Please download & install CS-CoreLib manually:");
Slimefun.getLogger().log(Level.WARNING, "https://dev.bukkit.org/projects/cs-corelib");
Slimefun.getLogger().log(Level.WARNING, " ");
Slimefun.getLogger().log(Level.WARNING, "#################### - WARNING - ####################");
Slimefun.getLogger().log(Level.WARNING, " ");
} finally {
try {
if (input != null) input.close();
if (output != null) output.close();
System.err.println(" ");
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("#################### - INFO - ####################");
System.err.println(" ");
} catch (IOException e) {
e.printStackTrace();
Slimefun.getLogger().log(Level.INFO, " ");
Slimefun.getLogger().log(Level.INFO, "#################### - INFO - ####################");
Slimefun.getLogger().log(Level.INFO, " ");
Slimefun.getLogger().log(Level.INFO, "Please restart your Server to finish the Installation");
Slimefun.getLogger().log(Level.INFO, "of " + plugin.getName() + " and CS-CoreLib");
Slimefun.getLogger().log(Level.INFO, " ");
Slimefun.getLogger().log(Level.INFO, "#################### - INFO - ####################");
Slimefun.getLogger().log(Level.INFO, " ");
} catch (IOException x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while closing the Download Stream for CS-CoreLib", x);
}
}
}

View File

@ -1,40 +1,41 @@
package me.mrCookieSlime.Slimefun.Setup;
import java.io.File;
import java.util.logging.Level;
import me.mrCookieSlime.Slimefun.api.Slimefun;
public final class Files {
private Files() {}
public final File researches = new File("plugins/Slimefun/Researches.yml");
public final File config = new File("plugins/Slimefun/config.yml");
public final File items = new File("plugins/Slimefun/Items.yml");
public final File database = new File("data-storage/Slimefun/Players");
public final File whitelist = new File("plugins/Slimefun/whitelist.yml");
public static File RESEARCHES = new File("plugins/Slimefun/Researches.yml");
public static File CONFIG = new File("plugins/Slimefun/config.yml");
public static File ITEMS = new File("plugins/Slimefun/Items.yml");
public static File DATABASE = new File("data-storage/Slimefun/Players");
public static File WHITELIST = new File("plugins/Slimefun/whitelist.yml");
public static void cleanup() {
if (!RESEARCHES.exists()) {
System.err.println("###############################################");
System.err.println("############## = - INFO - = #################");
System.err.println("###############################################");
System.err.println(" ");
System.err.println("Slimefun Warning:");
System.err.println(" ");
System.err.println("Slimefun has detected that your Files are either");
System.err.println("outdated or do not exist. We generated new Files");
System.err.println("instead otherwise Slimefun would not work. If you");
System.err.println("have used Slimefun before, your Settings are now");
System.err.println("gone. But therefore Slimefun works!");
public void cleanup() {
if (!researches.exists()) {
Slimefun.getLogger().log(Level.WARNING, "###############################################");
Slimefun.getLogger().log(Level.WARNING, "############## = - INFO - = #################");
Slimefun.getLogger().log(Level.WARNING, "###############################################");
Slimefun.getLogger().log(Level.WARNING, " ");
Slimefun.getLogger().log(Level.WARNING, "Slimefun Warning:");
Slimefun.getLogger().log(Level.WARNING, " ");
Slimefun.getLogger().log(Level.WARNING, "Slimefun has detected that your Files are either");
Slimefun.getLogger().log(Level.WARNING, "outdated or do not exist. We generated new Files");
Slimefun.getLogger().log(Level.WARNING, "instead otherwise Slimefun would not work. If you");
Slimefun.getLogger().log(Level.WARNING, "have used Slimefun before, your Settings are now");
Slimefun.getLogger().log(Level.WARNING, "gone. But therefore Slimefun works!");
delete(new File("plugins/Slimefun"));
delete(new File("data-storage/Slimefun"));
}
if (!DATABASE.exists()) {
DATABASE.mkdirs();
if (!database.exists()) {
database.mkdirs();
}
}
public static boolean delete(File folder) {
public boolean delete(File folder) {
File[] files = folder.listFiles();
if (files != null) {
for (File current: files) {

View File

@ -10,6 +10,7 @@ public final class Messages {
public static void setup() {
local.setPrefix("&aSlimefun &7> ");
local.setDefault("commands.help", "Displays this Help Screen");
local.setDefault("commands.cheat", "Allows you to cheat Items");
local.setDefault("commands.give", "Give somebody some Slimefun Items");

View File

@ -3,6 +3,7 @@ package me.mrCookieSlime.Slimefun.Setup;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.stream.Stream;
import org.bukkit.Bukkit;
@ -16,16 +17,16 @@ import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.general.Chat.Colors;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItemSerializer;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItemSerializer.ItemFlag;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Misc.PostSlimefunLoadingHandler;
import me.mrCookieSlime.Slimefun.Objects.Research;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Alloy;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingAlloy;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutomatedCraftingChamber;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.AutomatedCraftingChamber;
import me.mrCookieSlime.Slimefun.Setup.PostSlimefunLoadingHandler;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.SlimefunRecipes;
import me.mrCookieSlime.Slimefun.utils.Settings;
@ -34,8 +35,6 @@ public final class MiscSetup {
private MiscSetup() {}
public static List<PostSlimefunLoadingHandler> post_handlers = new ArrayList<>();
public static void setupMisc() {
if (SlimefunItem.getByID("COMMON_TALISMAN") != null && (Boolean) Slimefun.getItemValue("COMMON_TALISMAN", "recipe-requires-nether-stars")) {
SlimefunItem.getByID("COMMON_TALISMAN").setRecipe(new ItemStack[] {SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2, null, new ItemStack(Material.NETHER_STAR), null, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2});
@ -55,11 +54,11 @@ public final class MiscSetup {
while (iterator.hasNext()) {
SlimefunItem item = iterator.next();
if (item == null) {
System.err.println("[Slimefun] Removed bugged Item ('NULL?')");
Slimefun.getLogger().log(Level.WARNING, "Removed bugged Item ('NULL?')");
iterator.remove();
}
else if (item.getItem() == null) {
System.err.println("[Slimefun] Removed bugged Item ('" + item.getID() + "')");
Slimefun.getLogger().log(Level.WARNING, "Removed bugged Item ('" + item.getID() + "')");
iterator.remove();
}
}
@ -127,7 +126,7 @@ public final class MiscSetup {
}
List<ItemStack[]> grinder_recipes = new ArrayList<>();
List<ItemStack[]> grinderRecipes = new ArrayList<>();
SlimefunItem grinder = SlimefunItem.getByID("GRIND_STONE");
if (grinder != null) {
@ -136,7 +135,7 @@ public final class MiscSetup {
if (input == null) input = recipe;
else {
if (input[0] != null && recipe[0] != null) {
grinder_recipes.add(new ItemStack[] {input[0], recipe[0]});
grinderRecipes.add(new ItemStack[] {input[0], recipe[0]});
}
input = null;
}
@ -150,7 +149,7 @@ public final class MiscSetup {
if (input == null) input = recipe;
else {
if (input[0] != null && recipe[0] != null) {
grinder_recipes.add(new ItemStack[] {input[0], recipe[0]});
grinderRecipes.add(new ItemStack[] {input[0], recipe[0]});
}
input = null;
}
@ -158,9 +157,9 @@ public final class MiscSetup {
}
// Favour 8 Cobblestone -> 1 Sand Recipe over 1 Cobblestone -> 1 Gravel Recipe
Stream<ItemStack[]> stream = grinder_recipes.stream();
Stream<ItemStack[]> stream = grinderRecipes.stream();
if (!settings.ORE_GRINDER_LEGACY) {
if (!settings.legacyOreGrinder) {
stream = stream.sorted((a, b) -> Integer.compare(b[0].getAmount(), a[0].getAmount()));
}
@ -205,22 +204,22 @@ public final class MiscSetup {
CommandSender sender = Bukkit.getConsoleSender();
ChatColor color = Colors.getRandom();
for (PostSlimefunLoadingHandler handler: post_handlers) {
for (PostSlimefunLoadingHandler handler: SlimefunPlugin.getUtilities().postHandlers) {
handler.run(pre, init, post);
}
sender.sendMessage(color + "###################### - Slimefun - ######################");
sender.sendMessage(color + "Successfully loaded " + SlimefunItem.list().size() + " Items (" + Research.list().size() + " Researches)");
sender.sendMessage(color + "( " + SlimefunStartup.instance.getUtilities().vanillaItems + " Items from Slimefun, " + (SlimefunItem.list().size() - SlimefunStartup.instance.getUtilities().vanillaItems) + " Items from Addons )");
sender.sendMessage(color + "( " + SlimefunPlugin.getUtilities().vanillaItems + " Items from Slimefun, " + (SlimefunItem.list().size() - SlimefunPlugin.getUtilities().vanillaItems) + " Items from Addons )");
sender.sendMessage(color + "##########################################################");
SlimefunStartup.getItemCfg().save();
SlimefunStartup.getResearchCfg().save();
SlimefunStartup.getWhitelist().save();
SlimefunPlugin.getItemCfg().save();
SlimefunPlugin.getResearchCfg().save();
SlimefunPlugin.getWhitelist().save();
}
public static void setupItemSettings() {
for (World world: Bukkit.getWorlds()) {
SlimefunStartup.getWhitelist().setDefaultValue(world.getName() + ".enabled-items.SLIMEFUN_GUIDE", true);
SlimefunPlugin.getWhitelist().setDefaultValue(world.getName() + ".enabled-items.SLIMEFUN_GUIDE", true);
}
Slimefun.setItemVariable("ORE_CRUSHER", "double-ores", true);

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.Slimefun.Misc;
package me.mrCookieSlime.Slimefun.Setup;
import java.util.List;

View File

@ -1,15 +1,11 @@
package me.mrCookieSlime.Slimefun.Setup;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
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;
@ -21,10 +17,6 @@ public final class SlimefunManager {
private SlimefunManager() {}
public static SlimefunStartup plugin;
public static String PREFIX;
public static Map<EntityType, List<ItemStack>> drops = new EnumMap<>(EntityType.class);
public static void registerArmorSet(ItemStack baseComponent, ItemStack[] items, String idSyntax, PotionEffect[][] effects, boolean special, boolean slimefun) {
String[] components = new String[] {"_HELMET", "_CHESTPLATE", "_LEGGINGS", "_BOOTS"};
Category cat = special ? Categories.MAGIC_ARMOR: Categories.ARMOR;
@ -74,36 +66,36 @@ public final class SlimefunManager {
// Material.STONE,
// Material.COAL, Material.SKULL_ITEM, Material.RAW_FISH, Material.COOKED_FISH);
public static boolean isItemSimiliar(ItemStack item, ItemStack SFitem, boolean lore) {
if (item == null) return SFitem == null;
if (SFitem == null) return false;
public static boolean isItemSimiliar(ItemStack item, ItemStack sfitem, boolean lore) {
if (item == null) return sfitem == null;
if (sfitem == null) return false;
if (item.getType() == SFitem.getType() && item.getAmount() >= SFitem.getAmount()) {
if (item.hasItemMeta() && SFitem.hasItemMeta()) {
if (item.getItemMeta().hasDisplayName() && SFitem.getItemMeta().hasDisplayName()) {
if (item.getItemMeta().getDisplayName().equals(SFitem.getItemMeta().getDisplayName())) {
if (item.getType() == sfitem.getType() && item.getAmount() >= sfitem.getAmount()) {
if (item.hasItemMeta() && sfitem.hasItemMeta()) {
if (item.getItemMeta().hasDisplayName() && sfitem.getItemMeta().hasDisplayName()) {
if (item.getItemMeta().getDisplayName().equals(sfitem.getItemMeta().getDisplayName())) {
if (lore) {
if (item.getItemMeta().hasLore() && SFitem.getItemMeta().hasLore()) {
return equalsLore(item.getItemMeta().getLore(), SFitem.getItemMeta().getLore());
if (item.getItemMeta().hasLore() && sfitem.getItemMeta().hasLore()) {
return equalsLore(item.getItemMeta().getLore(), sfitem.getItemMeta().getLore());
}
else return !item.getItemMeta().hasLore() && !SFitem.getItemMeta().hasLore();
else return !item.getItemMeta().hasLore() && !sfitem.getItemMeta().hasLore();
}
else return true;
}
else return false;
}
else if (!item.getItemMeta().hasDisplayName() && !SFitem.getItemMeta().hasDisplayName()) {
else if (!item.getItemMeta().hasDisplayName() && !sfitem.getItemMeta().hasDisplayName()) {
if (lore) {
if (item.getItemMeta().hasLore() && SFitem.getItemMeta().hasLore()) {
return equalsLore(item.getItemMeta().getLore(), SFitem.getItemMeta().getLore());
if (item.getItemMeta().hasLore() && sfitem.getItemMeta().hasLore()) {
return equalsLore(item.getItemMeta().getLore(), sfitem.getItemMeta().getLore());
}
else return !item.getItemMeta().hasLore() && !SFitem.getItemMeta().hasLore();
else return !item.getItemMeta().hasLore() && !sfitem.getItemMeta().hasLore();
}
else return true;
}
else return false;
}
else return !item.hasItemMeta() && !SFitem.hasItemMeta();
else return !item.hasItemMeta() && !sfitem.hasItemMeta();
}
else return false;
}
@ -119,8 +111,8 @@ public final class SlimefunManager {
}
@Deprecated
public static boolean isItemSimiliar(ItemStack item, ItemStack SFitem, boolean lore, DataType data) {
return isItemSimiliar(item, SFitem, lore);
public static boolean isItemSimiliar(ItemStack item, ItemStack sfitem, boolean lore, DataType data) {
return isItemSimiliar(item, sfitem, lore);
}
private static boolean equalsLore(List<String> lore, List<String> lore2) {

View File

@ -2,11 +2,12 @@ package me.mrCookieSlime.Slimefun.Setup;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.util.UUID;
import java.util.logging.Level;
import java.util.stream.Stream;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@ -21,7 +22,6 @@ import org.bukkit.block.BlockFace;
import org.bukkit.block.Chest;
import org.bukkit.block.Container;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.block.Dispenser;
import org.bukkit.block.data.Ageable;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.ArmorStand;
@ -36,7 +36,6 @@ import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockDispenseEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
@ -66,14 +65,13 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Player.PlayerInventory;
import me.mrCookieSlime.CSCoreLibPlugin.general.Recipe.RecipeCalculator;
import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.GPS.Elevator;
import me.mrCookieSlime.Slimefun.GPS.GPSNetwork;
import me.mrCookieSlime.Slimefun.GPS.NetworkStatus;
import me.mrCookieSlime.Slimefun.Lists.Categories;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Misc.PostSlimefunLoadingHandler;
import me.mrCookieSlime.Slimefun.Objects.MultiBlock;
import me.mrCookieSlime.Slimefun.Objects.Research;
import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
@ -106,43 +104,45 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AReactor;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.Teleporter;
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.AutoDrier;
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.cargo.AdvancedCargoOutputNode;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo.CargoInputNode;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo.CargoOutputNode;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.BlockPlacer;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Composter;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CropGrowthAccelerator;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Crucible;
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.EnergyRegulator;
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.HologramProjector;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.InfusedHopper;
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.SlimefunItem.machines.electric.AnimalGrowthAccelerator;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.AutoAnvil;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.AutoBreeder;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.AutoDisenchanter;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.AutoDrier;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.AutoEnchanter;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.AutomatedCraftingChamber;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.CarbonPress;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ChargingBench;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.CropGrowthAccelerator;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElectricDustWasher;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElectricFurnace;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElectricGoldPan;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElectricIngotFactory;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElectricSmeltery;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.ElectrifiedCrucible;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.EnergyRegulator;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.FluidPump;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.FoodComposter;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.FoodFabricator;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.Freezer;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.HeatedPressureChamber;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.NetherDrill;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.OilPump;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.Refinery;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.WitherAssembler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.ArmorForge;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.AutomatedPanningMachine;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.Compressor;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.EnhancedCraftingTable;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.GrindStone;
@ -152,7 +152,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.OreCrusher;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.OreWasher;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.PressureChamber;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.Smeltery;
import me.mrCookieSlime.Slimefun.Objects.handlers.AutonomousMachineHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.TableSaw;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockPlaceHandler;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
@ -681,7 +681,7 @@ public final class SlimefunSetup {
new ItemStack[] {null, SlimefunItems.HOOK, SlimefunItems.HOOK, null, SlimefunItems.CHAIN, SlimefunItems.HOOK, SlimefunItems.CHAIN, null, null})
.register(true, new ItemInteractionHandler() {
private Utilities variables = SlimefunStartup.instance.getUtilities();
private Utilities variables = SlimefunPlugin.getUtilities();
@Override
public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) {
@ -975,17 +975,17 @@ public final class SlimefunSetup {
new Talisman(SlimefunItems.TALISMAN_ANVIL, "ANVIL_TALISMAN",
new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.ANVIL), SlimefunItems.TALISMAN, new ItemStack(Material.ANVIL), SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3},
true, false, "anvil", new PotionEffect[0])
true, false, "anvil")
.register(true);
new Talisman(SlimefunItems.TALISMAN_MINER, "MINER_TALISMAN",
new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.TALISMAN, SlimefunItems.SIFTED_ORE, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3},
false, false, "miner", 20, new PotionEffect[0])
false, false, "miner", 20)
.register(true);
new Talisman(SlimefunItems.TALISMAN_HUNTER, "HUNTER_TALISMAN",
new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.TALISMAN, SlimefunItems.MONSTER_JERKY, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3},
false, false, "hunter", 20, new PotionEffect[0])
false, false, "hunter", 20)
.register(true);
new Talisman(SlimefunItems.TALISMAN_LAVA, "LAVA_TALISMAN",
@ -1000,7 +1000,7 @@ public final class SlimefunSetup {
new Talisman(SlimefunItems.TALISMAN_ANGEL, "ANGEL_TALISMAN",
new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.FEATHER), SlimefunItems.TALISMAN, new ItemStack(Material.FEATHER), SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3},
false, true, "angel", 75, new PotionEffect[0])
false, true, "angel", 75)
.register(true);
new Talisman(SlimefunItems.TALISMAN_FIRE, "FIRE_TALISMAN",
@ -1010,7 +1010,7 @@ public final class SlimefunSetup {
new Talisman(SlimefunItems.TALISMAN_MAGICIAN, "MAGICIAN_TALISMAN",
new ItemStack[] {SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3, new ItemStack(Material.ENCHANTING_TABLE), SlimefunItems.TALISMAN, new ItemStack(Material.ENCHANTING_TABLE), SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3},
false, false, "magician", 80, new PotionEffect[0])
false, false, "magician", 80)
.register(true);
new Talisman(SlimefunItems.TALISMAN_TRAVELLER, "TRAVELLER_TALISMAN",
@ -1040,12 +1040,12 @@ public final class SlimefunSetup {
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}
, false, true, "whirlwind", 60, new PotionEffect[0])
, false, true, "whirlwind", 60)
.register(true);
new Talisman(SlimefunItems.TALISMAN_WIZARD, "WIZARD_TALISMAN",
new ItemStack[] {SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.TALISMAN_MAGICIAN, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3},
false, false, "wizard", 60, new PotionEffect[0])
false, false, "wizard", 60)
.register(true);
new ExcludedTool(Categories.TOOLS, SlimefunItems.LUMBER_AXE, "LUMBER_AXE", RecipeType.MAGIC_WORKBENCH,
@ -1294,35 +1294,7 @@ public final class SlimefunSetup {
}
});
new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.TABLE_SAW, "TABLE_SAW",
new ItemStack[] {null, null, null, new ItemStack(Material.STONE_SLAB), new ItemStack(Material.STONECUTTER), new ItemStack(Material.STONE_SLAB), null, new ItemStack(Material.IRON_BLOCK), null},
new ItemStack[] {}, Material.STONECUTTER)
.register(true, new MultiBlockInteractionHandler() {
@Override
public boolean onInteract(Player p, MultiBlock mb, Block b) {
if (mb.isMultiBlock(SlimefunItem.getByID("TABLE_SAW"))) {
if (CSCoreLib.getLib().getProtectionManager().canBuild(p.getUniqueId(), b.getRelative(BlockFace.UP), true) && Slimefun.hasUnlocked(p, SlimefunItems.TABLE_SAW, true) && p.getInventory().getItemInMainHand() != null && Tag.LOGS.getValues().contains(p.getInventory().getItemInMainHand().getType())) {
ItemStack log = p.getInventory().getItemInMainHand();
ItemStack item = new ItemStack(MaterialHelper.getWoodFromLog(log.getType()), 8);
if(item == null || item.getType() == Material.AIR) {
return false;
}
b.getWorld().dropItemNaturally(b.getLocation(), item);
b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, log.getType());
log.setAmount(log.getAmount() -1);
if(log.getAmount() <= 0) {
p.getInventory().setItemInMainHand(new ItemStack(Material.AIR));
}
}
return true;
}
else return false;
}
});
new TableSaw().register();
/*
* dNiym 7/30/2019 added the Table_Saw machine to replace the Saw_mill, as the sawmill's design does not work with
@ -1406,7 +1378,7 @@ public final class SlimefunSetup {
if (InvUtils.fits(inv, adding)) {
for (int i = 0; i < 4; i++) {
int j = i;
Bukkit.getScheduler().runTaskLater(SlimefunStartup.instance, () -> {
Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> {
if (j < 3) {
b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore);
} else {
@ -1475,7 +1447,7 @@ public final class SlimefunSetup {
if (InvUtils.fits(inv, adding)) {
for (int i = 0; i < 4; i++) {
int j = i;
Bukkit.getScheduler().runTaskLater(SlimefunStartup.instance, () -> {
Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> {
if (j < 3) {
b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore);
}
@ -1545,8 +1517,8 @@ public final class SlimefunSetup {
for (int z = -1; z <= 1; z++) {
Block b = e.getBlock().getRelative(x, y, z);
if (b.getType() != Material.AIR && !b.isLiquid() && !StringUtils.equals(b.getType().toString(), explosiveblacklist) && CSCoreLib.getLib().getProtectionManager().canBuild(e.getPlayer().getUniqueId(), b)) {
if (SlimefunStartup.instance.getHooks().isCoreProtectInstalled()) {
SlimefunStartup.instance.getHooks().getCoreProtectAPI().logRemoval(e.getPlayer().getName(), b.getLocation(), b.getType(), b.getBlockData());
if (SlimefunPlugin.getHooks().isCoreProtectInstalled()) {
SlimefunPlugin.getHooks().getCoreProtectAPI().logRemoval(e.getPlayer().getName(), b.getLocation(), b.getType(), b.getBlockData());
}
b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType());
@ -1610,8 +1582,8 @@ public final class SlimefunSetup {
}
if (correctType) {
if (CSCoreLib.getLib().getProtectionManager().canBuild(e.getPlayer().getUniqueId(), b)) {
if (SlimefunStartup.instance.getHooks().isCoreProtectInstalled()) {
SlimefunStartup.instance.getHooks().getCoreProtectAPI().logRemoval(e.getPlayer().getName(), b.getLocation(), b.getType(), b.getBlockData());
if (SlimefunPlugin.getHooks().isCoreProtectInstalled()) {
SlimefunPlugin.getHooks().getCoreProtectAPI().logRemoval(e.getPlayer().getName(), b.getLocation(), b.getType(), b.getBlockData());
}
b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType());
@ -1637,48 +1609,7 @@ public final class SlimefunSetup {
}
});
new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.AUTOMATED_PANNING_MACHINE, "AUTOMATED_PANNING_MACHINE",
new ItemStack[] {null, null, null, null, new ItemStack(Material.OAK_TRAPDOOR), null, null, new ItemStack(Material.CAULDRON), null},
new ItemStack[] {new ItemStack(Material.GRAVEL), new ItemStack(Material.FLINT), new ItemStack(Material.GRAVEL), new ItemStack(Material.CLAY_BALL), new ItemStack(Material.GRAVEL), SlimefunItems.SIFTED_ORE}, Material.OAK_TRAPDOOR)
.register(true, new MultiBlockInteractionHandler() {
private Random random = new Random();
@Override
public boolean onInteract(final Player p, MultiBlock mb, final Block b) {
if (mb.isMultiBlock(SlimefunItem.getByID("AUTOMATED_PANNING_MACHINE"))) {
if (CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) {
final ItemStack input = p.getInventory().getItemInMainHand();
ItemStack output = null;
if (random.nextInt(100) < (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.SIFTED_ORE")) output = SlimefunItems.SIFTED_ORE;
else if (random.nextInt(100) < (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.CLAY")) output = new ItemStack(Material.CLAY_BALL);
else if (random.nextInt(100) < (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.FLINT")) output = new ItemStack(Material.FLINT);
final ItemStack drop = output;
if (input != null && input.getType() == Material.GRAVEL) {
PlayerInventory.consumeItemInHand(p);
for (int i = 1; i < 7; i++) {
int j = i;
Bukkit.getScheduler().runTaskLater(SlimefunStartup.instance, () -> {
b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL);
if (j == 6) {
if (drop != null) b.getWorld().dropItemNaturally(b.getLocation(), drop);
p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F);
}
}, i*30L);
}
return true;
}
Messages.local.sendTranslation(p, "machines.wrong-item", true);
return true;
}
return true;
}
else return false;
}
});
new AutomatedPanningMachine().register();
new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.BOOTS_OF_THE_STOMPER, "BOOTS_OF_THE_STOMPER", RecipeType.ARMOR_FORGE,
new ItemStack[] {null, null, null, new ItemStack(Material.YELLOW_WOOL), null, new ItemStack(Material.YELLOW_WOOL), new ItemStack(Material.PISTON), null, new ItemStack(Material.PISTON)})
@ -1697,8 +1628,8 @@ public final class SlimefunSetup {
for (int y = -4; y <= 4; y++) {
for (int z = -4; z <= 4; z++) {
if (p.getLocation().getBlock().getRelative(x, y, z).getType().toString().endsWith("_ORE")) {
if (closest == null) closest = p.getLocation().getBlock().getRelative(x, y, z);
else if (p.getLocation().distance(closest.getLocation()) < p.getLocation().distance(p.getLocation().getBlock().getRelative(x, y, z).getLocation())) closest = p.getLocation().getBlock().getRelative(x, y, z);
if (closest == null || p.getLocation().distance(closest.getLocation()) < p.getLocation().distance(p.getLocation().getBlock().getRelative(x, y, z).getLocation()))
closest = p.getLocation().getBlock().getRelative(x, y, z);
}
}
}
@ -1859,7 +1790,7 @@ public final class SlimefunSetup {
@Override
public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) {
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.SEISMIC_AXE, true)) {
List<Block> blocks = p.getLineOfSight((HashSet<Material>) null, 10);
List<Block> blocks = p.getLineOfSight(null, 10);
for (int i = 0; i < blocks.size(); i++) {
Block b = blocks.get(i);
Location ground = b.getLocation();
@ -1876,7 +1807,7 @@ public final class SlimefunSetup {
FallingBlock block = ground.getWorld().spawnFallingBlock(ground.getBlock().getRelative(BlockFace.UP).getLocation(), ground.getBlock().getBlockData());
block.setDropItem(false);
block.setVelocity(new Vector(0, 0.4 + i * 0.01, 0));
SlimefunStartup.instance.getUtilities().blocks.add(block.getUniqueId());
SlimefunPlugin.getUtilities().blocks.add(block.getUniqueId());
}
for (Entity n: ground.getChunk().getEntities()) {
if (n instanceof LivingEntity && n.getLocation().distance(ground) <= 2.0D && !n.getUniqueId().equals(p.getUniqueId())) {
@ -2089,53 +2020,11 @@ public final class SlimefunSetup {
new SlimefunItem(Categories.TECH_MISC, SlimefunItems.COPPER_WIRE, "COPPER_WIRE", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, null, null, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, null, null, null}, new CustomItem(SlimefunItems.COPPER_WIRE, 8))
.register(true);
@SuppressWarnings("unchecked")
final String[] blockPlacerBlacklist = Slimefun.getItemValue("BLOCK_PLACER", "unplaceable-blocks") != null ? ((List<String>) Slimefun.getItemValue("BLOCK_PLACER", "unplaceable-blocks")).toArray(new String[((List<String>) Slimefun.getItemValue("BLOCK_PLACER", "unplaceable-blocks")).size()]) : new String[] {"STRUCTURE_BLOCK"};
new SlimefunItem(Categories.MACHINES_1, SlimefunItems.BLOCK_PLACER, "BLOCK_PLACER", RecipeType.ENHANCED_CRAFTING_TABLE,
new BlockPlacer(Categories.MACHINES_1, SlimefunItems.BLOCK_PLACER, "BLOCK_PLACER", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.GOLD_4K, new ItemStack(Material.PISTON), SlimefunItems.GOLD_4K, new ItemStack(Material.IRON_INGOT), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.IRON_INGOT), SlimefunItems.GOLD_4K, new ItemStack(Material.PISTON), SlimefunItems.GOLD_4K},
new String[] {"unplaceable-blocks"}, new Object[] {Arrays.asList("STRUCTURE_BLOCK")})
.register(true, new AutonomousMachineHandler() {
@Override
public boolean onBlockDispense(final BlockDispenseEvent e, Block dispenser, final Dispenser d, Block block, Block chest, SlimefunItem machine) {
if (machine.getID().equalsIgnoreCase("BLOCK_PLACER")) {
e.setCancelled(true);
if ((block.getType() == null || block.getType() == Material.AIR) && e.getItem().getType().isBlock()) {
for(String blockType : blockPlacerBlacklist) {
if (e.getItem().getType().toString().equals(blockType)) {
return false;
}
}
SlimefunItem sfItem = SlimefunItem.getByItem(e.getItem());
if (sfItem != null) {
if (!SlimefunItem.blockhandler.containsKey(sfItem.getID())) {
block.setType(e.getItem().getType());
BlockStorage.store(block, sfItem.getID());
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, e.getItem().getType());
if (d.getInventory().containsAtLeast(e.getItem(), 2)) d.getInventory().removeItem(new CustomItem(e.getItem(), 1));
else {
Bukkit.getScheduler().runTaskLater(SlimefunStartup.instance, () -> d.getInventory().removeItem(e.getItem()), 2L);
}
}
}
else {
block.setType(e.getItem().getType());
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, e.getItem().getType());
if (d.getInventory().containsAtLeast(e.getItem(), 2)) d.getInventory().removeItem(new CustomItem(e.getItem(), 1));
else {
Bukkit.getScheduler().runTaskLater(SlimefunStartup.instance, () -> d.getInventory().removeItem(e.getItem()), 2L);
}
}
}
return true;
}
else return false;
}
});
new String[] {"unplaceable-blocks"}, Stream.of(Material.STRUCTURE_BLOCK, Material.COMMAND_BLOCK).map(Material::toString).toArray(Object[]::new))
.register(true);
new SlimefunItem(Categories.MAGIC, SlimefunItems.SCROLL_OF_DIMENSIONAL_TELEPOSITION, "SCROLL_OF_DIMENSIONAL_TELEPOSITION", RecipeType.MAGIC_WORKBENCH,
new ItemStack[] {null, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGICAL_BOOK_COVER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, null})
@ -2164,7 +2053,7 @@ public final class SlimefunSetup {
@Override
public boolean onHit(EntityDamageByEntityEvent e, LivingEntity n) {
if (SlimefunManager.isItemSimiliar(SlimefunStartup.instance.getUtilities().arrows.get(e.getDamager().getUniqueId()), SlimefunItems.EXPLOSIVE_BOW, true)) {
if (SlimefunManager.isItemSimiliar(SlimefunPlugin.getUtilities().arrows.get(e.getDamager().getUniqueId()), SlimefunItems.EXPLOSIVE_BOW, true)) {
Vector vector = n.getVelocity();
vector.setY(0.6);
n.setVelocity(vector);
@ -2182,7 +2071,7 @@ public final class SlimefunSetup {
@Override
public boolean onHit(EntityDamageByEntityEvent e, LivingEntity n) {
if (SlimefunManager.isItemSimiliar(SlimefunStartup.instance.getUtilities().arrows.get(e.getDamager().getUniqueId()), SlimefunItems.ICY_BOW, true)) {
if (SlimefunManager.isItemSimiliar(SlimefunPlugin.getUtilities().arrows.get(e.getDamager().getUniqueId()), SlimefunItems.ICY_BOW, true)) {
n.getWorld().playEffect(n.getLocation(), Effect.STEP_SOUND, Material.ICE);
n.getWorld().playEffect(n.getEyeLocation(), Effect.STEP_SOUND, Material.ICE);
n.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 20 * 2, 10));
@ -2374,15 +2263,11 @@ public final class SlimefunSetup {
SlimefunItem.registerBlockHandler("ANCIENT_PEDESTAL", new SlimefunBlockHandler() {
@Override
public void onPlace(Player p, Block b, SlimefunItem item) {
}
@Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
Item stack = AncientAltarListener.findItem(b);
if (stack != null) {
stack.removeMetadata("item_placed", SlimefunStartup.instance);
stack.removeMetadata("item_placed", SlimefunPlugin.instance);
b.getWorld().dropItem(b.getLocation(), AncientAltarListener.fixItemStack(stack.getItemStack(), stack.getCustomName()));
stack.remove();
}
@ -2777,11 +2662,7 @@ public final class SlimefunSetup {
new AContainer(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_ORE_GRINDER, "ELECTRIC_ORE_GRINDER", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) {
@Override
public void registerDefaultRecipes() {
}
@Override
public ItemStack getProgressBar() {
return new ItemStack(Material.STONE_PICKAXE);
@ -2812,10 +2693,6 @@ public final class SlimefunSetup {
new AContainer(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_ORE_GRINDER_2, "ELECTRIC_ORE_GRINDER_2", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_ORE_GRINDER, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GILDED_IRON}) {
@Override
public void registerDefaultRecipes() {
}
@Override
public ItemStack getProgressBar() {
return new ItemStack(Material.DIAMOND_PICKAXE);
@ -2906,8 +2783,6 @@ public final class SlimefunSetup {
registerRecipe(3, new ItemStack[]{SlimefunItems.SILVER_INGOT}, new ItemStack[]{SlimefunItems.SILVER_DUST});
registerRecipe(3, new ItemStack[]{SlimefunItems.TIN_INGOT}, new ItemStack[]{SlimefunItems.TIN_DUST});
registerRecipe(3, new ItemStack[]{SlimefunItems.ZINC_INGOT}, new ItemStack[]{SlimefunItems.ZINC_DUST});
}
@Override
@ -3255,11 +3130,8 @@ public final class SlimefunSetup {
SlimefunItem item = BlockStorage.check(e.getClickedBlock());
if (item == null || !item.getID().equals("GPS_CONTROL_PANEL")) return false;
e.setCancelled(true);
try {
Slimefun.getGPSNetwork().openTransmitterControlPanel(p);
} catch (Exception e1) {
e1.printStackTrace();
}
Slimefun.getGPSNetwork().openTransmitterControlPanel(p);
return true;
}
});
@ -3691,11 +3563,8 @@ public final class SlimefunSetup {
SlimefunItem item = BlockStorage.check(e.getClickedBlock());
if (item == null || !item.getID().equals("GPS_GEO_SCANNER")) return false;
e.setCancelled(true);
try {
Slimefun.getGPSNetwork().scanChunk(p, e.getClickedBlock().getChunk());
} catch (Exception e1) {
e1.printStackTrace();
}
Slimefun.getGPSNetwork().scanChunk(p, e.getClickedBlock().getChunk());
return true;
}
});
@ -4199,16 +4068,12 @@ public final class SlimefunSetup {
return 250;
}
@Override
public void extraTick(Location l) {
}
@Override
public ItemStack getProgressBar() {
try {
return CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTNhZDhlZTg0OWVkZjA0ZWQ5YTI2Y2EzMzQxZjYwMzNiZDc2ZGNjNDIzMWVkMWVhNjNiNzU2NTc1MWIyN2FjIn19fQ==");
} catch (Exception e) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating the Progressbar of a Reactor for Slimefun " + Slimefun.getVersion());
return new ItemStack(Material.BLAZE_POWDER);
}
}
@ -4217,6 +4082,12 @@ public final class SlimefunSetup {
public ItemStack getCoolant() {
return SlimefunItems.REACTOR_COOLANT_CELL;
}
@Override
public void extraTick(Location l) {
// This machine does not need to perform anything while ticking
// The Nether Star Reactor uses this method to generate the Wither Effect
}
}
.registerChargeableBlock(true, 16384);
@ -4240,7 +4111,7 @@ public final class SlimefunSetup {
@Override
public void extraTick(final Location l) {
Bukkit.getScheduler().runTaskLater(SlimefunStartup.instance, () -> {
Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> {
for (Entity entity : ReactorHologram.getArmorStand(l, true).getNearbyEntities(5, 5, 5)) {
if (entity instanceof LivingEntity) {
((LivingEntity) entity).addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 60, 1));
@ -4302,10 +4173,6 @@ public final class SlimefunSetup {
SlimefunItem.registerBlockHandler("CARGO_MANAGER", new SlimefunBlockHandler() {
@Override
public void onPlace(Player p, Block b, SlimefunItem item) {
}
@Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
CargoHologram.remove(b);
@ -4446,10 +4313,6 @@ public final class SlimefunSetup {
new ElectricSmeltery(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_SMELTERY, "ELECTRIC_SMELTERY", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {new ItemStack(Material.NETHER_BRICKS), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.NETHER_BRICKS), SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_INGOT_FACTORY, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) {
@Override
public void registerDefaultRecipes() {
}
@Override
public int getEnergyConsumption() {
return 10;
@ -4464,11 +4327,7 @@ public final class SlimefunSetup {
new ElectricSmeltery(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_SMELTERY_2, "ELECTRIC_SMELTERY_2", RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_SMELTERY, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) {
@Override
public void registerDefaultRecipes() {
}
@Override
public int getEnergyConsumption() {
return 20;
@ -4488,7 +4347,7 @@ public final class SlimefunSetup {
}
public static void registerPostHandler(PostSlimefunLoadingHandler handler) {
MiscSetup.post_handlers.add(handler);
SlimefunPlugin.getUtilities().postHandlers.add(handler);
}
}

View File

@ -2,11 +2,11 @@ package me.mrCookieSlime.Slimefun;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.logging.Level;
import java.util.stream.Collectors;
import org.bukkit.Bukkit;
@ -33,7 +33,6 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler;
import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Misc.BookDesign;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.LockedCategory;
import me.mrCookieSlime.Slimefun.Objects.Research;
@ -49,6 +48,7 @@ import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.GuideHandler;
import me.mrCookieSlime.Slimefun.api.PlayerProfile;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.SlimefunGuideLayout;
import me.mrCookieSlime.Slimefun.hooks.github.Contributor;
import me.mrCookieSlime.Slimefun.hooks.github.IntegerFormat;
@ -56,26 +56,14 @@ public final class SlimefunGuide {
private SlimefunGuide() {}
public static int month = 0;
public static int issues = 0;
public static int forks = 0;
/**
* Represents the number of stars on the Slimefun4 GitHub repository.
* @since 4.1.13
*/
public static int stars = 0;
public static int code_bytes = 0;
public static Date last_update = new Date();
private static final int category_size = 36;
@Deprecated
public static ItemStack getItem() {
return getItem(BookDesign.CHEST);
return getItem(SlimefunGuideLayout.CHEST);
}
public static ItemStack getItem(BookDesign design) {
public static ItemStack getItem(SlimefunGuideLayout design) {
switch (design) {
case BOOK:
return new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&aSlimefun Guide &7(Book GUI)", "", "&eRight Click &8\u21E8 &7Browse Items", "&eShift + Right Click &8\u21E8 &7Open Settings / Credits");
@ -90,7 +78,7 @@ public final class SlimefunGuide {
@Deprecated
public static ItemStack getItem(boolean book) {
return getItem(book ? BookDesign.BOOK: BookDesign.CHEST);
return getItem(book ? SlimefunGuideLayout.BOOK: SlimefunGuideLayout.CHEST);
}
@Deprecated
@ -116,11 +104,11 @@ public final class SlimefunGuide {
}
if (SlimefunManager.isItemSimiliar(guide, getItem(BookDesign.CHEST), true)) {
if (SlimefunManager.isItemSimiliar(guide, getItem(SlimefunGuideLayout.CHEST), true)) {
if (p.hasPermission("slimefun.cheat.items")) {
menu.addItem(19, new CustomItem(new ItemStack(Material.CHEST), "&7Guide Layout: &eChest GUI", "", "&aChest GUI", "&7Book GUI", "&7Cheat Sheet", "", "&e Click &8\u21E8 &7Change Layout"));
menu.addMenuClickHandler(19, (pl, slot, item, action) -> {
pl.getInventory().setItemInMainHand(getItem(BookDesign.BOOK));
pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.BOOK));
openSettings(pl, pl.getInventory().getItemInMainHand());
return false;
});
@ -128,17 +116,17 @@ public final class SlimefunGuide {
else {
menu.addItem(19, new CustomItem(new ItemStack(Material.CHEST), "&7Guide Layout: &eChest GUI", "", "&aChest GUI", "&7Book GUI", "", "&e Click &8\u21E8 &7Change Layout"));
menu.addMenuClickHandler(19, (pl, slot, item, action) -> {
pl.getInventory().setItemInMainHand(getItem(BookDesign.BOOK));
pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.BOOK));
openSettings(pl, pl.getInventory().getItemInMainHand());
return false;
});
}
}
else if (SlimefunManager.isItemSimiliar(guide, getItem(BookDesign.BOOK), true)) {
else if (SlimefunManager.isItemSimiliar(guide, getItem(SlimefunGuideLayout.BOOK), true)) {
if (p.hasPermission("slimefun.cheat.items")) {
menu.addItem(19, new CustomItem(new ItemStack(Material.CHEST), "&7Guide Layout: &eBook GUI", "", "&7Chest GUI", "&aBook GUI", "&7Cheat Sheet", "", "&e Click &8\u21E8 &7Change Layout"));
menu.addMenuClickHandler(19, (pl, slot, item, action) -> {
pl.getInventory().setItemInMainHand(getItem(BookDesign.CHEAT_SHEET));
pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.CHEAT_SHEET));
openSettings(pl, pl.getInventory().getItemInMainHand());
return false;
});
@ -146,29 +134,29 @@ public final class SlimefunGuide {
else {
menu.addItem(19, new CustomItem(new ItemStack(Material.CHEST), "&7Guide Layout: &eBook GUI", "", "&7Chest GUI", "&aBook GUI", "", "&e Click &8\u21E8 &7Change Layout"));
menu.addMenuClickHandler(19, (pl, slot, item, action) -> {
pl.getInventory().setItemInMainHand(getItem(BookDesign.CHEST));
pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.CHEST));
openSettings(pl, pl.getInventory().getItemInMainHand());
return false;
});
}
}
else if (SlimefunManager.isItemSimiliar(guide, getItem(BookDesign.CHEAT_SHEET), true)) {
else if (SlimefunManager.isItemSimiliar(guide, getItem(SlimefunGuideLayout.CHEAT_SHEET), true)) {
menu.addItem(19, new CustomItem(new ItemStack(Material.CHEST), "&7Guide Layout: &eCheat Sheet", "", "&7Chest GUI", "&7Book GUI", "&aCheat Sheet", "", "&e Click &8\u21E8 &7Change Layout"));
menu.addMenuClickHandler(19, (pl, slot, item, action) -> {
pl.getInventory().setItemInMainHand(getItem(BookDesign.CHEST));
pl.getInventory().setItemInMainHand(getItem(SlimefunGuideLayout.CHEST));
openSettings(pl, pl.getInventory().getItemInMainHand());
return false;
});
}
menu.addItem(1, new CustomItem(new ItemStack(Material.WRITABLE_BOOK), "&aCredits", "", "&7Version: &a" + SlimefunStartup.instance.getDescription().getVersion(), "&7Contributors: &e" + SlimefunStartup.instance.getUtilities().contributors.size(), "", "&7\u21E8 Click to see the people behind this Plugin"));
menu.addItem(1, new CustomItem(new ItemStack(Material.WRITABLE_BOOK), "&aCredits", "", "&7Version: &a" + SlimefunPlugin.instance.getDescription().getVersion(), "&7Contributors: &e" + SlimefunPlugin.getUtilities().contributors.size(), "", "&7\u21E8 Click to see the people behind this Plugin"));
menu.addMenuClickHandler(1, (pl, slot, item, action) -> {
openCredits(pl, guide);
return false;
});
try {
menu.addItem(4, new CustomItem(new ItemStack(Material.COMPARATOR), "&eSource Code", "", "&7Bytes of Code: &6" + IntegerFormat.formatBigNumber(code_bytes), "&7Last Update: &a" + IntegerFormat.timeDelta(last_update) + " ago", "&7Forks: &e" + forks, "&7Stars: &e" + stars, "", "&7&oSlimefun 4 is a community project,", "&7&othe source code is available on GitHub", "&7&oand if you want to keep this Plugin alive,", "&7&othen please consider contributing to it", "", "&7\u21E8 Click to go to GitHub"));
menu.addItem(4, new CustomItem(new ItemStack(Material.COMPARATOR), "&eSource Code", "", "&7Bytes of Code: &6" + IntegerFormat.formatBigNumber(SlimefunPlugin.getUtilities().codeBytes), "&7Last Update: &a" + IntegerFormat.timeDelta(SlimefunPlugin.getUtilities().lastUpdate) + " ago", "&7Forks: &e" + SlimefunPlugin.getUtilities().forks, "&7Stars: &e" + SlimefunPlugin.getUtilities().stars, "", "&7&oSlimefun 4 is a community project,", "&7&othe source code is available on GitHub", "&7&oand if you want to keep this Plugin alive,", "&7&othen please consider contributing to it", "", "&7\u21E8 Click to go to GitHub"));
menu.addMenuClickHandler(4, (pl, slot, item, action) -> {
pl.closeInventory();
pl.sendMessage("");
@ -176,11 +164,11 @@ public final class SlimefunGuide {
pl.sendMessage("");
return false;
});
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating the Info-Panel for Slimefun " + Slimefun.getVersion(), x);
}
menu.addItem(7, new CustomItem(new ItemStack(Material.REDSTONE), "&4Bug Tracker", "", "&7Unsolved Issues: &a" + issues, "", "&7\u21E8 Click to go to the Slimefun Bug Tracker"));
menu.addItem(7, new CustomItem(new ItemStack(Material.REDSTONE), "&4Bug Tracker", "", "&7Unsolved Issues: &a" + SlimefunPlugin.getUtilities().issues, "", "&7\u21E8 Click to go to the Slimefun Bug Tracker"));
menu.addMenuClickHandler(7, (pl, slot, item, action) -> {
pl.closeInventory();
pl.sendMessage("");
@ -219,18 +207,18 @@ public final class SlimefunGuide {
int index = 9;
double total = 0;
for (Contributor contributor : SlimefunStartup.instance.getUtilities().contributors) {
for (Contributor contributor : SlimefunPlugin.getUtilities().contributors) {
total += contributor.getCommits();
}
for (final Contributor contributor: SlimefunStartup.instance.getUtilities().contributors) {
for (final Contributor contributor: SlimefunPlugin.getUtilities().contributors) {
ItemStack skull = new ItemStack(Material.PLAYER_HEAD);
try {
String texture = contributor.getTexture();
if (texture != null) skull = CustomSkull.getItem(texture);
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while fetching a Contributor Head for Slimefun " + Slimefun.getVersion(), x);
}
SkullMeta meta = (SkullMeta) skull.getItemMeta();
@ -269,8 +257,8 @@ public final class SlimefunGuide {
}
public static void openGuide(Player p, boolean book) {
if (!SlimefunStartup.getWhitelist().getBoolean(p.getWorld().getName() + ".enabled")) return;
if (!SlimefunStartup.getWhitelist().getBoolean(p.getWorld().getName() + ".enabled-items.SLIMEFUN_GUIDE")) return;
if (!SlimefunPlugin.getWhitelist().getBoolean(p.getWorld().getName() + ".enabled")) return;
if (!SlimefunPlugin.getWhitelist().getBoolean(p.getWorld().getName() + ".enabled-items.SLIMEFUN_GUIDE")) return;
if (!getHistory().containsKey(p.getUniqueId())) openMainMenu(p, true, book, 1);
else {
Object last = getLastEntry(p, false);
@ -352,7 +340,7 @@ public final class SlimefunGuide {
actions.add(new PlayerRunnable(1) {
@Override
public void run(final Player p) {
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> openCategory(p, category, survival, 1, book), 1L);
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> openCategory(p, category, survival, 1, book), 1L);
}
});
}
@ -363,7 +351,7 @@ public final class SlimefunGuide {
actions.add(new PlayerRunnable(1) {
@Override
public void run(final Player p) {
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> openCategory(p, category, survival, 1, book), 1L);
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> openCategory(p, category, survival, 1, book), 1L);
}
});
}
@ -416,8 +404,8 @@ public final class SlimefunGuide {
pl -> pl.playSound(pl.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 0.7F, 0.7F)
);
List<Category> categories = Slimefun.current_categories;
List<GuideHandler> handlers = Slimefun.guide_handlers.values().stream().flatMap(List::stream).collect(Collectors.toList());
List<Category> categories = SlimefunPlugin.getUtilities().currentlyEnabledCategories;
List<GuideHandler> handlers = SlimefunPlugin.getUtilities().guideHandlers.values().stream().flatMap(List::stream).collect(Collectors.toList());
int index = 9;
int pages = 1;
@ -567,19 +555,19 @@ public final class SlimefunGuide {
openCategory(p, category, true, selected_page, book);
}
else {
if (!(p.getGameMode() == GameMode.CREATIVE && SlimefunStartup.instance.getSettings().RESEARCHES_FREE_IN_CREATIVE)) {
if (!(p.getGameMode() == GameMode.CREATIVE && SlimefunPlugin.getSettings().researchesFreeInCreative)) {
p.setLevel(p.getLevel() - research.getCost());
}
if (p.getGameMode() == GameMode.CREATIVE) {
research.unlock(p, true);
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> openCategory(p, category, survival, selected_page, book), 1L);
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> openCategory(p, category, survival, selected_page, book), 1L);
}
else {
research.unlock(p, false);
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> openCategory(p, category, survival, selected_page, book), 103L);
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> openCategory(p, category, survival, selected_page, book), 103L);
}
}
} else Messages.local.sendTranslation(p, "messages.not-enough-xp", true);
@ -634,7 +622,7 @@ public final class SlimefunGuide {
page.addClickEvent(new PlayerRunnable(2) {
@Override
public void run(final Player p) {
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> openMainMenu(p, survival, true, 1), 1L);
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> openMainMenu(p, survival, true, 1), 1L);
}
});
pages.add(page);
@ -687,9 +675,9 @@ public final class SlimefunGuide {
return false;
});
int category_index = category_size * (selected_page - 1);
int categoryIndex = category_size * (selected_page - 1);
for (int i = 0; i < category_size; i++) {
int target = category_index + i;
int target = categoryIndex + i;
if (target >= category.getItems().size()) break;
final SlimefunItem sfitem = category.getItems().get(target);
if (Slimefun.isEnabled(p, sfitem, false)) {
@ -706,17 +694,17 @@ public final class SlimefunGuide {
openCategory(p, category, true, selected_page, book);
}
else {
if (!(pl.getGameMode() == GameMode.CREATIVE && SlimefunStartup.instance.getSettings().RESEARCHES_FREE_IN_CREATIVE)) {
if (!(pl.getGameMode() == GameMode.CREATIVE && SlimefunPlugin.getSettings().researchesFreeInCreative)) {
pl.setLevel(pl.getLevel() - research.getCost());
}
if (pl.getGameMode() == GameMode.CREATIVE) {
research.unlock(pl, SlimefunStartup.instance.getSettings().RESEARCHES_FREE_IN_CREATIVE);
research.unlock(pl, SlimefunPlugin.getSettings().researchesFreeInCreative);
openCategory(pl, category, survival, selected_page, book);
}
else {
research.unlock(pl, false);
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> openCategory(pl, category, survival, selected_page, book), 103L);
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> openCategory(pl, category, survival, selected_page, book), 103L);
}
}
}
@ -728,7 +716,7 @@ public final class SlimefunGuide {
index++;
}
else {
menu.addItem(index, new CustomItem(Material.BARRIER, StringUtils.formatItemName(sfitem.getItem(), false), new String[] {"", "&rYou do not have Permission", "&rto access this Item"}));
menu.addItem(index, new CustomItem(Material.BARRIER, StringUtils.formatItemName(sfitem.getItem(), false), "", "&rYou do not have Permission", "&rto access this Item"));
menu.addMenuClickHandler(index, (pl, slot, item, action) -> false);
index++;
}
@ -780,7 +768,7 @@ public final class SlimefunGuide {
final SlimefunItem sfItem = SlimefunItem.getByItem(item);
if (sfItem == null && !SlimefunStartup.instance.getSettings().GUIDE_SHOW_VANILLA_RECIPES) return;
if (sfItem == null && !SlimefunPlugin.getSettings().guideShowVanillaRecipes) return;
ItemStack[] recipe = new ItemStack[9];
ItemStack recipeType = null;
@ -884,18 +872,18 @@ public final class SlimefunGuide {
});
if (sfItem != null) {
if (Slimefun.getItemConfig().contains(sfItem.getID() + ".wiki")) {
if (sfItem.hasWiki()) {
try {
menu.addItem(8, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzY2OTJmOTljYzZkNzgyNDIzMDQxMTA1NTM1ODk0ODQyOThiMmU0YTAyMzNiNzY3NTNmODg4ZTIwN2VmNSJ9fX0="), "&rView this Item in our Wiki &7(Slimefun Wiki)", "", "&7\u21E8 Click to open"));
menu.addMenuClickHandler(8, (pl, slot, itemstack, action) -> {
pl.closeInventory();
pl.sendMessage("");
pl.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7&o" + Slimefun.getItemConfig().getString(sfItem.getID() + ".wiki")));
pl.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7&o" + sfItem.getWiki()));
pl.sendMessage("");
return false;
});
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while adding a Wiki Page for Slimefun " + Slimefun.getVersion(), x);
}
}
@ -909,8 +897,8 @@ public final class SlimefunGuide {
pl.sendMessage("");
return false;
});
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while adding a Youtube Video for Slimefun " + Slimefun.getVersion(), x);
}
}
}
@ -967,12 +955,12 @@ public final class SlimefunGuide {
}
List<ItemStack> recipes = SlimefunItem.getByItem(item) instanceof SlimefunMachine ? ((SlimefunMachine) SlimefunItem.getByItem(item)).getDisplayRecipes() : ((SlimefunGadget) SlimefunItem.getByItem(item)).getDisplayRecipes();
int recipe_size = recipes.size();
if (recipe_size > 18) recipe_size = 18;
int recipeSize = recipes.size();
if (recipeSize > 18) recipeSize = 18;
int inputs = -1;
int outputs = -1;
for (int i = 0; i < recipe_size; i++) {
for (int i = 0; i < recipeSize; i++) {
int slot = 36;
if (i % 2 == 1) {
slot = slot + 9;
@ -1031,7 +1019,7 @@ public final class SlimefunGuide {
}
private static Map<UUID, List<Object>> getHistory() {
return SlimefunStartup.instance.getUtilities().guideHistory;
return SlimefunPlugin.getUtilities().guideHistory;
}
public static void clearHistory(UUID uuid) {

View File

@ -1,6 +1,7 @@
package me.mrCookieSlime.Slimefun;
import java.io.File;
import java.util.logging.Level;
import org.bstats.bukkit.Metrics;
import org.bukkit.Bukkit;
@ -21,6 +22,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Reflection.ReflectionUtils;
import me.mrCookieSlime.Slimefun.GEO.OreGenSystem;
import me.mrCookieSlime.Slimefun.GEO.Resources.NetherIceResource;
import me.mrCookieSlime.Slimefun.GEO.Resources.OilResource;
import me.mrCookieSlime.Slimefun.GPS.GPSNetwork;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.MultiBlock;
import me.mrCookieSlime.Slimefun.Objects.Research;
@ -76,17 +78,17 @@ import me.mrCookieSlime.Slimefun.listeners.WorldListener;
import me.mrCookieSlime.Slimefun.utils.Settings;
import me.mrCookieSlime.Slimefun.utils.Utilities;
public final class SlimefunStartup extends JavaPlugin {
public final class SlimefunPlugin extends JavaPlugin {
public static SlimefunStartup instance;
public static SlimefunPlugin instance;
private static Config researches;
private static Config items;
private static Config whitelist;
private static Config config;
public static TickerTask ticker;
private TickerTask ticker;
private Config researches;
private Config items;
private Config whitelist;
private Config config;
public GPSNetwork gps = new GPSNetwork();
private Utilities utilities = new Utilities();
private Settings settings;
private SlimefunHooks hooks;
@ -120,38 +122,41 @@ public final class SlimefunStartup extends JavaPlugin {
// Looks like you are using an unsupported Minecraft Version
if (!compatibleVersion) {
System.err.println("### Slimefun failed to load!");
System.err.println("###");
System.err.println("### You are using the wrong Version of Minecraft!!!");
System.err.println("###");
System.err.println("### You are using Minecraft " + ReflectionUtils.getVersion());
System.err.println("### but Slimefun v" + getDescription().getVersion() + " requires you to be using");
System.err.println("### Minecraft " + versions.toString());
System.err.println("###");
System.err.println("### Please use an older Version of Slimefun and disable auto-updating");
System.err.println("### or consider updating your Server Software.");
getLogger().log(Level.SEVERE, "### Slimefun was not installed correctly!");
getLogger().log(Level.SEVERE, "###");
getLogger().log(Level.SEVERE, "### You are using the wrong Version of Minecraft!");
getLogger().log(Level.SEVERE, "###");
getLogger().log(Level.SEVERE, "### You are using Minecraft " + ReflectionUtils.getVersion());
getLogger().log(Level.SEVERE, "### but Slimefun v" + getDescription().getVersion() + " requires you to be using");
getLogger().log(Level.SEVERE, "### Minecraft " + versions.toString());
getLogger().log(Level.SEVERE, "###");
getLogger().log(Level.SEVERE, "### Please use an older Version of Slimefun and disable auto-updating");
getLogger().log(Level.SEVERE, "### or consider updating your Server Software.");
getServer().getPluginManager().disablePlugin(this);
return;
}
}
instance = this;
System.out.println("[Slimefun] Loading Files...");
Files.cleanup();
getLogger().log(Level.INFO, "Loading Files...");
Files files = new Files();
files.cleanup();
System.out.println("[Slimefun] Loading Config...");
getLogger().log(Level.INFO, "Loading Config...");
// Setup config.yml
PluginUtils utils = new PluginUtils(this);
utils.setupConfig();
config = utils.getConfig();
settings = new Settings(config);
// Loading all extra configs
researches = new Config(Files.RESEARCHES);
items = new Config(Files.ITEMS);
whitelist = new Config(Files.WHITELIST);
researches = new Config(files.researches);
items = new Config(files.items);
whitelist = new Config(files.whitelist);
// Setup Config and messages.yml
// Setup messages.yml
utils.setupLocalization();
config = utils.getConfig();
Messages.local = utils.getLocalization();
Messages.setup();
@ -178,28 +183,26 @@ public final class SlimefunStartup extends JavaPlugin {
for (String s : storage) createDir("data-storage/Slimefun/" + s);
for (String s : general) createDir("plugins/Slimefun/" + s);
SlimefunManager.plugin = this;
System.out.println("[Slimefun] Loading Items...");
getLogger().log(Level.INFO, "Loading Items...");
MiscSetup.setupItemSettings();
try {
SlimefunSetup.setupItems();
} catch (Exception x) {
x.printStackTrace();
getLogger().log(Level.SEVERE, "An Error occured while initializing SlimefunItems for Slimefun " + Slimefun.getVersion());
}
MiscSetup.loadDescriptions();
settings = new Settings(config);
settings.RESEARCHES_ENABLED = getResearchCfg().getBoolean("enable-researching");
settings.SMELTERY_FIRE_BREAK_CHANCE = (Integer) Slimefun.getItemValue("SMELTERY", "chance.fireBreak");
settings.researchesEnabled = getResearchCfg().getBoolean("enable-researching");
settings.smelteryFireBreakChance = (Integer) Slimefun.getItemValue("SMELTERY", "chance.fireBreak");
System.out.println("[Slimefun] Loading Researches...");
getLogger().log(Level.INFO, "Loading Researches...");
ResearchSetup.setupResearches();
MiscSetup.setupMisc();
System.out.println("[Slimefun] Loading World Generators...");
getLogger().log(Level.INFO, "Loading World Generators...");
// Generating Oil as an OreGenResource (its a cool API)
OreGenSystem.registerResource(new OilResource());
@ -240,14 +243,13 @@ public final class SlimefunStartup extends JavaPlugin {
// Initiating various Stuff and all Items with a slightly delay (0ms after the Server finished loading)
getServer().getScheduler().scheduleSyncDelayedTask(this, () -> {
Slimefun.emeraldenchants = getServer().getPluginManager().isPluginEnabled("EmeraldEnchants");
MiscSetup.loadItems(settings);
for (World world: Bukkit.getWorlds()) {
new BlockStorage(world);
}
if (SlimefunItem.getByID("ANCIENT_ALTAR") != null) new AncientAltarListener((SlimefunStartup) instance);
if (SlimefunItem.getByID("ANCIENT_ALTAR") != null) new AncientAltarListener((SlimefunPlugin) instance);
}, 0);
getCommand("slimefun").setExecutor(new SlimefunCommand(this));
@ -301,16 +303,16 @@ public final class SlimefunStartup extends JavaPlugin {
ticker = new TickerTask();
getServer().getScheduler().runTaskTimer(this, new PlayerAutoSaver(), 2000L, settings.BLOCK_AUTO_SAVE_DELAY * 60L * 20L);
getServer().getScheduler().runTaskTimer(this, new PlayerAutoSaver(), 2000L, settings.blocksAutoSaveDelay * 60L * 20L);
// Starting all ASYNC Tasks
getServer().getScheduler().runTaskTimerAsynchronously(this, new BlockAutoSaver(), 2000L, settings.BLOCK_AUTO_SAVE_DELAY * 60L * 20L);
getServer().getScheduler().runTaskTimerAsynchronously(this, new BlockAutoSaver(), 2000L, settings.blocksAutoSaveDelay * 60L * 20L);
getServer().getScheduler().runTaskTimerAsynchronously(this, ticker, 100L, config.getInt("URID.custom-ticker-delay"));
getServer().getScheduler().runTaskTimerAsynchronously(this, () -> utilities.connectors.forEach(GitHubConnector::pullFile), 80L, 60 * 60 * 20L);
// Hooray!
System.out.println("[Slimefun] Finished!");
getLogger().log(Level.INFO, "Finished!");
hooks = new SlimefunHooks(this);
OreWasher.items = new ItemStack[] {SlimefunItems.IRON_DUST, SlimefunItems.GOLD_DUST, SlimefunItems.ALUMINUM_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.ZINC_DUST, SlimefunItems.TIN_DUST, SlimefunItems.LEAD_DUST, SlimefunItems.SILVER_DUST, SlimefunItems.MAGNESIUM_DUST};
@ -342,36 +344,26 @@ public final class SlimefunStartup extends JavaPlugin {
storage.save(true);
}
else {
System.err.println("[Slimefun] Could not save Slimefun Blocks for World \"" + world.getName() + "\"");
getLogger().log(Level.SEVERE, "Could not save Slimefun Blocks for World \"" + world.getName() + "\"");
}
} catch (Exception x) {
x.printStackTrace();
getLogger().log(Level.SEVERE, "An Error occured while saving Slimefun-Blocks in World '" + world.getName() + "' for Slimefun " + Slimefun.getVersion());
}
}
for (UniversalBlockMenu menu: BlockStorage.universal_inventories.values()) {
for (UniversalBlockMenu menu: utilities.universalInventories.values()) {
menu.save();
}
SlimefunBackup.start();
// Prevent Memory Leaks
config = null;
researches = null;
items = null;
whitelist = null;
instance = null;
Messages.local = null;
Files.CONFIG = null;
Files.DATABASE = null;
Files.ITEMS = null;
Files.RESEARCHES = null;
Files.WHITELIST = null;
MultiBlock.list = null;
Research.list = null;
SlimefunItem.all = null;
SlimefunItem.items = null;
SlimefunItem.map_id = null;
SlimefunItem.mapID = null;
SlimefunItem.handlers = null;
SlimefunItem.radioactive = null;
SlimefunCommand.arguments = null;
@ -379,22 +371,18 @@ public final class SlimefunStartup extends JavaPlugin {
SlimefunCommand.tabs = null;
SlimefunItem.blockhandler = null;
BlockMenuPreset.presets = null;
BlockStorage.loaded_tickers = null;
BlockStorage.ticking_chunks = null;
BlockStorage.worlds = null;
ChargableBlock.capacitors = null;
ChargableBlock.max_charges = null;
ChargableBlock.maxCharges = null;
AContainer.processing = null;
AContainer.progress = null;
Slimefun.guide_handlers = null;
EnergyNet.machines_input = null;
EnergyNet.machines_output = null;
EnergyNet.machines_storage = null;
EnergyNet.machinesInput = null;
EnergyNet.machinesOutput = null;
EnergyNet.machinesStorage = null;
CargoNet.faces = null;
BlockStorage.universal_inventories = null;
PlayerProfile.profiles = null;
OreWasher.items = null;
instance = null;
for (Player p: Bukkit.getOnlinePlayers()) {
p.closeInventory();
}
@ -406,19 +394,19 @@ public final class SlimefunStartup extends JavaPlugin {
}
public static Config getCfg() {
return config;
return instance.config;
}
public static Config getResearchCfg() {
return researches;
return instance.researches;
}
public static Config getItemCfg() {
return items;
return instance.items;
}
public static Config getWhitelist() {
return whitelist;
return instance.whitelist;
}
@Deprecated
@ -433,16 +421,24 @@ public final class SlimefunStartup extends JavaPlugin {
return CSCoreLib.randomizer().nextInt(max) <= percentage;
}
public SlimefunHooks getHooks() {
return hooks;
public static SlimefunHooks getHooks() {
return instance.hooks;
}
public Utilities getUtilities() {
return utilities;
public static Utilities getUtilities() {
return instance.utilities;
}
public Settings getSettings() {
return settings;
public static Settings getSettings() {
return instance.settings;
}
public static TickerTask getTicker() {
return instance.ticker;
}
public static boolean isActive() {
return instance != null;
}
}

View File

@ -5,7 +5,7 @@ import java.util.List;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
public class AltarRecipe {
@ -29,7 +29,7 @@ public class AltarRecipe {
this.output = output;
SlimefunStartup.instance.getUtilities().altarRecipes.add(this);
SlimefunPlugin.getUtilities().altarRecipes.add(this);
}
public ItemStack getCatalyst() {

View File

@ -29,7 +29,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Variable;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.CSCoreLibPlugin.general.Player.PlayerInventory;
import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
@ -39,10 +39,10 @@ public class AncientAltarListener implements Listener {
private Utilities utilities;
public AncientAltarListener(SlimefunStartup plugin) {
public AncientAltarListener(SlimefunPlugin plugin) {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
utilities = plugin.getUtilities();
utilities = SlimefunPlugin.getUtilities();
}
private List<Block> altars = new ArrayList<>();
@ -73,9 +73,7 @@ public class AncientAltarListener implements Listener {
final UUID uuid = stack.getUniqueId();
removedItems.add(uuid);
SlimefunStartup.instance.getServer().getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
removedItems.remove(uuid);
}, 30L);
SlimefunPlugin.instance.getServer().getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> removedItems.remove(uuid), 30L);
stack.remove();
e.getPlayer().getInventory().addItem(fixItemStack(stack.getItemStack(), stack.getCustomName()));
@ -112,7 +110,7 @@ public class AncientAltarListener implements Listener {
List<ItemStack> consumed = new ArrayList<>();
consumed.add(catalyst);
PlayerInventory.consumeItemInHand(e.getPlayer());
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new RitualAnimation(altars, b, b.getLocation().add(0.5, 1.3, 0.5), result, pedestals, consumed), 10L);
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, new RitualAnimation(altars, b, b.getLocation().add(0.5, 1.3, 0.5), result, pedestals, consumed), 10L);
}
else {
altars.remove(e.getClickedBlock());
@ -172,7 +170,7 @@ public class AncientAltarListener implements Listener {
String nametag = StringUtils.formatItemName(stack, false);
Item entity = b.getWorld().dropItem(b.getLocation().add(0.5, 1.2, 0.5), new CustomItem(new CustomItem(stack, 1), "&5&dALTAR &3Probe - &e" + System.nanoTime()));
entity.setVelocity(new Vector(0, 0.1, 0));
entity.setMetadata("no_pickup", new FixedMetadataValue(SlimefunStartup.instance, "altar_item"));
entity.setMetadata("no_pickup", new FixedMetadataValue(SlimefunPlugin.instance, "altar_item"));
entity.setCustomNameVisible(true);
entity.setCustomName(nametag);
p.playSound(b.getLocation(), Sound.ENTITY_ITEM_PICKUP, 0.3F, 0.3F);

View File

@ -8,7 +8,7 @@ import org.bukkit.block.Block;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
@ -65,7 +65,7 @@ public final class Pedestals {
}
private static ItemStack checkRecipe(ItemStack catalyst, List<ItemStack> items) {
for (AltarRecipe recipe: SlimefunStartup.instance.getUtilities().altarRecipes) {
for (AltarRecipe recipe: SlimefunPlugin.getUtilities().altarRecipes) {
if (SlimefunManager.isItemSimiliar(catalyst, recipe.getCatalyst(), true)) {
for (int i = 0; i < 8; i++) {
if (SlimefunManager.isItemSimiliar(items.get(i), recipe.getInput().get(0), true)) {

View File

@ -4,8 +4,10 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.utils.Utilities;
import org.bukkit.Effect;
@ -33,7 +35,7 @@ public class RitualAnimation implements Runnable {
private boolean running;
private int stage;
private Utilities utilities = SlimefunStartup.instance.getUtilities();
private Utilities utilities = SlimefunPlugin.getUtilities();
public RitualAnimation(List<Block> altars, Block altar, Location drop, ItemStack output, List<Block> pedestals, List<ItemStack> items) {
this.l = drop;
@ -72,7 +74,7 @@ public class RitualAnimation implements Runnable {
}
this.stage += 1;
SlimefunStartup.instance.getServer().getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, this, 8);
SlimefunPlugin.instance.getServer().getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, this, 8);
}
private boolean checkLockedItems() {
@ -94,8 +96,8 @@ public class RitualAnimation implements Runnable {
l.getWorld().spawnParticle(Particle.ENCHANTMENT_TABLE, l2,16, 0.3F, 0.2F, 0.3F);
l.getWorld().spawnParticle(Particle.CRIT_MAGIC,l2,8, 0.3F, 0.2F, 0.3F);
}
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while playing Ritual Animation for Slimefun " + Slimefun.getVersion(), x);
}
}
@ -113,14 +115,14 @@ public class RitualAnimation implements Runnable {
try {
l.getWorld().spawnParticle(Particle.ENCHANTMENT_TABLE,pedestal.getLocation().add(0.5, 1.5, 0.5),16, 0.3F, 0.2F, 0.3F);
l.getWorld().spawnParticle(Particle.CRIT_MAGIC,pedestal.getLocation().add(0.5, 1.5, 0.5), 8,0.3F, 0.2F, 0.3F);
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while playing Pedestal Animation for Slimefun " + Slimefun.getVersion(), x);
}
itemLock.remove(item);
item.remove();
pedestal.removeMetadata("item_placed", SlimefunStartup.instance);
pedestal.removeMetadata("item_placed", SlimefunPlugin.instance);
}
}

View File

@ -11,6 +11,7 @@ import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import java.util.function.Predicate;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@ -48,7 +49,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.MenuHelper;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
import me.mrCookieSlime.ExoticGarden.ExoticGarden;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
@ -61,6 +62,7 @@ import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.androids.comparators.ScriptReputationSorter;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
@ -143,8 +145,8 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
public void init() {
try {
constructMenu(this);
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while constructing an Android Inventory for Slimefun " + Slimefun.getVersion(), x);
}
}
@ -177,17 +179,13 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
menu.replaceExistingItem(16, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDc4ZjJiN2U1ZTc1NjM5ZWE3ZmI3OTZjMzVkMzY0YzRkZjI4YjQyNDNlNjZiNzYyNzdhYWRjZDYyNjEzMzcifX19"), "&bMemory Core", "", "&8\u21E8 &7Click to open the Script Editor"));
menu.addMenuClickHandler(16, (p, slot, item, action) -> {
try {
BlockStorage.addBlockInfo(b, "paused", "true");
Messages.local.sendTranslation(p, "robot.stopped", true);
openScriptEditor(p, b);
} catch (Exception e) {
e.printStackTrace();
}
BlockStorage.addBlockInfo(b, "paused", "true");
Messages.local.sendTranslation(p, "robot.stopped", true);
openScriptEditor(p, b);
return false;
});
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating a new Instance of an Android Inventory for Slimefun " + Slimefun.getVersion(), x);
}
}
@ -240,11 +238,8 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
}
protected void tick(Block b) {
try {
if (!(b.getState() instanceof Skull)) {
return;
}
} catch (NullPointerException x) {
if (!(b.getState() instanceof Skull)) {
// The Android was destroyed or moved.
return;
}
@ -279,28 +274,13 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
switch (part) {
case GO_DOWN:
try {
Block block = b.getRelative(BlockFace.DOWN);
move(b, face, block);
} catch (Exception e) {
e.printStackTrace();
}
move(b, face, b.getRelative(BlockFace.DOWN));
break;
case GO_FORWARD:
try {
Block block = b.getRelative(face);
move(b, face, block);
} catch (Exception e) {
e.printStackTrace();
}
move(b, face, b.getRelative(face));
break;
case GO_UP:
try {
Block block = b.getRelative(BlockFace.UP);
move(b, face, block);
} catch (Exception e) {
e.printStackTrace();
}
move(b, face, b.getRelative(BlockFace.UP));
break;
case REPEAT:
BlockStorage.addBlockInfo(b, "index", String.valueOf(0));
@ -457,8 +437,8 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) {
case NORTH:
if (n.getLocation().getZ() < b.getZ()) {
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunPlugin.instance);
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunPlugin.instance, new AndroidObject(this, b)));
((LivingEntity) n).damage(damage);
return;
@ -466,8 +446,8 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
break;
case EAST:
if (n.getLocation().getX() > b.getX()) {
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunPlugin.instance);
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunPlugin.instance, new AndroidObject(this, b)));
((LivingEntity) n).damage(damage);
return;
@ -475,8 +455,8 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
break;
case SOUTH:
if (n.getLocation().getZ() > b.getZ()) {
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunPlugin.instance);
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunPlugin.instance, new AndroidObject(this, b)));
((LivingEntity) n).damage(damage);
return;
@ -484,8 +464,8 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
break;
case WEST:
if (n.getLocation().getX() < b.getX()) {
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunPlugin.instance);
n.setMetadata("android_killer", new FixedMetadataValue(SlimefunPlugin.instance, new AndroidObject(this, b)));
((LivingEntity) n).damage(damage);
return;
@ -498,15 +478,19 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
}
}
private void move(Block b, BlockFace face, Block block) throws Exception {
if (block.getY() < 0 || block.getY() > block.getWorld().getMaxHeight())
return;
if (block.getType() == Material.AIR || block.getType() == Material.CAVE_AIR) {
private void move(Block b, BlockFace face, Block block) {
if (block.getY() > 0 && block.getY() < block.getWorld().getMaxHeight() && (block.getType() == Material.AIR || block.getType() == Material.CAVE_AIR)) {
block.setType(Material.PLAYER_HEAD);
Rotatable blockData = (Rotatable) block.getBlockData();
blockData.setRotation(face.getOppositeFace());
block.setBlockData(blockData);
CustomSkull.setSkull(block, CustomSkull.getTexture(getItem()));
try {
CustomSkull.setSkull(block, CustomSkull.getTexture(getItem()));
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while moving an Android for Slimefun " + Slimefun.getVersion(), x);
}
b.setType(Material.AIR);
BlockStorage.moveBlockInfo(b.getLocation(), block.getLocation());
}
@ -543,45 +527,49 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
private void movedig(Block b, BlockFace face, Block block) {
Collection<ItemStack> drops = block.getDrops();
if (!blockblacklist.contains(block.getType()) && !drops.isEmpty() && CSCoreLib.getLib().getProtectionManager().canBuild(UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")), block)) {
try {
SlimefunItem item = BlockStorage.check(block);
if (item != null) {
if (fits(b, item.getItem()) && SlimefunItem.blockhandler.containsKey(item.getID()) && SlimefunItem.blockhandler.get(item.getID()).onBreak(null, block, item, UnregisterReason.ANDROID_DIG)) {
pushItems(b, BlockStorage.retrieve(block));
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType());
block.setType(Material.PLAYER_HEAD);
Rotatable blockData = (Rotatable) block.getBlockData();
blockData.setRotation(face.getOppositeFace());
block.setBlockData(blockData);
SlimefunItem item = BlockStorage.check(block);
if (item != null) {
if (fits(b, item.getItem()) && SlimefunItem.blockhandler.containsKey(item.getID()) && SlimefunItem.blockhandler.get(item.getID()).onBreak(null, block, item, UnregisterReason.ANDROID_DIG)) {
pushItems(b, BlockStorage.retrieve(block));
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType());
block.setType(Material.PLAYER_HEAD);
Rotatable blockData = (Rotatable) block.getBlockData();
blockData.setRotation(face.getOppositeFace());
block.setBlockData(blockData);
try {
CustomSkull.setSkull(block, CustomSkull.getTexture(getItem()));
b.setType(Material.AIR);
BlockStorage.moveBlockInfo(b.getLocation(), block.getLocation());
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while moving an Android for Slimefun " + Slimefun.getVersion(), x);
}
b.setType(Material.AIR);
BlockStorage.moveBlockInfo(b.getLocation(), block.getLocation());
}
else {
ItemStack[] items = drops.toArray(new ItemStack[drops.size()]);
if (fits(b, items)) {
pushItems(b, items);
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType());
block.setType(Material.PLAYER_HEAD);
Rotatable blockData = (Rotatable) block.getBlockData();
blockData.setRotation(face.getOppositeFace());
block.setBlockData(blockData);
}
else {
ItemStack[] items = drops.toArray(new ItemStack[drops.size()]);
if (fits(b, items)) {
pushItems(b, items);
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType());
block.setType(Material.PLAYER_HEAD);
Rotatable blockData = (Rotatable) block.getBlockData();
blockData.setRotation(face.getOppositeFace());
block.setBlockData(blockData);
try {
CustomSkull.setSkull(block, CustomSkull.getTexture(getItem()));
b.setType(Material.AIR);
BlockStorage.moveBlockInfo(b.getLocation(), block.getLocation());
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while moving an Android for Slimefun " + Slimefun.getVersion(), x);
}
b.setType(Material.AIR);
BlockStorage.moveBlockInfo(b.getLocation(), block.getLocation());
}
} catch (Exception x) {
x.printStackTrace();
}
}
else {
try {
move(b, face, block);
} catch (Exception e) {
e.printStackTrace();
}
move(b, face, block);
}
}
@ -592,7 +580,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
private void farm(Block b, Block block) {
switch (block.getType()) {
case WHEAT: {
case WHEAT:
if (isFullGrown(block)) {
ItemStack drop = new ItemStack(Material.WHEAT, CSCoreLib.randomizer().nextInt(3) + 1);
if (fits(b, drop)) {
@ -604,8 +592,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
}
}
break;
}
case POTATOES: {
case POTATOES:
if (isFullGrown(block)) {
ItemStack drop = new ItemStack(Material.POTATO, CSCoreLib.randomizer().nextInt(3) + 1);
if (fits(b, drop)) {
@ -617,8 +604,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
}
}
break;
}
case CARROTS: {
case CARROTS:
if (isFullGrown(block)) {
ItemStack drop = new ItemStack(Material.CARROT, CSCoreLib.randomizer().nextInt(3) + 1);
if (fits(b, drop)) {
@ -630,8 +616,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
}
}
break;
}
case BEETROOTS: {
case BEETROOTS:
if (isFullGrown(block)) {
ItemStack drop = new ItemStack(Material.BEETROOT, CSCoreLib.randomizer().nextInt(3) + 1);
if (fits(b, drop)) {
@ -643,8 +628,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
}
}
break;
}
case COCOA: {
case COCOA:
if (isFullGrown(block)) {
ItemStack drop = new ItemStack(Material.COCOA_BEANS, CSCoreLib.randomizer().nextInt(3) + 1);
if (fits(b, drop)) {
@ -656,8 +640,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
}
}
break;
}
case NETHER_WART: {
case NETHER_WART:
if (isFullGrown(block)) {
ItemStack drop = new ItemStack(Material.NETHER_WART, CSCoreLib.randomizer().nextInt(3) + 1);
if (fits(b, drop)) {
@ -669,7 +652,6 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
}
}
break;
}
default:
break;
}
@ -677,7 +659,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
private void exoticFarm(Block b, Block block) {
farm(b, block);
if (SlimefunStartup.instance.getHooks().isExoticGardenInstalled()) {
if (SlimefunPlugin.getHooks().isExoticGardenInstalled()) {
ItemStack drop = ExoticGarden.harvestPlant(block);
if (drop != null && fits(b, drop)) {
pushItems(b, drop);
@ -730,57 +712,42 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
}
}
public void openScriptEditor(Player p, final Block b) throws Exception {
public void openScriptEditor(Player p, final Block b) {
ChestMenu menu = new ChestMenu("&eScript Editor");
menu.addItem(1, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDliZjZkYjRhZWRhOWQ4ODIyYjlmNzM2NTM4ZThjMThiOWE0ODQ0Zjg0ZWI0NTUwNGFkZmJmZWU4N2ViIn19fQ=="), "&2> Edit Script", "", "&aEdits your current Script"),
(pl, slot, item, action) -> {
try {
openScript(pl, b, BlockStorage.getLocationInfo(b.getLocation(), "script"));
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
);
menu.addItem(3, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTcxZDg5NzljMTg3OGEwNTk4N2E3ZmFmMjFiNTZkMWI3NDRmOWQwNjhjNzRjZmZjZGUxZWExZWRhZDU4NTIifX19"), "&4> Create new Script", "", "&cDeletes your current Script", "&cand creates a blank one"),
(pl, slot, item, action) -> {
try {
openScript(pl, b, "START-TURN_LEFT-REPEAT");
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
);
menu.addItem(5, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzAxNTg2ZTM5ZjZmZmE2M2I0ZmIzMDFiNjVjYTdkYThhOTJmNzM1M2FhYWI4OWQzODg2NTc5MTI1ZGZiYWY5In19fQ=="), "&6> Download a Script", "", "&eDownload a Script from the Server", "&eYou can edit or simply use it"),
(pl, slot, item, action) -> {
try {
openScriptDownloader(pl, b, 1);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
);
menu.addItem(8, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTE4NWM5N2RiYjgzNTNkZTY1MjY5OGQyNGI2NDMyN2I3OTNhM2YzMmE5OGJlNjdiNzE5ZmJlZGFiMzVlIn19fQ=="), "&6> Back", "", "&7Return to the Android's interface"),
(pl, slot, item, action) -> {
try {
BlockStorage.getInventory(b).open(p);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
);
try {
menu.addItem(1, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDliZjZkYjRhZWRhOWQ4ODIyYjlmNzM2NTM4ZThjMThiOWE0ODQ0Zjg0ZWI0NTUwNGFkZmJmZWU4N2ViIn19fQ=="), "&2> Edit Script", "", "&aEdits your current Script"));
menu.addMenuClickHandler(1, (pl, slot, item, action) -> {
openScript(pl, b, BlockStorage.getLocationInfo(b.getLocation(), "script"));
return false;
});
menu.addItem(3, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTcxZDg5NzljMTg3OGEwNTk4N2E3ZmFmMjFiNTZkMWI3NDRmOWQwNjhjNzRjZmZjZGUxZWExZWRhZDU4NTIifX19"), "&4> Create new Script", "", "&cDeletes your current Script", "&cand creates a blank one"));
menu.addMenuClickHandler(3, (pl, slot, item, action) -> {
openScript(pl, b, "START-TURN_LEFT-REPEAT");
return false;
});
menu.addItem(5, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzAxNTg2ZTM5ZjZmZmE2M2I0ZmIzMDFiNjVjYTdkYThhOTJmNzM1M2FhYWI4OWQzODg2NTc5MTI1ZGZiYWY5In19fQ=="), "&6> Download a Script", "", "&eDownload a Script from the Server", "&eYou can edit or simply use it"));
menu.addMenuClickHandler(5, (pl, slot, item, action) -> {
openScriptDownloader(pl, b, 1);
return false;
});
menu.addItem(8, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTE4NWM5N2RiYjgzNTNkZTY1MjY5OGQyNGI2NDMyN2I3OTNhM2YzMmE5OGJlNjdiNzE5ZmJlZGFiMzVlIn19fQ=="), "&6> Back", "", "&7Return to the Android's interface"));
menu.addMenuClickHandler(8, (pl, slot, item, action) -> {
BlockStorage.getInventory(b).open(p);
return false;
});
}
catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating the Script Editor for Slimefun " + Slimefun.getVersion(), x);
}
menu.open(p);
}
public void openScript(final Player p, final Block b, final String script) throws Exception {
public void openScript(final Player p, final Block b, final String script) {
ChestMenu menu = new ChestMenu("&eScript Editor");
final String[] commands = script.split("-");
@ -796,15 +763,16 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
int additional = commands.length == 54 ? 0: 1;
if (additional == 1) {
menu.addItem(i, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTcxZDg5NzljMTg3OGEwNTk4N2E3ZmFmMjFiNTZkMWI3NDRmOWQwNjhjNzRjZmZjZGUxZWExZWRhZDU4NTIifX19"), "&7> Add new Command"));
menu.addMenuClickHandler(i, (pl, slot, item, action) -> {
try {
try {
menu.addItem(i, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTcxZDg5NzljMTg3OGEwNTk4N2E3ZmFmMjFiNTZkMWI3NDRmOWQwNjhjNzRjZmZjZGUxZWExZWRhZDU4NTIifX19"), "&7> Add new Command"));
menu.addMenuClickHandler(i, (pl, slot, item, action) -> {
openScriptComponentEditor(pl, b, script, index);
} catch (Exception e) {
e.printStackTrace();
}
return false;
});
return false;
});
}
catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating the Script Editor for Slimefun " + Slimefun.getVersion(), x);
}
}
menu.addItem(i + additional, new CustomItem(ScriptPart.REPEAT.toItemStack(), ScriptPart.REPEAT.toItemStack().getItemMeta().getDisplayName(), "", "&7\u21E8 &eLeft Click &7to return to the Android's interface"));
@ -835,11 +803,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
builder.append("REPEAT");
BlockStorage.addBlockInfo(b, "script", builder.toString());
try {
openScript(pl, b, builder.toString());
} catch (Exception e) {
e.printStackTrace();
}
openScript(pl, b, builder.toString());
}
else if (action.isRightClicked()) {
int j = 0;
@ -850,18 +814,11 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
}
builder.append("REPEAT");
BlockStorage.addBlockInfo(b, "script", builder.toString());
try {
openScript(pl, b, builder.toString());
} catch (Exception e) {
e.printStackTrace();
}
openScript(pl, b, builder.toString());
}
else {
try {
openScriptComponentEditor(pl, b, script, index);
} catch (Exception e) {
e.printStackTrace();
}
openScriptComponentEditor(pl, b, script, index);
}
return false;
});
@ -871,7 +828,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
menu.open(p);
}
private void openScriptDownloader(final Player p, final Block b, final int page) throws Exception {
private void openScriptDownloader(final Player p, final Block b, final int page) {
final ChestMenu menu = new ChestMenu("Android Scripts");
menu.addMenuOpeningHandler(pl -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HAT, 0.7F, 0.7F));
@ -883,9 +840,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
for (int i = 45; i < 54; i++) {
menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "));
menu.addMenuClickHandler(i,
(pl, slot, item, action) -> false
);
menu.addMenuClickHandler(i, (pl, slot, item, action) -> false);
}
menu.addItem(46, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), "&r\u21E6 Previous Page", "", "&7(" + page + " / " + pages + ")"));
@ -893,85 +848,75 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
int next = page - 1;
if (next < 1) next = pages;
if (next != page) {
try {
openScriptDownloader(pl, b, next);
} catch (Exception e) {
e.printStackTrace();
}
openScriptDownloader(pl, b, next);
}
return false;
});
menu.addItem(48, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTA1YTJjYWI4YjY4ZWE1N2UzYWY5OTJhMzZlNDdjOGZmOWFhODdjYzg3NzYyODE5NjZmOGMzY2YzMWEzOCJ9fX0="), "&eUpload a Script", "", "&6Click &7to upload your Android's Script", "&7to the Database"));
menu.addMenuClickHandler(48, (pl, slot, item, action) -> {
final String code = BlockStorage.getLocationInfo(b.getLocation(), "script");
int num = 1;
for (Config script: getUploadedScripts()) {
if (script.getString("author").equals(pl.getUniqueId().toString())) num++;
if (script.getString("code").equals(code)) {
Messages.local.sendTranslation(pl, "android.scripts.already-uploaded", true);
return false;
try {
menu.addItem(48, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTA1YTJjYWI4YjY4ZWE1N2UzYWY5OTJhMzZlNDdjOGZmOWFhODdjYzg3NzYyODE5NjZmOGMzY2YzMWEzOCJ9fX0="), "&eUpload a Script", "", "&6Click &7to upload your Android's Script", "&7to the Database"));
menu.addMenuClickHandler(48, (pl, slot, item, action) -> {
final String code = BlockStorage.getLocationInfo(b.getLocation(), "script");
int num = 1;
for (Config script: getUploadedScripts()) {
if (script.getString("author").equals(pl.getUniqueId().toString())) num++;
if (script.getString("code").equals(code)) {
Messages.local.sendTranslation(pl, "android.scripts.already-uploaded", true);
return false;
}
}
}
final int id = num;
pl.closeInventory();
Messages.local.sendTranslation(pl, "android.scripts.enter-name", true);
MenuHelper.awaitChatInput(pl, (player, message) -> {
Config script = new Config("plugins/Slimefun/scripts/" + getAndroidType().toString() + "/" + p.getName() + " " + id + ".sfs");
script.setValue("author", player.getUniqueId().toString());
script.setValue("author_name", player.getName());
script.setValue("name", ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', message)));
script.setValue("code", code);
script.setValue("downloads", 0);
script.setValue("android", getAndroidType().toString());
script.setValue("rating.positive", new ArrayList<String>());
script.setValue("rating.negative", new ArrayList<String>());
script.save();
try {
final int id = num;
pl.closeInventory();
Messages.local.sendTranslation(pl, "android.scripts.enter-name", true);
MenuHelper.awaitChatInput(pl, (player, message) -> {
Config script = new Config("plugins/Slimefun/scripts/" + getAndroidType().toString() + "/" + p.getName() + " " + id + ".sfs");
script.setValue("author", player.getUniqueId().toString());
script.setValue("author_name", player.getName());
script.setValue("name", ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', message)));
script.setValue("code", code);
script.setValue("downloads", 0);
script.setValue("android", getAndroidType().toString());
script.setValue("rating.positive", new ArrayList<String>());
script.setValue("rating.negative", new ArrayList<String>());
script.save();
Messages.local.sendTranslation(player, "android.uploaded", true);
openScriptDownloader(player, b, page);
} catch (Exception e) {
e.printStackTrace();
}
return false;
});
return false;
});
return false;
});
menu.addItem(50, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), "&rNext Page \u21E8", "", "&7(" + page + " / " + pages + ")"));
menu.addMenuClickHandler(50, (pl, slot, item, action) -> {
int next = page + 1;
if (next > pages) next = 1;
if (next != page) {
try {
menu.addItem(50, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), "&rNext Page \u21E8", "", "&7(" + page + " / " + pages + ")"));
menu.addMenuClickHandler(50, (pl, slot, item, action) -> {
int next = page + 1;
if (next > pages) next = 1;
if (next != page) {
openScriptDownloader(pl, b, next);
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
});
menu.addItem(53, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTE4NWM5N2RiYjgzNTNkZTY1MjY5OGQyNGI2NDMyN2I3OTNhM2YzMmE5OGJlNjdiNzE5ZmJlZGFiMzVlIn19fQ=="), "&6> Back", "", "&7Return to the Android's interface"));
menu.addMenuClickHandler(53, (pl, slot, item, action) -> {
try {
return false;
});
menu.addItem(53, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTE4NWM5N2RiYjgzNTNkZTY1MjY5OGQyNGI2NDMyN2I3OTNhM2YzMmE5OGJlNjdiNzE5ZmJlZGFiMzVlIn19fQ=="), "&6> Back", "", "&7Return to the Android's interface"));
menu.addMenuClickHandler(53, (pl, slot, item, action) -> {
openScriptEditor(pl, b);
} catch (Exception e) {
e.printStackTrace();
}
return false;
});
return false;
});
}
catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating the Script Download Menu for Slimefun " + Slimefun.getVersion(), x);
}
int category_index = 45 * (page - 1);
int categoryIndex = 45 * (page - 1);
for (int i = 0; i < 45; i++) {
int target = category_index + i;
int target = categoryIndex + i;
if (target >= scripts.size()) break;
else {
final Config script = scripts.get(target);
@ -1001,11 +946,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
script2.setValue("rating.negative", list);
script2.save();
try {
openScriptDownloader(pl, b, page);
} catch (Exception e) {
e.printStackTrace();
}
openScriptDownloader(pl, b, page);
}
else {
Messages.local.sendTranslation(pl, "android.scripts.rating.already", true);
@ -1019,11 +960,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
script2.setValue("rating.positive", list);
script2.save();
try {
openScriptDownloader(pl, b, page);
} catch (Exception e) {
e.printStackTrace();
}
openScriptDownloader(pl, b, page);
}
else {
Messages.local.sendTranslation(pl, "android.scripts.rating.already", true);
@ -1031,15 +968,11 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
}
}
else if (!action.isRightClicked()) {
try {
script2.setValue("downloads", script2.getInt("downloads") + 1);
script2.save();
script2.setValue("downloads", script2.getInt("downloads") + 1);
script2.save();
BlockStorage.addBlockInfo(b, "script", script2.getString("code"));
openScriptEditor(pl, b);
} catch (Exception e) {
e.printStackTrace();
}
BlockStorage.addBlockInfo(b, "script", script2.getString("code"));
openScriptEditor(pl, b);
}
return false;
});
@ -1074,7 +1007,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
return progress;
}
protected void openScriptComponentEditor(Player p, final Block b, final String script, final int index) throws Exception {
protected void openScriptComponentEditor(Player p, final Block b, final String script, final int index) {
ChestMenu menu = new ChestMenu("&eScript Editor");
final String[] commands = script.split("-");
@ -1082,51 +1015,49 @@ public abstract class ProgrammableAndroid extends SlimefunItem {
for (int i = 0; i < 9; i++) {
menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (pl, slot, item, action) -> false);
}
try {
menu.addItem(9, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTYxMzlmZDFjNTY1NGU1NmU5ZTRlMmM4YmU3ZWIyYmQ1YjQ5OWQ2MzM2MTY2NjNmZWVlOTliNzQzNTJhZDY0In19fQ=="), "&rDo nothing"), (pl, slot, item, action) -> {
int i = 0;
StringBuilder builder = new StringBuilder("START-");
for (String command : commands) {
if (i != index && i > 0 && i < commands.length - 1) builder.append(command + "-");
i++;
}
builder.append("REPEAT");
BlockStorage.addBlockInfo(b, "script", builder.toString());
menu.addItem(9, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTYxMzlmZDFjNTY1NGU1NmU5ZTRlMmM4YmU3ZWIyYmQ1YjQ5OWQ2MzM2MTY2NjNmZWVlOTliNzQzNTJhZDY0In19fQ=="), "&rDo nothing"), (pl, slot, item, action) -> {
int i = 0;
StringBuilder builder = new StringBuilder("START-");
for (String command : commands) {
if (i != index && i > 0 && i < commands.length - 1) builder.append(command + "-");
i++;
}
builder.append("REPEAT");
BlockStorage.addBlockInfo(b, "script", builder.toString());
try {
openScript(p, b, builder.toString());
} catch (Exception e) {
e.printStackTrace();
}
return false;
});
return false;
});
}
catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating the Script Editor for Slimefun " + Slimefun.getVersion(), x);
}
int i = 10;
for (final ScriptPart part : getAccessibleScriptParts()) {
menu.addItem(i, part.toItemStack(),
(pl, slot, item, action) -> {
int j = 0;
StringBuilder builder = new StringBuilder("START-");
for (String command : commands) {
if (j > 0) {
if (j == index) builder.append(part.toString() + "-");
else if (j < commands.length - 1) builder.append(command + "-");
}
j++;
}
builder.append("REPEAT");
BlockStorage.addBlockInfo(b, "script", builder.toString());
try {
openScript(pl, b, builder.toString());
} catch (Exception e) {
e.printStackTrace();
}
return false;
menu.addItem(i, part.toItemStack());
menu.addMenuClickHandler(i, (pl, slot, item, action) -> {
int j = 0;
StringBuilder builder = new StringBuilder("START-");
for (String command : commands) {
if (j > 0) {
if (j == index) builder.append(part.toString() + "-");
else if (j < commands.length - 1) builder.append(command + "-");
}
);
j++;
}
builder.append("REPEAT");
BlockStorage.addBlockInfo(b, "script", builder.toString());
openScript(pl, b, builder.toString());
return false;
});
i++;
}

View File

@ -1,9 +1,12 @@
package me.mrCookieSlime.Slimefun.androids;
import java.util.logging.Level;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
import me.mrCookieSlime.Slimefun.api.Slimefun;
public enum ScriptPart {
@ -63,7 +66,7 @@ public enum ScriptPart {
this.type = type;
this.item = new CustomItem(CustomSkull.getItem(texture), name);
} catch(Exception x) {
x.printStackTrace();
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while initializing Android-Script Texture for Slimefun " + Slimefun.getVersion(), x);
}
}

View File

@ -9,6 +9,8 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
@ -27,7 +29,7 @@ import com.google.gson.JsonPrimitive;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
@ -37,27 +39,18 @@ public class BlockStorage {
private static final String path_blocks = "data-storage/Slimefun/stored-blocks/";
private static final String path_chunks = "data-storage/Slimefun/stored-chunks/";
public static Map<String, BlockStorage> worlds = new HashMap<>();
public static Map<String, Set<Location>> ticking_chunks = new HashMap<>();
public static Set<String> loaded_tickers = new HashSet<>();
private World world;
private Map<Location, Config> storage = new HashMap<>();
private static Map<String, String> map_chunks = new HashMap<>();
private Map<Location, BlockMenu> inventories = new HashMap<>();
public static Map<String, UniversalBlockMenu> universal_inventories = new HashMap<>();
private Map<String, Config> cache_blocks = new HashMap<>();
public static BlockStorage getStorage(World world) {
return worlds.get(world.getName());
return SlimefunPlugin.getUtilities().worlds.get(world.getName());
}
public static BlockStorage getForcedStorage(World world) {
return isWorldRegistered(world.getName()) ? worlds.get(world.getName()): new BlockStorage(world);
return isWorldRegistered(world.getName()) ? SlimefunPlugin.getUtilities().worlds.get(world.getName()): new BlockStorage(world);
}
private static String serializeLocation(Location l) {
@ -74,18 +67,23 @@ public class BlockStorage {
private static Location deserializeLocation(String l) {
try {
World w = Bukkit.getWorld(l.split(";")[0]);
if (w != null) return new Location(w, Integer.parseInt(l.split(";")[1]), Integer.parseInt(l.split(";")[2]), Integer.parseInt(l.split(";")[3]));
String[] components = l.split(";");
if (components.length != 4) return null;
World w = Bukkit.getWorld(components[0]);
if (w != null) return new Location(w, Integer.parseInt(components[1]), Integer.parseInt(components[2]), Integer.parseInt(components[3]));
} catch (NumberFormatException x) {
Slimefun.getLogger().log(Level.WARNING, "Could not parse Number", x);
}
return null;
}
public BlockStorage(final World w) {
if (worlds.containsKey(w.getName())) return;
if (SlimefunPlugin.getUtilities().worlds.containsKey(w.getName())) return;
this.world = w;
System.out.println("[Slimefun] Loading Blocks for World \"" + w.getName() + "\"");
System.out.println("[Slimefun] This may take a long time...");
Slimefun.getLogger().log(Level.INFO, "Loading Blocks for World \"" + w.getName() + "\"");
Slimefun.getLogger().log(Level.INFO, "This may take a long time...");
File f = new File(path_blocks + w.getName());
if (f.exists()) {
@ -98,20 +96,21 @@ public class BlockStorage {
try {
for (File file: f.listFiles()) {
if (file.getName().equals("null.sfb")) {
System.err.println("[Slimefun] Corrupted file detected!");
System.err.println("[Slimefun] Slimefun will simply skip this File, but you");
System.err.println("[Slimefun] should probably look into it!");
Slimefun.getLogger().log(Level.WARNING, "Corrupted file detected!");
Slimefun.getLogger().log(Level.WARNING, "Slimefun will simply skip this File, but you");
Slimefun.getLogger().log(Level.WARNING, "should maybe look into it!");
Slimefun.getLogger().log(Level.WARNING, file.getPath());
}
else if (file.getName().endsWith(".sfb")) {
if (timestamp + SlimefunStartup.instance.getSettings().BLOCK_LOADING_INFO_DELAY < System.currentTimeMillis()) {
System.out.println("[Slimefun] Loading Blocks... " + Math.round((((done * 100.0F) / total) * 100.0F) / 100.0F) + "% done (\"" + w.getName() + "\")");
if (timestamp + SlimefunPlugin.getSettings().blocksInfoLoadingDelay < System.currentTimeMillis()) {
Slimefun.getLogger().log(Level.INFO, "Loading Blocks... " + Math.round((((done * 100.0F) / total) * 100.0F) / 100.0F) + "% done (\"" + w.getName() + "\")");
timestamp = System.currentTimeMillis();
}
FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);
for (String key: cfg.getKeys(false)) {
Location l = deserializeLocation(key);
String chunk_string = locationToChunkString(l);
String chunkString = locationToChunkString(l);
try {
totalBlocks++;
String json = cfg.getString(key);
@ -121,22 +120,24 @@ public class BlockStorage {
// It should not be possible to have two blocks on the same location. Ignore the
// new entry if a block is already present and print an error to the console.
System.out.println("[Slimefun] Ignoring duplicate block @ " + l.getBlockX() + ", " + l.getBlockY() + ", " + l.getBlockZ());
System.out.println("[Slimefun] Old block data: " + serializeBlockInfo(storage.get(l)));
System.out.println("[Slimefun] New block data (" + key + "): " + json);
Slimefun.getLogger().log(Level.INFO, "Ignoring duplicate block @ " + l.getBlockX() + ", " + l.getBlockY() + ", " + l.getBlockZ());
Slimefun.getLogger().log(Level.INFO, "Old block data: " + serializeBlockInfo(storage.get(l)));
Slimefun.getLogger().log(Level.INFO, "New block data (" + key + "): " + json);
continue;
}
storage.put(l, blockInfo);
if (SlimefunItem.isTicking(file.getName().replace(".sfb", ""))) {
Set<Location> locations = ticking_chunks.containsKey(chunk_string) ? ticking_chunks.get(chunk_string): new HashSet<>();
Set<Location> locations = SlimefunPlugin.getUtilities().tickingChunks.getOrDefault(chunkString, new HashSet<>());
locations.add(l);
ticking_chunks.put(chunk_string, locations);
if (!loaded_tickers.contains(chunk_string)) loaded_tickers.add(chunk_string);
SlimefunPlugin.getUtilities().tickingChunks.put(chunkString, locations);
if (!SlimefunPlugin.getUtilities().loadedTickers.contains(chunkString)) {
SlimefunPlugin.getUtilities().loadedTickers.add(chunkString);
}
}
} catch (Exception x) {
System.err.println("[Slimefun] Failed to load " + file.getName() + "(ERR: " + key + ")");
x.printStackTrace();
Slimefun.getLogger().log(Level.WARNING, "Failed to load " + file.getName() + "(" + key + ") for Slimefun " + Slimefun.getVersion(), x);
}
}
done++;
@ -144,8 +145,8 @@ public class BlockStorage {
}
} finally {
long time = (System.currentTimeMillis() - start);
System.out.println("[Slimefun] Loading Blocks... 100% (FINISHED - " + time + "ms)");
System.out.println("[Slimefun] Loaded a total of " + totalBlocks + " Blocks for World \"" + world.getName() + "\"");
Slimefun.getLogger().log(Level.INFO, "Loading Blocks... 100% (FINISHED - " + time + "ms)");
Slimefun.getLogger().log(Level.INFO, "Loaded a total of " + totalBlocks + " Blocks for World \"" + world.getName() + "\"");
if (totalBlocks > 0) System.out.println("[Slimefun] Avg: " + DoubleHandler.fixDouble((double) time / (double) totalBlocks, 3) + "ms/Block");
}
}
@ -156,31 +157,32 @@ public class BlockStorage {
FileConfiguration cfg = YamlConfiguration.loadConfiguration(chunks);
for (String key: cfg.getKeys(false)) {
try {
if (world.getName().equals(key.split(";")[0])) map_chunks.put(key, cfg.getString(key));
if (world.getName().equals(key.split(";")[0])) SlimefunPlugin.getUtilities().mapChunks.put(key, cfg.getString(key));
} catch (Exception x) {
System.err.println("[Slimefun] Failed to load " + chunks.getName() + " for World \"" + world.getName() + "\" (ERR: " + key + ")");
x.printStackTrace();
Slimefun.getLogger().log(Level.WARNING, "Failed to load " + chunks.getName() + " in World " + world.getName() + "(" + key + ") for Slimefun " + Slimefun.getVersion(), x);
}
}
}
worlds.put(world.getName(), this);
SlimefunPlugin.getUtilities().worlds.put(world.getName(), this);
for (File file: new File("data-storage/Slimefun/stored-inventories").listFiles()) {
if (file.getName().startsWith(w.getName()) && file.getName().endsWith(".sfi")) {
Location l = deserializeLocation(file.getName().replace(".sfi", ""));
Config cfg = new Config(file);
try {
if (cfg.getString("preset") != null) {
BlockMenuPreset preset = BlockMenuPreset.getPreset(cfg.getString("preset"));
inventories.put(l, new BlockMenu(preset, l, cfg));
BlockMenuPreset preset = BlockMenuPreset.getPreset(cfg.getString("preset"));
if (preset == null) {
preset = BlockMenuPreset.getPreset(checkID(l));
}
else {
BlockMenuPreset preset = BlockMenuPreset.getPreset(checkID(l));
if (preset != null) {
inventories.put(l, new BlockMenu(preset, l, cfg));
}
}
catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while loading this Inventory: " + file.getName(), x);
}
}
}
@ -191,25 +193,25 @@ public class BlockStorage {
BlockMenuPreset preset = BlockMenuPreset.getPreset(cfg.getString("preset"));
if (preset != null) {
universal_inventories.put(preset.getID(), new UniversalBlockMenu(preset, cfg));
SlimefunPlugin.getUtilities().universalInventories.put(preset.getID(), new UniversalBlockMenu(preset, cfg));
}
}
}
}
private static int chunk_changes = 0;
private static int chunkChanges = 0;
private int changes = 0;
public void computeChanges() {
changes = cache_blocks.size() + chunk_changes;
changes = cache_blocks.size() + chunkChanges;
Map<Location, BlockMenu> inventories2 = new HashMap<>(inventories);
for (Map.Entry<Location, BlockMenu> entry: inventories2.entrySet()) {
changes += entry.getValue().getUnsavedChanges();
}
Map<String, UniversalBlockMenu> universal_inventories2 = new HashMap<>(universal_inventories);
for (Map.Entry<String, UniversalBlockMenu> entry: universal_inventories2.entrySet()) {
Map<String, UniversalBlockMenu> universalInventories2 = new HashMap<>(SlimefunPlugin.getUtilities().universalInventories);
for (Map.Entry<String, UniversalBlockMenu> entry: universalInventories2.entrySet()) {
changes += entry.getValue().getUnsavedChanges();
}
}
@ -224,10 +226,9 @@ public class BlockStorage {
public void save(boolean computeChanges, boolean remove) {
if (computeChanges) computeChanges();
if (changes == 0) return;
System.out.println("[Slimefun] Saving Blocks for World \"" + world.getName() + "\" (" + changes + " Change(s) queued)");
Slimefun.getLogger().log(Level.INFO, "Saving Blocks for World \"" + world.getName() + "\" (" + changes + " Change(s) queued)");
Map<String, Config> cache = new HashMap<>(cache_blocks);
@ -235,15 +236,18 @@ public class BlockStorage {
cache_blocks.remove(entry.getKey());
Config cfg = entry.getValue();
if (cfg.getKeys().isEmpty()) {
cfg.getFile().delete();
if (!cfg.getFile().delete()) {
Slimefun.getLogger().log(Level.WARNING, "Could not delete File: " + cfg.getFile().getName());
}
}
else {
File tmpFile = new File(cfg.getFile().getParentFile(), cfg.getFile().getName() + ".tmp");
cfg.save(tmpFile);
try {
Files.move(tmpFile.toPath(), cfg.getFile().toPath(), StandardCopyOption.ATOMIC_MOVE);
} catch (IOException e) {
e.printStackTrace();
} catch (IOException x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while copying a temporary File for Slimefun " + Slimefun.getVersion(), x);
}
}
}
@ -254,29 +258,29 @@ public class BlockStorage {
entry.getValue().save(entry.getKey());
}
Map<String, UniversalBlockMenu> universal_inventories2 = new HashMap<>(universal_inventories);
Map<String, UniversalBlockMenu> universalInventories2 = new HashMap<>(SlimefunPlugin.getUtilities().universalInventories);
for (Map.Entry<String, UniversalBlockMenu> entry: universal_inventories2.entrySet()) {
for (Map.Entry<String, UniversalBlockMenu> entry: universalInventories2.entrySet()) {
entry.getValue().save();
}
if (chunk_changes > 0) {
if (chunkChanges > 0) {
File chunks = new File(path_chunks + "chunks.sfc");
Config cfg = new Config("data-storage/Slimefun/temp.yml");
for (Map.Entry<String, String> entry: map_chunks.entrySet()) {
for (Map.Entry<String, String> entry: SlimefunPlugin.getUtilities().mapChunks.entrySet()) {
cfg.setValue(entry.getKey(), entry.getValue());
}
cfg.save(chunks);
if (remove) {
worlds.remove(world.getName());
SlimefunPlugin.getUtilities().worlds.remove(world.getName());
}
}
changes = 0;
chunk_changes = 0;
chunkChanges = 0;
}
public static void store(Block block, ItemStack item) {
@ -340,13 +344,14 @@ public class BlockStorage {
try {
return new BlockInfoConfig(parseJSON(json));
} catch(Exception x) {
System.err.println(x.getClass().getName());
System.err.println("[Slimefun] Failed to parse BlockInfo for Block @ " + l.getBlockX() + ", " + l.getBlockY() + ", " + l.getBlockZ());
System.err.println(json);
System.err.println("[Slimefun] ");
System.err.println("[Slimefun] IGNORE THIS ERROR UNLESS IT IS SPAMMING");
System.err.println("[Slimefun] ");
x.printStackTrace();
Logger logger = Slimefun.getLogger();
logger.log(Level.WARNING, x.getClass().getName());
logger.log(Level.WARNING, "Failed to parse BlockInfo for Block @ " + l.getBlockX() + ", " + l.getBlockY() + ", " + l.getBlockZ());
logger.log(Level.WARNING, json);
logger.log(Level.WARNING, "");
logger.log(Level.WARNING, "IGNORE THIS ERROR UNLESS IT IS SPAMMING");
logger.log(Level.WARNING, "");
logger.log(Level.SEVERE, "An Error occured while parsing Block Info for Slimefun " + Slimefun.getVersion(), x);
return null;
}
}
@ -360,7 +365,8 @@ public class BlockStorage {
}
private static String getJSONData(Chunk chunk) {
return map_chunks.get(serializeChunk(chunk));
if (chunk == null) return null;
return SlimefunPlugin.getUtilities().mapChunks.get(serializeChunk(chunk));
}
@Deprecated
@ -413,7 +419,7 @@ public class BlockStorage {
storage.storage.put(l, cfg);
if (BlockMenuPreset.isInventory(cfg.getString("id"))) {
if (BlockMenuPreset.isUniversalInventory(cfg.getString("id"))) {
if (!universal_inventories.containsKey(cfg.getString("id"))) storage.loadUniversalInventory(BlockMenuPreset.getPreset(cfg.getString("id")));
if (!SlimefunPlugin.getUtilities().universalInventories.containsKey(cfg.getString("id"))) storage.loadUniversalInventory(BlockMenuPreset.getPreset(cfg.getString("id")));
}
else if (!storage.hasInventory(l)) {
File file = new File("data-storage/Slimefun/stored-inventories/" + serializeLocation(l) + ".sfi");
@ -446,7 +452,7 @@ public class BlockStorage {
}
public static void clearBlockInfo(Location l, boolean destroy) {
SlimefunStartup.ticker.delete.put(l, destroy);
SlimefunPlugin.getTicker().delete.put(l, destroy);
}
public static void _integrated_removeBlockInfo(Location l, boolean destroy) {
@ -462,15 +468,15 @@ public class BlockStorage {
storage.getUniversalInventory(l).close();
storage.getUniversalInventory(l).save();
}
String chunk_string = locationToChunkString(l);
if (ticking_chunks.containsKey(chunk_string)) {
Set<Location> locations = ticking_chunks.get(chunk_string);
String chunkString = locationToChunkString(l);
if (SlimefunPlugin.getUtilities().tickingChunks.containsKey(chunkString)) {
Set<Location> locations = SlimefunPlugin.getUtilities().tickingChunks.get(chunkString);
locations.remove(l);
if (locations.isEmpty()) {
ticking_chunks.remove(chunk_string);
loaded_tickers.remove(chunk_string);
SlimefunPlugin.getUtilities().tickingChunks.remove(chunkString);
SlimefunPlugin.getUtilities().loadedTickers.remove(chunkString);
}
else ticking_chunks.put(chunk_string, locations);
else SlimefunPlugin.getUtilities().tickingChunks.put(chunkString, locations);
}
}
}
@ -481,7 +487,7 @@ public class BlockStorage {
}
public static void moveBlockInfo(Location from, Location to) {
SlimefunStartup.ticker.move.put(from, to);
SlimefunPlugin.getTicker().move.put(from, to);
}
@Deprecated
@ -504,15 +510,15 @@ public class BlockStorage {
refreshCache(storage, from, getLocationInfo(from).getString("id"), null, true);
storage.storage.remove(from);
String chunk_string = locationToChunkString(from);
if (ticking_chunks.containsKey(chunk_string)) {
Set<Location> locations = ticking_chunks.get(chunk_string);
String chunkString = locationToChunkString(from);
if (SlimefunPlugin.getUtilities().tickingChunks.containsKey(chunkString)) {
Set<Location> locations = SlimefunPlugin.getUtilities().tickingChunks.get(chunkString);
locations.remove(from);
if (locations.isEmpty()) {
ticking_chunks.remove(chunk_string);
loaded_tickers.remove(chunk_string);
SlimefunPlugin.getUtilities().tickingChunks.remove(chunkString);
SlimefunPlugin.getUtilities().loadedTickers.remove(chunkString);
}
else ticking_chunks.put(chunk_string, locations);
else SlimefunPlugin.getUtilities().tickingChunks.put(chunkString, locations);
}
}
@ -524,14 +530,14 @@ public class BlockStorage {
if (updateTicker) {
SlimefunItem item = SlimefunItem.getByID(key);
if (item != null && item.isTicking()) {
String chunk_string = locationToChunkString(l);
String chunkString = locationToChunkString(l);
if (value != null) {
Set<Location> locations = ticking_chunks.get(chunk_string);
Set<Location> locations = SlimefunPlugin.getUtilities().tickingChunks.get(chunkString);
if (locations == null) locations = new HashSet<>();
locations.add(l);
ticking_chunks.put(chunk_string, locations);
if (!loaded_tickers.contains(chunk_string)) loaded_tickers.add(chunk_string);
SlimefunPlugin.getUtilities().tickingChunks.put(chunkString, locations);
if (!SlimefunPlugin.getUtilities().loadedTickers.contains(chunkString)) SlimefunPlugin.getUtilities().loadedTickers.add(chunkString);
}
}
}
@ -571,11 +577,11 @@ public class BlockStorage {
}
public static boolean isWorldRegistered(String name) {
return worlds.containsKey(name);
return SlimefunPlugin.getUtilities().worlds.containsKey(name);
}
public static Set<String> getTickingChunks() {
return new HashSet<>(loaded_tickers);
return new HashSet<>(SlimefunPlugin.getUtilities().loadedTickers);
}
@Deprecated
@ -597,7 +603,7 @@ public class BlockStorage {
}
public static Set<Location> getTickingLocations(String chunk) {
return new HashSet<>(ticking_chunks.get(chunk));
return new HashSet<>(SlimefunPlugin.getUtilities().tickingChunks.get(chunk));
}
public BlockMenu loadInventory(Location l, BlockMenuPreset preset) {
@ -607,7 +613,7 @@ public class BlockStorage {
}
public void loadUniversalInventory(BlockMenuPreset preset) {
universal_inventories.put(preset.getID(), new UniversalBlockMenu(preset));
SlimefunPlugin.getUtilities().universalInventories.put(preset.getID(), new UniversalBlockMenu(preset));
}
public void clearInventory(Location l) {
@ -616,7 +622,7 @@ public class BlockStorage {
if (menu != null) {
for (HumanEntity human : new ArrayList<>(menu.toInventory().getViewers())) {
// Prevents "java.lang.IllegalStateException: Asynchronous entity add!" when closing inventory while holding an item
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> human.closeInventory());
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> human.closeInventory());
}
inventories.get(l).delete(l);
@ -629,7 +635,7 @@ public class BlockStorage {
}
public boolean hasUniversalInventory(String id) {
return universal_inventories.containsKey(id);
return SlimefunPlugin.getUtilities().universalInventories.containsKey(id);
}
public UniversalBlockMenu getUniversalInventory(Block block) {
@ -642,7 +648,7 @@ public class BlockStorage {
}
public UniversalBlockMenu getUniversalInventory(String id) {
return universal_inventories.get(id);
return SlimefunPlugin.getUtilities().universalInventories.get(id);
}
public static BlockMenu getInventory(Block b) {
@ -659,7 +665,7 @@ public class BlockStorage {
public static Config getChunkInfo(Chunk chunk) {
try {
Config cfg = new Config("data-storage/Slimefun/temp.yml");
if (!map_chunks.containsKey(serializeChunk(chunk))) return cfg;
if (!SlimefunPlugin.getUtilities().mapChunks.containsKey(serializeChunk(chunk))) return cfg;
for (Map.Entry<String, String> entry: parseJSON(getJSONData(chunk)).entrySet()) {
cfg.setValue(entry.getKey(), entry.getValue());
@ -667,20 +673,13 @@ public class BlockStorage {
return cfg;
} catch (Exception x) {
System.err.println(x.getClass().getName());
System.err.println("[Slimefun] Failed to parse ChunkInfo for Chunk @ " + chunk.getX() + ", " + chunk.getZ());
try {
System.err.println(getJSONData(chunk));
} catch (Exception x2) {
System.err.println("No Metadata found!");
}
x.printStackTrace();
Slimefun.getLogger().log(Level.SEVERE, "Failed to parse ChunkInfo for Chunk: " + (chunk == null ? "?": chunk.getX()) + ", " + (chunk == null ? "?": chunk.getZ()) + " (" + getJSONData(chunk) + ") for Slimefun " + Slimefun.getVersion(), x);
return new Config("data-storage/Slimefun/temp.yml");
}
}
public static boolean hasChunkInfo(Chunk chunk) {
return map_chunks.containsKey(serializeChunk(chunk));
return SlimefunPlugin.getUtilities().mapChunks.containsKey(serializeChunk(chunk));
}
public static void setChunkInfo(Chunk chunk, String key, String value) {
@ -693,9 +692,9 @@ public class BlockStorage {
json.add(path, new JsonPrimitive(cfg.getString(path)));
}
map_chunks.put(serializeChunk(chunk), json.toString());
SlimefunPlugin.getUtilities().mapChunks.put(serializeChunk(chunk), json.toString());
chunk_changes++;
chunkChanges++;
}
public static String getChunkInfo(Chunk chunk, String key) {
@ -707,7 +706,7 @@ public class BlockStorage {
}
public static void clearChunkInfo(Chunk chunk) {
map_chunks.remove(serializeChunk(chunk));
SlimefunPlugin.getUtilities().mapChunks.remove(serializeChunk(chunk));
}
public static String getBlockInfoAsJson(Block block) {

View File

@ -7,6 +7,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.logging.Level;
import java.util.stream.IntStream;
import org.bukkit.Bukkit;
@ -16,7 +17,7 @@ import org.bukkit.plugin.Plugin;
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.CSCoreLibPlugin.general.Clock;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
public class ErrorReport {
@ -46,7 +47,7 @@ public class ErrorReport {
stream.println();
stream.println("Slimefun Environment:");
stream.println(" CS-CoreLib v" + CSCoreLib.getLib().getDescription().getVersion());
stream.println(" Slimefun v" + SlimefunStartup.instance.getDescription().getVersion());
stream.println(" Slimefun v" + SlimefunPlugin.instance.getDescription().getVersion());
stream.println();
List<String> plugins = new ArrayList<>();
@ -81,13 +82,14 @@ public class ErrorReport {
stream.println();
throwable.printStackTrace(stream);
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, this message does not have to be included.");
System.err.println("[Slimefun] You can put the file on Pastebin and then post it here: https://github.com/TheBusyBiscuit/Slimefun4/issues");
System.err.println("[Slimefun] ");
} catch (FileNotFoundException e) {
e.printStackTrace();
Slimefun.getLogger().log(Level.WARNING, "");
Slimefun.getLogger().log(Level.WARNING, "An Error occured! It has been saved as: ");
Slimefun.getLogger().log(Level.WARNING, "/plugins/Slimefun/error-reports/" + file.getName());
Slimefun.getLogger().log(Level.WARNING, "Please consider sending this File to the developer(s) of Slimefun, this message does not have to be included.");
Slimefun.getLogger().log(Level.WARNING, "You can put the file on Pastebin and then post it here: https://github.com/TheBusyBiscuit/Slimefun4/issues");
Slimefun.getLogger().log(Level.WARNING, "");
} catch (FileNotFoundException x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while saving an Error-Report for Slimefun " + Slimefun.getVersion(), x);
}
}

View File

@ -15,7 +15,7 @@ import org.bukkit.ChatColor;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Objects.Research;
import me.mrCookieSlime.Slimefun.api.inventory.BackpackInventory;
@ -27,8 +27,6 @@ import me.mrCookieSlime.Slimefun.api.inventory.BackpackInventory;
*/
public final class PlayerProfile {
public static Map<UUID, PlayerProfile> profiles = new HashMap<>();
private UUID uuid;
private Config cfg;
private boolean dirty = false;
@ -161,7 +159,7 @@ public final class PlayerProfile {
}
public String getTitle() {
List<String> titles = SlimefunStartup.instance.getSettings().RESEARCHES_TITLES;
List<String> titles = SlimefunPlugin.getSettings().researchesTitles;
int index = Math.round(Float.valueOf(String.valueOf(Math.round(((researches.size() * 100.0F) / Research.list().size()) * 100.0F) / 100.0F)) / 100.0F) * titles.size();
if (index > 0) index--;
@ -169,11 +167,11 @@ public final class PlayerProfile {
}
public static PlayerProfile fromUUID(UUID uuid) {
PlayerProfile profile = profiles.get(uuid);
PlayerProfile profile = SlimefunPlugin.getUtilities().profiles.get(uuid);
if (profile == null) {
profile = new PlayerProfile(uuid);
profiles.put(uuid, profile);
SlimefunPlugin.getUtilities().profiles.put(uuid, profile);
}
else {
profile.markedForDeletion = false;
@ -183,11 +181,11 @@ public final class PlayerProfile {
}
public static boolean isLoaded(UUID uuid) {
return profiles.containsKey(uuid);
return SlimefunPlugin.getUtilities().profiles.containsKey(uuid);
}
public static Iterator<PlayerProfile> iterator() {
return profiles.values().iterator();
return SlimefunPlugin.getUtilities().profiles.values().iterator();
}
public static BackpackInventory getBackpack(ItemStack item) {

View File

@ -2,15 +2,14 @@ package me.mrCookieSlime.Slimefun.api;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
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.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.GPS.GPSNetwork;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.Research;
@ -24,30 +23,14 @@ import me.mrCookieSlime.Slimefun.Setup.Messages;
*
* @since 4.0
*/
public class Slimefun {
public final class Slimefun {
public static Map<Integer, List<GuideHandler>> guide_handlers = new HashMap<>();
/**
* Instance of the GPSNetwork.
*/
private static GPSNetwork gps = new GPSNetwork();
private Slimefun() {}
/**
* Whether EmeraldEnchants is enabled or not.
*/
public static boolean emeraldenchants = false;
/**
* Lists all the registered categories.
*/
public static List<Category> current_categories = new ArrayList<>();
public static void registerGuideHandler(GuideHandler handler) {
List<GuideHandler> handlers = new ArrayList<>();
if (guide_handlers.containsKey(handler.getTier())) handlers = guide_handlers.get(handler.getTier());
List<GuideHandler> handlers = SlimefunPlugin.getUtilities().guideHandlers.getOrDefault(handler.getTier(), new ArrayList<>());
handlers.add(handler);
guide_handlers.put(handler.getTier(), handlers);
SlimefunPlugin.getUtilities().guideHandlers.put(handler.getTier(), handlers);
}
/**
@ -56,7 +39,11 @@ public class Slimefun {
* @return the GPSNetwork instance.
*/
public static GPSNetwork getGPSNetwork() {
return gps;
return SlimefunPlugin.instance.gps;
}
public static Logger getLogger() {
return SlimefunPlugin.instance.getLogger();
}
/**
@ -91,7 +78,7 @@ public class Slimefun {
* @return the Items.yml Config instance.
*/
public static Config getItemConfig() {
return SlimefunStartup.getItemCfg();
return SlimefunPlugin.getItemCfg();
}
/**
@ -207,10 +194,10 @@ public class Slimefun {
String world = p.getWorld().getName();
SlimefunItem sfItem = SlimefunItem.getByItem(item);
if (sfItem == null) return !SlimefunItem.isDisabled(item);
if (SlimefunStartup.getWhitelist().contains(world + ".enabled")) {
if (SlimefunStartup.getWhitelist().getBoolean(world + ".enabled")) {
if (!SlimefunStartup.getWhitelist().contains(world + ".enabled-items." + sfItem.getID())) SlimefunStartup.getWhitelist().setDefaultValue(world + ".enabled-items." + sfItem.getID(), true);
if (SlimefunStartup.getWhitelist().getBoolean(world + ".enabled-items." + sfItem.getID())) return true;
if (SlimefunPlugin.getWhitelist().contains(world + ".enabled")) {
if (SlimefunPlugin.getWhitelist().getBoolean(world + ".enabled")) {
if (!SlimefunPlugin.getWhitelist().contains(world + ".enabled-items." + sfItem.getID())) SlimefunPlugin.getWhitelist().setDefaultValue(world + ".enabled-items." + sfItem.getID(), true);
if (SlimefunPlugin.getWhitelist().getBoolean(world + ".enabled-items." + sfItem.getID())) return true;
else {
if (message) Messages.local.sendTranslation(p, "messages.disabled-in-world", true);
return false;
@ -236,10 +223,10 @@ public class Slimefun {
*/
public static boolean isEnabled(Player p, SlimefunItem sfItem, boolean message) {
String world = p.getWorld().getName();
if (SlimefunStartup.getWhitelist().contains(world + ".enabled")) {
if (SlimefunStartup.getWhitelist().getBoolean(world + ".enabled")) {
if (!SlimefunStartup.getWhitelist().contains(world + ".enabled-items." + sfItem.getID())) SlimefunStartup.getWhitelist().setDefaultValue(world + ".enabled-items." + sfItem.getID(), true);
if (SlimefunStartup.getWhitelist().getBoolean(world + ".enabled-items." + sfItem.getID())) return true;
if (SlimefunPlugin.getWhitelist().contains(world + ".enabled")) {
if (SlimefunPlugin.getWhitelist().getBoolean(world + ".enabled")) {
if (!SlimefunPlugin.getWhitelist().contains(world + ".enabled-items." + sfItem.getID())) SlimefunPlugin.getWhitelist().setDefaultValue(world + ".enabled-items." + sfItem.getID(), true);
if (SlimefunPlugin.getWhitelist().getBoolean(world + ".enabled-items." + sfItem.getID())) return true;
else {
if (message) Messages.local.sendTranslation(p, "messages.disabled-in-world", true);
return false;
@ -270,7 +257,7 @@ public class Slimefun {
* Returns a list of all the ItemStacks representing the registered categories.
*
* @return the list of the display items of all the registered categories.
* @see #current_categories
* @see #currentCategories
*/
public static List<ItemStack> listCategories() {
List<ItemStack> items = new ArrayList<>();
@ -335,19 +322,11 @@ public class Slimefun {
addWikiPage(id, "https://github.com/TheBusyBiscuit/Slimefun4/wiki/" + page);
}
/**
* Returns whether EmeraldEnchants is enabled or not.
* <p>
* It can be directly accessed by {@link #emeraldenchants}.
*
* @return <code>true</code> if EmeraldEnchants is enabled,
* <code>false</code> otherwise.
*/
public static boolean isEmeraldEnchantsInstalled() {
return emeraldenchants;
public static List<GuideHandler> getGuideHandlers(int tier) {
return SlimefunPlugin.getUtilities().guideHandlers.getOrDefault(tier, new ArrayList<>());
}
public static List<GuideHandler> getGuideHandlers(int tier) {
return guide_handlers.containsKey(tier) ? guide_handlers.get(tier): new ArrayList<>();
public static String getVersion() {
return SlimefunPlugin.instance.getDescription().getVersion();
}
}

View File

@ -10,13 +10,16 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import me.mrCookieSlime.CSCoreLibPlugin.general.Clock;
public class SlimefunBackup {
public final class SlimefunBackup {
private SlimefunBackup() {}
public static void start() {
File folder = new File("data-storage/Slimefun/block-backups");
List<File> backups = Arrays.asList(folder.listFiles());
@ -31,85 +34,88 @@ public class SlimefunBackup {
});
for (int i = backups.size() - 20; i > 0; i--) {
backups.get(i).delete();
if (!backups.get(i).delete()) {
Slimefun.getLogger().log(Level.WARNING, "Could not delete Backup: " + backups.get(i).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();
}
if (!file.exists() || file.delete()) {
try {
if (file.createNewFile()) {
try (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);
try {
file.createNewFile();
try (FileInputStream input = new FileInputStream(f)) {
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
}
try (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);
try (FileInputStream input = new FileInputStream(f)) {
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
output.closeEntry();
}
}
output.closeEntry();
}
}
for (File f: new File("data-storage/Slimefun/universal-inventories/").listFiles()) {
ZipEntry entry = new ZipEntry("universal-inventories/" + f.getName());
output.putNextEntry(entry);
for (File f: new File("data-storage/Slimefun/universal-inventories/").listFiles()) {
ZipEntry entry = new ZipEntry("universal-inventories/" + f.getName());
output.putNextEntry(entry);
try (FileInputStream input = new FileInputStream(f)) {
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
}
try (FileInputStream input = new FileInputStream(f)) {
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
output.closeEntry();
}
for (File f: new File("data-storage/Slimefun/stored-inventories/").listFiles()) {
ZipEntry entry = new ZipEntry("stored-inventories/" + f.getName());
output.putNextEntry(entry);
try (FileInputStream input = new FileInputStream(f)) {
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
}
output.closeEntry();
}
File chunks = new File("data-storage/Slimefun/stored-chunks/chunks.sfc");
if (chunks.exists()) {
ZipEntry entry = new ZipEntry("stored-chunks/chunks.sfc");
output.putNextEntry(entry);
try (FileInputStream input = new FileInputStream(chunks)) {
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
}
output.closeEntry();
}
}
output.closeEntry();
Slimefun.getLogger().log(Level.INFO, "Backed up Data to: " + file.getName());
}
for (File f: new File("data-storage/Slimefun/stored-inventories/").listFiles()) {
ZipEntry entry = new ZipEntry("stored-inventories/" + f.getName());
output.putNextEntry(entry);
try (FileInputStream input = new FileInputStream(f)) {
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
}
output.closeEntry();
}
File chunks = new File("data-storage/Slimefun/stored-chunks/chunks.sfc");
if (chunks.exists()) {
ZipEntry entry = new ZipEntry("stored-chunks/chunks.sfc");
output.putNextEntry(entry);
try (FileInputStream input = new FileInputStream(chunks)) {
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
}
output.closeEntry();
else {
Slimefun.getLogger().log(Level.WARNING, "Could not create backup-file: " + file.getName());
}
} catch(IOException x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating a World-Backup for Slimefun " + Slimefun.getVersion(), x);
}
System.out.println("[Slimefun] Backed up Blocks to " + file.getName());
} catch(IOException e) {
e.printStackTrace();
}
}

View File

@ -0,0 +1,9 @@
package me.mrCookieSlime.Slimefun.api;
public enum SlimefunGuideLayout {
BOOK,
CHEST,
CHEAT_SHEET;
}

View File

@ -5,8 +5,10 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import org.bukkit.inventory.ItemStack;
public class SlimefunRecipes {
public final class SlimefunRecipes {
private SlimefunRecipes() {}
public static void registerMachineRecipe(String machine, int seconds, ItemStack[] input, ItemStack[] output) {
for (SlimefunItem item: SlimefunItem.all) {
if (item instanceof AContainer && ((AContainer) item).getMachineIdentifier().equals(machine)) {

View File

@ -7,25 +7,25 @@ import java.util.UUID;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
public final class Soul {
private Soul() {}
public static void storeItem(UUID uuid, int slot, ItemStack item) {
Map<Integer, ItemStack> items = SlimefunStartup.instance.getUtilities().soulbound.get(uuid);
Map<Integer, ItemStack> items = SlimefunPlugin.getUtilities().soulbound.get(uuid);
if (items == null) {
items = new HashMap<>();
SlimefunStartup.instance.getUtilities().soulbound.put(uuid, items);
SlimefunPlugin.getUtilities().soulbound.put(uuid, items);
}
items.put(slot, item);
}
public static void retrieveItems(Player p) {
Map<Integer, ItemStack> items = SlimefunStartup.instance.getUtilities().soulbound.get(p.getUniqueId());
Map<Integer, ItemStack> items = SlimefunPlugin.getUtilities().soulbound.get(p.getUniqueId());
if (items != null) {
for (Map.Entry<Integer, ItemStack> entry: items.entrySet()) {
@ -33,7 +33,7 @@ public final class Soul {
}
}
SlimefunStartup.instance.getUtilities().soulbound.remove(p.getUniqueId());
SlimefunPlugin.getUtilities().soulbound.remove(p.getUniqueId());
}
}

View File

@ -5,6 +5,7 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@ -17,7 +18,7 @@ import org.bukkit.entity.Player;
import me.mrCookieSlime.CSCoreLibPlugin.general.Chat.TellRawMessage;
import me.mrCookieSlime.CSCoreLibPlugin.general.Chat.TellRawMessage.HoverAction;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
@ -27,6 +28,7 @@ public class TickerTask implements Runnable {
public Map<Location, Location> move = new HashMap<>();
public Map<Location, Boolean> delete = new HashMap<>();
public Map<Location, Long> blockTimings = new HashMap<>();
private Set<BlockTicker> tickers = new HashSet<>();
@ -41,7 +43,6 @@ public class TickerTask implements Runnable {
private Map<String, Long> chunkTimings = new HashMap<>();
private Set<String> chunksSkipped = new HashSet<>();
private Map<Location, Integer> buggedBlocks = new HashMap<>();
public Map<Location, Long> blockTimings = new HashMap<>();
@Override
public void run() {
@ -85,7 +86,7 @@ public class TickerTask implements Runnable {
item.getBlockTicker().update();
if (item.getBlockTicker().isSynchronized()) {
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
try {
long timestamp3 = System.currentTimeMillis();
item.getBlockTicker().tick(b, item, BlockStorage.getLocationInfo(l));
@ -107,22 +108,17 @@ public class TickerTask implements Runnable {
// Generate a new Error-Report
new ErrorReport(x, this, l, item);
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());
buggedBlocks.put(l, errors);
}
else if (errors == 4) {
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getID() + ")");
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] ");
Slimefun.getLogger().log(Level.SEVERE, "X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getID() + ")");
Slimefun.getLogger().log(Level.SEVERE, "has thrown 4 Exceptions in the last 4 Ticks, the Block has been terminated.");
Slimefun.getLogger().log(Level.SEVERE, "Check your /plugins/Slimefun/error-reports/ folder for details.");
Slimefun.getLogger().log(Level.SEVERE, " ");
BlockStorage._integrated_removeBlockInfo(l, true);
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
l.getBlock().setType(Material.AIR);
});
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> l.getBlock().setType(Material.AIR));
}
else {
buggedBlocks.put(l, errors);
@ -148,23 +144,17 @@ public class TickerTask implements Runnable {
if (errors == 1) {
// Generate a new Error-Report
new ErrorReport(x, this, l, item);
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());
buggedBlocks.put(l, errors);
}
else if (errors == 4) {
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getID() + ")");
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] ");
Slimefun.getLogger().log(Level.SEVERE, "X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getID() + ")");
Slimefun.getLogger().log(Level.SEVERE, "has thrown 4 Exceptions in the last 4 Ticks, the Block has been terminated.");
Slimefun.getLogger().log(Level.SEVERE, "Check your /plugins/Slimefun/error-reports/ folder for details.");
Slimefun.getLogger().log(Level.SEVERE, " ");
BlockStorage._integrated_removeBlockInfo(l, true);
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
l.getBlock().setType(Material.AIR);
});
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> l.getBlock().setType(Material.AIR));
}
else {
buggedBlocks.put(l, errors);
@ -231,8 +221,8 @@ public class TickerTask implements Runnable {
try {
tellraw.send((Player) sender);
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while sending a Timings Summary for Slimefun " + Slimefun.getVersion(), x);
}
}
else {
@ -268,8 +258,8 @@ public class TickerTask implements Runnable {
try {
tellraw.send((Player) sender);
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while sending a Timings Summary for Slimefun " + Slimefun.getVersion(), x);
}
}
else {

View File

@ -4,31 +4,35 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.block.Skull;
public class ChargableBlock {
public final class ChargableBlock {
public static Map<String, Integer> max_charges = new HashMap<>();
private ChargableBlock() {}
public static Map<String, Integer> maxCharges = new HashMap<>();
public static Set<String> rechargeable = new HashSet<>();
public static Set<String> capacitors = new HashSet<>();
public static void registerChargableBlock(String id, int capacity, boolean recharge) {
max_charges.put(id, capacity);
maxCharges.put(id, capacity);
if (recharge) rechargeable.add(id);
}
public static void registerCapacitor(String id, int capacity) {
max_charges.put(id, capacity);
maxCharges.put(id, capacity);
rechargeable.add(id);
capacitors.add(id);
}
@ -39,13 +43,13 @@ public class ChargableBlock {
public static boolean isChargable(Location l) {
if (!BlockStorage.hasBlockInfo(l)) return false;
return max_charges.containsKey(BlockStorage.checkID(l));
return maxCharges.containsKey(BlockStorage.checkID(l));
}
public static boolean isRechargable(Block b) {
if (!BlockStorage.hasBlockInfo(b)) return false;
String id = BlockStorage.checkID(b);
return max_charges.containsKey(id) && rechargeable.contains(id);
return maxCharges.containsKey(id) && rechargeable.contains(id);
}
public static boolean isCapacitor(Block b) {
@ -63,7 +67,7 @@ public class ChargableBlock {
public static int getDefaultCapacity(Location l) {
String id = BlockStorage.checkID(l);
return id == null ? 0: max_charges.get(id);
return id == null ? 0: maxCharges.get(id);
}
public static int getCharge(Block b) {
@ -96,17 +100,13 @@ public class ChargableBlock {
if (charge != getCharge(l)) {
BlockStorage.addBlockInfo(l, "energy-charge", String.valueOf(charge), false);
if (updateTexture) {
try {
updateTexture(l);
} catch (Exception e) {
e.printStackTrace();
}
updateTexture(l);
}
}
}
private static void updateTexture(final Location l) throws Exception {
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
private static void updateTexture(final Location l) {
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
try {
Block b = l.getBlock();
int charge = getCharge(b);
@ -117,8 +117,8 @@ public class ChargableBlock {
else if (charge < (int) (capacity * 0.75D)) CustomSkull.setSkull(b, "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTU4NDQzMmFmNmYzODIxNjcxMjAyNThkMWVlZThjODdjNmU3NWQ5ZTQ3OWU3YjBkNGM3YjZhZDQ4Y2ZlZWYifX19");
else CustomSkull.setSkull(b, "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2EyNTY5NDE1YzE0ZTMxYzk4ZWM5OTNhMmY5OWU2ZDY0ODQ2ZGIzNjdhMTNiMTk5OTY1YWQ5OWM0MzhjODZjIn19fQ==");
}
} catch (Exception e) {
e.printStackTrace();
} catch (Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while updating a Capacitor Texture for Slimefun " + Slimefun.getVersion(), x);
}
});
}
@ -145,21 +145,14 @@ public class ChargableBlock {
setCharge(l, getMaxCharge(l));
}
if (capacitors.contains(BlockStorage.checkID(l))) {
try {
updateTexture(l);
} catch (Exception e) {
e.printStackTrace();
}
updateTexture(l);
}
}
else if (charge < 0 && energy >= -charge) {
setCharge(l, energy + charge);
if (capacitors.contains(BlockStorage.checkID(l))) {
try {
updateTexture(l);
} catch (Exception e) {
e.printStackTrace();
}
updateTexture(l);
}
}
return rest;

View File

@ -9,57 +9,51 @@ import org.bukkit.Material;
import org.bukkit.block.Block;
import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.network.Network;
import me.mrCookieSlime.Slimefun.api.network.NetworkComponent;
import me.mrCookieSlime.Slimefun.holograms.EnergyHologram;
public class EnergyNet extends Network {
public static enum NetworkComponent {
SOURCE,
DISTRIBUTOR,
CONSUMER,
NONE;
}
private static final int RANGE = 6;
public static Set<String> machines_input = new HashSet<>();
public static Set<String> machines_storage = new HashSet<>();
public static Set<String> machines_output = new HashSet<>();
public static Set<String> machinesInput = new HashSet<>();
public static Set<String> machinesStorage = new HashSet<>();
public static Set<String> machinesOutput = new HashSet<>();
public static NetworkComponent getComponent(Block b) {
public static EnergyNetComponent getComponent(Block b) {
return getComponent(b.getLocation());
}
public static NetworkComponent getComponent(String id) {
if (machines_input.contains(id)) return NetworkComponent.SOURCE;
if (machines_storage.contains(id)) return NetworkComponent.DISTRIBUTOR;
if (machines_output.contains(id)) return NetworkComponent.CONSUMER;
return NetworkComponent.NONE;
public static EnergyNetComponent getComponent(String id) {
if (machinesInput.contains(id)) return EnergyNetComponent.SOURCE;
if (machinesStorage.contains(id)) return EnergyNetComponent.DISTRIBUTOR;
if (machinesOutput.contains(id)) return EnergyNetComponent.CONSUMER;
return EnergyNetComponent.NONE;
}
public static NetworkComponent getComponent(Location l) {
if (!BlockStorage.hasBlockInfo(l)) return NetworkComponent.NONE;
public static EnergyNetComponent getComponent(Location l) {
if (!BlockStorage.hasBlockInfo(l)) return EnergyNetComponent.NONE;
String id = BlockStorage.checkID(l);
if (machines_input.contains(id)) return NetworkComponent.SOURCE;
if (machines_storage.contains(id)) return NetworkComponent.DISTRIBUTOR;
if (machines_output.contains(id)) return NetworkComponent.CONSUMER;
return NetworkComponent.NONE;
if (machinesInput.contains(id)) return EnergyNetComponent.SOURCE;
if (machinesStorage.contains(id)) return EnergyNetComponent.DISTRIBUTOR;
if (machinesOutput.contains(id)) return EnergyNetComponent.CONSUMER;
return EnergyNetComponent.NONE;
}
public static void registerComponent(String id, NetworkComponent component) {
public static void registerComponent(String id, EnergyNetComponent component) {
switch (component) {
case CONSUMER:
machines_output.add(id);
machinesOutput.add(id);
break;
case DISTRIBUTOR:
machines_storage.add(id);
machinesStorage.add(id);
break;
case SOURCE:
machines_input.add(id);
machinesInput.add(id);
break;
default:
break;
@ -71,12 +65,12 @@ public class EnergyNet extends Network {
}
public static EnergyNet getNetworkFromLocationOrCreate(Location l) {
EnergyNet energy_network = getNetworkFromLocation(l);
if (energy_network == null) {
energy_network = new EnergyNet(l);
registerNetwork(energy_network);
EnergyNet energyNetwork = getNetworkFromLocation(l);
if (energyNetwork == null) {
energyNetwork = new EnergyNet(l);
registerNetwork(energyNetwork);
}
return energy_network;
return energyNetwork;
}
private Set<Location> input = new HashSet<>();
@ -91,24 +85,25 @@ public class EnergyNet extends Network {
return RANGE;
}
public Network.Component classifyLocation(Location l) {
if (regulator.equals(l)) return Network.Component.REGULATOR;
public NetworkComponent classifyLocation(Location l) {
if (regulator.equals(l)) return NetworkComponent.REGULATOR;
switch (getComponent(l)) {
case DISTRIBUTOR:
return Network.Component.CONNECTOR;
return NetworkComponent.CONNECTOR;
case CONSUMER:
case SOURCE:
return Network.Component.TERMINUS;
return NetworkComponent.TERMINUS;
default:
return null;
}
}
public void locationClassificationChange(Location l, Network.Component from, Network.Component to) {
if (from == Network.Component.TERMINUS) {
public void locationClassificationChange(Location l, NetworkComponent from, NetworkComponent to) {
if (from == NetworkComponent.TERMINUS) {
input.remove(l);
output.remove(l);
}
switch (getComponent(l)) {
case DISTRIBUTOR:
if (ChargableBlock.isCapacitor(l)) storage.add(l);
@ -146,7 +141,7 @@ public class EnergyNet extends Network {
if (item.getEnergyTicker().explode(source)) {
exploded.add(source);
BlockStorage.clearBlockInfo(source);
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
source.getBlock().setType(Material.LAVA);
source.getWorld().createExplosion(source, 0F, false);
});
@ -154,7 +149,7 @@ public class EnergyNet extends Network {
else {
supply = supply + energy;
}
SlimefunStartup.ticker.blockTimings.put(source, System.currentTimeMillis() - timestamp);
SlimefunPlugin.getTicker().blockTimings.put(source, System.currentTimeMillis() - timestamp);
}
input.removeAll(exploded);

View File

@ -0,0 +1,10 @@
package me.mrCookieSlime.Slimefun.api.energy;
public enum EnergyNetComponent {
SOURCE,
DISTRIBUTOR,
CONSUMER,
NONE;
}

View File

@ -11,9 +11,11 @@ import org.bukkit.inventory.meta.ItemMeta;
import me.mrCookieSlime.CSCoreLibPlugin.general.Player.PlayerInventory;
public class ItemEnergy {
public final class ItemEnergy {
// "&c&o&8\u21E8 &e\u26A1 &70 / 50 J"
private ItemEnergy() {}
// "&c&o&8\u21E8 &e\u26A1 &70 / 50 J"
public static float getStoredEnergy(ItemStack item) {
if (item == null || item.getType() == null || item.getType() == Material.AIR) return 0F;

View File

@ -2,6 +2,7 @@ package me.mrCookieSlime.Slimefun.api.inventory;
import java.io.File;
import java.util.ArrayList;
import java.util.logging.Level;
import org.bukkit.Location;
import org.bukkit.block.Block;
@ -10,6 +11,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.Slimefun.api.Slimefun;
public class BlockMenu extends DirtyChestMenu {
@ -93,7 +95,13 @@ public class BlockMenu extends DirtyChestMenu {
}
public void delete(Location l) {
new File("data-storage/Slimefun/stored-inventories/" + serializeLocation(l) + ".sfi").delete();
File file = new File("data-storage/Slimefun/stored-inventories/" + serializeLocation(l) + ".sfi");
if (file.exists()) {
if (!file.delete()) {
Slimefun.getLogger().log(Level.WARNING, "Could not delete File: " + file.getName());
}
}
}
public BlockMenuPreset getPreset() {

View File

@ -12,7 +12,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
public abstract class BlockMenuPreset extends ChestMenu {
@ -50,10 +50,14 @@ public abstract class BlockMenuPreset extends ChestMenu {
}
public abstract void init();
public abstract void newInstance(BlockMenu menu, Block b);
public abstract boolean canOpen(Block b, Player p);
public abstract int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow);
public void newInstance(BlockMenu menu, Block b) {
// This method can optionally be overridden by implementations
}
public int[] getSlotsAccessedByItemTransport(BlockMenu menu, ItemTransportFlow flow, ItemStack item) {
return this.getSlotsAccessedByItemTransport(flow);
}
@ -101,7 +105,7 @@ public abstract class BlockMenuPreset extends ChestMenu {
}
public static BlockMenuPreset getPreset(String id) {
return presets.get(id);
return id == null ? null: presets.get(id);
}
public static boolean isInventory(String id) {
@ -157,9 +161,7 @@ public abstract class BlockMenuPreset extends ChestMenu {
}
public void newInstance(final BlockMenu menu, final Location l) {
Bukkit.getScheduler().runTask(SlimefunStartup.instance, () -> {
newInstance(menu, l.getBlock());
});
Bukkit.getScheduler().runTask(SlimefunPlugin.instance, () -> newInstance(menu, l.getBlock()));
}
}

View File

@ -15,7 +15,9 @@ import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.UniversalBlockMenu;
public class CargoManager {
public final class CargoManager {
private CargoManager() {}
public static ItemStack withdraw(Block node, BlockStorage storage, Block target, ItemStack template) {
if (storage.hasUniversalInventory(target)) {

View File

@ -24,21 +24,22 @@ import org.bukkit.inventory.meta.ItemMeta;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu.MenuClickHandler;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.UniversalBlockMenu;
import me.mrCookieSlime.Slimefun.api.network.Network;
import me.mrCookieSlime.Slimefun.api.network.NetworkComponent;
import me.mrCookieSlime.Slimefun.holograms.CargoHologram;
public class CargoNet extends Network {
public static boolean EXTRA_CHANNELS = false;
public static boolean extraChannels = false;
private static final int RANGE = 5;
public static List<BlockFace> faces = Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST);
public static Map<Location, Integer> round_robin = new HashMap<>();
public static Map<Location, Integer> roundRobin = new HashMap<>();
public static Set<ItemRequest> requests = new HashSet<>();
private static int[] slots = new int[] {19, 20, 21, 28, 29, 30, 37, 38, 39};
@ -55,12 +56,12 @@ public class CargoNet extends Network {
}
public static CargoNet getNetworkFromLocationOrCreate(Location l) {
CargoNet cargo_network = getNetworkFromLocation(l);
if (cargo_network == null) {
cargo_network = new CargoNet(l);
registerNetwork(cargo_network);
CargoNet cargoNetwork = getNetworkFromLocation(l);
if (cargoNetwork == null) {
cargoNetwork = new CargoNet(l);
registerNetwork(cargoNetwork);
}
return cargo_network;
return cargoNetwork;
}
@Deprecated
@ -86,28 +87,28 @@ public class CargoNet extends Network {
return RANGE;
}
public Network.Component classifyLocation(Location l) {
public NetworkComponent classifyLocation(Location l) {
String id = BlockStorage.checkID(l);
if (id == null) return null;
switch(id) {
case "CARGO_MANAGER":
return Component.REGULATOR;
return NetworkComponent.REGULATOR;
case "CARGO_NODE":
return Component.CONNECTOR;
return NetworkComponent.CONNECTOR;
case "CARGO_NODE_INPUT":
case "CARGO_NODE_OUTPUT":
case "CARGO_NODE_OUTPUT_ADVANCED":
case "CT_IMPORT_BUS":
case "CT_EXPORT_BUS":
case "CHEST_TERMINAL":
return Component.TERMINUS;
return NetworkComponent.TERMINUS;
default:
return null;
}
}
public void locationClassificationChange(Location l, Component from, Component to) {
if (from == Component.TERMINUS) {
public void locationClassificationChange(Location l, NetworkComponent from, NetworkComponent to) {
if (from == NetworkComponent.TERMINUS) {
inputNodes.remove(l);
outputNodes.remove(l);
advancedOutputNodes.remove(l);
@ -115,7 +116,7 @@ public class CargoNet extends Network {
imports.remove(l);
exports.remove(l);
}
if (to == Component.TERMINUS) {
if (to == NetworkComponent.TERMINUS) {
switch(BlockStorage.checkID(l)) {
case "CARGO_NODE_INPUT":
inputNodes.add(l);
@ -187,12 +188,12 @@ public class CargoNet extends Network {
CargoNet self = this;
final BlockStorage storage = BlockStorage.getStorage(b.getWorld());
SlimefunStartup.instance.getServer().getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
SlimefunPlugin.instance.getServer().getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
if (BlockStorage.getLocationInfo(b.getLocation(), "visualizer") == null) {
self.display();
}
//Chest Terminal Code
if (EXTRA_CHANNELS) {
if (extraChannels) {
for (Location bus : imports) {
BlockMenu menu = BlockStorage.getInventory(bus);
@ -242,9 +243,9 @@ public class CargoNet extends Network {
for (final Location terminal : terminals) {
BlockMenu menu = BlockStorage.getInventory(terminal);
ItemStack sending_item = menu.getItemInSlot(TERMINAL_OUT_SLOT);
if (sending_item != null) {
requests.add(new ItemRequest(terminal, TERMINAL_OUT_SLOT, sending_item, ItemTransportFlow.INSERT));
ItemStack sendingItem = menu.getItemInSlot(TERMINAL_OUT_SLOT);
if (sendingItem != null) {
requests.add(new ItemRequest(terminal, TERMINAL_OUT_SLOT, sendingItem, ItemTransportFlow.INSERT));
}
}
@ -345,23 +346,23 @@ public class CargoNet extends Network {
List<Location> outputlist = new ArrayList<>(output.get(frequency));
if (roundrobin) {
if (!round_robin.containsKey(input)) {
round_robin.put(input, 0);
if (!roundRobin.containsKey(input)) {
roundRobin.put(input, 0);
}
int c_index = round_robin.get(input);
int cIndex = roundRobin.get(input);
if (c_index < outputlist.size()) {
for (int i = 0; i < c_index; i++) {
if (cIndex < outputlist.size()) {
for (int i = 0; i < cIndex; i++) {
final Location temp = outputlist.get(0);
outputlist.remove(temp);
outputlist.add(temp);
}
c_index++;
cIndex++;
}
else c_index = 1;
else cIndex = 1;
round_robin.put(input, c_index);
roundRobin.put(input, cIndex);
}
for (Location out : outputlist) {
@ -389,7 +390,7 @@ public class CargoNet extends Network {
}
}
//Chest Terminal Code
if (EXTRA_CHANNELS) {
if (extraChannels) {
List<StoredItem> items = new ArrayList<>();
for (Location l: providers) {
Block target = getAttachedBlock(l.getBlock());

View File

@ -3,18 +3,18 @@ package me.mrCookieSlime.Slimefun.api.item_transport;
import org.bukkit.block.Block;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
public final class ChestManipulator {
private ChestManipulator() {}
public static void registerListener(CargoTransportEvent listener) {
SlimefunStartup.instance.getUtilities().cargoTransportEvents.add(listener);
SlimefunPlugin.getUtilities().cargoTransportEvents.add(listener);
}
public static ItemStack trigger(Block b, int slot, ItemStack prev, ItemStack next) {
for (CargoTransportEvent listener: SlimefunStartup.instance.getUtilities().cargoTransportEvents) {
for (CargoTransportEvent listener: SlimefunPlugin.getUtilities().cargoTransportEvents) {
next = listener.onEvent(b, slot, prev, next);
}

View File

@ -1,6 +1,7 @@
package me.mrCookieSlime.Slimefun.api.network;
import java.util.Set;
import java.util.logging.Level;
import java.util.List;
import java.util.Queue;
import java.util.HashSet;
@ -10,14 +11,15 @@ import java.util.ArrayList;
import org.bukkit.Location;
import me.mrCookieSlime.CSCoreLibPlugin.general.Particles.MC_1_13.ParticleEffect;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.api.Slimefun;
public abstract class Network {
private static List<Network> NETWORK_LIST = new ArrayList<>();
private static List<Network> networkList = new ArrayList<>();
public static<T extends Network> T getNetworkFromLocation(Location l, Class<T> type) {
for(Network n: NETWORK_LIST) {
for(Network n: networkList) {
if(type.isInstance(n) && n.connectsTo(l)) {
return type.cast(n);
}
@ -27,7 +29,7 @@ public abstract class Network {
public static<T extends Network> List<T> getNetworksFromLocation(Location l, Class<T> type) {
List<T> ret = new ArrayList<>();
for(Network n: NETWORK_LIST) {
for(Network n: networkList) {
if(type.isInstance(n) && n.connectsTo(l)) {
ret.add(type.cast(n));
}
@ -36,11 +38,11 @@ public abstract class Network {
}
public static void registerNetwork(Network n) {
NETWORK_LIST.add(n);
networkList.add(n);
}
public static void unregisterNetwork(Network n) {
NETWORK_LIST.remove(n);
networkList.remove(n);
}
public static void handleAllNetworkLocationUpdate(Location l) {
@ -49,16 +51,9 @@ public abstract class Network {
}
}
public static enum Component {
CONNECTOR,
REGULATOR,
TERMINUS;
}
public abstract int getRange();
public abstract Component classifyLocation(Location l);
public abstract void locationClassificationChange(Location l, Component from, Component to);
public abstract NetworkComponent classifyLocation(Location l);
public abstract void locationClassificationChange(Location l, NetworkComponent from, NetworkComponent to);
protected Location regulator;
private Queue<Location> nodeQueue = new ArrayDeque<>();
@ -94,15 +89,15 @@ public abstract class Network {
return connectedLocations.contains(l);
}
private Component getCurrentClassification(Location l) {
private NetworkComponent getCurrentClassification(Location l) {
if(regulatorNodes.contains(l)) {
return Component.REGULATOR;
return NetworkComponent.REGULATOR;
}
else if(connectorNodes.contains(l)) {
return Component.CONNECTOR;
return NetworkComponent.CONNECTOR;
}
else if(terminusNodes.contains(l)) {
return Component.TERMINUS;
return NetworkComponent.TERMINUS;
}
return null;
}
@ -111,28 +106,28 @@ public abstract class Network {
int steps = 0;
while (nodeQueue.peek() != null) {
Location l = nodeQueue.poll();
Component currentAssignment = getCurrentClassification(l);
Component classification = classifyLocation(l);
NetworkComponent currentAssignment = getCurrentClassification(l);
NetworkComponent classification = classifyLocation(l);
if (classification != currentAssignment) {
if (currentAssignment == Component.REGULATOR || currentAssignment == Component.CONNECTOR) {
if (currentAssignment == NetworkComponent.REGULATOR || currentAssignment == NetworkComponent.CONNECTOR) {
// Requires a complete rebuild of the network, so we just throw the current one away.
unregisterNetwork(this);
return;
}
else if (currentAssignment == Component.TERMINUS) {
else if (currentAssignment == NetworkComponent.TERMINUS) {
terminusNodes.remove(l);
}
if (classification == Component.REGULATOR) {
if (classification == NetworkComponent.REGULATOR) {
regulatorNodes.add(l);
discoverNeighbors(l);
}
else if(classification == Component.CONNECTOR) {
else if(classification == NetworkComponent.CONNECTOR) {
connectorNodes.add(l);
discoverNeighbors(l);
}
else if(classification == Component.TERMINUS) {
else if(classification == NetworkComponent.TERMINUS) {
terminusNodes.add(l);
}
@ -147,8 +142,8 @@ public abstract class Network {
private void discoverNeighbors(Location l, double xDiff, double yDiff, double zDiff) {
for(int i = getRange() + 1; i > 0; i --) {
Location new_location = l.clone().add(i * xDiff, i * yDiff, i * zDiff);
addLocationToNetwork(new_location);
Location newLocation = l.clone().add(i * xDiff, i * yDiff, i * zDiff);
addLocationToNetwork(newLocation);
}
}
@ -162,12 +157,12 @@ public abstract class Network {
}
public void display() {
SlimefunStartup.instance.getServer().getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
SlimefunPlugin.instance.getServer().getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
for(Location l: connectedLocations) {
try {
ParticleEffect.REDSTONE.display(l.clone().add(0.5, 0.5, 0.5), 0, 0, 0, 1, 1);
} catch(Exception e) {
e.printStackTrace();
} catch(Exception x) {
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while playing Network Animation for Slimefun " + Slimefun.getVersion(), x);
}
}
});

View File

@ -0,0 +1,7 @@
package me.mrCookieSlime.Slimefun.api.network;
public enum NetworkComponent {
CONNECTOR,
REGULATOR,
TERMINUS;
}

View File

@ -2,12 +2,14 @@ package me.mrCookieSlime.Slimefun.autosave;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.World;
import me.mrCookieSlime.Slimefun.SlimefunStartup;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
public class BlockAutoSaver implements Runnable {
@ -27,7 +29,7 @@ public class BlockAutoSaver implements Runnable {
}
if (!worlds.isEmpty()) {
System.out.println("[Slimefun] Auto-Saving Block Data... (Next Auto-Save: " + SlimefunStartup.getCfg().getInt("options.auto-save-delay-in-minutes") + "m)");
Slimefun.getLogger().log(Level.INFO, "Auto-Saving Block Data... (Next Auto-Save: " + SlimefunPlugin.getCfg().getInt("options.auto-save-delay-in-minutes") + "m)");
for (BlockStorage storage: worlds) {
storage.save(false);

View File

@ -1,8 +1,10 @@
package me.mrCookieSlime.Slimefun.autosave;
import java.util.Iterator;
import java.util.logging.Level;
import me.mrCookieSlime.Slimefun.api.PlayerProfile;
import me.mrCookieSlime.Slimefun.api.Slimefun;
public class PlayerAutoSaver implements Runnable {
@ -23,7 +25,7 @@ public class PlayerAutoSaver implements Runnable {
}
if (players > 0) {
System.out.println("[Slimefun] Auto-Saved Player Data for " + players + " Player(s)!");
Slimefun.getLogger().log(Level.INFO, "Auto-Saved Player Data for " + players + " Player(s)!");
}
}

Some files were not shown because too many files have changed in this diff Show More