mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-21 12:15:50 +00:00
commit
428bfcc575
14
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
14
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
## Description
|
||||||
|
<!-- Please explain your changes -->
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
<!-- Please list all the changes you have made -->
|
||||||
|
|
||||||
|
## Related Issues
|
||||||
|
<!-- Please tag any Issues related to your Pull Request -->
|
||||||
|
<!-- Syntax: "Resolves #000" -->
|
||||||
|
|
||||||
|
## Testability
|
||||||
|
<!-- Check the boxes below if - and only if - you tested your changes thoroughly -->
|
||||||
|
- [ ] I have fully tested the proposed changes and promise that they will not break everything into chaos.
|
||||||
|
- [ ] I have also tested the proposed changes in combination with various popular addons and can confirm my changes do not break them.
|
18
.github/PULL_REQUEST_TEMPLATE/features.md
vendored
Normal file
18
.github/PULL_REQUEST_TEMPLATE/features.md
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
## Description
|
||||||
|
<!-- Please explain your changes -->
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
<!-- Please list all the changes you have made -->
|
||||||
|
|
||||||
|
## How this benefits Slimefun
|
||||||
|
<!-- Please explain why you think this should be added to Slimefun -->
|
||||||
|
<!-- In other words: Why did you not make an Addon? -->
|
||||||
|
|
||||||
|
## Related Issues (Optional)
|
||||||
|
<!-- Please tag any Issues related to your Pull Request -->
|
||||||
|
<!-- Syntax: "Resolves #000" -->
|
||||||
|
|
||||||
|
## Testability
|
||||||
|
<!-- Check the boxes below if - and only if - you tested your changes thoroughly -->
|
||||||
|
* [ ] I have fully tested the proposed changes and promise that they will not break everything into chaos.
|
||||||
|
* [ ] I have also tested the proposed changes in combination with various popular addons and can confirm my changes do not break them.
|
14
.github/PULL_REQUEST_TEMPLATE/fix.md
vendored
Normal file
14
.github/PULL_REQUEST_TEMPLATE/fix.md
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
## Description
|
||||||
|
<!-- Please explain your changes -->
|
||||||
|
|
||||||
|
## Changes
|
||||||
|
<!-- Please list all the changes you have made -->
|
||||||
|
|
||||||
|
## Related Issues
|
||||||
|
<!-- Please tag any Issues related to your Pull Request -->
|
||||||
|
<!-- Syntax: "Fixes #000" -->
|
||||||
|
|
||||||
|
## Testability
|
||||||
|
<!-- Check the boxes below if - and only if - you tested your changes thoroughly -->
|
||||||
|
* [ ] I have fully tested the proposed changes and promise that they will not break everything into chaos.
|
||||||
|
* [ ] I have also tested the proposed changes in combination with various popular addons and can confirm my changes do not break them.
|
@ -24,6 +24,9 @@ Release Candidates or "stable" builds will have a proper Version such as "4.1.18
|
|||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
You can also find the most recent development builds for all my other Plugins (including Slimefun Addons) on here:
|
||||||
|
https://thebusybiscuit.github.io/builds/
|
||||||
|
|
||||||
## Discord
|
## Discord
|
||||||
You can find Slimefun's community on Discord!
|
You can find Slimefun's community on Discord!
|
||||||
Click the badge to join it for Suggestions/Questions or other discussions about this plugin.
|
Click the badge to join it for Suggestions/Questions or other discussions about this plugin.
|
||||||
|
4
pom.xml
4
pom.xml
@ -67,6 +67,8 @@
|
|||||||
<artifact>com.github.thebusybiscuit:CS-CoreLib2</artifact>
|
<artifact>com.github.thebusybiscuit:CS-CoreLib2</artifact>
|
||||||
<includes>
|
<includes>
|
||||||
<include>**/cscorelib2/updater/**</include>
|
<include>**/cscorelib2/updater/**</include>
|
||||||
|
<include>**/cscorelib2/materials/**</include>
|
||||||
|
<include>**/cscorelib2/protection/**</include>
|
||||||
</includes>
|
</includes>
|
||||||
</filter>
|
</filter>
|
||||||
</filters>
|
</filters>
|
||||||
@ -122,7 +124,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.thebusybiscuit</groupId>
|
<groupId>com.github.thebusybiscuit</groupId>
|
||||||
<artifactId>CS-CoreLib2</artifactId>
|
<artifactId>CS-CoreLib2</artifactId>
|
||||||
<version>0.3.7</version>
|
<version>0.4.1</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -14,6 +14,7 @@ options:
|
|||||||
research-give-fireworks: true
|
research-give-fireworks: true
|
||||||
legacy-ore-washer: false
|
legacy-ore-washer: false
|
||||||
legacy-dust-washer: false
|
legacy-dust-washer: false
|
||||||
|
legacy-ore-grinder: true
|
||||||
guide:
|
guide:
|
||||||
default-view-book: false
|
default-view-book: false
|
||||||
URID:
|
URID:
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,151 +0,0 @@
|
|||||||
package me.mrCookieSlime.Slimefun.CSCoreLibSetup;
|
|
||||||
|
|
||||||
import java.io.BufferedInputStream;
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.net.HttpURLConnection;
|
|
||||||
import java.net.MalformedURLException;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.net.URLConnection;
|
|
||||||
|
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
|
|
||||||
import com.google.gson.JsonArray;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
import com.google.gson.JsonParser;
|
|
||||||
|
|
||||||
public class CSCoreLibLoader {
|
|
||||||
|
|
||||||
Plugin plugin;
|
|
||||||
URL url;
|
|
||||||
URL download;
|
|
||||||
File file;
|
|
||||||
|
|
||||||
public CSCoreLibLoader(Plugin plugin) {
|
|
||||||
this.plugin = plugin;
|
|
||||||
try {
|
|
||||||
this.url = new URL("https://api.curseforge.com/servermods/files?projectIds=88802");
|
|
||||||
} catch (MalformedURLException e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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(" ");
|
|
||||||
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> {
|
|
||||||
if (connect()) install();
|
|
||||||
}, 10L);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean connect() {
|
|
||||||
try {
|
|
||||||
final URLConnection connection = this.url.openConnection();
|
|
||||||
connection.setConnectTimeout(5000);
|
|
||||||
connection.addRequestProperty("User-Agent", "CS-CoreLib Loader (by mrCookieSlime)");
|
|
||||||
connection.setDoOutput(true);
|
|
||||||
|
|
||||||
final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
|
||||||
final JsonArray array = new JsonParser().parse(reader).getAsJsonArray();
|
|
||||||
final JsonObject json = array.get(array.size() - 1).getAsJsonObject();
|
|
||||||
|
|
||||||
download = traceURL(json.get("downloadUrl").getAsString().replace("https:", "http:"));
|
|
||||||
file = new File("plugins/" + json.get("name").getAsString() + ".jar");
|
|
||||||
|
|
||||||
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(" ");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private URL traceURL(String location) throws IOException {
|
|
||||||
HttpURLConnection connection = null;
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
URL url = new URL(location);
|
|
||||||
connection = (HttpURLConnection) url.openConnection();
|
|
||||||
|
|
||||||
connection.setInstanceFollowRedirects(false);
|
|
||||||
connection.setConnectTimeout(5000);
|
|
||||||
connection.addRequestProperty("User-Agent", "Auto Updater (by mrCookieSlime)");
|
|
||||||
|
|
||||||
switch (connection.getResponseCode()) {
|
|
||||||
case HttpURLConnection.HTTP_MOVED_PERM:
|
|
||||||
case HttpURLConnection.HTTP_MOVED_TEMP:
|
|
||||||
String loc = connection.getHeaderField("Location");
|
|
||||||
location = new URL(new URL(location), loc).toExternalForm();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new URL(connection.getURL().toString().replaceAll(" ", "%20"));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void install() {
|
|
||||||
BufferedInputStream input = null;
|
|
||||||
FileOutputStream output = null;
|
|
||||||
try {
|
|
||||||
input = new BufferedInputStream(download.openStream());
|
|
||||||
output = new FileOutputStream(file);
|
|
||||||
|
|
||||||
final byte[] data = new byte[1024];
|
|
||||||
int read;
|
|
||||||
while ((read = input.read(data, 0, 1024)) != -1) {
|
|
||||||
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(" ");
|
|
||||||
} 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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -12,10 +12,10 @@ public class MultiBlockInteractEvent extends Event implements Cancellable {
|
|||||||
|
|
||||||
private static final HandlerList handlers = new HandlerList();
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
|
||||||
Player p;
|
private Player p;
|
||||||
MultiBlock mb;
|
private MultiBlock mb;
|
||||||
Block b;
|
private Block b;
|
||||||
boolean cancelled;
|
private boolean cancelled;
|
||||||
|
|
||||||
public HandlerList getHandlers() {
|
public HandlerList getHandlers() {
|
||||||
return handlers;
|
return handlers;
|
||||||
|
@ -11,9 +11,9 @@ public class ResearchUnlockEvent extends Event implements Cancellable {
|
|||||||
|
|
||||||
private static final HandlerList handlers = new HandlerList();
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
|
||||||
Player p;
|
private Player p;
|
||||||
Research r;
|
private Research r;
|
||||||
boolean cancelled;
|
private boolean cancelled;
|
||||||
|
|
||||||
public HandlerList getHandlers() {
|
public HandlerList getHandlers() {
|
||||||
return handlers;
|
return handlers;
|
||||||
|
@ -5,16 +5,24 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
|
|
||||||
public interface OreGenResource {
|
public interface OreGenResource {
|
||||||
|
|
||||||
// Returns the default supply of this resource in that biome
|
/**
|
||||||
public int getDefaultSupply(Biome biome);
|
* Returns the default supply of this resource in that biome
|
||||||
|
*/
|
||||||
|
int getDefaultSupply(Biome biome);
|
||||||
|
|
||||||
// Name/ID e.g. "Oil"
|
/**
|
||||||
public String getName();
|
* Name/ID e.g. "Oil"
|
||||||
|
*/
|
||||||
|
String getName();
|
||||||
|
|
||||||
// For the GEO-Scanner
|
/**
|
||||||
public ItemStack getIcon();
|
* For the GEO-Scanner
|
||||||
|
*/
|
||||||
|
ItemStack getIcon();
|
||||||
|
|
||||||
// Measurement Unit e.g. "Buckets"
|
/**
|
||||||
public String getMeasurementUnit();
|
* Measurement Unit e.g. "Buckets"
|
||||||
|
*/
|
||||||
|
String getMeasurementUnit();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,26 +1,27 @@
|
|||||||
package me.mrCookieSlime.Slimefun.GEO;
|
package me.mrCookieSlime.Slimefun.GEO;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.logging.Level;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
|
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||||
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||||
|
|
||||||
public class OreGenSystem {
|
public final class OreGenSystem {
|
||||||
|
|
||||||
public static Map<String, OreGenResource> map = new HashMap<>();
|
private OreGenSystem() {}
|
||||||
|
|
||||||
public static Collection<OreGenResource> listResources() {
|
public static Collection<OreGenResource> listResources() {
|
||||||
return map.values();
|
return SlimefunPlugin.getUtilities().resources.values();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerResource(OreGenResource resource) {
|
public static void registerResource(OreGenResource resource) {
|
||||||
map.put(resource.getName(), resource);
|
SlimefunPlugin.getUtilities().resources.put(resource.getName(), resource);
|
||||||
System.out.println("[Slimefun - GEO] Registering Ore Gen: " + resource.getName());
|
Slimefun.getLogger().log(Level.INFO, "Registering Ore Gen: " + resource.getName());
|
||||||
|
|
||||||
Config cfg = new Config("plugins/Slimefun/generators/" + resource.getName() + ".cfg");
|
Config cfg = new Config("plugins/Slimefun/generators/" + resource.getName() + ".cfg");
|
||||||
for (Biome biome: Biome.values()) {
|
for (Biome biome: Biome.values()) {
|
||||||
@ -30,7 +31,7 @@ public class OreGenSystem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static OreGenResource getResource(String name) {
|
public static OreGenResource getResource(String name) {
|
||||||
return map.get(name);
|
return SlimefunPlugin.getUtilities().resources.get(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int getDefault(OreGenResource resource, Biome biome) {
|
private static int getDefault(OreGenResource resource, Biome biome) {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package me.mrCookieSlime.Slimefun.GEO.Resources;
|
package me.mrCookieSlime.Slimefun.GEO.resources;
|
||||||
|
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
@ -10,14 +10,7 @@ public class NetherIceResource implements OreGenResource {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getDefaultSupply(Biome biome) {
|
public int getDefaultSupply(Biome biome) {
|
||||||
switch (biome) {
|
return biome == Biome.NETHER ? 32: 0;
|
||||||
case NETHER: {
|
|
||||||
return 32;
|
|
||||||
}
|
|
||||||
default: {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
@ -1,4 +1,4 @@
|
|||||||
package me.mrCookieSlime.Slimefun.GEO.Resources;
|
package me.mrCookieSlime.Slimefun.GEO.resources;
|
||||||
|
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
@ -14,35 +14,30 @@ public class OilResource implements OreGenResource {
|
|||||||
switch (biome) {
|
switch (biome) {
|
||||||
case SNOWY_BEACH:
|
case SNOWY_BEACH:
|
||||||
case STONE_SHORE:
|
case STONE_SHORE:
|
||||||
case BEACH: {
|
case BEACH:
|
||||||
return CSCoreLib.randomizer().nextInt(6) + 2;
|
return CSCoreLib.randomizer().nextInt(6) + 2;
|
||||||
}
|
|
||||||
|
|
||||||
case DESERT:
|
case DESERT:
|
||||||
case DESERT_HILLS:
|
case DESERT_HILLS:
|
||||||
case DESERT_LAKES: {
|
case DESERT_LAKES:
|
||||||
return CSCoreLib.randomizer().nextInt(40) + 19;
|
return CSCoreLib.randomizer().nextInt(40) + 19;
|
||||||
}
|
|
||||||
|
|
||||||
case MOUNTAINS:
|
case MOUNTAINS:
|
||||||
case GRAVELLY_MOUNTAINS:
|
case GRAVELLY_MOUNTAINS:
|
||||||
case MOUNTAIN_EDGE:
|
case MOUNTAIN_EDGE:
|
||||||
case RIVER: {
|
case RIVER:
|
||||||
return CSCoreLib.randomizer().nextInt(14) + 13;
|
return CSCoreLib.randomizer().nextInt(14) + 13;
|
||||||
}
|
|
||||||
|
|
||||||
case SNOWY_MOUNTAINS:
|
case SNOWY_MOUNTAINS:
|
||||||
case SNOWY_TUNDRA:
|
case SNOWY_TUNDRA:
|
||||||
case ICE_SPIKES:
|
case ICE_SPIKES:
|
||||||
case FROZEN_OCEAN:
|
case FROZEN_OCEAN:
|
||||||
case FROZEN_RIVER: {
|
case FROZEN_RIVER:
|
||||||
return CSCoreLib.randomizer().nextInt(11) + 3;
|
return CSCoreLib.randomizer().nextInt(11) + 3;
|
||||||
}
|
|
||||||
|
|
||||||
case THE_END:
|
case THE_END:
|
||||||
case NETHER: {
|
case NETHER:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
case BADLANDS:
|
case BADLANDS:
|
||||||
@ -52,25 +47,21 @@ public class OilResource implements OreGenResource {
|
|||||||
case MODIFIED_BADLANDS_PLATEAU:
|
case MODIFIED_BADLANDS_PLATEAU:
|
||||||
case MODIFIED_WOODED_BADLANDS_PLATEAU:
|
case MODIFIED_WOODED_BADLANDS_PLATEAU:
|
||||||
case MUSHROOM_FIELDS:
|
case MUSHROOM_FIELDS:
|
||||||
case MUSHROOM_FIELD_SHORE: {
|
case MUSHROOM_FIELD_SHORE:
|
||||||
return CSCoreLib.randomizer().nextInt(24) + 14;
|
return CSCoreLib.randomizer().nextInt(24) + 14;
|
||||||
}
|
|
||||||
|
|
||||||
case DEEP_OCEAN:
|
case DEEP_OCEAN:
|
||||||
case OCEAN: {
|
case OCEAN:
|
||||||
return CSCoreLib.randomizer().nextInt(62) + 24;
|
return CSCoreLib.randomizer().nextInt(62) + 24;
|
||||||
}
|
|
||||||
|
|
||||||
case SWAMP:
|
case SWAMP:
|
||||||
case SWAMP_HILLS: {
|
case SWAMP_HILLS:
|
||||||
return CSCoreLib.randomizer().nextInt(20) + 4;
|
return CSCoreLib.randomizer().nextInt(20) + 4;
|
||||||
}
|
|
||||||
|
|
||||||
default: {
|
default:
|
||||||
return CSCoreLib.randomizer().nextInt(10) + 6;
|
return CSCoreLib.randomizer().nextInt(10) + 6;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
@ -1,7 +1,6 @@
|
|||||||
package me.mrCookieSlime.Slimefun.GPS;
|
package me.mrCookieSlime.Slimefun.GPS;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.Set;
|
||||||
import java.util.List;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -16,12 +15,13 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu;
|
|||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.CustomBookOverlay;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.CustomBookOverlay;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.MenuHelper;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.MenuHelper;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
||||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
|
|
||||||
public class Elevator {
|
public final class Elevator {
|
||||||
|
|
||||||
public static List<UUID> ignored = new ArrayList<>();
|
private Elevator() {}
|
||||||
|
|
||||||
public static void openEditor(Player p, final Block b) {
|
public static void openEditor(Player p, final Block b) {
|
||||||
ChestMenu menu = new ChestMenu("Elevator Settings");
|
ChestMenu menu = new ChestMenu("Elevator Settings");
|
||||||
@ -35,7 +35,7 @@ public class Elevator {
|
|||||||
pl.sendMessage("");
|
pl.sendMessage("");
|
||||||
|
|
||||||
MenuHelper.awaitChatInput(pl, (player, message) -> {
|
MenuHelper.awaitChatInput(pl, (player, message) -> {
|
||||||
BlockStorage.addBlockInfo(b, "floor", message.replaceAll("&", "&"));
|
BlockStorage.addBlockInfo(b, "floor", message.replace(ChatColor.COLOR_CHAR, '&'));
|
||||||
|
|
||||||
player.sendMessage("");
|
player.sendMessage("");
|
||||||
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4&l>> &eSuccessfully named this Floor:"));
|
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4&l>> &eSuccessfully named this Floor:"));
|
||||||
@ -53,8 +53,10 @@ public class Elevator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void openDialogue(Player p, Block b) {
|
public static void openDialogue(Player p, Block b) {
|
||||||
if (ignored.contains(p.getUniqueId())) {
|
Set<UUID> elevatorUsers = SlimefunPlugin.getUtilities().elevatorUsers;
|
||||||
ignored.remove(p.getUniqueId());
|
|
||||||
|
if (elevatorUsers.contains(p.getUniqueId())) {
|
||||||
|
elevatorUsers.remove(p.getUniqueId());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ import java.util.HashSet;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -24,6 +25,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.MenuHelper;
|
|||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
|
||||||
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
import me.mrCookieSlime.Slimefun.GEO.OreGenResource;
|
import me.mrCookieSlime.Slimefun.GEO.OreGenResource;
|
||||||
import me.mrCookieSlime.Slimefun.GEO.OreGenSystem;
|
import me.mrCookieSlime.Slimefun.GEO.OreGenSystem;
|
||||||
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
||||||
@ -35,17 +37,21 @@ public class GPSNetwork {
|
|||||||
private int[] border = new int[] {0, 1, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53};
|
private int[] border = new int[] {0, 1, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53};
|
||||||
private int[] inventory = new int[] {19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43};
|
private int[] inventory = new int[] {19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43};
|
||||||
|
|
||||||
public void updateTransmitter(Block b, UUID uuid, NetworkStatus status) {
|
private static final int[] teleporter_border = new int[] {0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53};
|
||||||
|
private static final int[] teleporter_inventory = new int[] {19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43};
|
||||||
|
|
||||||
|
public void updateTransmitter(Location l, UUID uuid, NetworkStatus status) {
|
||||||
Set<Location> set = new HashSet<>();
|
Set<Location> set = new HashSet<>();
|
||||||
if (transmitters.containsKey(uuid)) set = transmitters.get(uuid);
|
if (transmitters.containsKey(uuid)) set = transmitters.get(uuid);
|
||||||
if (status.equals(NetworkStatus.ONLINE)) {
|
|
||||||
if (!set.contains(b.getLocation())) {
|
if (status == NetworkStatus.ONLINE) {
|
||||||
set.add(b.getLocation());
|
if (!set.contains(l)) {
|
||||||
|
set.add(l);
|
||||||
transmitters.put(uuid, set);
|
transmitters.put(uuid, set);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
set.remove(b.getLocation());
|
set.remove(l);
|
||||||
transmitters.put(uuid, set);
|
transmitters.put(uuid, set);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -64,7 +70,7 @@ public class GPSNetwork {
|
|||||||
else return transmitters.get(uuid).size();
|
else return transmitters.get(uuid).size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openTransmitterControlPanel(Player p) throws Exception {
|
public void openTransmitterControlPanel(Player p) {
|
||||||
ChestMenu menu = new ChestMenu("&9Control Panel");
|
ChestMenu menu = new ChestMenu("&9Control Panel");
|
||||||
|
|
||||||
for (int slot : border) {
|
for (int slot : border) {
|
||||||
@ -73,6 +79,7 @@ public class GPSNetwork {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
menu.addItem(2, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&7Transmitter Overview &e(Selected)"));
|
menu.addItem(2, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&7Transmitter Overview &e(Selected)"));
|
||||||
menu.addMenuClickHandler(2,
|
menu.addMenuClickHandler(2,
|
||||||
(pl, slot, item, action) -> false
|
(pl, slot, item, action) -> false
|
||||||
@ -85,11 +92,7 @@ public class GPSNetwork {
|
|||||||
|
|
||||||
menu.addItem(6, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &r(Select)"));
|
menu.addItem(6, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &r(Select)"));
|
||||||
menu.addMenuClickHandler(6, (pl, slot, item, action) -> {
|
menu.addMenuClickHandler(6, (pl, slot, item, action) -> {
|
||||||
try {
|
|
||||||
openWaypointControlPanel(pl);
|
openWaypointControlPanel(pl);
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -99,12 +102,13 @@ public class GPSNetwork {
|
|||||||
int slot = inventory[index];
|
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.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,
|
menu.addMenuClickHandler(slot, (pl, slotn, item, action) -> false);
|
||||||
(pl, slotn, item, action) -> false
|
|
||||||
);
|
|
||||||
|
|
||||||
index++;
|
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);
|
menu.open(p);
|
||||||
}
|
}
|
||||||
@ -115,10 +119,10 @@ public class GPSNetwork {
|
|||||||
if (entry.getKey().startsWith("&4Deathpoint")) {
|
if (entry.getKey().startsWith("&4Deathpoint")) {
|
||||||
return CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWFlMzg1NWY5NTJjZDRhMDNjMTQ4YTk0NmUzZjgxMmE1OTU1YWQzNWNiY2I1MjYyN2VhNGFjZDQ3ZDMwODEifX19");
|
return CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWFlMzg1NWY5NTJjZDRhMDNjMTQ4YTk0NmUzZjgxMmE1OTU1YWQzNWNiY2I1MjYyN2VhNGFjZDQ3ZDMwODEifX19");
|
||||||
}
|
}
|
||||||
else if (l.getWorld().getEnvironment().equals(Environment.NETHER)) {
|
else if (l.getWorld().getEnvironment() == Environment.NETHER) {
|
||||||
return CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDgzNTcxZmY1ODlmMWE1OWJiMDJiODA4MDBmYzczNjExNmUyN2MzZGNmOWVmZWJlZGU4Y2YxZmRkZSJ9fX0=");
|
return CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDgzNTcxZmY1ODlmMWE1OWJiMDJiODA4MDBmYzczNjExNmUyN2MzZGNmOWVmZWJlZGU4Y2YxZmRkZSJ9fX0=");
|
||||||
}
|
}
|
||||||
else if (l.getWorld().getEnvironment().equals(Environment.THE_END)) {
|
else if (l.getWorld().getEnvironment() == Environment.THE_END) {
|
||||||
return CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzZjYWM1OWIyYWFlNDg5YWEwNjg3YjVkODAyYjI1NTVlYjE0YTQwYmQ2MmIyMWViMTE2ZmE1NjljZGI3NTYifX19");
|
return CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzZjYWM1OWIyYWFlNDg5YWEwNjg3YjVkODAyYjI1NTVlYjE0YTQwYmQ2MmIyMWViMTE2ZmE1NjljZGI3NTYifX19");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -126,34 +130,25 @@ public class GPSNetwork {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openWaypointControlPanel(Player p) throws Exception {
|
public void openWaypointControlPanel(Player p) {
|
||||||
ChestMenu menu = new ChestMenu("&9Control Panel");
|
ChestMenu menu = new ChestMenu("&9Control Panel");
|
||||||
|
|
||||||
for (int slot: border) {
|
for (int slot: border) {
|
||||||
menu.addItem(slot, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
|
menu.addItem(slot, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (pl, slotn, item, action) -> false);
|
||||||
(pl, slotn, item, action) -> false
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
menu.addItem(2, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&7Transmitter Overview &r(Select)"));
|
menu.addItem(2, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&7Transmitter Overview &r(Select)"));
|
||||||
menu.addMenuClickHandler(2, (pl, slot, item, action) -> {
|
menu.addMenuClickHandler(2, (pl, slot, item, action) -> {
|
||||||
try {
|
|
||||||
openTransmitterControlPanel(pl);
|
openTransmitterControlPanel(pl);
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return false;
|
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.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,
|
menu.addMenuClickHandler(4, (pl, slot, item, action) -> false);
|
||||||
(pl, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
|
|
||||||
menu.addItem(6, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &e(Selected)"));
|
menu.addItem(6, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &e(Selected)"));
|
||||||
menu.addMenuClickHandler(6,
|
menu.addMenuClickHandler(6, (pl, slot, item, action) -> false);
|
||||||
(pl, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
|
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for (final Map.Entry<String, Location> entry : getWaypoints(p.getUniqueId()).entrySet()) {
|
for (final Map.Entry<String, Location> entry : getWaypoints(p.getUniqueId()).entrySet()) {
|
||||||
@ -170,16 +165,17 @@ public class GPSNetwork {
|
|||||||
cfg.setValue(id, null);
|
cfg.setValue(id, null);
|
||||||
cfg.save();
|
cfg.save();
|
||||||
pl.playSound(pl.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1F);
|
pl.playSound(pl.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1F);
|
||||||
try {
|
|
||||||
openWaypointControlPanel(pl);
|
openWaypointControlPanel(pl);
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
index++;
|
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);
|
menu.open(p);
|
||||||
}
|
}
|
||||||
@ -223,7 +219,7 @@ public class GPSNetwork {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Set<Location> getTransmitters(UUID uuid) {
|
public Set<Location> getTransmitters(UUID uuid) {
|
||||||
return transmitters.containsKey(uuid) ? transmitters.get(uuid): new HashSet<Location>();
|
return transmitters.containsKey(uuid) ? transmitters.get(uuid): new HashSet<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void scanChunk(Player p, Chunk chunk) {
|
public void scanChunk(Player p, Chunk chunk) {
|
||||||
@ -238,29 +234,22 @@ public class GPSNetwork {
|
|||||||
for (OreGenResource resource: OreGenSystem.listResources()) {
|
for (OreGenResource resource: OreGenSystem.listResources()) {
|
||||||
int supply = OreGenSystem.getSupplies(resource, chunk, true);
|
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()),
|
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);
|
||||||
(pl, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
menu.open(p);
|
menu.open(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final static int[] teleporter_border = new int[] {0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53};
|
public static void openTeleporterGUI(Player p, UUID uuid, Block b, final int complexity) {
|
||||||
private final static int[] teleporter_inventory = new int[] {19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43};
|
if (SlimefunPlugin.getUtilities().teleporterUsers.contains(p.getUniqueId())) return;
|
||||||
|
|
||||||
public static void openTeleporterGUI(Player p, UUID uuid, Block b, final int complexity) throws Exception {
|
|
||||||
if (TeleportationSequence.players.contains(p.getUniqueId())) return;
|
|
||||||
|
|
||||||
p.playSound(p.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1F);
|
p.playSound(p.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1F);
|
||||||
TeleportationSequence.players.add(p.getUniqueId());
|
SlimefunPlugin.getUtilities().teleporterUsers.add(p.getUniqueId());
|
||||||
|
|
||||||
ChestMenu menu = new ChestMenu("&3Teleporter");
|
ChestMenu menu = new ChestMenu("&3Teleporter");
|
||||||
|
|
||||||
menu.addMenuCloseHandler(
|
menu.addMenuCloseHandler(pl -> SlimefunPlugin.getUtilities().teleporterUsers.remove(pl.getUniqueId()));
|
||||||
pl -> TeleportationSequence.players.remove(pl.getUniqueId())
|
|
||||||
);
|
|
||||||
|
|
||||||
for (int slot : teleporter_border) {
|
for (int slot : teleporter_border) {
|
||||||
menu.addItem(slot, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
|
menu.addItem(slot, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
|
||||||
@ -268,10 +257,9 @@ public class GPSNetwork {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &e(Select a Destination)"));
|
menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &e(Select a Destination)"));
|
||||||
menu.addMenuClickHandler(4,
|
menu.addMenuClickHandler(4, (pl, slot, item, action) -> false);
|
||||||
(pl, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
|
|
||||||
final Location source = new Location(b.getWorld(), b.getX() + 0.5D, b.getY() + 2D, b.getZ() + 0.5D);
|
final Location source = new Location(b.getWorld(), b.getX() + 0.5D, b.getY() + 2D, b.getZ() + 0.5D);
|
||||||
int index = 0;
|
int index = 0;
|
||||||
@ -291,6 +279,10 @@ public class GPSNetwork {
|
|||||||
|
|
||||||
index++;
|
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);
|
menu.open(p);
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
package me.mrCookieSlime.Slimefun.GPS;
|
package me.mrCookieSlime.Slimefun.GPS;
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -15,14 +14,15 @@ import org.bukkit.potion.PotionEffectType;
|
|||||||
|
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.World.TitleBuilder;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.World.TitleBuilder;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.World.TitleBuilder.TitleType;
|
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 class TeleportationSequence {
|
public final class TeleportationSequence {
|
||||||
|
|
||||||
public static Set<UUID> players = new HashSet<>();
|
private TeleportationSequence() {}
|
||||||
|
|
||||||
public static void start(UUID uuid, int complexity, Location source, Location destination, boolean resistance) {
|
public static void start(UUID uuid, int complexity, Location source, Location destination, boolean resistance) {
|
||||||
players.add(uuid);
|
SlimefunPlugin.getUtilities().teleporterUsers.add(uuid);
|
||||||
|
|
||||||
updateProgress(uuid, getSpeed(complexity, source, destination), 1, source, destination, resistance);
|
updateProgress(uuid, getSpeed(complexity, source, destination), 1, source, destination, resistance);
|
||||||
}
|
}
|
||||||
@ -50,7 +50,8 @@ public class TeleportationSequence {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void cancel(UUID uuid, Player p) {
|
private static void cancel(UUID uuid, Player p) {
|
||||||
players.remove(uuid);
|
SlimefunPlugin.getUtilities().teleporterUsers.remove(uuid);
|
||||||
|
|
||||||
if (p != null) {
|
if (p != null) {
|
||||||
try {
|
try {
|
||||||
TitleBuilder title = (TitleBuilder) new TitleBuilder(20, 60, 20).addText(ChatColor.translateAlternateColorCodes('&', "&4Teleportation cancelled"));
|
TitleBuilder title = (TitleBuilder) new TitleBuilder(20, 60, 20).addText(ChatColor.translateAlternateColorCodes('&', "&4Teleportation cancelled"));
|
||||||
@ -59,7 +60,7 @@ public class TeleportationSequence {
|
|||||||
title.send(TitleType.TITLE, p);
|
title.send(TitleType.TITLE, p);
|
||||||
subtitle.send(TitleType.SUBTITLE, p);
|
subtitle.send(TitleType.SUBTITLE, p);
|
||||||
} catch(Exception x) {
|
} catch(Exception x) {
|
||||||
x.printStackTrace();
|
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while cancelling a Teleportation Sequence for Slimefun " + Slimefun.getVersion(), x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -84,7 +85,7 @@ public 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().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);
|
destination.getWorld().playSound(destination, Sound.ENTITY_BLAZE_DEATH, 2F, 1.4F);
|
||||||
players.remove(uuid);
|
SlimefunPlugin.getUtilities().teleporterUsers.remove(uuid);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
TitleBuilder title = (TitleBuilder) new TitleBuilder(0, 60, 0).addText(ChatColor.translateAlternateColorCodes('&', "&3Teleporting..."));
|
TitleBuilder title = (TitleBuilder) new TitleBuilder(0, 60, 0).addText(ChatColor.translateAlternateColorCodes('&', "&3Teleporting..."));
|
||||||
@ -96,12 +97,10 @@ public class TeleportationSequence {
|
|||||||
source.getWorld().spawnParticle(Particle.PORTAL, source, progress * 2, 0.2F, 0.8F, 0.2F);
|
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);
|
source.getWorld().playSound(source, Sound.UI_BUTTON_CLICK, 1.7F, 0.6F);
|
||||||
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
|
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> updateProgress(uuid, speed, progress + speed, source, destination, resistance), 10L);
|
||||||
updateProgress(uuid, speed, progress + speed, source, destination, resistance);
|
|
||||||
}, 10l);
|
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception x) {
|
||||||
e.printStackTrace();
|
Slimefun.getLogger().log(Level.SEVERE, "An Error occured during a Teleportation Sequence for Slimefun " + Slimefun.getVersion(), x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else cancel(uuid, p);
|
else cancel(uuid, p);
|
||||||
|
@ -1,16 +1,13 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Lists;
|
package me.mrCookieSlime.Slimefun.Lists;
|
||||||
|
|
||||||
|
import org.bukkit.Color;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomArmor;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomArmor;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.MenuItem;
|
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
|
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.LockedCategory;
|
import me.mrCookieSlime.Slimefun.Objects.LockedCategory;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SeasonCategory;
|
import me.mrCookieSlime.Slimefun.Objects.SeasonalCategory;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Color;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Built-in categories.
|
* Built-in categories.
|
||||||
@ -19,42 +16,35 @@ import org.bukkit.Material;
|
|||||||
* @since 4.0
|
* @since 4.0
|
||||||
* @see Category
|
* @see Category
|
||||||
*/
|
*/
|
||||||
public class Categories {
|
public final class Categories {
|
||||||
|
|
||||||
public static Category WEAPONS = new Category(new MenuItem(Material.GOLDEN_SWORD, "&7Weapons", 0, "open"), 1);
|
private Categories() {}
|
||||||
public static Category PORTABLE = null;
|
|
||||||
public static Category FOOD = new Category(new MenuItem(Material.APPLE, "&7Food", 0, "open"), 2);
|
private static final String LORE = "&a> Click to open";
|
||||||
public static Category MACHINES_1 = null;
|
|
||||||
public static LockedCategory ELECTRICITY = null;
|
public static final Category WEAPONS = new Category(new CustomItem(Material.GOLDEN_SWORD, "&7Weapons", "", LORE), 1);
|
||||||
public static LockedCategory GPS = null;
|
public static final Category PORTABLE = new Category(new CustomItem(SlimefunItems.BACKPACK_MEDIUM, "&7Items", "", LORE), 1);
|
||||||
public static Category ARMOR = new Category(new MenuItem(Material.IRON_CHESTPLATE, "&7Armor", 0, "open"), 2);
|
public static final Category FOOD = new Category(new CustomItem(Material.APPLE, "&7Food", "", LORE), 2);
|
||||||
public static Category LUMPS_AND_MAGIC = new Category(new MenuItem(Material.FIRE_CHARGE, "&7Magical Items", 0, "open"), 2);
|
public static final Category MACHINES_1 = new Category(new CustomItem(Material.SMITHING_TABLE, "&7Basic Machines", "", LORE), 1);
|
||||||
public static Category MAGIC = new Category(new MenuItem(Material.BLAZE_POWDER, "&7Magical Gadgets", 0, "open"), 3);
|
public static final LockedCategory ELECTRICITY = new LockedCategory(new CustomItem(SlimefunItems.NUCLEAR_REACTOR, "&bEnergy and Electricity", "", LORE), 4, MACHINES_1);
|
||||||
public static Category MISC = null;
|
public static final LockedCategory GPS = new LockedCategory(new CustomItem(SlimefunItems.GPS_TRANSMITTER, "&bGPS-based Machines", "", LORE), 4, MACHINES_1);
|
||||||
public static Category TECH = new Category(new CustomArmor(new MenuItem(Material.LEATHER_CHESTPLATE, "&7Technical Gadgets", 0, "open"), Color.SILVER), 3);
|
public static final Category ARMOR = new Category(new CustomItem(Material.IRON_CHESTPLATE, "&7Armor", "", LORE), 2);
|
||||||
public static Category RESOURCES = null;
|
public static final Category LUMPS_AND_MAGIC = new Category(new CustomItem(SlimefunItems.RUNE_ENDER, "&7Magical Items", "", LORE), 2);
|
||||||
public static Category CARGO = null;
|
public static final Category MAGIC = new Category(new CustomItem(Material.ELYTRA, "&7Magical Gadgets", "", LORE), 3);
|
||||||
public static Category TECH_MISC = new Category(new MenuItem(Material.COMPARATOR, "&7Technical Components", 0, "open"), 2);
|
public static final Category MISC = new Category(new CustomItem(SlimefunItems.CAN, "&7Miscellaneous", "", LORE), 2);
|
||||||
public static Category MAGIC_ARMOR = new Category(new MenuItem(Material.GOLDEN_CHESTPLATE, "&7Magical Armor", 0, "open"), 2);
|
public static final Category TECH = new Category(new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&7Technical Gadgets", "", LORE), Color.SILVER), 3);
|
||||||
public static Category TALISMANS_1 = new Category(new MenuItem(Material.EMERALD, "&7Talismans - &aTier I", 0, "open"), 2);
|
public static final Category RESOURCES = new Category(new CustomItem(SlimefunItems.SYNTHETIC_SAPPHIRE, "&7Resources", "", LORE), 1);
|
||||||
public static LockedCategory TALISMANS_2 = new LockedCategory(new MenuItem(Material.EMERALD, "&7Talismans - &aTier II", 0, "open"), 3, TALISMANS_1);
|
public static final Category CARGO = new LockedCategory(new CustomItem(SlimefunItems.CARGO_MANAGER, "&cCargo Management", "", LORE), 4, MACHINES_1);
|
||||||
public static Category TOOLS = new Category(new MenuItem(Material.GOLDEN_PICKAXE, "&7Tools", 0, "open"), 1);
|
public static final Category TECH_MISC = new Category(new CustomItem(SlimefunItems.HEATING_COIL, "&7Technical Components", "", LORE), 2);
|
||||||
public static SeasonCategory CHRISTMAS = new SeasonCategory(12, 1, new MenuItem(Material.NETHER_STAR, "&aC&ch&ar&ci&as&ct&am&ca&as", 0, ChatColor.translateAlternateColorCodes('&', "&chelp &aSanta")));
|
public static final Category MAGIC_ARMOR = new Category(new CustomItem(SlimefunItems.ENDER_HELMET, "&7Magical Armor", "", LORE), 2);
|
||||||
public static SeasonCategory VALENTINES_DAY = new SeasonCategory(2, 2, new MenuItem(Material.POPPY, "&dValentine's Day", 0, ChatColor.translateAlternateColorCodes('&', "&dcelebrate Love")));
|
public static final Category TALISMANS_1 = new Category(new CustomItem(Material.EMERALD, "&7Talismans - &aTier I", "", LORE), 2);
|
||||||
public static SeasonCategory EASTER = new SeasonCategory(4, 2, new MenuItem(Material.EGG, "&6Easter", 0, ChatColor.translateAlternateColorCodes('&', "&apaint some Eggs")));
|
public static final LockedCategory TALISMANS_2 = new LockedCategory(new CustomItem(Material.EMERALD, "&7Talismans - &aTier II", "", LORE), 3, TALISMANS_1);
|
||||||
public static SeasonCategory BIRTHDAY = new SeasonCategory(10, 1, new MenuItem(Material.FIREWORK_ROCKET, "&a&lTheBusyBiscuit's Birthday &7(26th October)", 0, ChatColor.translateAlternateColorCodes('&', "&acelebrate with me")));
|
public static final Category TOOLS = new Category(new CustomItem(Material.GOLDEN_PICKAXE, "&7Tools", "", LORE), 1);
|
||||||
|
|
||||||
|
// Seasonal Categories
|
||||||
|
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"));
|
||||||
|
public static final SeasonalCategory BIRTHDAY = new SeasonalCategory(10, 1, new CustomItem(Material.FIREWORK_ROCKET, "&a&lTheBusyBiscuit's Birthday &7(26th October)", "", "&a> Click to celebrate with me"));
|
||||||
|
|
||||||
static {
|
|
||||||
try {
|
|
||||||
MISC = new Category(new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTRkYTk3ZjA4MGUzOTViODQyYzRjYzgyYTg0MDgyM2Q0ZGJkOGNhNjg4YTIwNjg1M2U1NzgzZTRiZmRjMDEyIn19fQ=="), "&7Miscellaneous", "", "&a> Click to open"), 2);
|
|
||||||
PORTABLE = new Category(new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDBjYjFlNjdiNTEyYWIyZDRiZjNkN2FjZTBlYWFmNjFjMzJjZDQ2ODFkZGMzOTg3Y2ViMzI2NzA2YTMzZmEifX19"), "&7Items", "", "&a> Click to open"), 1);
|
|
||||||
MACHINES_1 = new Category(new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&7Basic Machines", "", "&a> Click to open"), 1);
|
|
||||||
ELECTRICITY = new LockedCategory(new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTU4NDQzMmFmNmYzODIxNjcxMjAyNThkMWVlZThjODdjNmU3NWQ5ZTQ3OWU3YjBkNGM3YjZhZDQ4Y2ZlZWYifX19"), "&bEnergy and Electricity", "", "&a> Click to open"), 4, MACHINES_1);
|
|
||||||
GPS = new LockedCategory(new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&bGPS-based Machines", "", "&a> Click to open"), 4, MACHINES_1);
|
|
||||||
RESOURCES = new Category(new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2U4ZjVhZGIxNGQ2YzlmNmI4MTBkMDI3NTQzZjFhOGMxZjQxN2UyZmVkOTkzYzk3YmNkODljNzRmNWUyZTgifX19"), "&7Resources", "", "&a> Click to open"), 1);
|
|
||||||
CARGO = new LockedCategory(new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTUxMGJjODUzNjJhMTMwYTZmZjlkOTFmZjExZDZmYTQ2ZDdkMTkxMmEzNDMxZjc1MTU1OGVmM2M0ZDljMiJ9fX0="), "&cCargo Management", "", "&a> Click to open"), 4, MACHINES_1);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -14,26 +14,26 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
|
|
||||||
public class RecipeType {
|
public class RecipeType {
|
||||||
|
|
||||||
public static final RecipeType MULTIBLOCK = new RecipeType(new CustomItem(Material.BRICK, "&bMultiBlock", 0, new String[] {"", "&a&oBuild it in the World"}));
|
public static final RecipeType MULTIBLOCK = new RecipeType(new CustomItem(Material.BRICK, "&bMultiBlock", "", "&a&oBuild it in the World"));
|
||||||
public static final RecipeType ARMOR_FORGE = new RecipeType(new CustomItem(Material.ANVIL, "&bArmor Forge", 0, new String[] {"", "&a&oCraft it in an Armor Forge"}), "ARMOR_FORGE");
|
public static final RecipeType ARMOR_FORGE = new RecipeType(new CustomItem(Material.ANVIL, "&bArmor Forge", "", "&a&oCraft it in an Armor Forge"), "ARMOR_FORGE");
|
||||||
public static final RecipeType GRIND_STONE = new RecipeType(new CustomItem(Material.DISPENSER, "&bGrind Stone", 0, new String[] {"", "&a&oGrind it using the Grind Stone"}), "GRIND_STONE");
|
public static final RecipeType GRIND_STONE = new RecipeType(new CustomItem(Material.DISPENSER, "&bGrind Stone", "", "&a&oGrind it using the Grind Stone"), "GRIND_STONE");
|
||||||
public static final RecipeType MOB_DROP = new RecipeType(new CustomItem(Material.IRON_SWORD, "&bMob Drop", 0, new String[] {"", "&a&oKill the specified Mob to obtain this Item"}));
|
public static final RecipeType MOB_DROP = new RecipeType(new CustomItem(Material.IRON_SWORD, "&bMob Drop", "", "&a&oKill the specified Mob to obtain this Item"));
|
||||||
public static final RecipeType SMELTERY = new RecipeType(new CustomItem(Material.FURNACE, "&6Smeltery", 0, new String[] {"", "&a&oSmelt it using a Smeltery"}), "SMELTERY");
|
public static final RecipeType SMELTERY = new RecipeType(new CustomItem(Material.FURNACE, "&6Smeltery", "", "&a&oSmelt it using a Smeltery"), "SMELTERY");
|
||||||
public static final RecipeType ORE_CRUSHER = new RecipeType(new CustomItem(Material.DISPENSER, "&bOre Crusher", 0, new String[] {"", "&a&oCrush it using the Ore Crusher"}), "ORE_CRUSHER");
|
public static final RecipeType ORE_CRUSHER = new RecipeType(new CustomItem(Material.DISPENSER, "&bOre Crusher", "", "&a&oCrush it using the Ore Crusher"), "ORE_CRUSHER");
|
||||||
public static final RecipeType GOLD_PAN = new RecipeType(new CustomItem(Material.BOWL, "&bGold Pan", 0, new String[] {"", "&a&oUse a Gold Pan on Gravel to obtain this Item"}));
|
public static final RecipeType GOLD_PAN = new RecipeType(new CustomItem(Material.BOWL, "&bGold Pan", "", "&a&oUse a Gold Pan on Gravel to obtain this Item"));
|
||||||
public static final RecipeType COMPRESSOR = new RecipeType(new CustomItem(Material.PISTON, "&bCompressor", 0, new String[] {"", "&a&oCompress it using the Compressor"}), "COMPRESSOR");
|
public static final RecipeType COMPRESSOR = new RecipeType(new CustomItem(Material.PISTON, "&bCompressor", "", "&a&oCompress it using the Compressor"), "COMPRESSOR");
|
||||||
public static final RecipeType PRESSURE_CHAMBER = new RecipeType(new CustomItem(Material.GLASS, "&bPressure Chamber", 0, new String[] {"", "&a&oCompress it using the Pressure Chamber"}), "PRESSURE_CHAMBER");
|
public static final RecipeType PRESSURE_CHAMBER = new RecipeType(new CustomItem(Material.GLASS, "&bPressure Chamber", "", "&a&oCompress it using the Pressure Chamber"), "PRESSURE_CHAMBER");
|
||||||
public static final RecipeType OVEN = new RecipeType(new CustomItem(Material.FURNACE, "&bOven", 0, new String[] {"", "&a&oSmelt it in an Oven"}), "OVEN");
|
public static final RecipeType OVEN = new RecipeType(new CustomItem(Material.FURNACE, "&bOven", "", "&a&oSmelt it in an Oven"), "OVEN");
|
||||||
public static final RecipeType MAGIC_WORKBENCH = new RecipeType(new CustomItem(Material.BOOKSHELF, "&6Magic Workbench", 0, new String[] {"", "&a&oCraft it in a Magic Workbench"}), "MAGIC_WORKBENCH");
|
public static final RecipeType MAGIC_WORKBENCH = new RecipeType(new CustomItem(Material.BOOKSHELF, "&6Magic Workbench", "", "&a&oCraft it in a Magic Workbench"), "MAGIC_WORKBENCH");
|
||||||
public static final RecipeType ORE_WASHER = new RecipeType(new CustomItem(Material.CAULDRON, "&6Ore Washer", 0, new String[] {"", "&a&oWash it in an Ore Washer"}), "ORE_WASHER");
|
public static final RecipeType ORE_WASHER = new RecipeType(new CustomItem(Material.CAULDRON, "&6Ore Washer", "", "&a&oWash it in an Ore Washer"), "ORE_WASHER");
|
||||||
public static final RecipeType ENHANCED_CRAFTING_TABLE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eEnhanced Crafting Table", 0, new String[] {"", "&a&oA regular Crafting Table cannot", "&a&ohold this massive Amount of Power..."}), "ENHANCED_CRAFTING_TABLE");
|
public static final RecipeType ENHANCED_CRAFTING_TABLE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eEnhanced Crafting Table", "", "&a&oA regular Crafting Table cannot", "&a&ohold this massive Amount of Power..."), "ENHANCED_CRAFTING_TABLE");
|
||||||
public static final RecipeType JUICER = new RecipeType(new CustomItem(Material.GLASS_BOTTLE, "&eJuicer", 0, new String[] {"", "&a&oUsed for Juice Creation"}), "JUICER");
|
public static final RecipeType JUICER = new RecipeType(new CustomItem(Material.GLASS_BOTTLE, "&eJuicer", "", "&a&oUsed for Juice Creation"), "JUICER");
|
||||||
public static final RecipeType ANCIENT_ALTAR = new RecipeType(new CustomItem(Material.ENCHANTING_TABLE, "&4Ancient Altar", 0, new String[] {"", "&dYou will need to craft this Item", "&dby performing an Ancient Altar Ritual"}));
|
public static final RecipeType ANCIENT_ALTAR = new RecipeType(new CustomItem(Material.ENCHANTING_TABLE, "&4Ancient Altar", "", "&dYou will need to craft this Item", "&dby performing an Ancient Altar Ritual"));
|
||||||
public static final RecipeType HEATED_PRESSURE_CHAMBER = new RecipeType(new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS), "&cHeated Pressure Chamber", "", "&a&oCraft this Item in a", "&a&oHeated Pressure Chamber"), "HEATED_PRESSURE_CHAMBER");
|
public static final RecipeType HEATED_PRESSURE_CHAMBER = new RecipeType(new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS), "&cHeated Pressure Chamber", "", "&a&oCraft this Item in a", "&a&oHeated Pressure Chamber"), "HEATED_PRESSURE_CHAMBER");
|
||||||
|
|
||||||
public static final RecipeType SHAPED_RECIPE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eShaped Recipe", 0, new String[] {"", "&a&oJust a standard Recipe in the Workbench..."}));
|
public static final RecipeType SHAPED_RECIPE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eShaped Recipe", "", "&a&oJust a standard Recipe in the Workbench..."));
|
||||||
public static final RecipeType SHAPELESS_RECIPE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eShapeless Recipe", 0, new String[] {"", "&a&oJust a standard Recipe in the Workbench..."}));
|
public static final RecipeType SHAPELESS_RECIPE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eShapeless Recipe", "", "&a&oJust a standard Recipe in the Workbench..."));
|
||||||
public static final RecipeType FURNACE = new RecipeType(new CustomItem(Material.FURNACE, "&eFurnace Recipe", 0, new String[] {"", "&a&oJust smelt it in a regular Furnace"}));
|
public static final RecipeType FURNACE = new RecipeType(new CustomItem(Material.FURNACE, "&eFurnace Recipe", "", "&a&oJust smelt it in a regular Furnace"));
|
||||||
public static final RecipeType NULL = new RecipeType(null);
|
public static final RecipeType NULL = new RecipeType(null);
|
||||||
|
|
||||||
private ItemStack item;
|
private ItemStack item;
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,9 +0,0 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Misc;
|
|
||||||
|
|
||||||
public enum BookDesign {
|
|
||||||
|
|
||||||
BOOK,
|
|
||||||
CHEST,
|
|
||||||
CHEAT_SHEET;
|
|
||||||
|
|
||||||
}
|
|
@ -2,14 +2,15 @@ package me.mrCookieSlime.Slimefun.Objects;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.inventory.ItemFlag;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
import me.mrCookieSlime.Slimefun.Lists.Categories;
|
import me.mrCookieSlime.Slimefun.Lists.Categories;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||||
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Statically handles categories.
|
* Statically handles categories.
|
||||||
@ -20,15 +21,9 @@ import me.mrCookieSlime.Slimefun.api.Slimefun;
|
|||||||
* @since 4.0
|
* @since 4.0
|
||||||
*
|
*
|
||||||
* @see LockedCategory
|
* @see LockedCategory
|
||||||
* @see SeasonCategory
|
* @see SeasonalCategory
|
||||||
*/
|
*/
|
||||||
public class Category {
|
public class Category {
|
||||||
/**
|
|
||||||
* List of the registered Categories.
|
|
||||||
* @since 4.0
|
|
||||||
* @see Categories
|
|
||||||
*/
|
|
||||||
public static List<Category> list = new ArrayList<>();
|
|
||||||
|
|
||||||
private ItemStack item;
|
private ItemStack item;
|
||||||
private List<SlimefunItem> items;
|
private List<SlimefunItem> items;
|
||||||
@ -44,6 +39,11 @@ public class Category {
|
|||||||
*/
|
*/
|
||||||
public Category(ItemStack item) {
|
public Category(ItemStack item) {
|
||||||
this.item = item;
|
this.item = item;
|
||||||
|
|
||||||
|
ItemMeta meta = item.getItemMeta();
|
||||||
|
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
|
||||||
|
this.item.setItemMeta(meta);
|
||||||
|
|
||||||
this.items = new ArrayList<>();
|
this.items = new ArrayList<>();
|
||||||
this.tier = 3;
|
this.tier = 3;
|
||||||
}
|
}
|
||||||
@ -72,14 +72,19 @@ public class Category {
|
|||||||
* @since 4.0
|
* @since 4.0
|
||||||
*/
|
*/
|
||||||
public void register() {
|
public void register() {
|
||||||
list.add(this);
|
SlimefunPlugin.getUtilities().allCategories.add(this);
|
||||||
Collections.sort(list, new CategorySorter());
|
Collections.sort(list(), SlimefunPlugin.getUtilities().categorySorter);
|
||||||
|
|
||||||
if (this instanceof SeasonCategory) {
|
if (this instanceof SeasonalCategory) {
|
||||||
if (((SeasonCategory) this).isUnlocked()) Slimefun.current_categories.add(this);
|
if (((SeasonalCategory) this).isUnlocked()) {
|
||||||
|
SlimefunPlugin.getUtilities().enabledCategories.add(this);
|
||||||
}
|
}
|
||||||
else Slimefun.current_categories.add(this);
|
}
|
||||||
Collections.sort(Slimefun.current_categories, new CategorySorter());
|
else {
|
||||||
|
SlimefunPlugin.getUtilities().enabledCategories.add(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
Collections.sort(SlimefunPlugin.getUtilities().enabledCategories, SlimefunPlugin.getUtilities().categorySorter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -91,7 +96,7 @@ public class Category {
|
|||||||
* @see Categories
|
* @see Categories
|
||||||
*/
|
*/
|
||||||
public static List<Category> list() {
|
public static List<Category> list() {
|
||||||
return list;
|
return SlimefunPlugin.getUtilities().allCategories;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -135,8 +140,9 @@ public class Category {
|
|||||||
*
|
*
|
||||||
* @since 4.0
|
* @since 4.0
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public static Category getByItem(ItemStack item) {
|
public static Category getByItem(ItemStack item) {
|
||||||
for (Category c: list) {
|
for (Category c: list()) {
|
||||||
if (c.getItem().isSimilar(item)) return c;
|
if (c.getItem().isSimilar(item)) return c;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@ -153,19 +159,4 @@ public class Category {
|
|||||||
return tier;
|
return tier;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @since 4.0
|
|
||||||
*/
|
|
||||||
class CategorySorter implements Comparator<Category> {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @since 4.0
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int compare(Category c1, Category c2) {
|
|
||||||
return Integer.compare(c1.getTier(), c2.getTier());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects;
|
|
||||||
|
|
||||||
public class Charge {
|
|
||||||
|
|
||||||
private double charge;
|
|
||||||
private double capacity;
|
|
||||||
|
|
||||||
public Charge(double charge, double capacity) {
|
|
||||||
this.charge = charge;
|
|
||||||
this.capacity = capacity;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getStoredEnergy() {
|
|
||||||
return charge;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getCapacity() {
|
|
||||||
return capacity;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -20,7 +20,7 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
* @since 4.0
|
* @since 4.0
|
||||||
*
|
*
|
||||||
* @see Category
|
* @see Category
|
||||||
* @see SeasonCategory
|
* @see SeasonalCategory
|
||||||
*/
|
*/
|
||||||
public class LockedCategory extends Category {
|
public class LockedCategory extends Category {
|
||||||
|
|
||||||
@ -116,11 +116,7 @@ public class LockedCategory extends Category {
|
|||||||
|
|
||||||
for (Category category: parents) {
|
for (Category category: parents) {
|
||||||
for (SlimefunItem item: category.getItems()) {
|
for (SlimefunItem item: category.getItems()) {
|
||||||
if (Slimefun.isEnabled(p, item.getItem(), false) && Slimefun.hasPermission(p, item, false)) {
|
if (Slimefun.isEnabled(p, item.getItem(), false) && Slimefun.hasPermission(p, item, false) && item.getResearch() != null && !profile.hasUnlocked(item.getResearch())) return false;
|
||||||
if (item.getResearch() != null) {
|
|
||||||
if (!profile.hasUnlocked(item.getResearch())) return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -1,20 +1,18 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects;
|
package me.mrCookieSlime.Slimefun.Objects;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
|
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine;
|
|
||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
|
||||||
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine;
|
||||||
|
|
||||||
public class MultiBlock {
|
public class MultiBlock {
|
||||||
|
|
||||||
public static List<MultiBlock> list = new ArrayList<>();
|
private Material[] blocks;
|
||||||
|
private Material trigger;
|
||||||
Material[] blocks;
|
|
||||||
Material trigger;
|
|
||||||
|
|
||||||
public MultiBlock(Material[] build, Material trigger) {
|
public MultiBlock(Material[] build, Material trigger) {
|
||||||
this.blocks = build;
|
this.blocks = build;
|
||||||
@ -30,48 +28,46 @@ public class MultiBlock {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void register() {
|
public void register() {
|
||||||
list.add(this);
|
SlimefunPlugin.getUtilities().allMultiblocks.add(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<MultiBlock> list() {
|
public static List<MultiBlock> list() {
|
||||||
return list;
|
return SlimefunPlugin.getUtilities().allMultiblocks;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isMultiBlock(SlimefunItem machine) {
|
public boolean isMultiBlock(SlimefunItem machine) {
|
||||||
if (machine == null) return false;
|
if (machine instanceof SlimefunMachine) {
|
||||||
else if (!(machine instanceof SlimefunMachine)) return false;
|
return isMultiBlock(((SlimefunMachine) machine).toMultiBlock());
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
else return false;
|
else return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isMultiBlock(MultiBlock mb) {
|
public boolean isMultiBlock(MultiBlock mb) {
|
||||||
if (mb == null) return false;
|
if (mb == null) return false;
|
||||||
else if (trigger == mb.getTriggerBlock()) {
|
|
||||||
|
if (trigger == mb.getTriggerBlock()) {
|
||||||
for (int i = 0; i < mb.getBuild().length; i++) {
|
for (int i = 0; i < mb.getBuild().length; i++) {
|
||||||
if (mb.getBuild()[i] != null) {
|
if (!compareBlocks(blocks[i], mb.getBuild()[i])) return false;
|
||||||
if (MaterialHelper.isLog(mb.getBuild()[i])) {
|
|
||||||
if (!MaterialHelper.isLog(blocks[i])) return false;
|
|
||||||
}
|
|
||||||
else if (mb.getBuild()[i] != blocks[i]) return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects;
|
package me.mrCookieSlime.Slimefun.Objects;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.Collection;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -17,7 +17,7 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Variable;
|
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Variable;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Particles.FireworkShow;
|
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.Events.ResearchUnlockEvent;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||||
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
||||||
@ -40,36 +40,6 @@ public class Research {
|
|||||||
|
|
||||||
private static final int[] research_progress = {23, 44, 57, 92};
|
private static final int[] research_progress = {23, 44, 57, 92};
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether researching is enabled or not;
|
|
||||||
* @since 4.0
|
|
||||||
*/
|
|
||||||
public static boolean enableResearching;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contains all the registered researches;
|
|
||||||
* @since 4.0
|
|
||||||
* @see ResearchSetup
|
|
||||||
*/
|
|
||||||
public static List<Research> list = new LinkedList<>();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contains all Research Titles
|
|
||||||
*/
|
|
||||||
public static List<String> titles;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contains all the players (UUIDs) that are currently unlocking a research.
|
|
||||||
* @since 4.0
|
|
||||||
*/
|
|
||||||
public static Set<UUID> researching = new HashSet<>();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether researching in creative is free.
|
|
||||||
* @since 4.0
|
|
||||||
*/
|
|
||||||
public static boolean creative_research = true;
|
|
||||||
|
|
||||||
private int id;
|
private int id;
|
||||||
private String name;
|
private String name;
|
||||||
private List<SlimefunItem> items;
|
private List<SlimefunItem> items;
|
||||||
@ -103,7 +73,7 @@ public class Research {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEnabled() {
|
public boolean isEnabled() {
|
||||||
return enableResearching && enabled;
|
return SlimefunPlugin.getSettings().researchesEnabled && enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -138,7 +108,7 @@ public class Research {
|
|||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public int getLevel() {
|
public int getLevel() {
|
||||||
return cost;
|
return getCost();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -151,7 +121,7 @@ public class Research {
|
|||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public void setLevel(int level) {
|
public void setLevel(int level) {
|
||||||
this.cost = level;
|
setCost(level);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -237,7 +207,7 @@ public class Research {
|
|||||||
*/
|
*/
|
||||||
public boolean canUnlock(Player p) {
|
public boolean canUnlock(Player p) {
|
||||||
if (!isEnabled()) return true;
|
if (!isEnabled()) return true;
|
||||||
return (p.getGameMode() == GameMode.CREATIVE && creative_research) || p.getLevel() >= this.cost;
|
return (p.getGameMode() == GameMode.CREATIVE && SlimefunPlugin.getSettings().researchesFreeInCreative) || p.getLevel() >= this.cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -266,37 +236,33 @@ public class Research {
|
|||||||
ResearchUnlockEvent event = new ResearchUnlockEvent(p, this);
|
ResearchUnlockEvent event = new ResearchUnlockEvent(p, this);
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
|
||||||
if (!event.isCancelled()) {
|
Runnable runnable = () -> {
|
||||||
if (instant) {
|
|
||||||
PlayerProfile.fromUUID(p.getUniqueId()).setResearched(this, true);
|
PlayerProfile.fromUUID(p.getUniqueId()).setResearched(this, true);
|
||||||
|
|
||||||
Messages.local.sendTranslation(p, "messages.unlocked", true, new Variable("%research%", getName()));
|
Messages.local.sendTranslation(p, "messages.unlocked", true, new Variable("%research%", getName()));
|
||||||
if (SlimefunStartup.getCfg().getBoolean("options.research-give-fireworks")) {
|
|
||||||
|
if (SlimefunPlugin.getCfg().getBoolean("options.research-unlock-fireworks")) {
|
||||||
FireworkShow.launchRandom(p, 1);
|
FireworkShow.launchRandom(p, 1);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
else if (!researching.contains(p.getUniqueId())){
|
|
||||||
researching.add(p.getUniqueId());
|
if (!event.isCancelled()) {
|
||||||
|
if (instant) runnable.run();
|
||||||
|
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()));
|
Messages.local.sendTranslation(p, "messages.research.start", true, new Variable("%research%", getName()));
|
||||||
|
|
||||||
for (int i = 1; i < research_progress.length + 1; i++) {
|
for (int i = 1; i < research_progress.length + 1; i++) {
|
||||||
int j = 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);
|
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] + "%"));
|
Messages.local.sendTranslation(p, "messages.research.progress", true, new Variable("%research%", getName()), new Variable("%progress%", research_progress[j - 1] + "%"));
|
||||||
}, i * 20L);
|
}, i * 20L);
|
||||||
}
|
}
|
||||||
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
|
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
|
||||||
PlayerProfile.fromUUID(p.getUniqueId()).setResearched(this, true);
|
runnable.run();
|
||||||
Messages.local.sendTranslation(p, "messages.unlocked", true, new Variable("%research%", getName()));
|
SlimefunPlugin.getUtilities().researching.remove(p.getUniqueId());
|
||||||
|
|
||||||
if (SlimefunStartup.getCfg().getBoolean("options.research-unlock-fireworks")) {
|
|
||||||
FireworkShow.launchRandom(p, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
researching.remove(p.getUniqueId());
|
|
||||||
}, (research_progress.length + 1) * 20L);
|
}, (research_progress.length + 1) * 20L);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -309,9 +275,9 @@ public class Research {
|
|||||||
* @since 4.0
|
* @since 4.0
|
||||||
*/
|
*/
|
||||||
public void register() {
|
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();
|
Iterator<SlimefunItem> iterator = items.iterator();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
SlimefunItem item = iterator.next();
|
SlimefunItem item = iterator.next();
|
||||||
@ -321,16 +287,18 @@ public class Research {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SlimefunStartup.getResearchCfg().setDefaultValue(this.getID() + ".name", this.getName());
|
SlimefunPlugin.getResearchCfg().setDefaultValue(this.getID() + ".name", this.getName());
|
||||||
SlimefunStartup.getResearchCfg().setDefaultValue(this.getID() + ".cost", this.getCost());
|
SlimefunPlugin.getResearchCfg().setDefaultValue(this.getID() + ".cost", this.getCost());
|
||||||
SlimefunStartup.getResearchCfg().setDefaultValue(this.getID() + ".enabled", true);
|
SlimefunPlugin.getResearchCfg().setDefaultValue(this.getID() + ".enabled", true);
|
||||||
|
|
||||||
this.name = SlimefunStartup.getResearchCfg().getString(this.getID() + ".name");
|
this.name = SlimefunPlugin.getResearchCfg().getString(this.getID() + ".name");
|
||||||
this.cost = SlimefunStartup.getResearchCfg().getInt(this.getID() + ".cost");
|
this.cost = SlimefunPlugin.getResearchCfg().getInt(this.getID() + ".cost");
|
||||||
this.enabled = SlimefunStartup.getResearchCfg().getBoolean(this.getID() + ".enabled");
|
this.enabled = SlimefunPlugin.getResearchCfg().getBoolean(this.getID() + ".enabled");
|
||||||
|
|
||||||
list.add(this);
|
SlimefunPlugin.getUtilities().allResearches.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() + "\"");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -342,7 +310,7 @@ public class Research {
|
|||||||
* @see ResearchSetup
|
* @see ResearchSetup
|
||||||
*/
|
*/
|
||||||
public static List<Research> list() {
|
public static List<Research> list() {
|
||||||
return list;
|
return SlimefunPlugin.getUtilities().allResearches;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -354,7 +322,7 @@ public class Research {
|
|||||||
* @since 4.0
|
* @since 4.0
|
||||||
*/
|
*/
|
||||||
public static boolean isResearching(Player p) {
|
public static boolean isResearching(Player p) {
|
||||||
return researching.contains(p.getUniqueId());
|
return SlimefunPlugin.getUtilities().researching.contains(p.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -370,9 +338,9 @@ public class Research {
|
|||||||
public static void sendStats(CommandSender sender, Player p) {
|
public static void sendStats(CommandSender sender, Player p) {
|
||||||
PlayerProfile profile = PlayerProfile.fromUUID(p.getUniqueId());
|
PlayerProfile profile = PlayerProfile.fromUUID(p.getUniqueId());
|
||||||
Set<Research> researched = profile.getResearches();
|
Set<Research> researched = profile.getResearches();
|
||||||
int levels = researched.stream().mapToInt(r -> r.getCost()).sum();
|
int levels = researched.stream().mapToInt(Research::getCost).sum();
|
||||||
|
|
||||||
String progress = String.valueOf(Math.round(((researched.size() * 100.0f) / list().size()) * 100.0f) / 100.0f);
|
String progress = String.valueOf(Math.round(((researched.size() * 100.0F) / list().size()) * 100.0F) / 100.0F);
|
||||||
if (Float.parseFloat(progress) < 16.0F) progress = "&4" + progress + " &r% ";
|
if (Float.parseFloat(progress) < 16.0F) progress = "&4" + progress + " &r% ";
|
||||||
else if (Float.parseFloat(progress) < 32.0F) progress = "&c" + progress + " &r% ";
|
else if (Float.parseFloat(progress) < 32.0F) progress = "&c" + progress + " &r% ";
|
||||||
else if (Float.parseFloat(progress) < 48.0F) progress = "&6" + progress + " &r% ";
|
else if (Float.parseFloat(progress) < 48.0F) progress = "&6" + progress + " &r% ";
|
||||||
@ -399,10 +367,8 @@ public class Research {
|
|||||||
* @see #sendStats(CommandSender, Player)
|
* @see #sendStats(CommandSender, Player)
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public static String getTitle(Player p, Set<Research> researched) {
|
public static String getTitle(Player p, Collection<Research> researched) {
|
||||||
int index = Math.round(Float.valueOf(String.valueOf(Math.round(((researched.size() * 100.0f) / list().size()) * 100.0f) / 100.0f)) / 100.0F) * titles.size();
|
return PlayerProfile.fromUUID(p.getUniqueId()).getTitle();
|
||||||
if (index > 0) index--;
|
|
||||||
return titles.get(index);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -414,7 +380,7 @@ public class Research {
|
|||||||
* @since 4.0
|
* @since 4.0
|
||||||
*/
|
*/
|
||||||
public static Research getByID(int id) {
|
public static Research getByID(int id) {
|
||||||
for (Research research: list) {
|
for (Research research: list()) {
|
||||||
if (research.getID() == id) return research;
|
if (research.getID() == id) return research;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@ -452,4 +418,9 @@ public class Research {
|
|||||||
public static List<Research> getResearches(String uuid) {
|
public static List<Research> getResearches(String uuid) {
|
||||||
return getResearches(UUID.fromString(uuid));
|
return getResearches(UUID.fromString(uuid));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Research {" + id + "," + name + "}";
|
||||||
|
}
|
||||||
}
|
}
|
@ -16,7 +16,7 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
* @see Category
|
* @see Category
|
||||||
* @see LockedCategory
|
* @see LockedCategory
|
||||||
*/
|
*/
|
||||||
public class SeasonCategory extends Category {
|
public class SeasonalCategory extends Category {
|
||||||
|
|
||||||
private int month = -1;
|
private int month = -1;
|
||||||
|
|
||||||
@ -32,7 +32,7 @@ public class SeasonCategory extends Category {
|
|||||||
*
|
*
|
||||||
* @since 4.0
|
* @since 4.0
|
||||||
*/
|
*/
|
||||||
public SeasonCategory(int month, int tier, ItemStack item) {
|
public SeasonalCategory(int month, int tier, ItemStack item) {
|
||||||
super(item, tier);
|
super(item, tier);
|
||||||
this.month = month - 1;
|
this.month = month - 1;
|
||||||
}
|
}
|
@ -6,9 +6,30 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
|
|||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
@FunctionalInterface
|
||||||
public interface SlimefunBlockHandler {
|
public interface SlimefunBlockHandler {
|
||||||
|
|
||||||
void onPlace(Player p, Block b, SlimefunItem item);
|
/**
|
||||||
|
* This method gets called when the Block is placed.
|
||||||
|
* Use this method to initialize block data.
|
||||||
|
*
|
||||||
|
* @param p The Player who placed it
|
||||||
|
* @param b The Block that was placed
|
||||||
|
* @param item The Item that will be stored inside the Block
|
||||||
|
*/
|
||||||
|
default void onPlace(Player p, Block b, SlimefunItem item) {
|
||||||
|
// This method can optionally be implemented by classes implementing it.
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method gets called when the Block is broken
|
||||||
|
* p is nullable if the Block is exploded
|
||||||
|
*
|
||||||
|
* @param p The Player who broke the Block
|
||||||
|
* @param b The Block that was broken
|
||||||
|
* @param item The SlimefunItem that was stored in that block
|
||||||
|
* @param reason The reason for the Block breaking
|
||||||
|
* @return Whether the Event should be cancelled
|
||||||
|
*/
|
||||||
boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason);
|
boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason);
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
|
|
||||||
public class ChargableItem extends SlimefunItem {
|
public class ChargableItem extends SlimefunItem {
|
||||||
|
|
||||||
String chargeType;
|
private String chargeType;
|
||||||
|
|
||||||
public ChargableItem(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String chargeType) {
|
public ChargableItem(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String chargeType) {
|
||||||
super(category, item, id, recipeType, recipe);
|
super(category, item, id, recipeType, recipe);
|
||||||
@ -19,6 +19,8 @@ public class ChargableItem extends SlimefunItem {
|
|||||||
this.chargeType = chargeType;
|
this.chargeType = chargeType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getChargeType() { return this.chargeType; }
|
public String getChargeType() {
|
||||||
|
return chargeType;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
||||||
|
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
public class ChargedItem extends SlimefunItem {
|
public class ChargedItem extends SlimefunItem {
|
||||||
|
|
||||||
String chargeType;
|
private String chargeType;
|
||||||
|
|
||||||
public ChargedItem(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String chargeType) {
|
public ChargedItem(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String chargeType) {
|
||||||
super(category, item, id, recipeType, recipe);
|
super(category, item, id, recipeType, recipe);
|
||||||
@ -19,6 +19,8 @@ public class ChargedItem extends SlimefunItem {
|
|||||||
this.chargeType = chargeType;
|
this.chargeType = chargeType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getChargeType() { return this.chargeType; }
|
public String getChargeType() {
|
||||||
|
return chargeType;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
|
|
||||||
public class DamagableChargableItem extends SlimefunItem {
|
public class DamagableChargableItem extends SlimefunItem {
|
||||||
|
|
||||||
String chargeType;
|
private String chargeType;
|
||||||
|
|
||||||
public DamagableChargableItem(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String chargeType) {
|
public DamagableChargableItem(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String chargeType) {
|
||||||
super(category, item, id, recipeType, recipe);
|
super(category, item, id, recipeType, recipe);
|
||||||
@ -19,6 +19,8 @@ public class DamagableChargableItem extends SlimefunItem {
|
|||||||
this.chargeType = chargeType;
|
this.chargeType = chargeType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getChargeType() { return this.chargeType; }
|
public String getChargeType() {
|
||||||
|
return this.chargeType;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,36 +1,42 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
||||||
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.Categories;
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
|
||||||
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
|
||||||
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.potion.PotionEffect;
|
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.Categories;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since 4.0
|
* @since 4.0
|
||||||
*/
|
*/
|
||||||
public class EnderTalisman extends SlimefunItem {
|
public class EnderTalisman extends Talisman {
|
||||||
|
|
||||||
private String suffix;
|
|
||||||
private boolean consumable;
|
|
||||||
private boolean cancel;
|
|
||||||
private PotionEffect[] effects;
|
|
||||||
private int chance;
|
|
||||||
|
|
||||||
public EnderTalisman(Talisman parent) {
|
public EnderTalisman(Talisman parent) {
|
||||||
super(Categories.TALISMANS_2, parent.upgrade(), "ENDER_" + parent.getID(), RecipeType.MAGIC_WORKBENCH, new ItemStack[] {SlimefunItem.getItem("ENDER_LUMP_3"), null, SlimefunItem.getItem("ENDER_LUMP_3"), null, parent.getItem(), null, SlimefunItem.getItem("ENDER_LUMP_3"), null, SlimefunItem.getItem("ENDER_LUMP_3")}, parent.upgrade());
|
super(Categories.TALISMANS_2, parent.upgrade(), "ENDER_" + parent.getID(), new ItemStack[] {SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3, null, parent.getItem(), null, SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3});
|
||||||
this.consumable = parent.isConsumable();
|
|
||||||
this.cancel = parent.isEventCancelled();
|
consumable = parent.isConsumable();
|
||||||
this.suffix = parent.getSuffix();
|
cancel = parent.isEventCancelled();
|
||||||
this.effects = parent.getEffects();
|
suffix = parent.getSuffix();
|
||||||
this.chance = parent.getChance();
|
effects = parent.getEffects();
|
||||||
|
chance = parent.getChance();
|
||||||
|
|
||||||
Slimefun.addHint("ENDER_" + parent.getID(), "&eEnder Talismans have the advantage", "&eof still working while they", "&eare in your Ender Chest");
|
Slimefun.addHint("ENDER_" + parent.getID(), "&eEnder Talismans have the advantage", "&eof still working while they", "&eare in your Ender Chest");
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSuffix() { return this.suffix; }
|
@Override
|
||||||
public boolean isConsumable() { return this.consumable; }
|
public ItemStack upgrade() {
|
||||||
public boolean isEventCancelled() { return this.cancel; }
|
throw new UnsupportedOperationException();
|
||||||
public PotionEffect[] getEffects() { return this.effects; }
|
}
|
||||||
public int getChance() { return this.chance; }
|
|
||||||
|
@Override
|
||||||
|
public void install() {
|
||||||
|
// Let's override that, otherwise we would be creating Ender Talismans
|
||||||
|
// for every Ender Talisman
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void create() {
|
||||||
|
// Let's override that, otherwise we would be creating Ender Talismans
|
||||||
|
// for every Ender Talisman
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,22 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
||||||
|
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
import java.util.Random;
|
||||||
import me.mrCookieSlime.Slimefun.SlimefunStartup;
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.Categories;
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
|
|
||||||
|
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.Furnace;
|
import org.bukkit.block.Furnace;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class EnhancedFurnace extends SlimefunItem {
|
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.Categories;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
|
|
||||||
int speed, efficiency, fortune;
|
public class EnhancedFurnace extends SimpleSlimefunItem<BlockTicker> {
|
||||||
|
|
||||||
|
private int speed;
|
||||||
|
private int efficiency;
|
||||||
|
private int fortune;
|
||||||
|
|
||||||
public EnhancedFurnace(int speed, int efficiency, int fortune, ItemStack item, String id, ItemStack[] recipe) {
|
public EnhancedFurnace(int speed, int efficiency, int fortune, ItemStack item, String id, ItemStack[] recipe) {
|
||||||
super(Categories.MACHINES_1, item, id, RecipeType.ENHANCED_CRAFTING_TABLE, recipe);
|
super(Categories.MACHINES_1, item, id, RecipeType.ENHANCED_CRAFTING_TABLE, recipe);
|
||||||
@ -20,33 +24,6 @@ public class EnhancedFurnace extends SlimefunItem {
|
|||||||
this.speed = speed - 1;
|
this.speed = speed - 1;
|
||||||
this.efficiency = efficiency - 1;
|
this.efficiency = efficiency - 1;
|
||||||
this.fortune = fortune - 1;
|
this.fortune = fortune - 1;
|
||||||
|
|
||||||
addItemHandler(new BlockTicker() {
|
|
||||||
@Override
|
|
||||||
public void tick(Block b, SlimefunItem item, Config data) {
|
|
||||||
if (b.getState() instanceof Furnace) {
|
|
||||||
if (((Furnace) b.getState()).getCookTime() > 0) {
|
|
||||||
Furnace furnace = (Furnace) b.getState();
|
|
||||||
|
|
||||||
int newCookTime = furnace.getCookTime() + getSpeed() * 10;
|
|
||||||
|
|
||||||
if (newCookTime > 200) furnace.setCookTime((short) 188);
|
|
||||||
else furnace.setCookTime((short) newCookTime);
|
|
||||||
|
|
||||||
furnace.update(true, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void uniqueTick() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isSynchronized() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSpeed() {
|
public int getSpeed() {
|
||||||
@ -59,9 +36,38 @@ public class EnhancedFurnace extends SlimefunItem {
|
|||||||
|
|
||||||
public int getOutput() {
|
public int getOutput() {
|
||||||
int fortune = this.fortune;
|
int fortune = this.fortune;
|
||||||
fortune = SlimefunStartup.randomize(fortune + 2) - 1;
|
fortune = new Random().nextInt(fortune + 2) - 1;
|
||||||
if (fortune <= 0) fortune = 0;
|
if (fortune <= 0) fortune = 0;
|
||||||
fortune++;
|
fortune++;
|
||||||
return fortune;
|
return fortune;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockTicker getItemHandler() {
|
||||||
|
return new BlockTicker() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick(Block b, SlimefunItem item, Config data) {
|
||||||
|
if (!(b.getState() instanceof Furnace)) {
|
||||||
|
// The Furnace has been destroyed, we can clear the block data
|
||||||
|
BlockStorage.clearBlockInfo(b);
|
||||||
|
}
|
||||||
|
else if (((Furnace) b.getState()).getCookTime() > 0) {
|
||||||
|
Furnace furnace = (Furnace) b.getState();
|
||||||
|
|
||||||
|
int newCookTime = furnace.getCookTime() + getSpeed() * 10;
|
||||||
|
|
||||||
|
if (newCookTime > 200) furnace.setCookTime((short) 188);
|
||||||
|
else furnace.setCookTime((short) newCookTime);
|
||||||
|
|
||||||
|
furnace.update(true, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSynchronized() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
|
||||||
|
|
||||||
public class ExcludedBlock extends SlimefunItem implements NotPlaceable {
|
public class ExcludedBlock extends SlimefunItem implements NotPlaceable {
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
|
||||||
|
|
||||||
public class ExcludedGadget extends SlimefunGadget implements NotPlaceable {
|
public class ExcludedGadget extends SlimefunGadget implements NotPlaceable {
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
|
||||||
|
|
||||||
public class ExcludedSoulboundTool extends SoulboundItem implements NotPlaceable {
|
public class ExcludedSoulboundTool extends SoulboundItem implements NotPlaceable {
|
||||||
|
|
||||||
|
@ -4,8 +4,9 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public class ExcludedTool extends SlimefunItem implements NotPlaceable {
|
public class ExcludedTool extends SlimefunItem implements NotPlaceable {
|
||||||
|
|
||||||
public ExcludedTool(Category category, ItemStack item, String id,RecipeType recipeType, ItemStack[] recipe) {
|
public ExcludedTool(Category category, ItemStack item, String id,RecipeType recipeType, ItemStack[] recipe) {
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces;
|
|
||||||
|
|
||||||
public interface NotPlaceable {
|
|
||||||
|
|
||||||
}
|
|
@ -7,7 +7,7 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
|
|
||||||
public class JetBoots extends DamagableChargableItem {
|
public class JetBoots extends DamagableChargableItem {
|
||||||
|
|
||||||
double speed;
|
private double speed;
|
||||||
|
|
||||||
public JetBoots(ItemStack item, String id, ItemStack[] recipe, double speed) {
|
public JetBoots(ItemStack item, String id, ItemStack[] recipe, double speed) {
|
||||||
super(Categories.TECH, item, id, RecipeType.ENHANCED_CRAFTING_TABLE, recipe, "Jet Boots");
|
super(Categories.TECH, item, id, RecipeType.ENHANCED_CRAFTING_TABLE, recipe, "Jet Boots");
|
||||||
|
@ -7,7 +7,7 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
|
|
||||||
public class Jetpack extends DamagableChargableItem {
|
public class Jetpack extends DamagableChargableItem {
|
||||||
|
|
||||||
double thrust;
|
private double thrust;
|
||||||
|
|
||||||
public Jetpack(ItemStack item, String id, ItemStack[] recipe, double thrust) {
|
public Jetpack(ItemStack item, String id, ItemStack[] recipe, double thrust) {
|
||||||
super(Categories.TECH, item, id, RecipeType.ENHANCED_CRAFTING_TABLE, recipe, "Jetpack");
|
super(Categories.TECH, item, id, RecipeType.ENHANCED_CRAFTING_TABLE, recipe, "Jetpack");
|
||||||
|
@ -11,7 +11,7 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
|
|
||||||
public class MultiTool extends DamagableChargableItem {
|
public class MultiTool extends DamagableChargableItem {
|
||||||
|
|
||||||
List<Integer> modes;
|
private List<Integer> modes;
|
||||||
|
|
||||||
public MultiTool(ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) {
|
public MultiTool(ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) {
|
||||||
super(Categories.TECH, item, id, recipeType, recipe, "Multi Tool", keys, values);
|
super(Categories.TECH, item, id, recipeType, recipe, "Multi Tool", keys, values);
|
||||||
@ -19,11 +19,9 @@ public class MultiTool extends DamagableChargableItem {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void create() {
|
public void create() {
|
||||||
List<Integer> list = new ArrayList<Integer>();
|
List<Integer> list = new ArrayList<>();
|
||||||
for (int i = 0; i < 50; i++) {
|
for (int i = 0; i < 50; i++) {
|
||||||
if (Slimefun.getItemValue(this.getID(), "mode." + i + ".enabled") != null) {
|
if (Slimefun.getItemValue(this.getID(), "mode." + i + ".enabled") != null && (Boolean) Slimefun.getItemValue(this.getID(), "mode." + i + ".enabled")) list.add(i);
|
||||||
if ((Boolean) Slimefun.getItemValue(this.getID(), "mode." + i + ".enabled")) list.add(i);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
this.modes = list;
|
this.modes = list;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,30 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
||||||
|
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler;
|
||||||
|
|
||||||
|
public abstract class SimpleSlimefunItem<T extends ItemHandler> extends SlimefunItem {
|
||||||
|
|
||||||
|
public SimpleSlimefunItem(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
|
super(category, item, id, recipeType, recipe);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimpleSlimefunItem(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
|
||||||
|
super(category, item, id, recipeType, recipe, recipeOutput);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SimpleSlimefunItem(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 preRegister() {
|
||||||
|
addItemHandler(getItemHandler());
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract T getItemHandler();
|
||||||
|
|
||||||
|
}
|
@ -8,7 +8,7 @@ import org.bukkit.potion.PotionEffect;
|
|||||||
|
|
||||||
public class SlimefunArmorPiece extends SlimefunItem {
|
public class SlimefunArmorPiece extends SlimefunItem {
|
||||||
|
|
||||||
PotionEffect[] effects;
|
private PotionEffect[] effects;
|
||||||
|
|
||||||
public SlimefunArmorPiece(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, PotionEffect[] effects) {
|
public SlimefunArmorPiece(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, PotionEffect[] effects) {
|
||||||
super(category, item, id, recipeType, recipe);
|
super(category, item, id, recipeType, recipe);
|
||||||
@ -20,6 +20,8 @@ public class SlimefunArmorPiece extends SlimefunItem {
|
|||||||
this.effects = effects;
|
this.effects = effects;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PotionEffect[] getEffects() { return this.effects; }
|
public PotionEffect[] getEffects() {
|
||||||
|
return this.effects;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ import me.mrCookieSlime.Slimefun.Objects.Category;
|
|||||||
|
|
||||||
public class SlimefunBackpack extends SlimefunItem {
|
public class SlimefunBackpack extends SlimefunItem {
|
||||||
|
|
||||||
public int size;
|
private int size;
|
||||||
|
|
||||||
public SlimefunBackpack(int size, Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
public SlimefunBackpack(int size, Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
super(category, item, id, recipeType, recipe);
|
super(category, item, id, recipeType, recipe);
|
||||||
@ -15,4 +15,8 @@ public class SlimefunBackpack extends SlimefunItem {
|
|||||||
this.size = size;
|
this.size = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getSize() {
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,33 +3,37 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
|
||||||
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class SlimefunGadget extends SlimefunItem {
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
|
||||||
|
|
||||||
List<ItemStack[]> recipes;
|
public class SlimefunGadget extends SlimefunItem implements RecipeDisplayItem {
|
||||||
List<ItemStack> display_recipes;
|
|
||||||
|
private List<ItemStack[]> recipes;
|
||||||
|
private List<ItemStack> displayRecipes;
|
||||||
|
|
||||||
public SlimefunGadget(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack[] machineRecipes) {
|
public SlimefunGadget(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack[] machineRecipes) {
|
||||||
super(category, item, id, recipeType, recipe);
|
super(category, item, id, recipeType, recipe);
|
||||||
this.recipes = new ArrayList<ItemStack[]>();
|
|
||||||
this.display_recipes = new ArrayList<ItemStack>();
|
this.recipes = new ArrayList<>();
|
||||||
|
this.displayRecipes = new ArrayList<>();
|
||||||
|
|
||||||
for (ItemStack i: machineRecipes) {
|
for (ItemStack i: machineRecipes) {
|
||||||
this.recipes.add(new ItemStack[] {i});
|
this.recipes.add(new ItemStack[] {i});
|
||||||
this.display_recipes.add(i);
|
this.displayRecipes.add(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public SlimefunGadget(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack[] machineRecipes, String[] keys, Object[] values) {
|
public SlimefunGadget(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack[] machineRecipes, String[] keys, Object[] values) {
|
||||||
super(category, item, id, recipeType, recipe, keys, values);
|
super(category, item, id, recipeType, recipe, keys, values);
|
||||||
this.recipes = new ArrayList<ItemStack[]>();
|
this.recipes = new ArrayList<>();
|
||||||
this.display_recipes = new ArrayList<ItemStack>();
|
this.displayRecipes = new ArrayList<>();
|
||||||
|
|
||||||
for (ItemStack i: machineRecipes) {
|
for (ItemStack i: machineRecipes) {
|
||||||
this.recipes.add(new ItemStack[] {i});
|
this.recipes.add(new ItemStack[] {i});
|
||||||
this.display_recipes.add(i);
|
this.displayRecipes.add(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,14 +41,15 @@ public class SlimefunGadget extends SlimefunItem {
|
|||||||
return this.recipes;
|
return this.recipes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public List<ItemStack> getDisplayRecipes() {
|
public List<ItemStack> getDisplayRecipes() {
|
||||||
return this.display_recipes;
|
return this.displayRecipes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addRecipe(ItemStack input, ItemStack output) {
|
public void addRecipe(ItemStack input, ItemStack output) {
|
||||||
this.recipes.add(new ItemStack[] {input});
|
this.recipes.add(new ItemStack[] {input});
|
||||||
this.recipes.add(new ItemStack[] {output});
|
this.recipes.add(new ItemStack[] {output});
|
||||||
this.display_recipes.add(input);
|
this.displayRecipes.add(input);
|
||||||
this.display_recipes.add(output);
|
this.displayRecipes.add(output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,11 +2,10 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -15,37 +14,26 @@ import org.bukkit.block.Block;
|
|||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import me.mrCookieSlime.Slimefun.SlimefunStartup;
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
import me.mrCookieSlime.Slimefun.AncientAltar.AltarRecipe;
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Research;
|
import me.mrCookieSlime.Slimefun.Objects.Research;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
|
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.ItemHandler;
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler;
|
||||||
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
import me.mrCookieSlime.Slimefun.ancient_altar.AltarRecipe;
|
||||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||||
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
||||||
import me.mrCookieSlime.Slimefun.api.energy.EnergyNet;
|
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.energy.EnergyTicker;
|
||||||
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
||||||
|
|
||||||
public class SlimefunItem {
|
public class SlimefunItem {
|
||||||
|
|
||||||
public static List<SlimefunItem> items = new ArrayList<>();
|
|
||||||
|
|
||||||
public static Map<String, SlimefunItem> map_id = new HashMap<>();
|
|
||||||
public static List<ItemStack> radioactive = new ArrayList<>();
|
|
||||||
public static int vanilla = 0;
|
|
||||||
public static Set<String> tickers = new HashSet<>();
|
|
||||||
|
|
||||||
public static List<SlimefunItem> all = new ArrayList<>();
|
|
||||||
public static Map<String, Set<ItemHandler>> handlers = new HashMap<>();
|
|
||||||
public static Map<String, SlimefunBlockHandler> blockhandler = new HashMap<>();
|
|
||||||
|
|
||||||
private String id;
|
private String id;
|
||||||
private String hash;
|
private String hash;
|
||||||
private State state;
|
private State state;
|
||||||
@ -53,27 +41,29 @@ public class SlimefunItem {
|
|||||||
private Category category;
|
private Category category;
|
||||||
private ItemStack[] recipe;
|
private ItemStack[] recipe;
|
||||||
private RecipeType recipeType;
|
private RecipeType recipeType;
|
||||||
private ItemStack recipeOutput = null;
|
protected ItemStack recipeOutput = null;
|
||||||
private Research research;
|
private Research research;
|
||||||
private int month = -1;
|
private int month = -1;
|
||||||
private boolean enchantable = true, disenchantable = true;
|
private boolean enchantable = true;
|
||||||
|
private boolean disenchantable = true;
|
||||||
private boolean hidden = false;
|
private boolean hidden = false;
|
||||||
private boolean replacing = false;
|
private boolean replacing = false;
|
||||||
private boolean addon = false;
|
private boolean addon = false;
|
||||||
private String permission = "";
|
private String permission = "";
|
||||||
private Set<ItemHandler> itemhandlers = new HashSet<ItemHandler>();
|
private Set<ItemHandler> itemhandlers = new HashSet<>();
|
||||||
private boolean ticking = false;
|
private boolean ticking = false;
|
||||||
private BlockTicker blockTicker;
|
private BlockTicker blockTicker;
|
||||||
private EnergyTicker energyTicker;
|
private EnergyTicker energyTicker;
|
||||||
private String[] keys = null;
|
private String[] keys = null;
|
||||||
private Object[] values = null;
|
private Object[] values = null;
|
||||||
|
private String wiki = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines whether a SlimefunItem is enabled, disabled or fall-back to its vanilla behavior.
|
* Defines whether a SlimefunItem is enabled, disabled or fall-back to its vanilla behavior.
|
||||||
*
|
*
|
||||||
* @since 4.1.10
|
* @since 4.1.10
|
||||||
*/
|
*/
|
||||||
public enum State {
|
public static enum State {
|
||||||
/**
|
/**
|
||||||
* This SlimefunItem is enabled.
|
* This SlimefunItem is enabled.
|
||||||
*/
|
*/
|
||||||
@ -155,7 +145,10 @@ public class SlimefunItem {
|
|||||||
* @since 4.1.11, rename of {@link #getName()}.
|
* @since 4.1.11, rename of {@link #getName()}.
|
||||||
*/
|
*/
|
||||||
public String getID() { return id; }
|
public String getID() { return id; }
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public String getHash() { return hash; }
|
public String getHash() { return hash; }
|
||||||
|
|
||||||
public State getState() { return state; }
|
public State getState() { return state; }
|
||||||
public ItemStack getItem() { return item; }
|
public ItemStack getItem() { return item; }
|
||||||
public Category getCategory() { return category; }
|
public Category getCategory() { return category; }
|
||||||
@ -209,68 +202,76 @@ public class SlimefunItem {
|
|||||||
public void register(boolean slimefun) {
|
public void register(boolean slimefun) {
|
||||||
this.addon = !slimefun;
|
this.addon = !slimefun;
|
||||||
try {
|
try {
|
||||||
if (map_id.containsKey(this.id)) throw new IllegalArgumentException("ID \"" + this.id + "\" already exists");
|
preRegister();
|
||||||
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);
|
if (SlimefunPlugin.getUtilities().itemIDs.containsKey(this.id)) {
|
||||||
SlimefunStartup.getItemCfg().setDefaultValue(this.id + ".can-be-used-in-workbenches", this.replacing);
|
throw new IllegalArgumentException("ID \"" + this.id + "\" already exists");
|
||||||
SlimefunStartup.getItemCfg().setDefaultValue(this.id + ".hide-in-guide", this.hidden);
|
}
|
||||||
SlimefunStartup.getItemCfg().setDefaultValue(this.id + ".allow-enchanting", this.enchantable);
|
if (this.recipe.length < 9) this.recipe = new ItemStack[] {null, null, null, null, null, null, null, null, null};
|
||||||
SlimefunStartup.getItemCfg().setDefaultValue(this.id + ".allow-disenchanting", this.disenchantable);
|
SlimefunPlugin.getUtilities().allItems.add(this);
|
||||||
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) {
|
if (this.keys != null && this.values != null) {
|
||||||
for (int i = 0; i < this.keys.length; i++) {
|
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()) {
|
for (World world: Bukkit.getWorlds()) {
|
||||||
SlimefunStartup.getWhitelist().setDefaultValue(world.getName() + ".enabled", true);
|
SlimefunPlugin.getWhitelist().setDefaultValue(world.getName() + ".enabled", true);
|
||||||
SlimefunStartup.getWhitelist().setDefaultValue(world.getName() + ".enabled-items." + this.id, 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;
|
this.state = State.DISABLED;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SlimefunStartup.getItemCfg().getBoolean(id + ".enabled")) {
|
if (SlimefunPlugin.getItemCfg().getBoolean(id + ".enabled")) {
|
||||||
if (!Category.list().contains(category)) category.register();
|
if (!Category.list().contains(category)) category.register();
|
||||||
|
|
||||||
this.state = State.ENABLED;
|
this.state = State.ENABLED;
|
||||||
|
|
||||||
this.replacing = SlimefunStartup.getItemCfg().getBoolean(this.id + ".can-be-used-in-workbenches");
|
this.replacing = SlimefunPlugin.getItemCfg().getBoolean(this.id + ".can-be-used-in-workbenches");
|
||||||
this.hidden = SlimefunStartup.getItemCfg().getBoolean(this.id + ".hide-in-guide");
|
this.hidden = SlimefunPlugin.getItemCfg().getBoolean(this.id + ".hide-in-guide");
|
||||||
this.enchantable = SlimefunStartup.getItemCfg().getBoolean(this.id + ".allow-enchanting");
|
this.enchantable = SlimefunPlugin.getItemCfg().getBoolean(this.id + ".allow-enchanting");
|
||||||
this.disenchantable = SlimefunStartup.getItemCfg().getBoolean(this.id + ".allow-disenchanting");
|
this.disenchantable = SlimefunPlugin.getItemCfg().getBoolean(this.id + ".allow-disenchanting");
|
||||||
this.permission = SlimefunStartup.getItemCfg().getString(this.id + ".required-permission");
|
this.permission = SlimefunPlugin.getItemCfg().getString(this.id + ".required-permission");
|
||||||
items.add(this);
|
SlimefunPlugin.getUtilities().enabledItems.add(this);
|
||||||
if (slimefun) vanilla++;
|
if (slimefun) SlimefunPlugin.getUtilities().vanillaItems++;
|
||||||
map_id.put(this.id, this);
|
SlimefunPlugin.getUtilities().itemIDs.put(this.id, this);
|
||||||
this.create();
|
|
||||||
|
create();
|
||||||
|
|
||||||
for (ItemHandler handler: itemhandlers) {
|
for (ItemHandler handler: itemhandlers) {
|
||||||
Set<ItemHandler> handlerset = getHandlers(handler.toCodename());
|
Set<ItemHandler> handlerset = getHandlers(handler.toCodename());
|
||||||
handlerset.add(handler);
|
handlerset.add(handler);
|
||||||
handlers.put(handler.toCodename(), handlerset);
|
SlimefunPlugin.getUtilities().itemHandlers.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 {
|
else {
|
||||||
if (this instanceof VanillaItem) this.state = State.VANILLA;
|
if (this instanceof VanillaItem) this.state = State.VANILLA;
|
||||||
else this.state = State.DISABLED;
|
else this.state = State.DISABLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
postRegister();
|
||||||
} catch(Exception x) {
|
} catch(Exception x) {
|
||||||
System.err.println("[Slimefun] Item Registration failed: " + this.id);
|
Slimefun.getLogger().log(Level.WARNING, "Registering the Item '" + id + "' for Slimefun " + Slimefun.getVersion() + " has failed", x);
|
||||||
x.printStackTrace();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<SlimefunItem> list() {
|
public static List<SlimefunItem> list() {
|
||||||
return items;
|
return SlimefunPlugin.getUtilities().enabledItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void bindToResearch(Research r) {
|
public void bindToResearch(Research r) {
|
||||||
@ -278,6 +279,7 @@ public class SlimefunItem {
|
|||||||
this.research = r;
|
this.research = r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public void setHash(String hash) {
|
public void setHash(String hash) {
|
||||||
this.hash = hash;
|
this.hash = hash;
|
||||||
}
|
}
|
||||||
@ -308,24 +310,26 @@ public class SlimefunItem {
|
|||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public static SlimefunItem getByName(String name) {
|
public static SlimefunItem getByName(String name) {
|
||||||
return map_id.get(name);
|
return getByID(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since 4.1.11, rename of {@link #getByName(String)}.
|
* @since 4.1.11, rename of {@link #getByName(String)}.
|
||||||
*/
|
*/
|
||||||
public static SlimefunItem getByID(String id) {
|
public static SlimefunItem getByID(String id) {
|
||||||
return map_id.get(id);
|
return SlimefunPlugin.getUtilities().itemIDs.get(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SlimefunItem getByItem(ItemStack item) {
|
public static SlimefunItem getByItem(ItemStack item) {
|
||||||
if (item == null) return null;
|
if (item == null) return null;
|
||||||
for (SlimefunItem sfi: items) {
|
for (SlimefunItem sfi: SlimefunPlugin.getUtilities().enabledItems) {
|
||||||
if (sfi instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi;
|
if ((sfi instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) ||
|
||||||
else if (sfi instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi;
|
(sfi instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) ||
|
||||||
else if (sfi instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi;
|
(sfi instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) ||
|
||||||
else if (sfi instanceof SlimefunBackpack && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi;
|
(sfi instanceof SlimefunBackpack && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) ||
|
||||||
else if (SlimefunManager.isItemSimiliar(item, sfi.getItem(), true)) return sfi;
|
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.BROKEN_SPAWNER, false)) return getByID("BROKEN_SPAWNER");
|
||||||
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) return getByID("REINFORCED_SPAWNER");
|
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) return getByID("REINFORCED_SPAWNER");
|
||||||
@ -347,13 +351,14 @@ public class SlimefunItem {
|
|||||||
if (recipeOutput != null) output = recipeOutput.clone();
|
if (recipeOutput != null) output = recipeOutput.clone();
|
||||||
|
|
||||||
if (recipeType.toItem().isSimilar(RecipeType.MOB_DROP.toItem())) {
|
if (recipeType.toItem().isSimilar(RecipeType.MOB_DROP.toItem())) {
|
||||||
|
String mob = ChatColor.stripColor(recipe[4].getItemMeta().getDisplayName()).toUpperCase().replace(" ", "_");
|
||||||
try {
|
try {
|
||||||
EntityType entity = EntityType.valueOf(ChatColor.stripColor(recipe[4].getItemMeta().getDisplayName()).toUpperCase().replace(" ", "_"));
|
EntityType entity = EntityType.valueOf(mob);
|
||||||
List<ItemStack> dropping = new ArrayList<ItemStack>();
|
List<ItemStack> dropping = SlimefunPlugin.getUtilities().drops.getOrDefault(entity, new ArrayList<>());
|
||||||
if (SlimefunManager.drops.containsKey(entity)) dropping = SlimefunManager.drops.get(entity);
|
|
||||||
dropping.add(output);
|
dropping.add(output);
|
||||||
SlimefunManager.drops.put(entity, dropping);
|
SlimefunPlugin.getUtilities().drops.put(entity, dropping);
|
||||||
} catch(Exception x) {
|
} 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())) {
|
else if (recipeType.toItem().isSimilar(RecipeType.ANCIENT_ALTAR.toItem())) {
|
||||||
@ -362,14 +367,15 @@ public class SlimefunItem {
|
|||||||
else if (recipeType.getMachine() != null && getByID(recipeType.getMachine().getID()) instanceof SlimefunMachine) {
|
else if (recipeType.getMachine() != null && getByID(recipeType.getMachine().getID()) instanceof SlimefunMachine) {
|
||||||
((SlimefunMachine) getByID(recipeType.getMachine().getID())).addRecipe(recipe, output);
|
((SlimefunMachine) getByID(recipeType.getMachine().getID())).addRecipe(recipe, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
install();
|
install();
|
||||||
} catch(Exception x) {
|
} catch(Exception x) {
|
||||||
System.err.println("[Slimefun] Item Initialization failed: " + id);
|
Slimefun.getLogger().log(Level.WARNING, "Item Setup failed: " + id + " (" + x.getClass().getSimpleName() + ")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static State getState(ItemStack item) {
|
public static State getState(ItemStack item) {
|
||||||
for (SlimefunItem i: all) {
|
for (SlimefunItem i: SlimefunPlugin.getUtilities().allItems) {
|
||||||
if (i.isItem(item)) {
|
if (i.isItem(item)) {
|
||||||
return i.getState();
|
return i.getState();
|
||||||
}
|
}
|
||||||
@ -378,7 +384,7 @@ public class SlimefunItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isDisabled(ItemStack item) {
|
public static boolean isDisabled(ItemStack item) {
|
||||||
for (SlimefunItem i: all) {
|
for (SlimefunItem i: SlimefunPlugin.getUtilities().allItems) {
|
||||||
if (i.isItem(item)) {
|
if (i.isItem(item)) {
|
||||||
return i.isDisabled();
|
return i.isDisabled();
|
||||||
}
|
}
|
||||||
@ -386,8 +392,26 @@ public class SlimefunItem {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void install() {}
|
@Deprecated
|
||||||
public void create() {}
|
public void install() {
|
||||||
|
// Deprecated
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link SlimefunItem#postRegister()} instead
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public void create() {
|
||||||
|
// Deprecated
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link SlimefunItem#addItemHandler(ItemHandler...)} instead
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public void addItemHandler(me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.ItemHandler... handler) {
|
||||||
|
addItemHandler((ItemHandler[]) handler);
|
||||||
|
}
|
||||||
|
|
||||||
public void addItemHandler(ItemHandler... handler) {
|
public void addItemHandler(ItemHandler... handler) {
|
||||||
this.itemhandlers.addAll(Arrays.asList(handler));
|
this.itemhandlers.addAll(Arrays.asList(handler));
|
||||||
@ -395,12 +419,12 @@ public class SlimefunItem {
|
|||||||
for (ItemHandler h: handler) {
|
for (ItemHandler h: handler) {
|
||||||
if (h instanceof BlockTicker) {
|
if (h instanceof BlockTicker) {
|
||||||
this.ticking = true;
|
this.ticking = true;
|
||||||
tickers.add(getID());
|
SlimefunPlugin.getUtilities().tickers.add(getID());
|
||||||
this.blockTicker = (BlockTicker) h;
|
this.blockTicker = (BlockTicker) h;
|
||||||
}
|
}
|
||||||
else if (h instanceof EnergyTicker) {
|
else if (h instanceof EnergyTicker) {
|
||||||
this.energyTicker = (EnergyTicker) h;
|
this.energyTicker = (EnergyTicker) h;
|
||||||
EnergyNet.registerComponent(getID(), NetworkComponent.SOURCE);
|
EnergyNet.registerComponent(getID(), EnergyNetComponent.SOURCE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -415,23 +439,40 @@ public class SlimefunItem {
|
|||||||
register(false);
|
register(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link SlimefunItem#register(boolean, ItemHandler...)} instead
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public void register(boolean vanilla, me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.ItemHandler... handlers) {
|
||||||
|
addItemHandler(handlers);
|
||||||
|
register(vanilla);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link SlimefunItem#register(ItemHandler...)} instead
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public void register(me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.ItemHandler... handlers) {
|
||||||
|
register((ItemHandler[]) handlers);
|
||||||
|
}
|
||||||
|
|
||||||
public void register(boolean vanilla, SlimefunBlockHandler handler) {
|
public void register(boolean vanilla, SlimefunBlockHandler handler) {
|
||||||
blockhandler.put(getID(), handler);
|
SlimefunPlugin.getUtilities().blockHandlers.put(getID(), handler);
|
||||||
register(vanilla);
|
register(vanilla);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void register(SlimefunBlockHandler handler) {
|
public void register(SlimefunBlockHandler handler) {
|
||||||
blockhandler.put(getID(), handler);
|
SlimefunPlugin.getUtilities().blockHandlers.put(getID(), handler);
|
||||||
register(false);
|
register(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Set<ItemHandler> getHandlers(String codeid) {
|
public static Set<ItemHandler> getHandlers(String codeid) {
|
||||||
if (handlers.containsKey(codeid)) return handlers.get(codeid);
|
if (SlimefunPlugin.getUtilities().itemHandlers.containsKey(codeid)) return SlimefunPlugin.getUtilities().itemHandlers.get(codeid);
|
||||||
else return new HashSet<>();
|
else return new HashSet<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setRadioactive(ItemStack item) {
|
public static void setRadioactive(ItemStack item) {
|
||||||
radioactive.add(item);
|
SlimefunPlugin.getUtilities().radioactiveItems.add(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ItemStack getItem(String id) {
|
public static ItemStack getItem(String id) {
|
||||||
@ -442,13 +483,14 @@ public class SlimefunItem {
|
|||||||
public static void patchExistingItem(String id, ItemStack stack) {
|
public static void patchExistingItem(String id, ItemStack stack) {
|
||||||
SlimefunItem item = getByID(id);
|
SlimefunItem item = getByID(id);
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
System.out.println("[Slimefun] WARNING - Patching existing Item - " + id);
|
Slimefun.getLogger().log(Level.INFO, "Patching existing Item... {0}", id);
|
||||||
System.out.println("[Slimefun] This might take a while");
|
Slimefun.getLogger().log(Level.INFO, "This might take a while");
|
||||||
|
|
||||||
final ItemStack old = item.getItem();
|
final ItemStack old = item.getItem();
|
||||||
item.setItem(stack);
|
item.setItem(stack);
|
||||||
for (SlimefunItem sfi: list()) {
|
for (SlimefunItem sfi: list()) {
|
||||||
ItemStack[] recipe = sfi.getRecipe();
|
ItemStack[] recipe = sfi.getRecipe();
|
||||||
|
|
||||||
for (int i = 0; i < 9; i++) {
|
for (int i = 0; i < 9; i++) {
|
||||||
if (SlimefunManager.isItemSimiliar(recipe[i], old, true)) recipe[i] = stack;
|
if (SlimefunManager.isItemSimiliar(recipe[i], old, true)) recipe[i] = stack;
|
||||||
}
|
}
|
||||||
@ -464,7 +506,7 @@ public class SlimefunItem {
|
|||||||
public void registerChargeableBlock(boolean slimefun, int capacity) {
|
public void registerChargeableBlock(boolean slimefun, int capacity) {
|
||||||
this.register(slimefun);
|
this.register(slimefun);
|
||||||
ChargableBlock.registerChargableBlock(id, capacity, true);
|
ChargableBlock.registerChargableBlock(id, capacity, true);
|
||||||
EnergyNet.registerComponent(id, NetworkComponent.CONSUMER);
|
EnergyNet.registerComponent(id, EnergyNetComponent.CONSUMER);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerUnrechargeableBlock(boolean slimefun, int capacity) {
|
public void registerUnrechargeableBlock(boolean slimefun, int capacity) {
|
||||||
@ -479,25 +521,35 @@ public class SlimefunItem {
|
|||||||
|
|
||||||
public void registerEnergyDistributor(boolean slimefun) {
|
public void registerEnergyDistributor(boolean slimefun) {
|
||||||
this.register(slimefun);
|
this.register(slimefun);
|
||||||
EnergyNet.registerComponent(id, NetworkComponent.DISTRIBUTOR);
|
EnergyNet.registerComponent(id, EnergyNetComponent.DISTRIBUTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerDistibutingCapacitor(boolean slimefun, final int capacity) {
|
public void registerDistibutingCapacitor(boolean slimefun, final int capacity) {
|
||||||
this.register(slimefun);
|
this.register(slimefun);
|
||||||
EnergyNet.registerComponent(id, NetworkComponent.DISTRIBUTOR);
|
EnergyNet.registerComponent(id, EnergyNetComponent.DISTRIBUTOR);
|
||||||
ChargableBlock.registerCapacitor(id, capacity);
|
ChargableBlock.registerCapacitor(id, capacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void preRegister() {
|
||||||
|
// Override this method to execute code before the Item has been registered
|
||||||
|
// Useful for calls to addItemHandler(...)
|
||||||
|
}
|
||||||
|
|
||||||
|
public void postRegister() {
|
||||||
|
// Override this method to execute code after the Item has been registered
|
||||||
|
// Useful for calls to Slimefun.getItemValue(...)
|
||||||
|
}
|
||||||
|
|
||||||
protected void setItem(ItemStack stack) {
|
protected void setItem(ItemStack stack) {
|
||||||
this.item = stack;
|
this.item = stack;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isTicking(String item) {
|
public static boolean isTicking(String item) {
|
||||||
return tickers.contains(item);
|
return SlimefunPlugin.getUtilities().tickers.contains(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerBlockHandler(String id, SlimefunBlockHandler handler) {
|
public static void registerBlockHandler(String id, SlimefunBlockHandler handler) {
|
||||||
blockhandler.put(id, handler);
|
SlimefunPlugin.getUtilities().blockHandlers.put(id, handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerChargeableBlock(boolean vanilla, int capacity, ItemHandler... handlers) {
|
public void registerChargeableBlock(boolean vanilla, int capacity, ItemHandler... handlers) {
|
||||||
@ -510,6 +562,19 @@ public class SlimefunItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void addWikipage(String page) {
|
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
|
||||||
|
public String toString() {
|
||||||
|
return "SlimefunItem: " + id + " (" + state + ", vanilla=" + !addon + ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,33 +1,24 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.MultiBlock;
|
import me.mrCookieSlime.Slimefun.Objects.MultiBlock;
|
||||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
|
||||||
|
|
||||||
import org.bukkit.Material;
|
public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem {
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.block.BlockFace;
|
|
||||||
import org.bukkit.block.Container;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
public class SlimefunMachine extends SlimefunItem {
|
|
||||||
|
|
||||||
private List<ItemStack[]> recipes;
|
private List<ItemStack[]> recipes;
|
||||||
private List<ItemStack> shownRecipes;
|
|
||||||
private Material trigger;
|
private Material trigger;
|
||||||
//Adjacent blockfaces for iterative output chest checks
|
|
||||||
private static final BlockFace[] outputFaces = {
|
protected List<ItemStack> shownRecipes;
|
||||||
BlockFace.UP,
|
|
||||||
BlockFace.NORTH,
|
|
||||||
BlockFace.EAST,
|
|
||||||
BlockFace.SOUTH,
|
|
||||||
BlockFace.WEST
|
|
||||||
};
|
|
||||||
|
|
||||||
public SlimefunMachine(Category category, ItemStack item, String id, ItemStack[] recipe, ItemStack[] machineRecipes, Material trigger) {
|
public SlimefunMachine(Category category, ItemStack item, String id, ItemStack[] recipe, ItemStack[] machineRecipes, Material trigger) {
|
||||||
super(category, item, id, RecipeType.MULTIBLOCK, recipe);
|
super(category, item, id, RecipeType.MULTIBLOCK, recipe);
|
||||||
@ -54,20 +45,17 @@ public class SlimefunMachine extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public List<ItemStack[]> getRecipes() {
|
public List<ItemStack[]> getRecipes() {
|
||||||
return this.recipes;
|
return recipes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public List<ItemStack> getDisplayRecipes() {
|
public List<ItemStack> getDisplayRecipes() {
|
||||||
return this.shownRecipes;
|
return shownRecipes;
|
||||||
}
|
|
||||||
|
|
||||||
public static BlockFace[] getOutputFaces() {
|
|
||||||
return outputFaces;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addRecipe(ItemStack[] input, ItemStack output) {
|
public void addRecipe(ItemStack[] input, ItemStack output) {
|
||||||
this.recipes.add(input);
|
recipes.add(input);
|
||||||
this.recipes.add(new ItemStack[] {output});
|
recipes.add(new ItemStack[] {output});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -79,8 +67,9 @@ public class SlimefunMachine extends SlimefunItem {
|
|||||||
public void install() {
|
public void install() {
|
||||||
for (ItemStack i: this.getDisplayRecipes()) {
|
for (ItemStack i: this.getDisplayRecipes()) {
|
||||||
SlimefunItem item = SlimefunItem.getByItem(i);
|
SlimefunItem item = SlimefunItem.getByItem(i);
|
||||||
if (item == null) this.recipes.add(new ItemStack[] {i});
|
if (item == null || !SlimefunItem.isDisabled(i)) {
|
||||||
else if (!SlimefunItem.isDisabled(i)) this.recipes.add(new ItemStack[] {i});
|
this.recipes.add(new ItemStack[] {i});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,34 +88,4 @@ public class SlimefunMachine extends SlimefunItem {
|
|||||||
return this.recipes.iterator();
|
return this.recipes.iterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overloaded method for finding a potential output chest. Fallbacks to the old system of putting the adding back into the dispenser.
|
|
||||||
// Optional last argument Inventory placeCheckerInv is for multiblock machines that create a dummy inventory to check if there's a space for the adding,
|
|
||||||
// i.e. Enhanced crafting table
|
|
||||||
public static Inventory findValidOutputInv(ItemStack adding, Block dispBlock, Inventory dispInv) {
|
|
||||||
return findValidOutputInv(adding, dispBlock, dispInv, dispInv);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Inventory findValidOutputInv(ItemStack product, Block dispBlock, Inventory dispInv, Inventory placeCheckerInv) {
|
|
||||||
Inventory outputInv = null;
|
|
||||||
for (BlockFace face : outputFaces) {
|
|
||||||
Block potentialOutput = dispBlock.getRelative(face);
|
|
||||||
String id = BlockStorage.checkID(potentialOutput);
|
|
||||||
if (id != null && id.equals("OUTPUT_CHEST")) {
|
|
||||||
// Found the output chest! Now, let's check if we can fit the product in it.
|
|
||||||
Inventory inv = ((Container) potentialOutput.getState()).getInventory();
|
|
||||||
if (InvUtils.fits(inv, product)) {
|
|
||||||
// It fits! Let's set the inventory to that now.
|
|
||||||
outputInv = inv;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// This if-clause will trigger if no suitable output chest was found. It's functionally the same as the old fit check for the dispenser, only refactored.
|
|
||||||
if (outputInv == null && InvUtils.fits(placeCheckerInv, product)) outputInv = dispInv;
|
|
||||||
|
|
||||||
return outputInv;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,11 +5,18 @@ import me.mrCookieSlime.Slimefun.Objects.Category;
|
|||||||
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an Item that will not drop on death.
|
||||||
|
*
|
||||||
|
* @author TheBusyBiscuit
|
||||||
|
*
|
||||||
|
*/
|
||||||
public class SoulboundItem extends SlimefunItem {
|
public class SoulboundItem extends SlimefunItem {
|
||||||
|
|
||||||
public SoulboundItem(Category category, ItemStack item, String id, ItemStack[] recipe) {
|
public SoulboundItem(Category category, ItemStack item, String id, ItemStack[] recipe) {
|
||||||
super(category, item, id, RecipeType.MAGIC_WORKBENCH, recipe);
|
super(category, item, id, RecipeType.MAGIC_WORKBENCH, recipe);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SoulboundItem(Category category, ItemStack item, String id, RecipeType type, ItemStack[] recipe) {
|
public SoulboundItem(Category category, ItemStack item, String id, RecipeType type, ItemStack[] recipe) {
|
||||||
super(category, item, id, type, recipe);
|
super(category, item, id, type, recipe);
|
||||||
}
|
}
|
||||||
|
@ -2,14 +2,7 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
|
||||||
import me.mrCookieSlime.Slimefun.SlimefunStartup;
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.Categories;
|
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Research;
|
|
||||||
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
|
||||||
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -23,16 +16,24 @@ import org.bukkit.event.player.PlayerEvent;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.Categories;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Research;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since 4.0
|
* @since 4.0
|
||||||
*/
|
*/
|
||||||
public class Talisman extends SlimefunItem {
|
public class Talisman extends SlimefunItem {
|
||||||
|
|
||||||
private String suffix;
|
protected String suffix;
|
||||||
private boolean consumable = true;
|
protected boolean consumable = true;
|
||||||
private boolean cancel = true;
|
protected boolean cancel = true;
|
||||||
private PotionEffect[] effects;
|
protected PotionEffect[] effects;
|
||||||
private int chance = 100;
|
protected int chance = 100;
|
||||||
|
|
||||||
public Talisman(ItemStack item, String id, ItemStack[] recipe, boolean consumable, boolean cancelEvent, String messageSuffix, PotionEffect... effects) {
|
public Talisman(ItemStack item, String id, ItemStack[] recipe, boolean consumable, boolean cancelEvent, String messageSuffix, PotionEffect... effects) {
|
||||||
super(Categories.TALISMANS_1, item, id, RecipeType.MAGIC_WORKBENCH, recipe, new CustomItem(item, consumable ? 4 : 1));
|
super(Categories.TALISMANS_1, item, id, RecipeType.MAGIC_WORKBENCH, recipe, new CustomItem(item, consumable ? 4 : 1));
|
||||||
@ -52,12 +53,16 @@ public class Talisman extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Talisman(ItemStack item, String id, ItemStack[] recipe, String messageSuffix, int chance, PotionEffect... effects) {
|
public Talisman(ItemStack item, String id, ItemStack[] recipe, String messageSuffix, int chance, PotionEffect... effects) {
|
||||||
super(Categories.TALISMANS_1, item, id, RecipeType.MAGIC_WORKBENCH, recipe, item);
|
super(Categories.TALISMANS_1, item, id, RecipeType.MAGIC_WORKBENCH, recipe);
|
||||||
this.suffix = messageSuffix;
|
this.suffix = messageSuffix;
|
||||||
this.effects = effects;
|
this.effects = effects;
|
||||||
this.chance = chance;
|
this.chance = chance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Talisman(Category category, ItemStack item, String id, ItemStack[] recipe) {
|
||||||
|
super(category, item, id, RecipeType.MAGIC_WORKBENCH, recipe);
|
||||||
|
}
|
||||||
|
|
||||||
public String getSuffix() {
|
public String getSuffix() {
|
||||||
return this.suffix;
|
return this.suffix;
|
||||||
}
|
}
|
||||||
@ -78,13 +83,45 @@ public class Talisman extends SlimefunItem {
|
|||||||
return this.chance;
|
return this.chance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ItemStack upgrade() {
|
||||||
|
List<String> lore = new ArrayList<>();
|
||||||
|
lore.add("&7&oEnder Infused");
|
||||||
|
lore.add("");
|
||||||
|
for (String line : getItem().getItemMeta().getLore()) {
|
||||||
|
lore.add(line);
|
||||||
|
}
|
||||||
|
return new CustomItem(getItem().getType(), "&5Ender " + ChatColor.stripColor(getItem().getItemMeta().getDisplayName()), lore.toArray(new String[lore.size()]));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void create() {
|
||||||
|
EnderTalisman talisman = new EnderTalisman(this);
|
||||||
|
talisman.register(!isAddonItem());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void install() {
|
||||||
|
EnderTalisman talisman = (EnderTalisman) SlimefunItem.getByItem(upgrade());
|
||||||
|
Research research = Research.getByID(112);
|
||||||
|
if (talisman != null) {
|
||||||
|
Slimefun.addOfficialWikiPage(talisman.getID(), "Talismans");
|
||||||
|
if (research != null) talisman.bindToResearch(research);
|
||||||
|
}
|
||||||
|
|
||||||
|
Slimefun.addOfficialWikiPage(getID(), "Talismans");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isTalismanMessage(Talisman talisman){
|
||||||
|
return !("").equalsIgnoreCase(talisman.getSuffix());
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean checkFor(Event e, SlimefunItem item) {
|
public static boolean checkFor(Event e, SlimefunItem item) {
|
||||||
if (!(item instanceof Talisman)) {
|
if (!(item instanceof Talisman)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Talisman talisman = (Talisman) item;
|
Talisman talisman = (Talisman) item;
|
||||||
if (!SlimefunStartup.chance(100, talisman.getChance())) {
|
if (new Random().nextInt(100) < talisman.getChance()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,39 +145,6 @@ public class Talisman extends SlimefunItem {
|
|||||||
else return false;
|
else return false;
|
||||||
}
|
}
|
||||||
else return false;
|
else return false;
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public ItemStack upgrade() {
|
|
||||||
List<String> lore = new ArrayList<>();
|
|
||||||
lore.add("&7&oEnder Infused");
|
|
||||||
lore.add("");
|
|
||||||
for (String line : getItem().getItemMeta().getLore()) {
|
|
||||||
lore.add(line);
|
|
||||||
}
|
|
||||||
return new CustomItem(getItem().getType(), "&5Ender " + ChatColor.stripColor(getItem().getItemMeta().getDisplayName()), lore.toArray(new String[lore.size()]));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void create() {
|
|
||||||
EnderTalisman talisman = new EnderTalisman(this);
|
|
||||||
talisman.register(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void install() {
|
|
||||||
EnderTalisman talisman = (EnderTalisman) SlimefunItem.getByItem(upgrade());
|
|
||||||
Research research = Research.getByID(112);
|
|
||||||
if (talisman != null) {
|
|
||||||
Slimefun.addOfficialWikiPage(talisman.getID(), "Talismans");
|
|
||||||
if (research != null) talisman.bindToResearch(research);
|
|
||||||
}
|
|
||||||
|
|
||||||
Slimefun.addOfficialWikiPage(getID(), "Talismans");
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isTalismanMessage(Talisman talisman){
|
|
||||||
return !("").equalsIgnoreCase(talisman.getSuffix());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void executeTalismanAttributes(Event e, Player p, Talisman talisman){
|
private static void executeTalismanAttributes(Event e, Player p, Talisman talisman){
|
||||||
|
@ -5,17 +5,12 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.Damageable;
|
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
|
||||||
|
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
|
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu.AdvancedMenuClickHandler;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu.AdvancedMenuClickHandler;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
|
||||||
@ -23,23 +18,21 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
|
|||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
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.SlimefunItem;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
|
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
|
||||||
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
||||||
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
||||||
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
|
||||||
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
|
|
||||||
|
|
||||||
public abstract class AContainer extends SlimefunItem {
|
public abstract class AContainer extends SlimefunItem implements InventoryBlock {
|
||||||
|
|
||||||
public static Map<Block, MachineRecipe> processing = new HashMap<Block, MachineRecipe>();
|
public static Map<Block, MachineRecipe> processing = new HashMap<>();
|
||||||
public static Map<Block, Integer> progress = new HashMap<Block, Integer>();
|
public static Map<Block, Integer> progress = new HashMap<>();
|
||||||
|
|
||||||
protected List<MachineRecipe> recipes = new ArrayList<MachineRecipe>();
|
protected List<MachineRecipe> recipes = new ArrayList<>();
|
||||||
|
|
||||||
private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 13, 31, 36, 37, 38, 39, 40, 41, 42, 43, 44};
|
private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 13, 31, 36, 37, 38, 39, 40, 41, 42, 43, 44};
|
||||||
private static final int[] border_in = {9, 10, 11, 12, 18, 21, 27, 28, 29, 30};
|
private static final int[] border_in = {9, 10, 11, 12, 18, 21, 27, 28, 29, 30};
|
||||||
@ -48,37 +41,9 @@ public abstract class AContainer extends SlimefunItem {
|
|||||||
public AContainer(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
public AContainer(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
super(category, item, id, recipeType, recipe);
|
super(category, item, id, recipeType, recipe);
|
||||||
|
|
||||||
new BlockMenuPreset(id, getInventoryTitle()) {
|
createPreset(this, getInventoryTitle(), this::constructMenu);
|
||||||
|
|
||||||
@Override
|
registerBlockHandler(id, (p, b, tool, reason) -> {
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
|
|
||||||
if (flow.equals(ItemTransportFlow.INSERT)) return getInputSlots();
|
|
||||||
else return getOutputSlots();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
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);
|
BlockMenu inv = BlockStorage.getInventory(b);
|
||||||
if (inv != null) {
|
if (inv != null) {
|
||||||
for (int slot : getInputSlots()) {
|
for (int slot : getInputSlots()) {
|
||||||
@ -87,6 +52,7 @@ public abstract class AContainer extends SlimefunItem {
|
|||||||
inv.replaceExistingItem(slot, null);
|
inv.replaceExistingItem(slot, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int slot : getOutputSlots()) {
|
for (int slot : getOutputSlots()) {
|
||||||
if (inv.getItemInSlot(slot) != null) {
|
if (inv.getItemInSlot(slot) != null) {
|
||||||
b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
|
b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
|
||||||
@ -94,94 +60,34 @@ public abstract class AContainer extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
progress.remove(b);
|
progress.remove(b);
|
||||||
processing.remove(b);
|
processing.remove(b);
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
this.registerDefaultRecipes();
|
this.registerDefaultRecipes();
|
||||||
}
|
}
|
||||||
|
|
||||||
public AContainer(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
|
public AContainer(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
|
||||||
super(category, item, id, recipeType, recipe, recipeOutput);
|
this(category, item, id, recipeType, recipe);
|
||||||
|
this.recipeOutput = recipeOutput;
|
||||||
new BlockMenuPreset(id, getInventoryTitle()) {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
|
|
||||||
if (flow.equals(ItemTransportFlow.INSERT)) return getInputSlots();
|
|
||||||
else return getOutputSlots();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
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);
|
|
||||||
if (inv != null) {
|
|
||||||
for (int slot: getInputSlots()) {
|
|
||||||
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));
|
|
||||||
inv.replaceExistingItem(slot, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
processing.remove(b);
|
|
||||||
progress.remove(b);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
this.registerDefaultRecipes();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void constructMenu(BlockMenuPreset preset) {
|
protected void constructMenu(BlockMenuPreset preset) {
|
||||||
for (int i : border) {
|
for (int i : border) {
|
||||||
preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
|
preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
}
|
|
||||||
for (int i : border_in) {
|
|
||||||
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
|
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
}
|
|
||||||
for (int i : border_out) {
|
|
||||||
preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "),
|
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
preset.addItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "),
|
for (int i : border_in) {
|
||||||
(p, slot, item, action) -> false
|
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
|
||||||
);
|
}
|
||||||
|
|
||||||
|
for (int i : border_out) {
|
||||||
|
preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_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);
|
||||||
|
|
||||||
for (int i : getOutputSlots()) {
|
for (int i : getOutputSlots()) {
|
||||||
preset.addMenuClickHandler(i, new AdvancedMenuClickHandler() {
|
preset.addMenuClickHandler(i, new AdvancedMenuClickHandler() {
|
||||||
@ -201,15 +107,31 @@ public abstract class AContainer extends SlimefunItem {
|
|||||||
|
|
||||||
public abstract String getInventoryTitle();
|
public abstract String getInventoryTitle();
|
||||||
public abstract ItemStack getProgressBar();
|
public abstract ItemStack getProgressBar();
|
||||||
public abstract void registerDefaultRecipes();
|
|
||||||
public abstract int getEnergyConsumption();
|
public abstract int getEnergyConsumption();
|
||||||
public abstract int getSpeed();
|
public abstract int getSpeed();
|
||||||
public abstract String getMachineIdentifier();
|
public abstract String getMachineIdentifier();
|
||||||
|
|
||||||
|
public void registerDefaultRecipes() {
|
||||||
|
// Override this method to register your machine recipes
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ItemStack> getDisplayRecipes() {
|
||||||
|
List<ItemStack> displayRecipes = new ArrayList<>(recipes.size() * 2);
|
||||||
|
|
||||||
|
for (MachineRecipe recipe: recipes) {
|
||||||
|
displayRecipes.add(recipe.getInput()[0]);
|
||||||
|
displayRecipes.add(recipe.getOutput()[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return displayRecipes;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int[] getInputSlots() {
|
public int[] getInputSlots() {
|
||||||
return new int[] {19, 20};
|
return new int[] {19, 20};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int[] getOutputSlots() {
|
public int[] getOutputSlots() {
|
||||||
return new int[] {24, 25};
|
return new int[] {24, 25};
|
||||||
}
|
}
|
||||||
@ -231,33 +153,8 @@ public abstract class AContainer extends SlimefunItem {
|
|||||||
this.registerRecipe(new MachineRecipe(seconds, input, output));
|
this.registerRecipe(new MachineRecipe(seconds, input, output));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Inventory inject(Block b) {
|
|
||||||
int size = BlockStorage.getInventory(b).toInventory().getSize();
|
|
||||||
Inventory inv = Bukkit.createInventory(null, size);
|
|
||||||
for (int i = 0; i < size; i++) {
|
|
||||||
inv.setItem(i, new CustomItem(Material.COMMAND_BLOCK, " &4ALL YOUR PLACEHOLDERS ARE BELONG TO US"));
|
|
||||||
}
|
|
||||||
for (int slot : getOutputSlots()) {
|
|
||||||
inv.setItem(slot, BlockStorage.getInventory(b).getItemInSlot(slot));
|
|
||||||
}
|
|
||||||
return inv;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected boolean fits(Block b, ItemStack[] items) {
|
|
||||||
return inject(b).addItem(items).isEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void pushItems(Block b, ItemStack[] items) {
|
|
||||||
Inventory inv = inject(b);
|
|
||||||
inv.addItem(items);
|
|
||||||
|
|
||||||
for (int slot : getOutputSlots()) {
|
|
||||||
BlockStorage.getInventory(b).replaceExistingItem(slot, inv.getItem(slot));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void register(boolean slimefun) {
|
public void preRegister() {
|
||||||
addItemHandler(new BlockTicker() {
|
addItemHandler(new BlockTicker() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -265,35 +162,18 @@ public abstract class AContainer extends SlimefunItem {
|
|||||||
AContainer.this.tick(b);
|
AContainer.this.tick(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void uniqueTick() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isSynchronized() {
|
public boolean isSynchronized() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
super.register(slimefun);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void tick(Block b) {
|
protected void tick(Block b) {
|
||||||
if (isProcessing(b)) {
|
if (isProcessing(b)) {
|
||||||
int timeleft = progress.get(b);
|
int timeleft = progress.get(b);
|
||||||
if (timeleft > 0) {
|
if (timeleft > 0) {
|
||||||
ItemStack item = getProgressBar().clone();
|
MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar());
|
||||||
ItemMeta im = item.getItemMeta();
|
|
||||||
((Damageable) im).setDamage(MachineHelper.getDurability(item, timeleft, processing.get(b).getTicks()));
|
|
||||||
im.setDisplayName(" ");
|
|
||||||
List<String> lore = new ArrayList<String>();
|
|
||||||
lore.add(MachineHelper.getProgress(timeleft, processing.get(b).getTicks()));
|
|
||||||
lore.add("");
|
|
||||||
lore.add(MachineHelper.getTimeLeft(timeleft / 2));
|
|
||||||
im.setLore(lore);
|
|
||||||
item.setItemMeta(im);
|
|
||||||
|
|
||||||
BlockStorage.getInventory(b).replaceExistingItem(22, item);
|
|
||||||
|
|
||||||
if (ChargableBlock.isChargable(b)) {
|
if (ChargableBlock.isChargable(b)) {
|
||||||
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
|
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
|
||||||
@ -312,30 +192,31 @@ public abstract class AContainer extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
MachineRecipe r = null;
|
MachineRecipe r = null;
|
||||||
Map<Integer, Integer> found = new HashMap<Integer, Integer>();
|
Map<Integer, Integer> found = new HashMap<>();
|
||||||
outer:
|
|
||||||
for (MachineRecipe recipe: recipes) {
|
for (MachineRecipe recipe: recipes) {
|
||||||
for (ItemStack input: recipe.getInput()) {
|
for (ItemStack input: recipe.getInput()) {
|
||||||
slots:
|
|
||||||
for (int slot: getInputSlots()) {
|
for (int slot: getInputSlots()) {
|
||||||
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), input, true)) {
|
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), input, true)) {
|
||||||
found.put(slot, input.getAmount());
|
found.put(slot, input.getAmount());
|
||||||
break slots;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (found.size() == recipe.getInput().length) {
|
if (found.size() == recipe.getInput().length) {
|
||||||
r = recipe;
|
r = recipe;
|
||||||
break outer;
|
break;
|
||||||
}
|
}
|
||||||
else found.clear();
|
else found.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r != null) {
|
if (r != null) {
|
||||||
if (!fits(b, r.getOutput())) return;
|
if (!fits(b, r.getOutput())) return;
|
||||||
|
|
||||||
for (Map.Entry<Integer, Integer> entry: found.entrySet()) {
|
for (Map.Entry<Integer, Integer> entry: found.entrySet()) {
|
||||||
BlockStorage.getInventory(b).replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(entry.getKey()), entry.getValue()));
|
BlockStorage.getInventory(b).replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(entry.getKey()), entry.getValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
processing.put(b, r);
|
processing.put(b, r);
|
||||||
progress.put(b, r.getTicks());
|
progress.put(b, r.getTicks());
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,10 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.Damageable;
|
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
|
||||||
|
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
|
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
|
||||||
@ -21,7 +16,6 @@ import me.mrCookieSlime.Slimefun.Objects.Category;
|
|||||||
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
||||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
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.inventory.BlockMenuPreset;
|
||||||
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
|
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
|
||||||
|
|
||||||
@ -77,10 +71,6 @@ public abstract class ADrill extends AContainer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void newInstance(BlockMenu menu, Block b) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canOpen(Block b, Player p) {
|
public boolean canOpen(Block b, Player p) {
|
||||||
if (!(p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true))) {
|
if (!(p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true))) {
|
||||||
@ -96,7 +86,7 @@ public abstract class ADrill extends AContainer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
|
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
|
||||||
if (flow.equals(ItemTransportFlow.INSERT)) return getInputSlots();
|
if (flow == ItemTransportFlow.INSERT) return getInputSlots();
|
||||||
else return getOutputSlots();
|
else return getOutputSlots();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -110,22 +100,12 @@ public abstract class ADrill extends AContainer {
|
|||||||
@Override
|
@Override
|
||||||
public void registerDefaultRecipes() {}
|
public void registerDefaultRecipes() {}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected void tick(Block b) {
|
protected void tick(Block b) {
|
||||||
if (isProcessing(b)) {
|
if (isProcessing(b)) {
|
||||||
int timeleft = progress.get(b);
|
int timeleft = progress.get(b);
|
||||||
if (timeleft > 0) {
|
if (timeleft > 0) {
|
||||||
ItemStack item = getProgressBar().clone();
|
MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar());
|
||||||
ItemMeta im = item.getItemMeta();
|
|
||||||
((Damageable) im).setDamage(MachineHelper.getDurability(item, timeleft, processing.get(b).getTicks()));
|
|
||||||
im.setDisplayName(" ");
|
|
||||||
List<String> lore = new ArrayList<String>();
|
|
||||||
lore.add(MachineHelper.getProgress(timeleft, processing.get(b).getTicks()));
|
|
||||||
lore.add("");
|
|
||||||
lore.add(MachineHelper.getTimeLeft(timeleft / 2));
|
|
||||||
im.setLore(lore);
|
|
||||||
item.setItemMeta(im);
|
|
||||||
|
|
||||||
BlockStorage.getInventory(b).replaceExistingItem(22, item);
|
|
||||||
|
|
||||||
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
|
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
|
||||||
ChargableBlock.addCharge(b, -getEnergyConsumption());
|
ChargableBlock.addCharge(b, -getEnergyConsumption());
|
||||||
|
@ -16,10 +16,8 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
|
|||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
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.SlimefunItem;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
|
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
|
|
||||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
||||||
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
||||||
@ -41,10 +39,6 @@ public abstract class AFarm extends SlimefunItem {
|
|||||||
constructMenu(this);
|
constructMenu(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void newInstance(BlockMenu menu, Block b) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canOpen(Block b, Player p) {
|
public boolean canOpen(Block b, Player p) {
|
||||||
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
|
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
|
||||||
@ -52,19 +46,12 @@ public abstract class AFarm extends SlimefunItem {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
|
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
|
||||||
if (flow.equals(ItemTransportFlow.WITHDRAW)) return getOutputSlots();
|
if (flow == ItemTransportFlow.WITHDRAW) return getOutputSlots();
|
||||||
return new int[0];
|
return new int[0];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
registerBlockHandler(id, new SlimefunBlockHandler() {
|
registerBlockHandler(id, (p, b, tool, reason) -> {
|
||||||
|
|
||||||
@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);
|
BlockMenu inv = BlockStorage.getInventory(b);
|
||||||
if (inv != null) {
|
if (inv != null) {
|
||||||
for (int slot : getOutputSlots()) {
|
for (int slot : getOutputSlots()) {
|
||||||
@ -75,73 +62,19 @@ public abstract class AFarm extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public AFarm(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
|
|
||||||
super(category, item, id, recipeType, recipe, recipeOutput);
|
|
||||||
|
|
||||||
new BlockMenuPreset(id, getInventoryTitle()) {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
|
|
||||||
if (flow.equals(ItemTransportFlow.WITHDRAW)) return getOutputSlots();
|
|
||||||
return new int[0];
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
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);
|
|
||||||
if (inv != null) {
|
|
||||||
for (int slot: getOutputSlots()) {
|
|
||||||
if (inv.getItemInSlot(slot) != null) {
|
|
||||||
b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
|
|
||||||
inv.replaceExistingItem(slot, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void constructMenu(BlockMenuPreset preset) {
|
private void constructMenu(BlockMenuPreset preset) {
|
||||||
for (int i : border) {
|
for (int i : border) {
|
||||||
preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
|
preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
}
|
|
||||||
for (int i : border_out) {
|
|
||||||
preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "),
|
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
preset.addItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "),
|
for (int i : border_out) {
|
||||||
(p, slot, item, action) -> false
|
preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_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);
|
||||||
|
|
||||||
for (int i : getOutputSlots()) {
|
for (int i : getOutputSlots()) {
|
||||||
preset.addMenuClickHandler(i, new AdvancedMenuClickHandler() {
|
preset.addMenuClickHandler(i, new AdvancedMenuClickHandler() {
|
||||||
@ -173,16 +106,21 @@ public abstract class AFarm extends SlimefunItem {
|
|||||||
if (ChargableBlock.isChargable(b)) {
|
if (ChargableBlock.isChargable(b)) {
|
||||||
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
|
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
|
||||||
int i = getSize() / 2;
|
int i = getSize() / 2;
|
||||||
loop:
|
|
||||||
for (int x = -i; x <= i; x++) {
|
for (int x = -i; x <= i; x++) {
|
||||||
for (int z = -i; z <= i; z++) {
|
for (int z = -i; z <= i; z++) {
|
||||||
Block block = new Location(b.getWorld(), b.getX() + x, b.getY() + 2, b.getZ() + z).getBlock();
|
Block block = new Location(b.getWorld(), b.getX() + (double) x, b.getY() + 2.0, b.getZ() + (double) z).getBlock();
|
||||||
if (canHarvest(block)) {
|
if (canHarvest(block)) {
|
||||||
ItemStack item = harvest(block);
|
ItemStack item = harvest(block);
|
||||||
if (!fits(block, new ItemStack[] {item})) break loop;
|
|
||||||
pushItems(b, new ItemStack[] {item});
|
if (!fits(block, item)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pushItems(b, item);
|
||||||
ChargableBlock.addCharge(b, -getEnergyConsumption());
|
ChargableBlock.addCharge(b, -getEnergyConsumption());
|
||||||
break loop;
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -190,7 +128,7 @@ public abstract class AFarm extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void register(boolean slimefun) {
|
public void preRegister() {
|
||||||
addItemHandler(new BlockTicker() {
|
addItemHandler(new BlockTicker() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -198,36 +136,32 @@ public abstract class AFarm extends SlimefunItem {
|
|||||||
AFarm.this.tick(b);
|
AFarm.this.tick(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void uniqueTick() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isSynchronized() {
|
public boolean isSynchronized() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
super.register(slimefun);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Inventory inject(Block b) {
|
private Inventory inject(Block b) {
|
||||||
int size = BlockStorage.getInventory(b).toInventory().getSize();
|
int size = BlockStorage.getInventory(b).toInventory().getSize();
|
||||||
Inventory inv = Bukkit.createInventory(null, size);
|
Inventory inv = Bukkit.createInventory(null, size);
|
||||||
|
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
inv.setItem(i, new CustomItem(Material.COMMAND_BLOCK, " &4ALL YOUR PLACEHOLDERS ARE BELONG TO US"));
|
inv.setItem(i, new CustomItem(Material.COMMAND_BLOCK, " &4ALL YOUR PLACEHOLDERS ARE BELONG TO US"));
|
||||||
}
|
}
|
||||||
for (int slot: getOutputSlots()) {
|
for (int slot: getOutputSlots()) {
|
||||||
inv.setItem(slot, BlockStorage.getInventory(b).getItemInSlot(slot));
|
inv.setItem(slot, BlockStorage.getInventory(b).getItemInSlot(slot));
|
||||||
}
|
}
|
||||||
|
|
||||||
return inv;
|
return inv;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean fits(Block b, ItemStack[] items) {
|
protected boolean fits(Block b, ItemStack... items) {
|
||||||
return inject(b).addItem(items).isEmpty();
|
return inject(b).addItem(items).isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void pushItems(Block b, ItemStack[] items) {
|
protected void pushItems(Block b, ItemStack... items) {
|
||||||
Inventory inv = inject(b);
|
Inventory inv = inject(b);
|
||||||
inv.addItem(items);
|
inv.addItem(items);
|
||||||
|
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@ -15,8 +13,6 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.Damageable;
|
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
|
||||||
|
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
|
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||||
@ -27,9 +23,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
|||||||
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
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.SlimefunItem;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
|
|
||||||
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
||||||
@ -40,10 +34,10 @@ import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
|
|||||||
|
|
||||||
public abstract class AGenerator extends SlimefunItem {
|
public abstract class AGenerator extends SlimefunItem {
|
||||||
|
|
||||||
public static Map<Location, MachineFuel> processing = new HashMap<Location, MachineFuel>();
|
public static Map<Location, MachineFuel> processing = new HashMap<>();
|
||||||
public static Map<Location, Integer> progress = new HashMap<Location, Integer>();
|
public static Map<Location, Integer> progress = new HashMap<>();
|
||||||
|
|
||||||
private Set<MachineFuel> recipes = new HashSet<MachineFuel>();
|
private Set<MachineFuel> recipes = new HashSet<>();
|
||||||
|
|
||||||
private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 13, 31, 36, 37, 38, 39, 40, 41, 42, 43, 44};
|
private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 13, 31, 36, 37, 38, 39, 40, 41, 42, 43, 44};
|
||||||
private static final int[] border_in = {9, 10, 11, 12, 18, 21, 27, 28, 29, 30};
|
private static final int[] border_in = {9, 10, 11, 12, 18, 21, 27, 28, 29, 30};
|
||||||
@ -59,10 +53,6 @@ public abstract class AGenerator extends SlimefunItem {
|
|||||||
constructMenu(this);
|
constructMenu(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void newInstance(BlockMenu menu, Block b) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canOpen(Block b, Player p) {
|
public boolean canOpen(Block b, Player p) {
|
||||||
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
|
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
|
||||||
@ -70,19 +60,12 @@ public abstract class AGenerator extends SlimefunItem {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
|
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
|
||||||
if (flow.equals(ItemTransportFlow.INSERT)) return getInputSlots();
|
if (flow == ItemTransportFlow.INSERT) return getInputSlots();
|
||||||
else return getOutputSlots();
|
else return getOutputSlots();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
registerBlockHandler(id, new SlimefunBlockHandler() {
|
registerBlockHandler(id, (p, b, tool, reason) -> {
|
||||||
|
|
||||||
@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);
|
BlockMenu inv = BlockStorage.getInventory(b);
|
||||||
if (inv != null) {
|
if (inv != null) {
|
||||||
for (int slot : getInputSlots()) {
|
for (int slot : getInputSlots()) {
|
||||||
@ -101,85 +84,27 @@ public abstract class AGenerator extends SlimefunItem {
|
|||||||
progress.remove(b.getLocation());
|
progress.remove(b.getLocation());
|
||||||
processing.remove(b.getLocation());
|
processing.remove(b.getLocation());
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
this.registerDefaultRecipes();
|
this.registerDefaultRecipes();
|
||||||
}
|
}
|
||||||
|
|
||||||
public AGenerator(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
|
public AGenerator(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
|
||||||
super(category, item, id, recipeType, recipe, recipeOutput);
|
this(category, item, id, recipeType, recipe);
|
||||||
|
this.recipeOutput = recipeOutput;
|
||||||
new BlockMenuPreset(id, getInventoryTitle()) {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
|
|
||||||
if (flow.equals(ItemTransportFlow.INSERT)) return getInputSlots();
|
|
||||||
else return getOutputSlots();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
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);
|
|
||||||
if (inv != null) {
|
|
||||||
for (int slot : getInputSlots()) {
|
|
||||||
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));
|
|
||||||
inv.replaceExistingItem(slot, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
progress.remove(b.getLocation());
|
|
||||||
processing.remove(b.getLocation());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
this.registerDefaultRecipes();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void constructMenu(BlockMenuPreset preset) {
|
private void constructMenu(BlockMenuPreset preset) {
|
||||||
for (int i : border) {
|
for (int i : border) {
|
||||||
preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
|
preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i : border_in) {
|
for (int i : border_in) {
|
||||||
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
|
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),(p, slot, item, action) -> false);
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i: border_out) {
|
for (int i: border_out) {
|
||||||
preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "),
|
preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i: getOutputSlots()) {
|
for (int i: getOutputSlots()) {
|
||||||
@ -197,9 +122,7 @@ public abstract class AGenerator extends SlimefunItem {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
preset.addItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "),
|
preset.addItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract String getInventoryTitle();
|
public abstract String getInventoryTitle();
|
||||||
@ -228,7 +151,7 @@ public abstract class AGenerator extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void register(boolean slimefun) {
|
public void preRegister() {
|
||||||
addItemHandler(new EnergyTicker() {
|
addItemHandler(new EnergyTicker() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -236,18 +159,7 @@ public abstract class AGenerator extends SlimefunItem {
|
|||||||
if (isProcessing(l)) {
|
if (isProcessing(l)) {
|
||||||
int timeleft = progress.get(l);
|
int timeleft = progress.get(l);
|
||||||
if (timeleft > 0) {
|
if (timeleft > 0) {
|
||||||
ItemStack item = getProgressBar().clone();
|
MachineHelper.updateProgressbar(BlockStorage.getInventory(l), 22, timeleft, processing.get(l).getTicks(), getProgressBar());
|
||||||
ItemMeta im = item.getItemMeta();
|
|
||||||
((Damageable) im).setDamage(MachineHelper.getDurability(item, timeleft, processing.get(l).getTicks()));
|
|
||||||
im.setDisplayName(" ");
|
|
||||||
List<String> lore = new ArrayList<String>();
|
|
||||||
lore.add(MachineHelper.getProgress(timeleft, processing.get(l).getTicks()));
|
|
||||||
lore.add("");
|
|
||||||
lore.add(MachineHelper.getTimeLeft(timeleft / 2));
|
|
||||||
im.setLore(lore);
|
|
||||||
item.setItemMeta(im);
|
|
||||||
|
|
||||||
BlockStorage.getInventory(l).replaceExistingItem(22, item);
|
|
||||||
|
|
||||||
if (ChargableBlock.isChargable(l)) {
|
if (ChargableBlock.isChargable(l)) {
|
||||||
if (ChargableBlock.getMaxCharge(l) - ChargableBlock.getCharge(l) >= getEnergyProduction()) {
|
if (ChargableBlock.getMaxCharge(l) - ChargableBlock.getCharge(l) >= getEnergyProduction()) {
|
||||||
@ -267,7 +179,7 @@ public abstract class AGenerator extends SlimefunItem {
|
|||||||
if (SlimefunManager.isItemSimiliar(fuel, new ItemStack(Material.LAVA_BUCKET), true)
|
if (SlimefunManager.isItemSimiliar(fuel, new ItemStack(Material.LAVA_BUCKET), true)
|
||||||
|| SlimefunManager.isItemSimiliar(fuel, SlimefunItems.BUCKET_OF_FUEL, true)
|
|| SlimefunManager.isItemSimiliar(fuel, SlimefunItems.BUCKET_OF_FUEL, true)
|
||||||
|| SlimefunManager.isItemSimiliar(fuel, SlimefunItems.BUCKET_OF_OIL, true)) {
|
|| SlimefunManager.isItemSimiliar(fuel, SlimefunItems.BUCKET_OF_OIL, true)) {
|
||||||
pushItems(l, new ItemStack[] {new ItemStack(Material.BUCKET)});
|
pushItems(l, new ItemStack(Material.BUCKET));
|
||||||
}
|
}
|
||||||
BlockStorage.getInventory(l).replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "));
|
BlockStorage.getInventory(l).replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "));
|
||||||
|
|
||||||
@ -277,25 +189,17 @@ public abstract class AGenerator extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
MachineFuel r = null;
|
BlockMenu menu = BlockStorage.getInventory(l);
|
||||||
Map<Integer, Integer> found = new HashMap<Integer, Integer>();
|
Map<Integer, Integer> found = new HashMap<>();
|
||||||
outer:
|
MachineFuel fuel = findRecipe(menu, found);
|
||||||
for (MachineFuel recipe: recipes) {
|
|
||||||
for (int slot: getInputSlots()) {
|
if (fuel != null) {
|
||||||
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(l).getItemInSlot(slot), recipe.getInput(), true)) {
|
for (Map.Entry<Integer, Integer> entry: found.entrySet()) {
|
||||||
found.put(slot, recipe.getInput().getAmount());
|
menu.replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(menu.getItemInSlot(entry.getKey()), entry.getValue()));
|
||||||
r = recipe;
|
|
||||||
break outer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r != null) {
|
processing.put(l, fuel);
|
||||||
for (Map.Entry<Integer, Integer> entry: found.entrySet()) {
|
progress.put(l, fuel.getTicks());
|
||||||
BlockStorage.getInventory(l).replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(BlockStorage.getInventory(l).getItemInSlot(entry.getKey()), entry.getValue()));
|
|
||||||
}
|
|
||||||
processing.put(l, r);
|
|
||||||
progress.put(l, r.getTicks());
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -306,8 +210,19 @@ public abstract class AGenerator extends SlimefunItem {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
super.register(slimefun);
|
private MachineFuel findRecipe(BlockMenu menu, Map<Integer, Integer> found) {
|
||||||
|
for (MachineFuel recipe: recipes) {
|
||||||
|
for (int slot: getInputSlots()) {
|
||||||
|
if (SlimefunManager.isItemSimiliar(menu.getItemInSlot(slot), recipe.getInput(), true)) {
|
||||||
|
found.put(slot, recipe.getInput().getAmount());
|
||||||
|
return recipe;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<MachineFuel> getFuelTypes() {
|
public Set<MachineFuel> getFuelTypes() {
|
||||||
@ -326,7 +241,7 @@ public abstract class AGenerator extends SlimefunItem {
|
|||||||
return inv;
|
return inv;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void pushItems(Location l, ItemStack[] items) {
|
protected void pushItems(Location l, ItemStack... items) {
|
||||||
Inventory inv = inject(l);
|
Inventory inv = inject(l);
|
||||||
inv.addItem(items);
|
inv.addItem(items);
|
||||||
|
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.Random;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -16,23 +16,21 @@ import org.bukkit.block.BlockFace;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
|
||||||
|
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
|
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
|
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.RecipeType;
|
||||||
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.Category;
|
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.SlimefunItem;
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
|
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ReactorAccessPort;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ReactorAccessPort;
|
||||||
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
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.ChargableBlock;
|
||||||
import me.mrCookieSlime.Slimefun.api.energy.EnergyTicker;
|
import me.mrCookieSlime.Slimefun.api.energy.EnergyTicker;
|
||||||
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
||||||
@ -63,7 +61,9 @@ public abstract class AReactor extends SlimefunItem {
|
|||||||
private static final int[] border_1 = {9, 10, 11, 18, 20, 27, 29, 36, 38, 45, 46, 47};
|
private static final int[] border_1 = {9, 10, 11, 18, 20, 27, 29, 36, 38, 45, 46, 47};
|
||||||
private static final int[] border_2 = {15, 16, 17, 24, 26, 33, 35, 42, 44, 51, 52, 53};
|
private static final int[] border_2 = {15, 16, 17, 24, 26, 33, 35, 42, 44, 51, 52, 53};
|
||||||
private static final int[] border_3 = {30, 31, 32, 39, 41, 48, 50};
|
private static final int[] border_3 = {30, 31, 32, 39, 41, 48, 50};
|
||||||
private static final int[] border_4 = {25, 34, 43}; // No coolant border
|
|
||||||
|
// No coolant border
|
||||||
|
private static final int[] border_4 = {25, 34, 43};
|
||||||
private static final int infoSlot = 49;
|
private static final int infoSlot = 49;
|
||||||
|
|
||||||
public AReactor(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
public AReactor(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
@ -82,6 +82,7 @@ public abstract class AReactor extends SlimefunItem {
|
|||||||
if (BlockStorage.getLocationInfo(b.getLocation(), "reactor-mode") == null){
|
if (BlockStorage.getLocationInfo(b.getLocation(), "reactor-mode") == null){
|
||||||
BlockStorage.addBlockInfo(b, "reactor-mode", "generator");
|
BlockStorage.addBlockInfo(b, "reactor-mode", "generator");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!BlockStorage.hasBlockInfo(b) || BlockStorage.getLocationInfo(b.getLocation(), "reactor-mode").equals("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.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) -> {
|
menu.addMenuClickHandler(4, (p, slot, item, action) -> {
|
||||||
@ -98,16 +99,18 @@ public abstract class AReactor extends SlimefunItem {
|
|||||||
return false;
|
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.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) -> {
|
menu.addMenuClickHandler(infoSlot, (p, slot, item, action) -> {
|
||||||
ap.open(p);
|
port.open(p);
|
||||||
newInstance(menu, b);
|
newInstance(menu, b);
|
||||||
|
|
||||||
return false;
|
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.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) -> {
|
menu.addMenuClickHandler(infoSlot, (p, slot, item, action) -> {
|
||||||
newInstance(menu, b);
|
newInstance(menu, b);
|
||||||
@ -117,6 +120,7 @@ public abstract class AReactor extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} catch(Exception x) {
|
} catch(Exception x) {
|
||||||
|
Slimefun.getLogger().log(Level.SEVERE, "An Error occured when creating a Reactor Menu for Slimefun " + Slimefun.getVersion(), x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,14 +136,7 @@ public abstract class AReactor extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
registerBlockHandler(id, new SlimefunBlockHandler() {
|
registerBlockHandler(id, (p, b, tool, reason) -> {
|
||||||
|
|
||||||
@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);
|
BlockMenu inv = BlockStorage.getInventory(b);
|
||||||
if (inv != null) {
|
if (inv != null) {
|
||||||
for (int slot : getFuelSlots()) {
|
for (int slot : getFuelSlots()) {
|
||||||
@ -148,12 +145,14 @@ public abstract class AReactor extends SlimefunItem {
|
|||||||
inv.replaceExistingItem(slot, null);
|
inv.replaceExistingItem(slot, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int slot : getCoolantSlots()) {
|
for (int slot : getCoolantSlots()) {
|
||||||
if (inv.getItemInSlot(slot) != null) {
|
if (inv.getItemInSlot(slot) != null) {
|
||||||
b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
|
b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
|
||||||
inv.replaceExistingItem(slot, null);
|
inv.replaceExistingItem(slot, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int slot : getOutputSlots()) {
|
for (int slot : getOutputSlots()) {
|
||||||
if (inv.getItemInSlot(slot) != null) {
|
if (inv.getItemInSlot(slot) != null) {
|
||||||
b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
|
b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
|
||||||
@ -161,11 +160,11 @@ public abstract class AReactor extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
progress.remove(b.getLocation());
|
progress.remove(b.getLocation());
|
||||||
processing.remove(b.getLocation());
|
processing.remove(b.getLocation());
|
||||||
ReactorHologram.remove(b.getLocation());
|
ReactorHologram.remove(b.getLocation());
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
this.registerDefaultRecipes();
|
this.registerDefaultRecipes();
|
||||||
@ -173,35 +172,23 @@ public abstract class AReactor extends SlimefunItem {
|
|||||||
|
|
||||||
private void constructMenu(BlockMenuPreset preset) {
|
private void constructMenu(BlockMenuPreset preset) {
|
||||||
for (int i : border) {
|
for (int i : border) {
|
||||||
preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
|
preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i : border_1) {
|
for (int i : border_1) {
|
||||||
preset.addItem(i, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), " "),
|
preset.addItem(i, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i : border_3) {
|
for (int i : border_3) {
|
||||||
preset.addItem(i, new CustomItem(new ItemStack(Material.GREEN_STAINED_GLASS_PANE), " "),
|
preset.addItem(i, new CustomItem(new ItemStack(Material.GREEN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
preset.addItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "),
|
preset.addItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
|
|
||||||
preset.addItem(1, new CustomItem(SlimefunItems.URANIUM, "&7Fuel Slot", "", "&rThis Slot accepts radioactive Fuel such as:", "&2Uranium &ror &aNeptunium"),
|
preset.addItem(1, new CustomItem(SlimefunItems.URANIUM, "&7Fuel Slot", "", "&rThis Slot accepts radioactive Fuel such as:", "&2Uranium &ror &aNeptunium"), (p, slot, item, action) -> false);
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
|
|
||||||
for (int i : border_2) {
|
for (int i : border_2) {
|
||||||
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
|
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (needsCooling()) {
|
if (needsCooling()) {
|
||||||
@ -211,9 +198,7 @@ public abstract class AReactor extends SlimefunItem {
|
|||||||
preset.addItem(7, new CustomItem(new ItemStack(Material.BARRIER), "&bCoolant Slot", "", "&rThis Slot accepts Coolant Cells"));
|
preset.addItem(7, new CustomItem(new ItemStack(Material.BARRIER), "&bCoolant Slot", "", "&rThis Slot accepts Coolant Cells"));
|
||||||
|
|
||||||
for (int i : border_4) {
|
for (int i : border_4) {
|
||||||
preset.addItem(i, new CustomItem(new ItemStack(Material.BARRIER), "&cNo Coolant Required"),
|
preset.addItem(i, new CustomItem(new ItemStack(Material.BARRIER), "&cNo Coolant Required"), (p, slot, item, action) -> false);
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -261,10 +246,10 @@ public abstract class AReactor extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void register(boolean slimefun) {
|
public void preRegister() {
|
||||||
addItemHandler(new EnergyTicker() {
|
addItemHandler(new EnergyTicker() {
|
||||||
|
|
||||||
Set<Location> explode = new HashSet<Location>();
|
private Set<Location> explode = new HashSet<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double generateEnergy(final Location l, SlimefunItem sf, Config data) {
|
public double generateEnergy(final Location l, SlimefunItem sf, Config data) {
|
||||||
@ -283,22 +268,11 @@ public abstract class AReactor extends SlimefunItem {
|
|||||||
if (space >= produced || !BlockStorage.getLocationInfo(l, "reactor-mode").equals("generator")) {
|
if (space >= produced || !BlockStorage.getLocationInfo(l, "reactor-mode").equals("generator")) {
|
||||||
progress.put(l, timeleft - 1);
|
progress.put(l, timeleft - 1);
|
||||||
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
|
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
|
||||||
if (!l.getBlock().getRelative(cooling[CSCoreLib.randomizer().nextInt(cooling.length)]).isLiquid()) explode.add(l);
|
if (!l.getBlock().getRelative(cooling[new Random().nextInt(cooling.length)]).isLiquid()) explode.add(l);
|
||||||
});
|
});
|
||||||
|
|
||||||
ItemStack item = getProgressBar().clone();
|
MachineHelper.updateProgressbar(BlockStorage.getInventory(l), 22, timeleft, processing.get(l).getTicks(), getProgressBar());
|
||||||
ItemMeta im = item.getItemMeta();
|
|
||||||
im.setDisplayName(" ");
|
|
||||||
List<String> lore = new ArrayList<String>();
|
|
||||||
lore.add(MachineHelper.getProgress(timeleft, processing.get(l).getTicks()));
|
|
||||||
lore.add(MachineHelper.getCoolant(timeleft, processing.get(l).getTicks()));
|
|
||||||
lore.add("");
|
|
||||||
lore.add(MachineHelper.getTimeLeft(timeleft / 2));
|
|
||||||
im.setLore(lore);
|
|
||||||
item.setItemMeta(im);
|
|
||||||
|
|
||||||
BlockStorage.getInventory(l).replaceExistingItem(22, item);
|
|
||||||
|
|
||||||
if (needsCooling()) {
|
if (needsCooling()) {
|
||||||
boolean coolant = (processing.get(l).getTicks() - timeleft) % 25 == 0;
|
boolean coolant = (processing.get(l).getTicks() - timeleft) % 25 == 0;
|
||||||
@ -352,40 +326,19 @@ public abstract class AReactor extends SlimefunItem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
MachineFuel r = null;
|
BlockMenu menu = BlockStorage.getInventory(l);
|
||||||
Map<Integer, Integer> found = new HashMap<Integer, Integer>();
|
Map<Integer, Integer> found = new HashMap<>();
|
||||||
|
MachineFuel fuel = findRecipe(menu, found);
|
||||||
|
|
||||||
if (port != null) {
|
if (port != null) restockCoolant(l, port);
|
||||||
refill:
|
|
||||||
for (int slot: getFuelSlots()) {
|
|
||||||
for (MachineFuel recipe: recipes) {
|
|
||||||
if (SlimefunManager.isItemSimiliar(port.getItemInSlot(slot), recipe.getInput(), true)) {
|
|
||||||
if (pushItems(l, new CustomItem(port.getItemInSlot(slot), 1), getFuelSlots()) == null) {
|
|
||||||
port.replaceExistingItem(slot, InvUtils.decreaseItem(port.getItemInSlot(slot), 1));
|
|
||||||
break refill;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
outer:
|
if (fuel != null) {
|
||||||
for (MachineFuel recipe: recipes) {
|
|
||||||
for (int slot: getFuelSlots()) {
|
|
||||||
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(l).getItemInSlot(slot), recipe.getInput(), true)) {
|
|
||||||
found.put(slot, recipe.getInput().getAmount());
|
|
||||||
r = recipe;
|
|
||||||
break outer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (r != null) {
|
|
||||||
for (Map.Entry<Integer, Integer> entry: found.entrySet()) {
|
for (Map.Entry<Integer, Integer> entry: found.entrySet()) {
|
||||||
BlockStorage.getInventory(l).replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(BlockStorage.getInventory(l).getItemInSlot(entry.getKey()), entry.getValue()));
|
menu.replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(menu.getItemInSlot(entry.getKey()), entry.getValue()));
|
||||||
}
|
}
|
||||||
processing.put(l, r);
|
|
||||||
progress.put(l, r.getTicks());
|
processing.put(l, fuel);
|
||||||
|
progress.put(l, fuel.getTicks());
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -397,9 +350,7 @@ public abstract class AReactor extends SlimefunItem {
|
|||||||
if (explosion) {
|
if (explosion) {
|
||||||
BlockStorage.getInventory(l).close();
|
BlockStorage.getInventory(l).close();
|
||||||
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
|
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> ReactorHologram.remove(l), 0);
|
||||||
ReactorHologram.remove(l);
|
|
||||||
}, 0);
|
|
||||||
|
|
||||||
explode.remove(l);
|
explode.remove(l);
|
||||||
processing.remove(l);
|
processing.remove(l);
|
||||||
@ -408,8 +359,30 @@ public abstract class AReactor extends SlimefunItem {
|
|||||||
return explosion;
|
return explosion;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
super.register(slimefun);
|
private void restockCoolant(Location l, BlockMenu port) {
|
||||||
|
for (int slot: getFuelSlots()) {
|
||||||
|
for (MachineFuel recipe: recipes) {
|
||||||
|
if (SlimefunManager.isItemSimiliar(port.getItemInSlot(slot), recipe.getInput(), true) && pushItems(l, new CustomItem(port.getItemInSlot(slot), 1), getFuelSlots()) == null) {
|
||||||
|
port.replaceExistingItem(slot, InvUtils.decreaseItem(port.getItemInSlot(slot), 1));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private MachineFuel findRecipe(BlockMenu menu, Map<Integer, Integer> found) {
|
||||||
|
for (MachineFuel recipe: recipes) {
|
||||||
|
for (int slot: getInputSlots()) {
|
||||||
|
if (SlimefunManager.isItemSimiliar(menu.getItemInSlot(slot), recipe.getInput(), true)) {
|
||||||
|
found.put(slot, recipe.getInput().getAmount());
|
||||||
|
return recipe;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Inventory inject(Location l) {
|
private Inventory inject(Location l) {
|
||||||
|
@ -4,9 +4,9 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
|
|
||||||
public class MachineFuel {
|
public class MachineFuel {
|
||||||
|
|
||||||
int seconds;
|
private int seconds;
|
||||||
ItemStack fuel;
|
private ItemStack fuel;
|
||||||
ItemStack output;
|
private ItemStack output;
|
||||||
|
|
||||||
public MachineFuel(int seconds, ItemStack fuel) {
|
public MachineFuel(int seconds, ItemStack fuel) {
|
||||||
this.seconds = seconds * 2;
|
this.seconds = seconds * 2;
|
||||||
|
@ -1,25 +1,33 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.Damageable;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
public class MachineHelper {
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
|
||||||
|
|
||||||
public static String getTimeLeft(int l) {
|
public final class MachineHelper {
|
||||||
|
|
||||||
|
private MachineHelper() {}
|
||||||
|
|
||||||
|
public static String getTimeLeft(int seconds) {
|
||||||
String timeleft = "";
|
String timeleft = "";
|
||||||
final int minutes = (int) (l / 60L);
|
final int minutes = (int) (seconds / 60L);
|
||||||
if (minutes > 0) {
|
if (minutes > 0) {
|
||||||
timeleft = String.valueOf(timeleft) + minutes + "m ";
|
timeleft = String.valueOf(timeleft) + minutes + "m ";
|
||||||
}
|
}
|
||||||
l -= minutes * 60;
|
seconds -= minutes * 60;
|
||||||
final int seconds = (int)l;
|
|
||||||
timeleft = String.valueOf(timeleft) + seconds + "s";
|
timeleft = String.valueOf(timeleft) + seconds + "s";
|
||||||
return ChatColor.translateAlternateColorCodes('&', "&7" + timeleft + " left");
|
return ChatColor.translateAlternateColorCodes('&', "&7" + timeleft + " left");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getProgress(int time, int total) {
|
public static String getProgress(int time, int total) {
|
||||||
StringBuilder progress = new StringBuilder();
|
StringBuilder progress = new StringBuilder();
|
||||||
float percentage = Math.round(((((total - time) * 100.0f) / total) * 100.0f) / 100.0f);
|
float percentage = Math.round(((((total - time) * 100.0F) / total) * 100.0F) / 100.0F);
|
||||||
|
|
||||||
if (percentage < 16.0F) progress.append("&4");
|
if (percentage < 16.0F) progress.append("&4");
|
||||||
else if (percentage < 32.0F) progress.append("&c");
|
else if (percentage < 32.0F) progress.append("&c");
|
||||||
@ -47,7 +55,7 @@ public class MachineHelper {
|
|||||||
public static String getCoolant(int time, int total) {
|
public static String getCoolant(int time, int total) {
|
||||||
int passed = ((total - time) % 25);
|
int passed = ((total - time) % 25);
|
||||||
StringBuilder progress = new StringBuilder();
|
StringBuilder progress = new StringBuilder();
|
||||||
float percentage = Math.round(((((25 - passed) * 100.0f) / 25) * 100.0f) / 100.0f);
|
float percentage = Math.round(((((25 - passed) * 100.0F) / 25) * 100.0F) / 100.0F);
|
||||||
|
|
||||||
if (percentage < 33.0F) progress.append("&9");
|
if (percentage < 33.0F) progress.append("&9");
|
||||||
else if (percentage < 66.0F) progress.append("&1");
|
else if (percentage < 66.0F) progress.append("&1");
|
||||||
@ -71,11 +79,26 @@ public class MachineHelper {
|
|||||||
|
|
||||||
public static float getPercentage(int time, int total) {
|
public static float getPercentage(int time, int total) {
|
||||||
int passed = ((total - time) % 25);
|
int passed = ((total - time) % 25);
|
||||||
return Math.round(((((25 - passed) * 100.0f) / 25) * 100.0f) / 100.0f);
|
return Math.round(((((25 - passed) * 100.0F) / 25) * 100.0F) / 100.0F);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static short getDurability(ItemStack item, int timeleft, int max) {
|
public static short getDurability(ItemStack item, int timeleft, int max) {
|
||||||
return (short) ((item.getType().getMaxDurability() / max) * timeleft);
|
return (short) ((item.getType().getMaxDurability() / max) * timeleft);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void updateProgressbar(BlockMenu menu, int slot, int timeleft, int time, ItemStack indicator) {
|
||||||
|
ItemStack item = indicator.clone();
|
||||||
|
ItemMeta im = item.getItemMeta();
|
||||||
|
((Damageable) im).setDamage(getDurability(item, timeleft, time));
|
||||||
|
im.setDisplayName(" ");
|
||||||
|
List<String> lore = new ArrayList<>();
|
||||||
|
lore.add(getProgress(timeleft, time));
|
||||||
|
lore.add("");
|
||||||
|
lore.add(getTimeLeft(timeleft / 2));
|
||||||
|
im.setLore(lore);
|
||||||
|
item.setItemMeta(im);
|
||||||
|
|
||||||
|
menu.replaceExistingItem(slot, item);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,9 +4,9 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
|
|
||||||
public class MachineRecipe {
|
public class MachineRecipe {
|
||||||
|
|
||||||
int ticks;
|
private int ticks;
|
||||||
ItemStack[] input;
|
private ItemStack[] input;
|
||||||
ItemStack[] output;
|
private ItemStack[] output;
|
||||||
|
|
||||||
public MachineRecipe(int seconds, ItemStack[] input, ItemStack[] output) {
|
public MachineRecipe(int seconds, ItemStack[] input, ItemStack[] output) {
|
||||||
this.ticks = seconds * 2;
|
this.ticks = seconds * 2;
|
||||||
|
@ -30,6 +30,6 @@ public abstract class Teleporter extends SlimefunItem {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void onInteract(Player p, Block b) throws Exception;
|
public abstract void onInteract(Player p, Block b);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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.Material;
|
||||||
import org.bukkit.block.Block;
|
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.Objects.SlimefunItem.UnregisterReason;
|
||||||
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
||||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
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.BlockMenu;
|
||||||
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
|
||||||
import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
|
import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
|
||||||
@ -105,7 +108,7 @@ public class AdvancedCargoOutputNode extends SlimefunItem {
|
|||||||
menu.addMenuClickHandler(41, (p, slot, item, action) -> {
|
menu.addMenuClickHandler(41, (p, slot, item, action) -> {
|
||||||
int channel = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) - 1;
|
int channel = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) - 1;
|
||||||
if (channel < 0) {
|
if (channel < 0) {
|
||||||
if (CargoNet.EXTRA_CHANNELS) channel = 16;
|
if (CargoNet.extraChannels) channel = 16;
|
||||||
else channel = 15;
|
else channel = 15;
|
||||||
}
|
}
|
||||||
BlockStorage.addBlockInfo(b, "frequency", String.valueOf(channel));
|
BlockStorage.addBlockInfo(b, "frequency", String.valueOf(channel));
|
||||||
@ -132,7 +135,7 @@ public class AdvancedCargoOutputNode extends SlimefunItem {
|
|||||||
menu.addMenuClickHandler(43, (p, slot, item, action) -> {
|
menu.addMenuClickHandler(43, (p, slot, item, action) -> {
|
||||||
int channeln = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) + 1;
|
int channeln = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) + 1;
|
||||||
|
|
||||||
if (CargoNet.EXTRA_CHANNELS) {
|
if (CargoNet.extraChannels) {
|
||||||
if (channeln > 16) channeln = 0;
|
if (channeln > 16) channeln = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -144,8 +147,8 @@ public class AdvancedCargoOutputNode extends SlimefunItem {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception x) {
|
||||||
e.printStackTrace();
|
Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating the Inventory of an Advanced Cargo Output Node for Slimefun " + Slimefun.getVersion(), x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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 me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
|
||||||
|
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Player;
|
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.Objects.SlimefunItem.UnregisterReason;
|
||||||
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
||||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
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.BlockMenu;
|
||||||
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
|
||||||
import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
|
import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
|
||||||
@ -63,6 +67,7 @@ public class CargoInputNode extends SlimefunItem {
|
|||||||
Damageable dmg = (Damageable) is.getItemMeta();
|
Damageable dmg = (Damageable) is.getItemMeta();
|
||||||
dmg.setDamage(20);
|
dmg.setDamage(20);
|
||||||
is.setItemMeta((ItemMeta) dmg);
|
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.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) -> {
|
menu.addMenuClickHandler(16, (p, slot, item, action) -> {
|
||||||
BlockStorage.addBlockInfo(b, "filter-durability", "true");
|
BlockStorage.addBlockInfo(b, "filter-durability", "true");
|
||||||
@ -75,6 +80,7 @@ public class CargoInputNode extends SlimefunItem {
|
|||||||
Damageable dmg = (Damageable) is.getItemMeta();
|
Damageable dmg = (Damageable) is.getItemMeta();
|
||||||
dmg.setDamage(20);
|
dmg.setDamage(20);
|
||||||
is.setItemMeta((ItemMeta) dmg);
|
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.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) -> {
|
menu.addMenuClickHandler(16, (p, slot, item, action) -> {
|
||||||
BlockStorage.addBlockInfo(b, "filter-durability", "false");
|
BlockStorage.addBlockInfo(b, "filter-durability", "false");
|
||||||
@ -121,7 +127,7 @@ public class CargoInputNode extends SlimefunItem {
|
|||||||
menu.addMenuClickHandler(41, (p, slot, item, action) -> {
|
menu.addMenuClickHandler(41, (p, slot, item, action) -> {
|
||||||
int channel = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) - 1;
|
int channel = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) - 1;
|
||||||
if (channel < 0) {
|
if (channel < 0) {
|
||||||
if (CargoNet.EXTRA_CHANNELS) channel = 16;
|
if (CargoNet.extraChannels) channel = 16;
|
||||||
else channel = 15;
|
else channel = 15;
|
||||||
}
|
}
|
||||||
BlockStorage.addBlockInfo(b, "frequency", String.valueOf(channel));
|
BlockStorage.addBlockInfo(b, "frequency", String.valueOf(channel));
|
||||||
@ -148,7 +154,7 @@ public class CargoInputNode extends SlimefunItem {
|
|||||||
menu.addMenuClickHandler(43, (p, slot, item, action) -> {
|
menu.addMenuClickHandler(43, (p, slot, item, action) -> {
|
||||||
int channeln = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) + 1;
|
int channeln = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) + 1;
|
||||||
|
|
||||||
if (CargoNet.EXTRA_CHANNELS) {
|
if (CargoNet.extraChannels) {
|
||||||
if (channeln > 16) channeln = 0;
|
if (channeln > 16) channeln = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -160,8 +166,8 @@ public class CargoInputNode extends SlimefunItem {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception x) {
|
||||||
e.printStackTrace();
|
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
|
@Override
|
||||||
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
|
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
|
||||||
BlockMenu inv = BlockStorage.getInventory(b);
|
BlockMenu inv = BlockStorage.getInventory(b);
|
||||||
|
|
||||||
if (inv != null) {
|
if (inv != null) {
|
||||||
for (int slot : getInputSlots()) {
|
for (int slot : getInputSlots()) {
|
||||||
if (inv.getItemInSlot(slot) != null) {
|
if (inv.getItemInSlot(slot) != null) {
|
||||||
@ -211,14 +218,10 @@ public class CargoInputNode extends SlimefunItem {
|
|||||||
|
|
||||||
protected void constructMenu(BlockMenuPreset preset) {
|
protected void constructMenu(BlockMenuPreset preset) {
|
||||||
for (int i : border) {
|
for (int i : border) {
|
||||||
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
|
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
preset.addItem(2, new CustomItem(new ItemStack(Material.PAPER), "&3Items", "", "&bPut in all Items you want to", "&bblacklist/whitelist"),
|
preset.addItem(2, new CustomItem(new ItemStack(Material.PAPER), "&3Items", "", "&bPut in all Items you want to", "&bblacklist/whitelist"), (p, slot, item, action) -> false);
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int[] getInputSlots() {
|
public int[] getInputSlots() {
|
@ -0,0 +1,66 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent;
|
||||||
|
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.BlockTicker;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
|
||||||
|
import me.mrCookieSlime.Slimefun.holograms.CargoHologram;
|
||||||
|
|
||||||
|
public class CargoManagerBlock extends SlimefunItem {
|
||||||
|
|
||||||
|
public CargoManagerBlock(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
|
super(category, item, id, recipeType, recipe);
|
||||||
|
|
||||||
|
SlimefunItem.registerBlockHandler("CARGO_MANAGER", (p, b, tool, reason) -> {
|
||||||
|
CargoHologram.remove(b);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void preRegister() {
|
||||||
|
addItemHandler(new BlockTicker() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick(Block b, SlimefunItem item, Config data) {
|
||||||
|
CargoNet.getNetworkFromLocationOrCreate(b.getLocation()).tick(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSynchronized() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}, new ItemInteractionHandler() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) {
|
||||||
|
if (e.getClickedBlock() == null) return false;
|
||||||
|
String item = BlockStorage.checkID(e.getClickedBlock());
|
||||||
|
if (item == null || !item.equals(getID())) return false;
|
||||||
|
e.setCancelled(true);
|
||||||
|
|
||||||
|
if (BlockStorage.getLocationInfo(e.getClickedBlock().getLocation(), "visualizer") == null) {
|
||||||
|
BlockStorage.addBlockInfo(e.getClickedBlock(), "visualizer", "disabled");
|
||||||
|
p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCargo Net Visualizer: " + "&4\u2718"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
BlockStorage.addBlockInfo(e.getClickedBlock(), "visualizer", null);
|
||||||
|
p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCargo Net Visualizer: " + "&2\u2714"));
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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.Material;
|
||||||
import org.bukkit.block.Block;
|
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.Objects.SlimefunItem.UnregisterReason;
|
||||||
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
||||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
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.BlockMenu;
|
||||||
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
|
||||||
import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
|
import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
|
||||||
@ -40,12 +43,11 @@ public class CargoOutputNode extends SlimefunItem {
|
|||||||
@Override
|
@Override
|
||||||
public void newInstance(final BlockMenu menu, final Block b) {
|
public void newInstance(final BlockMenu menu, final Block b) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
menu.replaceExistingItem(12, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjI1OTliZDk4NjY1OWI4Y2UyYzQ5ODg1MjVjOTRlMTlkZGQzOWZhZDA4YTM4Mjg0YTE5N2YxYjcwNjc1YWNjIn19fQ=="), "&bChannel", "", "&e> Click to decrease the Channel ID by 1"));
|
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) -> {
|
menu.addMenuClickHandler(12, (p, slot, item, action) -> {
|
||||||
int channel = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) - 1;
|
int channel = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) - 1;
|
||||||
if (channel < 0) {
|
if (channel < 0) {
|
||||||
if (CargoNet.EXTRA_CHANNELS) channel = 16;
|
if (CargoNet.extraChannels) channel = 16;
|
||||||
else channel = 15;
|
else channel = 15;
|
||||||
}
|
}
|
||||||
BlockStorage.addBlockInfo(b, "frequency", String.valueOf(channel));
|
BlockStorage.addBlockInfo(b, "frequency", String.valueOf(channel));
|
||||||
@ -72,7 +74,7 @@ public class CargoOutputNode extends SlimefunItem {
|
|||||||
menu.addMenuClickHandler(14, (p, slot, item, action) -> {
|
menu.addMenuClickHandler(14, (p, slot, item, action) -> {
|
||||||
int channeln = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) + 1;
|
int channeln = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) + 1;
|
||||||
|
|
||||||
if (CargoNet.EXTRA_CHANNELS) {
|
if (CargoNet.extraChannels) {
|
||||||
if (channeln > 16) channeln = 0;
|
if (channeln > 16) channeln = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -84,8 +86,8 @@ public class CargoOutputNode extends SlimefunItem {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception x) {
|
||||||
e.printStackTrace();
|
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) {
|
protected void constructMenu(BlockMenuPreset preset) {
|
||||||
for (int i : border) {
|
for (int i : border) {
|
||||||
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
|
preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
|
||||||
(p, slot, item, action) -> false
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,18 +0,0 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
|
|
||||||
|
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
|
||||||
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.block.Dispenser;
|
|
||||||
import org.bukkit.event.block.BlockDispenseEvent;
|
|
||||||
|
|
||||||
public abstract class AutonomousMachineHandler extends ItemHandler {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toCodename() {
|
|
||||||
return "AutonomousMachineHandler";
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract boolean onBlockDispense(BlockDispenseEvent e, Block dispenser, Dispenser d, Block block, Block chest, SlimefunItem machine);
|
|
||||||
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
|
|
||||||
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.block.Dispenser;
|
|
||||||
import org.bukkit.event.block.BlockDispenseEvent;
|
|
||||||
|
|
||||||
public abstract class AutonomousToolHandler extends ItemHandler {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toCodename() {
|
|
||||||
return "AutonomousToolHandler";
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract boolean onBlockDispense(BlockDispenseEvent e, Block dispenser, Dispenser d, Block block, Block chest, int i);
|
|
||||||
|
|
||||||
}
|
|
@ -1,16 +1,6 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
|
||||||
|
|
||||||
import java.util.List;
|
@Deprecated
|
||||||
|
public abstract class BlockBreakHandler extends ItemHandler implements me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler {
|
||||||
|
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
public abstract class BlockBreakHandler extends ItemHandler {
|
|
||||||
|
|
||||||
public abstract boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List<ItemStack> drops);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toCodename() {
|
|
||||||
return "BlockBreakHandler";
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,14 +1,5 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
|
||||||
|
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
@Deprecated
|
||||||
import org.bukkit.inventory.ItemStack;
|
public abstract class BlockPlaceHandler extends ItemHandler implements me.mrCookieSlime.Slimefun.Objects.handlers.BlockPlaceHandler {
|
||||||
|
|
||||||
public abstract class BlockPlaceHandler extends ItemHandler {
|
|
||||||
|
|
||||||
public abstract boolean onBlockPlace(BlockPlaceEvent e, ItemStack item);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toCodename() {
|
|
||||||
return "BlockPlaceHandler";
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,29 +1,5 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
|
||||||
|
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
@Deprecated
|
||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
public abstract class BlockTicker extends me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker {
|
||||||
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
|
|
||||||
public abstract class BlockTicker extends ItemHandler {
|
|
||||||
|
|
||||||
public boolean unique = true;
|
|
||||||
|
|
||||||
public void update() {
|
|
||||||
if (unique) {
|
|
||||||
uniqueTick();
|
|
||||||
unique = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public abstract boolean isSynchronized();
|
|
||||||
public abstract void uniqueTick();
|
|
||||||
public abstract void tick(Block b, SlimefunItem item, Config data);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toCodename() {
|
|
||||||
return "BlockTicker";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
|
|
||||||
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
|
||||||
|
|
||||||
public abstract class BowShootHandler extends ItemHandler {
|
|
||||||
|
|
||||||
public abstract boolean onHit(EntityDamageByEntityEvent e, LivingEntity n);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toCodename() {
|
|
||||||
return "BowShootHandler";
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,6 +1,6 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
|
||||||
|
|
||||||
public abstract class ItemHandler {
|
@Deprecated
|
||||||
|
public abstract class ItemHandler implements me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler {
|
||||||
|
|
||||||
public abstract String toCodename();
|
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,5 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
|
||||||
|
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent;
|
@Deprecated
|
||||||
|
public abstract class ItemInteractionHandler extends ItemHandler implements me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler {
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
public abstract class ItemInteractionHandler extends ItemHandler {
|
|
||||||
|
|
||||||
public abstract boolean onRightClick(ItemUseEvent e, Player p, ItemStack item);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toCodename() {
|
|
||||||
return "ItemInteractionHandler";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@ -1,16 +1,5 @@
|
|||||||
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
|
||||||
|
|
||||||
import me.mrCookieSlime.Slimefun.Objects.MultiBlock;
|
@Deprecated
|
||||||
|
public abstract class MultiBlockInteractionHandler extends ItemHandler implements me.mrCookieSlime.Slimefun.Objects.handlers.MultiBlockInteractionHandler {
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
public abstract class MultiBlockInteractionHandler extends ItemHandler {
|
|
||||||
|
|
||||||
public abstract boolean onInteract(Player p, MultiBlock mb, Block b);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toCodename() {
|
|
||||||
return "MultiBlockInteractionHandler";
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.enchantments.Enchantment;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.Damageable;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
|
@FunctionalInterface
|
||||||
|
public interface DamageableItem {
|
||||||
|
|
||||||
|
boolean isDamageable();
|
||||||
|
|
||||||
|
default void damageItem(Player p, ItemStack item) {
|
||||||
|
if (item != null && item.getType() != null && item.getType() != Material.AIR && item.getAmount() > 0 && isDamageable()) {
|
||||||
|
if (item.getEnchantments().containsKey(Enchantment.DURABILITY) && Math.random() * 100 <= (60 + Math.floorDiv(40, (item.getEnchantmentLevel(Enchantment.DURABILITY) + 1)))) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemMeta meta = item.getItemMeta();
|
||||||
|
Damageable damageable = (Damageable) meta;
|
||||||
|
|
||||||
|
if (damageable.getDamage() >= item.getType().getMaxDurability()) {
|
||||||
|
item.setAmount(0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
damageable.setDamage(damageable.getDamage() + 1);
|
||||||
|
item.setItemMeta(meta);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,77 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule.Action;
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Math.Calculator;
|
||||||
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
|
||||||
|
|
||||||
|
public interface InventoryBlock {
|
||||||
|
|
||||||
|
int[] getInputSlots();
|
||||||
|
int[] getOutputSlots();
|
||||||
|
|
||||||
|
default void createPreset(SlimefunItem item, String title, Consumer<BlockMenuPreset> setup) {
|
||||||
|
new BlockMenuPreset(item.getID(), title) {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init() {
|
||||||
|
setup.accept(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
|
||||||
|
if (flow == ItemTransportFlow.INSERT) return getInputSlots();
|
||||||
|
else return getOutputSlots();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canOpen(Block b, Player p) {
|
||||||
|
return p.hasPermission("slimefun.inventory.bypass") || (SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), Action.ACCESS_INVENTORIES) && Slimefun.hasUnlocked(p, item, false));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
default Inventory inject(Block b) {
|
||||||
|
int size = getOutputSlots().length;
|
||||||
|
Inventory inv = Bukkit.createInventory(null, Calculator.formToLine(size) * 9);
|
||||||
|
|
||||||
|
for (int i = 0; i < inv.getSize(); i++) {
|
||||||
|
if (i < size) {
|
||||||
|
inv.setItem(i, BlockStorage.getInventory(b).getItemInSlot(getOutputSlots()[i]));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
inv.setItem(i, new CustomItem(Material.COMMAND_BLOCK, " &4ALL YOUR PLACEHOLDERS ARE BELONG TO US"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return inv;
|
||||||
|
}
|
||||||
|
|
||||||
|
default boolean fits(Block b, ItemStack... items) {
|
||||||
|
return inject(b).addItem(items).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
default void pushItems(Block b, ItemStack... items) {
|
||||||
|
Inventory inv = inject(b);
|
||||||
|
inv.addItem(items);
|
||||||
|
|
||||||
|
for (int i = 0; i < getOutputSlots().length; i++) {
|
||||||
|
BlockStorage.getInventory(b).replaceExistingItem(getOutputSlots()[i], inv.getItem(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces;
|
||||||
|
|
||||||
|
public interface NotPlaceable {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
@FunctionalInterface
|
||||||
|
public interface RecipeDisplayItem {
|
||||||
|
|
||||||
|
List<ItemStack> getDisplayRecipes();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemConsumptionHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
|
||||||
|
public class DietCookie extends SimpleSlimefunItem<ItemConsumptionHandler> {
|
||||||
|
|
||||||
|
public DietCookie(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
|
super(category, item, id, recipeType, recipe);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemConsumptionHandler getItemHandler() {
|
||||||
|
return (e, p, item) -> {
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
|
||||||
|
p.sendMessage(ChatColor.YELLOW + "You feel so light...");
|
||||||
|
p.playSound(p.getLocation(), Sound.ENTITY_GENERIC_EAT, 1, 1);
|
||||||
|
|
||||||
|
if (p.hasPotionEffect(PotionEffectType.LEVITATION)) p.removePotionEffect(PotionEffectType.LEVITATION);
|
||||||
|
p.addPotionEffect(PotionEffectType.LEVITATION.createEffect(60, 1));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,105 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Effect;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule.Action;
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils;
|
||||||
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.HandledBlock;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.DamageableItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||||
|
|
||||||
|
public class ExplosivePickaxe extends SimpleSlimefunItem<BlockBreakHandler> implements NotPlaceable, DamageableItem {
|
||||||
|
|
||||||
|
private String[] blacklist;
|
||||||
|
private boolean damageOnUse;
|
||||||
|
|
||||||
|
public ExplosivePickaxe(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) {
|
||||||
|
super(category, item, id, recipeType, recipe, keys, values);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockBreakHandler getItemHandler() {
|
||||||
|
return (e, item, fortune, drops) -> {
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.EXPLOSIVE_PICKAXE, true)) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
e.getBlock().getWorld().createExplosion(e.getBlock().getLocation(), 0.0F);
|
||||||
|
e.getBlock().getWorld().playSound(e.getBlock().getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.3F, 1F);
|
||||||
|
for (int x = -1; x <= 1; x++) {
|
||||||
|
for (int y = -1; y <= 1; y++) {
|
||||||
|
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(), blacklist) && SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), b.getLocation(), Action.BREAK_BLOCK)) {
|
||||||
|
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());
|
||||||
|
SlimefunItem sfItem = BlockStorage.check(b);
|
||||||
|
boolean allow = false;
|
||||||
|
|
||||||
|
if (sfItem != null && !(sfItem instanceof HandledBlock)) {
|
||||||
|
if (SlimefunPlugin.getUtilities().blockHandlers.containsKey(sfItem.getID())) {
|
||||||
|
allow = SlimefunPlugin.getUtilities().blockHandlers.get(sfItem.getID()).onBreak(e.getPlayer(), e.getBlock(), sfItem, UnregisterReason.PLAYER_BREAK);
|
||||||
|
}
|
||||||
|
if (allow) {
|
||||||
|
drops.add(BlockStorage.retrieve(e.getBlock()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (b.getType() == Material.PLAYER_HEAD) {
|
||||||
|
b.breakNaturally();
|
||||||
|
}
|
||||||
|
else if (b.getType().name().endsWith("_SHULKER_BOX")) {
|
||||||
|
b.breakNaturally();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (ItemStack drop: b.getDrops()) {
|
||||||
|
b.getWorld().dropItemNaturally(b.getLocation(), (b.getType().toString().endsWith("_ORE") && b.getType() != Material.IRON_ORE && b.getType() != Material.GOLD_ORE) ? new CustomItem(drop, fortune): drop);
|
||||||
|
}
|
||||||
|
b.setType(Material.AIR);
|
||||||
|
}
|
||||||
|
|
||||||
|
damageItem(e.getPlayer(), item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void postRegister() {
|
||||||
|
damageOnUse = ((boolean) Slimefun.getItemValue(getID(), "damage-on-use"));
|
||||||
|
|
||||||
|
List<?> list = (List<?>) Slimefun.getItemValue(getID(), "unbreakable-blocks");
|
||||||
|
blacklist = list.toArray(new String[list.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDamageable() {
|
||||||
|
return damageOnUse;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,84 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import org.bukkit.Effect;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import io.github.thebusybiscuit.cscorelib2.materials.MaterialTools;
|
||||||
|
import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule.Action;
|
||||||
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.DamageableItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||||
|
|
||||||
|
public class ExplosiveShovel extends SimpleSlimefunItem<BlockBreakHandler> implements NotPlaceable, DamageableItem {
|
||||||
|
|
||||||
|
private boolean damageOnUse;
|
||||||
|
|
||||||
|
public ExplosiveShovel(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) {
|
||||||
|
super(category, item, id, recipeType, recipe, keys, values);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockBreakHandler getItemHandler() {
|
||||||
|
return (e, item, fortune, drops) -> {
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.EXPLOSIVE_SHOVEL, true)) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
e.getBlock().getWorld().createExplosion(e.getBlock().getLocation(), 0.0F);
|
||||||
|
e.getBlock().getWorld().playSound(e.getBlock().getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.3F, 1F);
|
||||||
|
|
||||||
|
for (int x = -1; x <= 1; x++) {
|
||||||
|
for (int y = -1; y <= 1; y++) {
|
||||||
|
for (int z = -1; z <= 1; z++) {
|
||||||
|
Block b = e.getBlock().getRelative(x, y, z);
|
||||||
|
boolean correctType = false;
|
||||||
|
|
||||||
|
for (Material mat : MaterialTools.getShovelItems()) {
|
||||||
|
if (b.getType() == mat) {
|
||||||
|
correctType = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (correctType && SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), b.getLocation(), Action.BREAK_BLOCK)) {
|
||||||
|
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());
|
||||||
|
for (ItemStack drop: b.getDrops()) {
|
||||||
|
b.getWorld().dropItemNaturally(b.getLocation(), drop);
|
||||||
|
}
|
||||||
|
b.setType(Material.AIR);
|
||||||
|
|
||||||
|
damageItem(e.getPlayer(), item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void postRegister() {
|
||||||
|
damageOnUse = ((boolean) Slimefun.getItemValue(getID(), "damage-on-use"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDamageable() {
|
||||||
|
return damageOnUse;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
import org.bukkit.Effect;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||||
|
|
||||||
|
public class GoldPan extends SlimefunGadget {
|
||||||
|
|
||||||
|
private Random random = new Random();
|
||||||
|
|
||||||
|
public GoldPan(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack[] machineRecipes, String[] keys, Object[] values) {
|
||||||
|
super(category, item, id, recipeType, recipe, machineRecipes, keys, values);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void register(boolean slimefun) {
|
||||||
|
addItemHandler(new ItemInteractionHandler() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) {
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.GOLD_PAN, true)) {
|
||||||
|
if (e.getClickedBlock() != null && e.getClickedBlock().getType() == Material.GRAVEL && CSCoreLib.getLib().getProtectionManager().canBuild(p.getUniqueId(), e.getClickedBlock(), true)) {
|
||||||
|
List<ItemStack> drops = new ArrayList<>();
|
||||||
|
|
||||||
|
if (random.nextInt(100) < (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.SIFTED_ORE")) drops.add(SlimefunItems.SIFTED_ORE);
|
||||||
|
else if (random.nextInt(100) < (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.CLAY")) drops.add(new ItemStack(Material.CLAY_BALL));
|
||||||
|
else if (random.nextInt(100) < (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.FLINT")) drops.add(new ItemStack(Material.FLINT));
|
||||||
|
|
||||||
|
e.getClickedBlock().getWorld().playEffect(e.getClickedBlock().getLocation(), Effect.STEP_SOUND, e.getClickedBlock().getType());
|
||||||
|
e.getClickedBlock().setType(Material.AIR);
|
||||||
|
|
||||||
|
for (ItemStack drop: drops) {
|
||||||
|
e.getClickedBlock().getWorld().dropItemNaturally(e.getClickedBlock().getLocation(), drop);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
e.setCancelled(true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
super.register(slimefun);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,95 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Arrow;
|
||||||
|
import org.bukkit.entity.Bat;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.potion.PotionEffect;
|
||||||
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||||
|
import me.mrCookieSlime.Slimefun.utils.Utilities;
|
||||||
|
|
||||||
|
public class GrapplingHook extends SimpleSlimefunItem<ItemInteractionHandler> {
|
||||||
|
|
||||||
|
private long despawnTicks;
|
||||||
|
|
||||||
|
public GrapplingHook(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) {
|
||||||
|
super(category, item, id, recipeType, recipe, keys, values);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemInteractionHandler getItemHandler() {
|
||||||
|
Utilities utilities = SlimefunPlugin.getUtilities();
|
||||||
|
|
||||||
|
return (e, p, item) -> {
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
|
||||||
|
UUID uuid = p.getUniqueId();
|
||||||
|
|
||||||
|
if (e.getClickedBlock() == null && !utilities.jumpState.containsKey(uuid)) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
|
||||||
|
if (p.getInventory().getItemInOffHand().getType() == Material.BOW) {
|
||||||
|
// Cancel, to fix dupe #740
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
utilities.jumpState.put(uuid, p.getInventory().getItemInMainHand().getType() != Material.SHEARS);
|
||||||
|
|
||||||
|
if (item.getType() == Material.LEAD) {
|
||||||
|
item.setAmount(item.getAmount() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector direction = p.getEyeLocation().getDirection().multiply(2.0);
|
||||||
|
Arrow arrow = p.getWorld().spawn(p.getEyeLocation().add(direction.getX(), direction.getY(), direction.getZ()), Arrow.class);
|
||||||
|
arrow.setShooter(p);
|
||||||
|
arrow.setVelocity(direction);
|
||||||
|
|
||||||
|
Bat b = (Bat) p.getWorld().spawnEntity(p.getLocation(), EntityType.BAT);
|
||||||
|
b.setCanPickupItems(false);
|
||||||
|
b.setAI(false);
|
||||||
|
b.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 100000, 100000));
|
||||||
|
b.setLeashHolder(arrow);
|
||||||
|
|
||||||
|
utilities.damage.add(uuid);
|
||||||
|
utilities.remove.put(uuid, new Entity[]{b, arrow});
|
||||||
|
|
||||||
|
// To fix issue #253
|
||||||
|
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
|
||||||
|
if (utilities.jumpState.containsKey(uuid)) {
|
||||||
|
utilities.arrows.remove(uuid);
|
||||||
|
|
||||||
|
for (Entity n : utilities.remove.get(uuid)) {
|
||||||
|
if (n.isValid()) n.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
|
||||||
|
utilities.damage.remove(uuid);
|
||||||
|
utilities.jumpState.remove(uuid);
|
||||||
|
utilities.remove.remove(uuid);
|
||||||
|
}, 20L);
|
||||||
|
}
|
||||||
|
}, despawnTicks);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void postRegister() {
|
||||||
|
despawnTicks = (int) Slimefun.getItemValue("GRAPPLING_HOOK", "despawn-seconds") * 20L;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
|
||||||
|
public class HerculesPickaxe extends SimpleSlimefunItem<BlockBreakHandler> {
|
||||||
|
|
||||||
|
public HerculesPickaxe(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
|
super(category, item, id, recipeType, recipe);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockBreakHandler getItemHandler() {
|
||||||
|
return (e, item, fortune, drops) -> {
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.HERCULES_PICKAXE, true) && e.getBlock().getType().toString().endsWith("_ORE")) {
|
||||||
|
if (e.getBlock().getType() == Material.IRON_ORE) {
|
||||||
|
drops.add(new CustomItem(SlimefunItems.IRON_DUST, 2));
|
||||||
|
}
|
||||||
|
else if (e.getBlock().getType() == Material.GOLD_ORE) {
|
||||||
|
drops.add(new CustomItem(SlimefunItems.GOLD_DUST, 2));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (ItemStack drop: e.getBlock().getDrops()) {
|
||||||
|
drops.add(new CustomItem(drop, drop.getAmount() * 2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.ChestedHorse;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Talisman;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.EntityKillHandler;
|
||||||
|
|
||||||
|
public class HunterTalisman extends Talisman {
|
||||||
|
|
||||||
|
public HunterTalisman(ItemStack item, String id, ItemStack[] recipe, boolean consumable, boolean cancelEvent, String messageSuffix, int chance) {
|
||||||
|
super(item, id, recipe, consumable, cancelEvent, messageSuffix, chance);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void preRegister() {
|
||||||
|
addItemHandler(getItemHandler());
|
||||||
|
}
|
||||||
|
|
||||||
|
public EntityKillHandler getItemHandler() {
|
||||||
|
return (e, entity, killer, item) -> {
|
||||||
|
if (Talisman.checkFor(e, this) && !(e.getEntity() instanceof Player)) {
|
||||||
|
if (!e.getEntity().getCanPickupItems()) {
|
||||||
|
List<ItemStack> extraDrops = new ArrayList<>(e.getDrops());
|
||||||
|
|
||||||
|
if (e.getEntity() instanceof ChestedHorse) {
|
||||||
|
for (ItemStack invItem : ((ChestedHorse) e.getEntity()).getInventory().getStorageContents()) {
|
||||||
|
extraDrops.remove(invItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
//The chest is not included in getStorageContents()
|
||||||
|
extraDrops.remove(new ItemStack(Material.CHEST));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (ItemStack drop: extraDrops) {
|
||||||
|
e.getDrops().add(drop);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import org.bukkit.Effect;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.data.Ageable;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Player.PlayerInventory;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
|
||||||
|
public class InfernalBonemeal extends SimpleSlimefunItem<ItemInteractionHandler> {
|
||||||
|
|
||||||
|
public InfernalBonemeal(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
|
||||||
|
super(category, item, id, recipeType, recipe, recipeOutput);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemInteractionHandler getItemHandler() {
|
||||||
|
return (e, p, item) -> {
|
||||||
|
if (SlimefunManager.isItemSimiliar(e.getItem(), getItem(), true)) {
|
||||||
|
if (e.getClickedBlock() != null && e.getClickedBlock().getType() == Material.NETHER_WART) {
|
||||||
|
Ageable ageable = (Ageable)e.getClickedBlock().getBlockData();
|
||||||
|
if (ageable.getAge() < ageable.getMaximumAge()) {
|
||||||
|
ageable.setAge(ageable.getMaximumAge());
|
||||||
|
e.getClickedBlock().setBlockData(ageable);
|
||||||
|
e.getClickedBlock().getWorld().playEffect(e.getClickedBlock().getLocation(), Effect.STEP_SOUND, Material.REDSTONE_BLOCK);
|
||||||
|
PlayerInventory.consumeItemInHand(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.block.Container;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
|
||||||
|
public class KnowledgeFlask extends SimpleSlimefunItem<ItemInteractionHandler> {
|
||||||
|
|
||||||
|
public KnowledgeFlask(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
|
||||||
|
super(category, item, id, recipeType, recipe, recipeOutput);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemInteractionHandler getItemHandler() {
|
||||||
|
return (e, p, item) -> {
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, getItem(), true) && p.getLevel() >= 1) {
|
||||||
|
if (e.getClickedBlock() == null || !(e.getClickedBlock().getState() instanceof Container)) {
|
||||||
|
p.setLevel(p.getLevel() - 1);
|
||||||
|
e.setCancelled(true);
|
||||||
|
p.getInventory().addItem(new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"));
|
||||||
|
|
||||||
|
p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1F, 0.5F);
|
||||||
|
|
||||||
|
item.setAmount(item.getAmount() - 1);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Player.PlayerInventory;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Research;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.PlayerProfile;
|
||||||
|
|
||||||
|
public class KnowledgeTome extends SimpleSlimefunItem<ItemInteractionHandler> {
|
||||||
|
|
||||||
|
public KnowledgeTome(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
|
super(category, item, id, recipeType, recipe);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemInteractionHandler getItemHandler() {
|
||||||
|
return (e, p, item) -> {
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
|
||||||
|
List<String> lore = item.getItemMeta().getLore();
|
||||||
|
lore.set(0, ChatColor.translateAlternateColorCodes('&', "&7Owner: &b" + p.getName()));
|
||||||
|
lore.set(1, ChatColor.BLACK + "" + p.getUniqueId());
|
||||||
|
ItemMeta im = item.getItemMeta();
|
||||||
|
im.setLore(lore);
|
||||||
|
item.setItemMeta(im);
|
||||||
|
p.getEquipment().setItemInMainHand(item);
|
||||||
|
p.getWorld().playSound(p.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1F, 1F);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (SlimefunManager.isItemSimiliar(item, getItem(), false)) {
|
||||||
|
PlayerProfile profile = PlayerProfile.fromUUID(p.getUniqueId());
|
||||||
|
Set<Research> researches = PlayerProfile.fromUUID(UUID.fromString(ChatColor.stripColor(item.getItemMeta().getLore().get(1)))).getResearches();
|
||||||
|
researches.forEach(research -> profile.setResearched(research, true));
|
||||||
|
|
||||||
|
PlayerInventory.consumeItemInHand(p);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,55 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Effect;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule.Action;
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Block.TreeCalculator;
|
||||||
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
|
||||||
|
public class LumberAxe extends SimpleSlimefunItem<BlockBreakHandler> implements NotPlaceable {
|
||||||
|
|
||||||
|
public LumberAxe(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
|
super(category, item, id, recipeType, recipe);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockBreakHandler getItemHandler() {
|
||||||
|
return (e, item, fortune, drops) -> {
|
||||||
|
if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), getItem(), true)) {
|
||||||
|
if (MaterialHelper.isLog( e.getBlock().getType())) {
|
||||||
|
List<Location> logs = new ArrayList<>();
|
||||||
|
TreeCalculator.getTree(e.getBlock().getLocation(), e.getBlock().getLocation(), logs);
|
||||||
|
|
||||||
|
if (logs.contains(e.getBlock().getLocation())) logs.remove(e.getBlock().getLocation());
|
||||||
|
for (Location b: logs) {
|
||||||
|
if (SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), b, Action.BREAK_BLOCK)) {
|
||||||
|
b.getWorld().playEffect(b, Effect.STEP_SOUND, b.getBlock().getType());
|
||||||
|
|
||||||
|
for (ItemStack drop: b.getBlock().getDrops()) {
|
||||||
|
b.getWorld().dropItemNaturally(b, drop);
|
||||||
|
}
|
||||||
|
|
||||||
|
b.getBlock().setType(Material.AIR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.potion.PotionEffect;
|
||||||
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Player.PlayerInventory;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||||
|
|
||||||
|
public class MagicSugar extends SimpleSlimefunItem<ItemInteractionHandler> {
|
||||||
|
|
||||||
|
public MagicSugar(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) {
|
||||||
|
super(category, item, id, recipeType, recipe, keys, values);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemInteractionHandler getItemHandler() {
|
||||||
|
return (e, p, item) -> {
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.MAGIC_SUGAR, true)) {
|
||||||
|
PlayerInventory.consumeItemInHand(p);
|
||||||
|
p.getWorld().playSound(p.getLocation(), Sound.ENTITY_GENERIC_EAT, 1, 1);
|
||||||
|
p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 600, (Integer) Slimefun.getItemValue("MAGIC_SUGAR", "effects.SPEED")));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,39 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.potion.PotionEffect;
|
||||||
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemConsumptionHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
|
||||||
|
public class MonsterJerky extends SimpleSlimefunItem<ItemConsumptionHandler> {
|
||||||
|
|
||||||
|
public MonsterJerky(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
|
super(category, item, id, recipeType, recipe);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemConsumptionHandler getItemHandler() {
|
||||||
|
return (e, p, item) -> {
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
|
||||||
|
SlimefunPlugin.instance.getServer().getScheduler().runTaskLater(SlimefunPlugin.instance, () -> {
|
||||||
|
if (p.hasPotionEffect(PotionEffectType.HUNGER)) {
|
||||||
|
p.removePotionEffect(PotionEffectType.HUNGER);
|
||||||
|
}
|
||||||
|
|
||||||
|
p.addPotionEffect(new PotionEffect(PotionEffectType.SATURATION, 5, 0));
|
||||||
|
}, 1L);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
|
|
||||||
|
public class PickaxeOfContainment extends SimpleSlimefunItem<BlockBreakHandler> {
|
||||||
|
|
||||||
|
public PickaxeOfContainment(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
|
super(category, item, id, recipeType, recipe);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockBreakHandler getItemHandler() {
|
||||||
|
return (e, item, fortune, drops) -> {
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
|
||||||
|
// Refactored it into this so we don't need to call e.getBlock() all the time.
|
||||||
|
Block b = e.getBlock();
|
||||||
|
if (b.getType() != Material.SPAWNER) return true;
|
||||||
|
|
||||||
|
// If the spawner's BlockStorage has BlockInfo, then it's not a vanilla spawner and shouldn't give a broken spawner.
|
||||||
|
ItemStack spawner = SlimefunItems.BROKEN_SPAWNER.clone();
|
||||||
|
if (BlockStorage.hasBlockInfo(b)) {
|
||||||
|
spawner = SlimefunItems.REPAIRED_SPAWNER.clone();
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemMeta im = spawner.getItemMeta();
|
||||||
|
List<String> lore = im.getLore();
|
||||||
|
|
||||||
|
for (int i = 0; i < lore.size(); i++) {
|
||||||
|
if (lore.get(i).contains("<Type>")) lore.set(i, lore.get(i).replace("<Type>", StringUtils.format(((CreatureSpawner) b.getState()).getSpawnedType().toString())));
|
||||||
|
}
|
||||||
|
|
||||||
|
im.setLore(lore);
|
||||||
|
spawner.setItemMeta(im);
|
||||||
|
b.getLocation().getWorld().dropItemNaturally(b.getLocation(), spawner);
|
||||||
|
e.setExpToDrop(0);
|
||||||
|
e.setDropItems(false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (e.getBlock().getType() == Material.SPAWNER) e.setDropItems(false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,69 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.DamageableItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
|
||||||
|
public class PickaxeOfTheSeeker extends SimpleSlimefunItem<ItemInteractionHandler> implements DamageableItem {
|
||||||
|
|
||||||
|
public PickaxeOfTheSeeker(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
|
super(category, item, id, recipeType, recipe);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemInteractionHandler getItemHandler() {
|
||||||
|
return (e, p, item) -> {
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
|
||||||
|
Block closest = null;
|
||||||
|
|
||||||
|
for (int x = -4; x <= 4; x++) {
|
||||||
|
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 || 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) {
|
||||||
|
Messages.local.sendTranslation(p, "miner.no-ores", true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
double l = closest.getX() + 0.5 - p.getLocation().getX();
|
||||||
|
double w = closest.getZ() + 0.5 - p.getLocation().getZ();
|
||||||
|
float yaw;
|
||||||
|
float pitch;
|
||||||
|
double c = Math.sqrt(l * l + w * w);
|
||||||
|
double alpha1 = -Math.asin(l / c) / Math.PI * 180;
|
||||||
|
double alpha2 = Math.acos(w / c) / Math.PI * 180;
|
||||||
|
if (alpha2 > 90) yaw = (float) (180 - alpha1);
|
||||||
|
else yaw = (float) alpha1;
|
||||||
|
pitch = (float) ((-Math.atan((closest.getY() - 0.5 - p.getLocation().getY()) / Math.sqrt(l * l + w * w))) * 180F / Math.PI);
|
||||||
|
|
||||||
|
p.teleport(new Location(p.getWorld(), p.getLocation().getX(), p.getLocation().getY(), p.getLocation().getZ(), yaw, pitch));
|
||||||
|
}
|
||||||
|
|
||||||
|
damageItem(p, item);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDamageable() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Effect;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule.Action;
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Block.Vein;
|
||||||
|
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.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
|
||||||
|
public class PickaxeOfVeinMining extends SimpleSlimefunItem<BlockBreakHandler> {
|
||||||
|
|
||||||
|
public PickaxeOfVeinMining(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
|
super(category, item, id, recipeType, recipe);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockBreakHandler getItemHandler() {
|
||||||
|
return (e, item, fortune, drops) -> {
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
|
||||||
|
if (e.getBlock().getType().toString().endsWith("_ORE")) {
|
||||||
|
List<Location> blocks = new ArrayList<>();
|
||||||
|
Vein.calculate(e.getBlock().getLocation(), e.getBlock().getLocation(), blocks, 16);
|
||||||
|
|
||||||
|
for (Location block: blocks) {
|
||||||
|
if (SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), block, Action.BREAK_BLOCK)) {
|
||||||
|
Block b = block.getBlock();
|
||||||
|
b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType());
|
||||||
|
|
||||||
|
for (ItemStack drop: b.getDrops()) {
|
||||||
|
b.getWorld().dropItemNaturally(b.getLocation(), drop.getType().isBlock() ? drop: new CustomItem(drop, fortune));
|
||||||
|
}
|
||||||
|
|
||||||
|
b.setType(Material.AIR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,92 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Effect;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.BlockFace;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.FallingBlock;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
|
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.DamageableItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
|
||||||
|
public class SeismicAxe extends SimpleSlimefunItem<ItemInteractionHandler> implements NotPlaceable, DamageableItem {
|
||||||
|
|
||||||
|
public SeismicAxe(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
|
super(category, item, id, recipeType, recipe);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemInteractionHandler getItemHandler() {
|
||||||
|
return (e, p, item) -> {
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.SEISMIC_AXE, true)) {
|
||||||
|
List<Block> blocks = p.getLineOfSight(null, 10);
|
||||||
|
for (int i = 0; i < blocks.size(); i++) {
|
||||||
|
Block b = blocks.get(i);
|
||||||
|
Location ground = b.getLocation();
|
||||||
|
|
||||||
|
if (b.getType() == null || b.getType() == Material.AIR) {
|
||||||
|
for (int y = ground.getBlockY(); y > 0; y--) {
|
||||||
|
if (b.getWorld().getBlockAt(b.getX(), y, b.getZ()) != null && b.getWorld().getBlockAt(b.getX(), y, b.getZ()).getType() != null && b.getWorld().getBlockAt(b.getX(), y, b.getZ()).getType() != Material.AIR) {
|
||||||
|
ground = new Location(b.getWorld(), b.getX(), y, b.getZ());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
b.getWorld().playEffect(ground, Effect.STEP_SOUND, ground.getBlock().getType());
|
||||||
|
|
||||||
|
if (ground.getBlock().getRelative(BlockFace.UP).getType() == null || ground.getBlock().getRelative(BlockFace.UP).getType() == Material.AIR) {
|
||||||
|
Location loc = ground.getBlock().getRelative(BlockFace.UP).getLocation().add(0.5, 0.0, 0.5);
|
||||||
|
FallingBlock block = ground.getWorld().spawnFallingBlock(loc, ground.getBlock().getBlockData());
|
||||||
|
block.setDropItem(false);
|
||||||
|
block.setVelocity(new Vector(0, 0.4 + i * 0.01, 0));
|
||||||
|
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())) {
|
||||||
|
Vector vector = n.getLocation().toVector().subtract(p.getLocation().toVector()).normalize().multiply(1.4);
|
||||||
|
vector.setY(0.9);
|
||||||
|
n.setVelocity(vector);
|
||||||
|
|
||||||
|
if (p.getWorld().getPVP()) {
|
||||||
|
EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(p, n, DamageCause.ENTITY_ATTACK, 6D);
|
||||||
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
if (!event.isCancelled()) ((LivingEntity) n).damage(6D);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
damageItem(p, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDamageable() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Effect;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Recipe.RecipeCalculator;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
|
|
||||||
|
public class SmeltersPickaxe extends SimpleSlimefunItem<BlockBreakHandler> {
|
||||||
|
|
||||||
|
public SmeltersPickaxe(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
|
super(category, item, id, recipeType, recipe);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockBreakHandler getItemHandler() {
|
||||||
|
return (e, item, fortune, drops) -> {
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
|
||||||
|
if (BlockStorage.hasBlockInfo(e.getBlock())) return true;
|
||||||
|
if (e.getBlock().getType() == Material.PLAYER_HEAD) return true;
|
||||||
|
|
||||||
|
int j = -1;
|
||||||
|
List<ItemStack> dropsList = (List<ItemStack>) e.getBlock().getDrops();
|
||||||
|
for (int i = 0; i < dropsList.size(); i++) {
|
||||||
|
if (dropsList.get(i) != null) {
|
||||||
|
j++;
|
||||||
|
drops.add(e.getBlock().getType().toString().endsWith("_ORE") ? new CustomItem(dropsList.get(i), fortune): dropsList.get(i));
|
||||||
|
if (RecipeCalculator.getSmeltedOutput(drops.get(i).getType()) != null) {
|
||||||
|
e.getBlock().getWorld().playEffect(e.getBlock().getLocation(), Effect.MOBSPAWNER_FLAMES, 1);
|
||||||
|
drops.set(j, new CustomItem(RecipeCalculator.getSmeltedOutput(drops.get(i).getType()), drops.get(i).getAmount()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,114 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.GameMode;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
|
import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule;
|
||||||
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
|
||||||
|
public class StormStaff extends SimpleSlimefunItem<ItemInteractionHandler> {
|
||||||
|
|
||||||
|
private static final int MAX_USES = 8;
|
||||||
|
|
||||||
|
public StormStaff(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
|
super(category, item, id, recipeType, recipe, getCraftedOutput());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ItemStack getCraftedOutput() {
|
||||||
|
ItemStack item = SlimefunItems.STAFF_STORM.clone();
|
||||||
|
ItemMeta im = item.getItemMeta();
|
||||||
|
List<String> lore = im.getLore();
|
||||||
|
|
||||||
|
lore.set(4, ChatColor.translateAlternateColorCodes('&', "&e" + MAX_USES + " Uses &7left"));
|
||||||
|
|
||||||
|
im.setLore(lore);
|
||||||
|
item.setItemMeta(im);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemInteractionHandler getItemHandler() {
|
||||||
|
return (e, p, item) -> {
|
||||||
|
//Not checking if lores equals because we need a special one for that.
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, getItem(), false)) {
|
||||||
|
|
||||||
|
if (!item.hasItemMeta()) return false;
|
||||||
|
ItemMeta itemMeta = item.getItemMeta();
|
||||||
|
if (!itemMeta.hasLore()) return false;
|
||||||
|
List<String> itemLore = itemMeta.getLore();
|
||||||
|
|
||||||
|
ItemStack sfItem = getItem();
|
||||||
|
ItemMeta sfItemMeta = sfItem.getItemMeta();
|
||||||
|
List<String> sfItemLore = sfItemMeta.getLore();
|
||||||
|
|
||||||
|
if (itemLore.size() < 6) {
|
||||||
|
// Index 1 and 3 in SlimefunItems.STAFF_STORM has lores with words and stuff so we check for them.
|
||||||
|
if (itemLore.get(1).equals(sfItemLore.get(1)) && itemLore.get(3).equals(sfItemLore.get(3))) {
|
||||||
|
if (p.getFoodLevel() >= 4 || p.getGameMode() == GameMode.CREATIVE) {
|
||||||
|
// Get a target block with max. 30 blocks of distance
|
||||||
|
Location loc = p.getTargetBlock(null, 30).getLocation();
|
||||||
|
|
||||||
|
if (loc.getWorld() != null && loc.getChunk().isLoaded()) {
|
||||||
|
if (loc.getWorld().getPVP() && SlimefunPlugin.getProtectionManager().hasPermission(p, loc, ProtectionModule.Action.PVP)) {
|
||||||
|
loc.getWorld().strikeLightning(loc);
|
||||||
|
|
||||||
|
if (p.getInventory().getItemInMainHand().getType() != Material.SHEARS && p.getGameMode() != GameMode.CREATIVE) {
|
||||||
|
FoodLevelChangeEvent event = new FoodLevelChangeEvent(p, p.getFoodLevel() - 4);
|
||||||
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
|
p.setFoodLevel(event.getFoodLevel());
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = MAX_USES; i > 0; i--) {
|
||||||
|
if (i == 1 && ChatColor.translateAlternateColorCodes('&', "&e1 Use &7left").equals(itemLore.get(4))) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
p.playSound(p.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1);
|
||||||
|
item.setAmount(0);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (ChatColor.translateAlternateColorCodes('&', "&e" + i + " Uses &7left").equals(itemLore.get(4))) {
|
||||||
|
itemLore.set(4, ChatColor.translateAlternateColorCodes('&', "&e" + (i - 1) + " " + (i > 2 ? "Uses": "Use") + " &7left"));
|
||||||
|
e.setCancelled(true);
|
||||||
|
|
||||||
|
// Saving the changes to lore and item.
|
||||||
|
itemMeta.setLore(itemLore);
|
||||||
|
item.setItemMeta(itemMeta);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Messages.local.sendTranslation(p, "messages.no-pvp", true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Messages.local.sendTranslation(p, "messages.hungry", true);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,83 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Creeper;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.entity.Skeleton;
|
||||||
|
import org.bukkit.entity.WitherSkeleton;
|
||||||
|
import org.bukkit.entity.Zombie;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.bukkit.inventory.meta.SkullMeta;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.EntityKillHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||||
|
|
||||||
|
public class SwordOfBeheading extends SimpleSlimefunItem<EntityKillHandler> {
|
||||||
|
|
||||||
|
private final Random random = new Random();
|
||||||
|
|
||||||
|
private int chanceZombie;
|
||||||
|
private int chanceSkeleton;
|
||||||
|
private int chanceCreeper;
|
||||||
|
private int chanceWitherSkeleton;
|
||||||
|
private int chancePlayer;
|
||||||
|
|
||||||
|
public SwordOfBeheading(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) {
|
||||||
|
super(category, item, id, recipeType, recipe, keys, values);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EntityKillHandler getItemHandler() {
|
||||||
|
return (e, entity, killer, item) -> {
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
|
||||||
|
if (e.getEntity() instanceof Zombie) {
|
||||||
|
if (random.nextInt(100) < chanceZombie) {
|
||||||
|
e.getDrops().add(new ItemStack(Material.ZOMBIE_HEAD));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (e.getEntity() instanceof WitherSkeleton) {
|
||||||
|
if (random.nextInt(100) < chanceWitherSkeleton)
|
||||||
|
e.getDrops().add(new ItemStack(Material.WITHER_SKELETON_SKULL));
|
||||||
|
}
|
||||||
|
else if (e.getEntity() instanceof Skeleton) {
|
||||||
|
if (random.nextInt(100) < chanceSkeleton)
|
||||||
|
e.getDrops().add(new ItemStack(Material.SKELETON_SKULL));
|
||||||
|
}
|
||||||
|
else if (e.getEntity() instanceof Creeper) {
|
||||||
|
if (random.nextInt(100) < chanceCreeper) {
|
||||||
|
e.getDrops().add(new ItemStack(Material.CREEPER_HEAD));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (e.getEntity() instanceof Player) {
|
||||||
|
if (random.nextInt(100) < chancePlayer) {
|
||||||
|
ItemStack skull = new ItemStack(Material.PLAYER_HEAD);
|
||||||
|
ItemMeta meta = skull.getItemMeta();
|
||||||
|
((SkullMeta) meta).setOwningPlayer((Player) e.getEntity());
|
||||||
|
skull.setItemMeta(meta);
|
||||||
|
|
||||||
|
e.getDrops().add(skull);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void postRegister() {
|
||||||
|
chanceZombie = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.ZOMBIE");
|
||||||
|
chanceSkeleton = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.SKELETON");
|
||||||
|
chanceCreeper = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.CREEPER");
|
||||||
|
chanceWitherSkeleton = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.WITHER_SKELETON");
|
||||||
|
chancePlayer = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.PLAYER");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.ArmorStand;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
|
||||||
|
public class TelepositionScroll extends SimpleSlimefunItem<ItemInteractionHandler> {
|
||||||
|
|
||||||
|
public TelepositionScroll(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
|
||||||
|
super(category, item, id, recipeType, recipe);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemInteractionHandler getItemHandler() {
|
||||||
|
return (e, p, item) -> {
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.SCROLL_OF_DIMENSIONAL_TELEPOSITION, true)) {
|
||||||
|
for (Entity n: p.getNearbyEntities(10.0, 10.0, 10.0)) {
|
||||||
|
if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !n.getUniqueId().equals(p.getUniqueId())) {
|
||||||
|
float yaw = n.getLocation().getYaw() + 180.0F;
|
||||||
|
if (yaw > 360.0F) yaw = yaw - 360.0F;
|
||||||
|
|
||||||
|
n.teleport(new Location(n.getWorld(), n.getLocation().getX(), n.getLocation().getY(), n.getLocation().getZ(), yaw, n.getLocation().getPitch()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Item;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
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.ancient_altar.AncientAltarListener;
|
||||||
|
|
||||||
|
public class AncientPedestal extends SlimefunItem {
|
||||||
|
|
||||||
|
public AncientPedestal(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
|
||||||
|
super(category, item, id, recipeType, recipe, recipeOutput);
|
||||||
|
|
||||||
|
SlimefunItem.registerBlockHandler(getID(), (p, b, tool, reason) -> {
|
||||||
|
Item stack = AncientAltarListener.findItem(b);
|
||||||
|
if (stack != null) {
|
||||||
|
stack.removeMetadata("item_placed", SlimefunPlugin.instance);
|
||||||
|
b.getWorld().dropItem(b.getLocation(), AncientAltarListener.fixItemStack(stack.getItemStack(), stack.getCustomName()));
|
||||||
|
stack.remove();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,73 @@
|
|||||||
|
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.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.SimpleSlimefunItem;
|
||||||
|
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 SimpleSlimefunItem<AutonomousMachineHandler> {
|
||||||
|
|
||||||
|
private String[] blacklist;
|
||||||
|
|
||||||
|
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 AutonomousMachineHandler getItemHandler() {
|
||||||
|
return (e, dispenser, d, block, chest, 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 (!SlimefunPlugin.getUtilities().blockHandlers.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;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void postRegister() {
|
||||||
|
List<?> list = (List<?>) Slimefun.getItemValue(getID(), "unplaceable-blocks");
|
||||||
|
blacklist = list.toArray(new String[list.size()]);
|
||||||
|
}
|
||||||
|
}
|
@ -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};
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,78 @@
|
|||||||
|
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
|
||||||
|
|
||||||
|
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.CSCoreLib;
|
||||||
|
import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent;
|
||||||
|
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
|
||||||
|
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.Category;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||||
|
import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
||||||
|
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
|
||||||
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
|
|
||||||
|
public class Composter extends SlimefunGadget {
|
||||||
|
|
||||||
|
public Composter(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack[] machineRecipes) {
|
||||||
|
super(category, item, id, recipeType, recipe, machineRecipes);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void preRegister() {
|
||||||
|
addItemHandler(new ItemInteractionHandler() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onRightClick(ItemUseEvent e, final Player p, ItemStack item) {
|
||||||
|
if (e.getClickedBlock() != null) {
|
||||||
|
String id = BlockStorage.checkID(e.getClickedBlock());
|
||||||
|
if (id != null && id.equals(getID())) {
|
||||||
|
if (CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), e.getClickedBlock(), true)) {
|
||||||
|
final ItemStack input = p.getInventory().getItemInMainHand();
|
||||||
|
final Block b = e.getClickedBlock();
|
||||||
|
SlimefunItem machine = SlimefunItem.getByID(id);
|
||||||
|
|
||||||
|
for (ItemStack convert: RecipeType.getRecipeInputs(machine)) {
|
||||||
|
if (convert != null && SlimefunManager.isItemSimiliar(input, convert, true)) {
|
||||||
|
ItemStack removing = input.clone();
|
||||||
|
removing.setAmount(convert.getAmount());
|
||||||
|
p.getInventory().removeItem(removing);
|
||||||
|
final ItemStack adding = RecipeType.getRecipeOutput(machine, convert);
|
||||||
|
|
||||||
|
for (int i = 1; i < 12; i++) {
|
||||||
|
int j = i;
|
||||||
|
Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> {
|
||||||
|
if (j < 11) {
|
||||||
|
b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType().isBlock() ? input.getType() : Material.HAY_BLOCK);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F);
|
||||||
|
b.getWorld().dropItemNaturally(b.getRelative(BlockFace.UP).getLocation(), adding);
|
||||||
|
}
|
||||||
|
}, i*30L);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Messages.local.sendTranslation(p, "machines.wrong-item", true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user