From dcee66839f322e22e55fc0159d33003ed845a94d Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Mon, 23 Sep 2019 17:50:35 +0200 Subject: [PATCH] Added Portable GEO-Scanner, Uranium Resources and improved gps --- .../Slimefun/GEO/GEOScanner.java | 60 +++++++++++++++++++ .../Slimefun/GEO/OreGenResource.java | 5 ++ .../Slimefun/GEO/OreGenSystem.java | 32 ++++++---- .../GEO/resources/NetherIceResource.java | 5 ++ .../Slimefun/GEO/resources/OilResource.java | 5 ++ .../GEO/resources/UraniumResource.java | 49 +++++++++++++++ .../Slimefun/GPS/GPSNetwork.java | 29 +-------- .../Slimefun/Lists/RecipeType.java | 2 +- .../Slimefun/Lists/SlimefunItems.java | 1 + .../SlimefunItem/abstractItems/ADrill.java | 1 + .../items/PortableGEOScanner.java | 30 ++++++++++ .../machines/electric/GEOScannerBlock.java | 30 ++++++++++ .../Slimefun/Setup/ResearchSetup.java | 2 +- .../Slimefun/Setup/SlimefunSetup.java | 29 ++++----- .../Slimefun/SlimefunPlugin.java | 2 + .../Slimefun/utils/Utilities.java | 2 + 16 files changed, 228 insertions(+), 56 deletions(-) create mode 100644 src/me/mrCookieSlime/Slimefun/GEO/GEOScanner.java create mode 100644 src/me/mrCookieSlime/Slimefun/GEO/resources/UraniumResource.java create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableGEOScanner.java create mode 100644 src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/GEOScannerBlock.java diff --git a/src/me/mrCookieSlime/Slimefun/GEO/GEOScanner.java b/src/me/mrCookieSlime/Slimefun/GEO/GEOScanner.java new file mode 100644 index 000000000..eed4ea76a --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/GEO/GEOScanner.java @@ -0,0 +1,60 @@ +package me.mrCookieSlime.Slimefun.GEO; + +import java.util.logging.Level; + +import org.bukkit.Chunk; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; +import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; +import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.api.Slimefun; + +public final class GEOScanner { + + private static final int[] geoscan_border = new int[] {0, 1, 2, 3, 5, 6, 7, 8, 9, 17, 18, 26, 27, 35, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53}; + + private GEOScanner() {} + + public static void scanChunk(Player p, Chunk chunk) { + if (Slimefun.getGPSNetwork().getNetworkComplexity(p.getUniqueId()) < 600) { + SlimefunPlugin.getLocal().sendMessages(p, "gps.insufficient-complexity", true, msg -> msg.replace("%complexity%", "600")); + return; + } + + ChestMenu menu = new ChestMenu("&4GEO-Scan Results"); + for (int slot : geoscan_border) { + menu.addItem(slot, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), + (pl, slotn, item, action) -> false + ); + } + + try { + menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODQ0OWI5MzE4ZTMzMTU4ZTY0YTQ2YWIwZGUxMjFjM2Q0MDAwMGUzMzMyYzE1NzQ5MzJiM2M4NDlkOGZhMGRjMiJ9fX0="), "&eScanned Chunk", "", "&8\u21E8 &7World: " + chunk.getWorld().getName(), "&8\u21E8 &7X: " + chunk.getX() + " Z: " + chunk.getZ()), (pl, slot, stack, action) -> false); + } catch (Exception e) { + Slimefun.getLogger().log(Level.SEVERE, "Error while scanning a chunk for Slimefun " + Slimefun.getVersion(), e); + } + + int index = 10; + for (OreGenResource resource: OreGenSystem.listResources()) { + int supply = OreGenSystem.getSupplies(resource, chunk, true); + + ItemStack item = new CustomItem(resource.getIcon(), "&r" + resource.getName(), "&8\u21E8 &e" + supply + ' ' + resource.getMeasurementUnit()); + if (supply > 1) { + item.setAmount(supply > item.getMaxStackSize() ? item.getMaxStackSize(): supply); + } + menu.addItem(index, item, (pl, slot, stack, action) -> false); + index++; + + if (index % 9 == 8) { + index += 2; + } + } + + menu.open(p); + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/GEO/OreGenResource.java b/src/me/mrCookieSlime/Slimefun/GEO/OreGenResource.java index 71e50e7c0..ce80fe49b 100644 --- a/src/me/mrCookieSlime/Slimefun/GEO/OreGenResource.java +++ b/src/me/mrCookieSlime/Slimefun/GEO/OreGenResource.java @@ -24,5 +24,10 @@ public interface OreGenResource { * Measurement Unit e.g. "Buckets" */ String getMeasurementUnit(); + + /** + * Returns whether this Resource is considered a fluid + */ + boolean isLiquid(); } diff --git a/src/me/mrCookieSlime/Slimefun/GEO/OreGenSystem.java b/src/me/mrCookieSlime/Slimefun/GEO/OreGenSystem.java index 31c75f4de..b415389de 100644 --- a/src/me/mrCookieSlime/Slimefun/GEO/OreGenSystem.java +++ b/src/me/mrCookieSlime/Slimefun/GEO/OreGenSystem.java @@ -20,14 +20,18 @@ public final class OreGenSystem { } public static void registerResource(OreGenResource resource) { - SlimefunPlugin.getUtilities().resources.put(resource.getName(), resource); - Slimefun.getLogger().log(Level.INFO, "Registering Ore Gen: " + resource.getName()); - - Config cfg = new Config("plugins/Slimefun/generators/" + resource.getName() + ".cfg"); + Config cfg = new Config("plugins/Slimefun/generators/" + resource.getName() + ".yml"); + cfg.setDefaultValue("enabled", true); for (Biome biome: Biome.values()) { - cfg.setDefaultValue(biome.toString(), resource.getDefaultSupply(biome)); + cfg.setDefaultValue("spawn-rates." + biome.toString(), resource.getDefaultSupply(biome)); } cfg.save(); + + if (cfg.getBoolean("enabled")) { + Slimefun.getLogger().log(Level.INFO, "Registering Ore Gen: " + resource.getName()); + SlimefunPlugin.getUtilities().resources.put(resource.getName(), resource); + SlimefunPlugin.getUtilities().resource_configs.put(resource.getName(), cfg); + } } public static OreGenResource getResource(String name) { @@ -35,25 +39,31 @@ public final class OreGenSystem { } private static int getDefault(OreGenResource resource, Biome biome) { - if (resource == null) return 0; - Config cfg = new Config("plugins/Slimefun/generators/" + resource.getName() + ".cfg"); - return cfg.getInt(biome.toString()); + if (resource == null) { + return 0; + } + else { + return SlimefunPlugin.getUtilities().resource_configs.get(resource.getName()).getInt("spawn-rates." + biome.toString()); + } } public static void setSupplies(OreGenResource resource, Chunk chunk, int amount) { - if (resource == null) return; - BlockStorage.setChunkInfo(chunk, "resources_" + resource.getName().toUpperCase(), String.valueOf(amount)); + if (resource != null) { + BlockStorage.setChunkInfo(chunk, "resources_" + resource.getName().toUpperCase(), String.valueOf(amount)); + } } public static int generateSupplies(OreGenResource resource, Chunk chunk) { if (resource == null) return 0; - int supplies = getDefault(resource, chunk.getBlock(5, 50, 5).getBiome()); + + int supplies = getDefault(resource, chunk.getBlock(7, 60, 7).getBiome()); BlockStorage.setChunkInfo(chunk, "resources_" + resource.getName().toUpperCase(), String.valueOf(supplies)); return supplies; } public static int getSupplies(OreGenResource resource, Chunk chunk, boolean generate) { if (resource == null) return 0; + if (BlockStorage.hasChunkInfo(chunk, "resources_" + resource.getName().toUpperCase())) { return Integer.parseInt(BlockStorage.getChunkInfo(chunk, "resources_" + resource.getName().toUpperCase())); } diff --git a/src/me/mrCookieSlime/Slimefun/GEO/resources/NetherIceResource.java b/src/me/mrCookieSlime/Slimefun/GEO/resources/NetherIceResource.java index 2a86ea450..514db45e1 100644 --- a/src/me/mrCookieSlime/Slimefun/GEO/resources/NetherIceResource.java +++ b/src/me/mrCookieSlime/Slimefun/GEO/resources/NetherIceResource.java @@ -28,4 +28,9 @@ public class NetherIceResource implements OreGenResource { return "Blocks"; } + @Override + public boolean isLiquid() { + return false; + } + } diff --git a/src/me/mrCookieSlime/Slimefun/GEO/resources/OilResource.java b/src/me/mrCookieSlime/Slimefun/GEO/resources/OilResource.java index c6768aed0..6945f7a2d 100644 --- a/src/me/mrCookieSlime/Slimefun/GEO/resources/OilResource.java +++ b/src/me/mrCookieSlime/Slimefun/GEO/resources/OilResource.java @@ -81,4 +81,9 @@ public class OilResource implements OreGenResource { return "Buckets"; } + @Override + public boolean isLiquid() { + return true; + } + } diff --git a/src/me/mrCookieSlime/Slimefun/GEO/resources/UraniumResource.java b/src/me/mrCookieSlime/Slimefun/GEO/resources/UraniumResource.java new file mode 100644 index 000000000..d60be82ee --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/GEO/resources/UraniumResource.java @@ -0,0 +1,49 @@ +package me.mrCookieSlime.Slimefun.GEO.resources; + +import java.util.Random; + +import org.bukkit.block.Biome; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.GEO.OreGenResource; +import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; + +public class UraniumResource implements OreGenResource { + + private final Random random = new Random(); + + @Override + public int getDefaultSupply(Biome biome) { + switch (biome) { + case THE_END: + case END_BARRENS: + case END_MIDLANDS: + case SMALL_END_ISLANDS: + case NETHER: + return 0; + default: + return random.nextInt(5) + 1; + } + } + + @Override + public String getName() { + return "Small Chunks of Uranium"; + } + + @Override + public ItemStack getIcon() { + return SlimefunItems.SMALL_URANIUM.clone(); + } + + @Override + public String getMeasurementUnit() { + return "Pieces"; + } + + @Override + public boolean isLiquid() { + return false; + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java b/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java index c4d5a3277..adfcec832 100644 --- a/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java +++ b/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java @@ -9,7 +9,6 @@ import java.util.logging.Level; import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; @@ -25,15 +24,13 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler; import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull; import me.mrCookieSlime.Slimefun.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.GEO.OreGenResource; -import me.mrCookieSlime.Slimefun.GEO.OreGenSystem; import me.mrCookieSlime.Slimefun.api.Slimefun; public class GPSNetwork { private Map> transmitters = new HashMap<>(); - 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 static final 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 static final 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 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}; @@ -158,8 +155,7 @@ public class GPSNetwork { menu.addItem(slot, new CustomItem(globe, entry.getKey(), "&8\u21E8 &7World: &r" + l.getWorld().getName(), "&8\u21E8 &7X: &r" + l.getX(), "&8\u21E8 &7Y: &r" + l.getY(), "&8\u21E8 &7Z: &r" + l.getZ(), "", "&8\u21E8 &cClick to delete")); menu.addMenuClickHandler(slot, (pl, slotn, item, action) -> { - String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', entry.getKey())) - .toUpperCase().replace(' ', '_'); + String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', entry.getKey())).toUpperCase().replace(' ', '_'); Config cfg = new Config("data-storage/Slimefun/waypoints/" + pl.getUniqueId().toString() + ".yml"); cfg.setValue(id, null); cfg.save(); @@ -221,25 +217,6 @@ public class GPSNetwork { public Set getTransmitters(UUID uuid) { return transmitters.containsKey(uuid) ? transmitters.get(uuid): new HashSet<>(); } - - public void scanChunk(Player p, Chunk chunk) { - if (getNetworkComplexity(p.getUniqueId()) < 600) { - SlimefunPlugin.getLocal().sendMessages(p, "gps.insufficient-complexity", true, msg -> msg.replace("%complexity%", "600")); - return; - } - ChestMenu menu = new ChestMenu("&4Scan Results"); - - int index = 0; - - for (OreGenResource resource: OreGenSystem.listResources()) { - int supply = OreGenSystem.getSupplies(resource, chunk, true); - - menu.addItem(index, new CustomItem(resource.getIcon(), "&7Resource: &e" + resource.getName(), "", "&7Scanned Chunk:", "&8\u21E8 &7X: " + chunk.getX() + " Z: " + chunk.getZ(), "", "&7Result: &e" + supply + ' ' + resource.getMeasurementUnit()), (pl, slot, item, action) -> false); - index++; - } - - menu.open(p); - } public static void openTeleporterGUI(Player p, UUID uuid, Block b, final int complexity) { if (SlimefunPlugin.getUtilities().teleporterUsers.contains(p.getUniqueId())) return; diff --git a/src/me/mrCookieSlime/Slimefun/Lists/RecipeType.java b/src/me/mrCookieSlime/Slimefun/Lists/RecipeType.java index fdb190ca1..f316c10ef 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/RecipeType.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/RecipeType.java @@ -14,7 +14,7 @@ import org.bukkit.inventory.ItemStack; public class RecipeType { - public static final RecipeType MULTIBLOCK = new RecipeType(new CustomItem(Material.BRICK, "&bMultiBlock", "", "&a&oBuild it in the World")); + public static final RecipeType MULTIBLOCK = new RecipeType(new CustomItem(Material.BRICKS, "&bMultiBlock", "", "&a&oBuild it in the World")); 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", "", "&a&oGrind it using the Grind Stone"), "GRIND_STONE"); public static final RecipeType MOB_DROP = new RecipeType(new CustomItem(Material.IRON_SWORD, "&bMob Drop", "", "&a&oKill the specified Mob to obtain this Item")); diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index 0c6bbbad6..663bc277f 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -682,6 +682,7 @@ public final class SlimefunItems { public static final ItemStack ANDROID_INTERFACE_ITEMS = new CustomItem(Material.DISPENSER, "&7Android Interface &9(Items)", "", "&rItems stored in an Android's Inventory", "&rwill be inserted into this Interface", "&rwhen its Script tells them to do so"); public static final ItemStack GPS_GEO_SCANNER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmFkOGNmZWIzODdhNTZlM2U1YmNmODUzNDVkNmE0MTdiMjQyMjkzODg3ZGIzY2UzYmE5MWZhNDA5YjI1NGI4NiJ9fX0="), "&bGPS Geo-Scanner", "", "&rScans a Chunk for natural Resources", "&rsuch as &8Oil"); + public static final ItemStack PORTABLE_GEO_SCANNER = new CustomItem(Material.CLOCK, "&bPortable Geo-Scanner", "", "&rScans a Chunk for natural Resources", "", "&eRight Click&7 to scan"); public static final ItemStack OIL_PUMP = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYWZlMWEwNDBhNDI1ZTMxYTQ2ZDRmOWE5Yjk4MDZmYTJmMGM0N2VlODQ3MTFjYzE5MzJmZDhhYjMyYjJkMDM4In19fQ=="), "&rOil Pump", "", "&7Pumps up Oil and fills it into Buckets", "", "&c&l! &cMake sure to Geo-Scan the Chunk first"); public static final ItemStack BUCKET_OF_OIL = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNmNlMDRiNDFkMTllYzc5MjdmOTgyYTYzYTk0YTNkNzlmNzhlY2VjMzMzNjMwNTFmZGUwODMxYmZhYmRiZCJ9fX0="), "&rBucket of Oil"); public static final ItemStack BUCKET_OF_FUEL = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTg0ZGRjYTc2NjcyNWI4Yjk3NDEzZjI1OWMzZjc2NjgwNzBmNmFlNTU0ODNhOTBjOGU1NTI1Mzk0ZjljMDk5In19fQ=="), "&rBucket of Fuel"); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/ADrill.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/ADrill.java index bc63be588..d3faabb1f 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/ADrill.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/ADrill.java @@ -19,6 +19,7 @@ import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset; import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow; +@Deprecated public abstract class ADrill extends AContainer { 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, 9, 10, 11, 12, 18, 21, 27, 28, 29, 30, 19, 20}; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableGEOScanner.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableGEOScanner.java new file mode 100644 index 000000000..9c6647e44 --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableGEOScanner.java @@ -0,0 +1,30 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.GEO.GEOScanner; +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 PortableGEOScanner extends SimpleSlimefunItem { + + public PortableGEOScanner(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)) { + e.setCancelled(true); + GEOScanner.scanChunk(p, p.getLocation().getChunk()); + return true; + } + return false; + }; + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/GEOScannerBlock.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/GEOScannerBlock.java new file mode 100644 index 000000000..3bb21daa0 --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/GEOScannerBlock.java @@ -0,0 +1,30 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric; + +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.GEO.GEOScanner; +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.api.BlockStorage; + +public class GEOScannerBlock extends SimpleSlimefunItem { + + public GEOScannerBlock(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, id, recipeType, recipe); + } + + @Override + public ItemInteractionHandler getItemHandler() { + return (e, p, stack) -> { + if (e.getClickedBlock() == null) return false; + String item = BlockStorage.checkID(e.getClickedBlock()); + if (item == null || !item.equals("GPS_GEO_SCANNER")) return false; + e.setCancelled(true); + + GEOScanner.scanChunk(p, e.getClickedBlock().getChunk()); + return true; + }; + } +} diff --git a/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java index 195947c07..28bc66dc9 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java @@ -178,7 +178,7 @@ public final class ResearchSetup { Slimefun.registerResearch(new Research(178, "GPS Emergency Waypoint", 30), SlimefunItems.GPS_EMERGENCY_TRANSMITTER); Slimefun.registerResearch(new Research(179, "Programmable Androids", 50), SlimefunItems.PROGRAMMABLE_ANDROID, SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, SlimefunItems.PROGRAMMABLE_ANDROID_BUTCHER, SlimefunItems.PROGRAMMABLE_ANDROID_FISHERMAN, SlimefunItems.PROGRAMMABLE_ANDROID_MINER, SlimefunItems.PROGRAMMABLE_ANDROID_WOODCUTTER); Slimefun.registerResearch(new Research(180, "Android Interfaces", 26), SlimefunItems.ANDROID_INTERFACE_FUEL, SlimefunItems.ANDROID_INTERFACE_ITEMS); - Slimefun.registerResearch(new Research(181, "GEO-Scans", 30), SlimefunItems.GPS_GEO_SCANNER); + Slimefun.registerResearch(new Research(181, "GEO-Scans", 30), SlimefunItems.GPS_GEO_SCANNER, SlimefunItems.PORTABLE_GEO_SCANNER); Slimefun.registerResearch(new Research(182, "Combustion Reactor", 38), SlimefunItems.COMBUSTION_REACTOR); Slimefun.registerResearch(new Research(183, "Teleporter Base Components", 42), SlimefunItems.GPS_TELEPORTATION_MATRIX, SlimefunItems.GPS_TELEPORTER_PYLON); Slimefun.registerResearch(new Research(184, "Teleporter Activation", 36), SlimefunItems.GPS_ACTIVATION_DEVICE_PERSONAL, SlimefunItems.GPS_ACTIVATION_DEVICE_SHARED); diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index bdbfcc62c..2caf877e5 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -93,6 +93,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MonsterJerky; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfContainment; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfTheSeeker; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfVeinMining; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PortableGEOScanner; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SeismicAxe; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SmeltersPickaxe; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SoulboundRune; @@ -131,6 +132,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.FluidPum import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.FoodComposter; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.FoodFabricator; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.Freezer; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.GEOScannerBlock; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.GPSTransmitter; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.HeatedPressureChamber; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.NetherDrill; @@ -2302,7 +2304,7 @@ public final class SlimefunSetup { }); new SlimefunItem(Categories.GPS, SlimefunItems.GPS_MARKER_TOOL, "GPS_MARKER_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, new ItemStack(Material.LAPIS_LAZULI), SlimefunItems.BASIC_CIRCUIT_BOARD, new ItemStack(Material.LAPIS_LAZULI), new ItemStack(Material.REDSTONE), SlimefunItems.REDSTONE_ALLOY, new ItemStack(Material.REDSTONE)}) + new ItemStack[] {null, SlimefunItems.ELECTRO_MAGNET, null, new ItemStack(Material.LAPIS_LAZULI), SlimefunItems.BASIC_CIRCUIT_BOARD, new ItemStack(Material.LAPIS_LAZULI), new ItemStack(Material.REDSTONE), SlimefunItems.REDSTONE_ALLOY, new ItemStack(Material.REDSTONE)}) .register(true); new SlimefunItem(Categories.GPS, SlimefunItems.GPS_EMERGENCY_TRANSMITTER, "GPS_EMERGENCY_TRANSMITTER", RecipeType.ENHANCED_CRAFTING_TABLE, @@ -2706,23 +2708,14 @@ public final class SlimefunSetup { new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.LEAD_INGOT, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.HARDENED_GLASS, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.LEAD_INGOT, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.LEAD_INGOT}, new CustomItem(SlimefunItems.WITHER_PROOF_GLASS, 4)) .register(true); - - - new SlimefunItem(Categories.GPS, SlimefunItems.GPS_GEO_SCANNER, "GPS_GEO_SCANNER", RecipeType.ENHANCED_CRAFTING_TABLE, + + new GEOScannerBlock(Categories.GPS, SlimefunItems.GPS_GEO_SCANNER, "GPS_GEO_SCANNER", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, null, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET}) - .register(true, 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("GPS_GEO_SCANNER")) return false; - e.setCancelled(true); - - Slimefun.getGPSNetwork().scanChunk(p, e.getClickedBlock().getChunk()); - return true; - } - }); + .register(true); + + new PortableGEOScanner(Categories.GPS, SlimefunItems.PORTABLE_GEO_SCANNER, "PORTABLE_GEO_SCANNER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.ELECTRO_MAGNET, new ItemStack(Material.COMPASS), SlimefunItems.ELECTRO_MAGNET, SlimefunItems.STEEL_INGOT, SlimefunItems.GPS_MARKER_TOOL, SlimefunItems.STEEL_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.SOLDER_INGOT}) + .register(true); new OilPump(Categories.GPS, SlimefunItems.OIL_PUMP, "OIL_PUMP", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.STEEL_INGOT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_INGOT, null, new ItemStack(Material.BUCKET), null}) { @@ -2741,6 +2734,7 @@ public final class SlimefunSetup { new NetherDrill(Categories.GPS, SlimefunItems.NETHER_DRILL, "NETHER_DRILL", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[]{SlimefunItems.LEAD_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.LEAD_INGOT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.OIL_PUMP, SlimefunItems.REINFORCED_PLATE, SlimefunItems.LEAD_INGOT, SlimefunItems.BIG_CAPACITOR, SlimefunItems.LEAD_INGOT}){ + @Override public int getSpeed() { return 1; @@ -2750,6 +2744,7 @@ public final class SlimefunSetup { public int getEnergyConsumption() { return 51; } + }.registerChargeableBlock(true, 1024); new SlimefunItem(Categories.RESOURCES, SlimefunItems.BUCKET_OF_OIL, "BUCKET_OF_OIL", new RecipeType(SlimefunItems.OIL_PUMP), diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java b/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java index bcfafe89e..fd0bbed7b 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunPlugin.java @@ -23,6 +23,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Reflection.ReflectionUtils; import me.mrCookieSlime.Slimefun.GEO.OreGenSystem; import me.mrCookieSlime.Slimefun.GEO.resources.NetherIceResource; import me.mrCookieSlime.Slimefun.GEO.resources.OilResource; +import me.mrCookieSlime.Slimefun.GEO.resources.UraniumResource; import me.mrCookieSlime.Slimefun.GPS.GPSNetwork; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece; @@ -206,6 +207,7 @@ public final class SlimefunPlugin extends JavaPlugin { // Generating Oil as an OreGenResource (its a cool API) OreGenSystem.registerResource(new OilResource()); OreGenSystem.registerResource(new NetherIceResource()); + OreGenSystem.registerResource(new UraniumResource()); // Setting up GitHub Connectors... diff --git a/src/me/mrCookieSlime/Slimefun/utils/Utilities.java b/src/me/mrCookieSlime/Slimefun/utils/Utilities.java index 91547f332..0c7e8bd6c 100644 --- a/src/me/mrCookieSlime/Slimefun/utils/Utilities.java +++ b/src/me/mrCookieSlime/Slimefun/utils/Utilities.java @@ -16,6 +16,7 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; +import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.Slimefun.GEO.OreGenResource; import me.mrCookieSlime.Slimefun.Lists.Categories; import me.mrCookieSlime.Slimefun.Objects.Category; @@ -118,6 +119,7 @@ public final class Utilities { public final Set teleporterUsers = new HashSet<>(); public final Map resources = new HashMap<>(); + public final Map resource_configs = new HashMap<>(); public final Set connectors = new HashSet<>(); public final Map contributorHeads = new HashMap<>();