mirror of
https://github.com/songoda/EpicHoppers.git
synced 2024-11-23 02:35:18 +01:00
Added module saving system.
Autocrafting and blockbreak settings will not be saved.
This commit is contained in:
parent
0f15f9dbfd
commit
6f29eea10c
@ -4,7 +4,7 @@ stages:
|
||||
variables:
|
||||
name: "EpicHoppers"
|
||||
path: "/builds/$CI_PROJECT_PATH"
|
||||
version: "4.0.4"
|
||||
version: "4.1"
|
||||
|
||||
build:
|
||||
stage: build
|
||||
|
@ -9,7 +9,6 @@ import com.songoda.epichoppers.economy.VaultEconomy;
|
||||
import com.songoda.epichoppers.enchantment.Enchantment;
|
||||
import com.songoda.epichoppers.handlers.TeleportHandler;
|
||||
import com.songoda.epichoppers.hopper.Filter;
|
||||
import com.songoda.epichoppers.hopper.Hopper;
|
||||
import com.songoda.epichoppers.hopper.HopperBuilder;
|
||||
import com.songoda.epichoppers.hopper.HopperManager;
|
||||
import com.songoda.epichoppers.hopper.levels.Level;
|
||||
@ -236,6 +235,10 @@ public class EpicHoppers extends JavaPlugin {
|
||||
private void saveToFile() {
|
||||
checkStorage();
|
||||
|
||||
for (Level level : EpicHoppers.getInstance().getLevelManager().getLevels().values())
|
||||
for (Module module : level.getRegisteredModules())
|
||||
module.saveDataToFile();
|
||||
|
||||
storage.doSave();
|
||||
}
|
||||
|
||||
@ -281,14 +284,6 @@ public class EpicHoppers extends JavaPlugin {
|
||||
|
||||
TeleportTrigger teleportTrigger = TeleportTrigger.valueOf(row.get("teleporttrigger").asString() == null ? "DISABLED" : row.get("teleporttrigger").asString());
|
||||
|
||||
String autoCraftingStr = row.get("autocrafting").asString() == null ? "AIR" : row.get("autocrafting").asString();
|
||||
String[] autoCraftingParts = autoCraftingStr.split(":");
|
||||
ItemStack autoCrafting = new ItemStack(Material.valueOf(autoCraftingParts[0]), 1, Short.parseShort(autoCraftingParts.length == 2 ? autoCraftingParts[1] : "0"));
|
||||
|
||||
boolean autoSell = row.get("autosell").asBoolean();
|
||||
|
||||
boolean autoBreak = row.get("autobreak").asBoolean();
|
||||
|
||||
hopperManager.addHopper(new HopperBuilder(location)
|
||||
.setLevel(level)
|
||||
.setLastPlayerOpened(lastPlayer)
|
||||
@ -296,9 +291,6 @@ public class EpicHoppers extends JavaPlugin {
|
||||
.addLinkedBlocks(blocks.toArray(new Location[0]))
|
||||
.setFilter(filter)
|
||||
.setTeleportTrigger(teleportTrigger)
|
||||
.setAutoCrafting(autoCrafting)
|
||||
.setAutoSelling(autoSell)
|
||||
.setAutoBreaking(autoBreak)
|
||||
.build());
|
||||
}
|
||||
}
|
||||
@ -351,17 +343,17 @@ public class EpicHoppers extends JavaPlugin {
|
||||
|
||||
for (String key : levels.getKeys(false)) {
|
||||
if (key.equals("Suction") && levels.getInt("Suction") != 0) {
|
||||
modules.add(new ModuleSuction(levels.getInt("Suction")));
|
||||
modules.add(new ModuleSuction(this, levels.getInt("Suction")));
|
||||
} else if (key.equals("BlockBreak") && levels.getInt("BlockBreak") != 0) {
|
||||
modules.add(new ModuleBlockBreak(levels.getInt("BlockBreak")));
|
||||
modules.add(new ModuleBlockBreak(this, levels.getInt("BlockBreak")));
|
||||
} else if (key.equals("AutoCrafting")) {
|
||||
modules.add(new ModuleAutoCrafting());
|
||||
modules.add(new ModuleAutoCrafting(this));
|
||||
} else if (key.equals("AutoSell")) {
|
||||
modules.add(new ModuleAutoSell(autoSell));
|
||||
modules.add(new ModuleAutoSell(this, autoSell));
|
||||
}
|
||||
|
||||
}
|
||||
levelManager.addLevel(level, costExperiance, costEconomy, radius, amount, filter, teleport, linkAmount, autoSell, modules);
|
||||
levelManager.addLevel(level, costExperiance, costEconomy, radius, amount, filter, teleport, linkAmount, modules);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@ package com.songoda.epichoppers.gui;
|
||||
|
||||
import com.songoda.epichoppers.EpicHoppers;
|
||||
import com.songoda.epichoppers.hopper.Hopper;
|
||||
import com.songoda.epichoppers.hopper.levels.modules.ModuleAutoCrafting;
|
||||
import com.songoda.epichoppers.utils.Methods;
|
||||
import com.songoda.epichoppers.utils.gui.AbstractGUI;
|
||||
import com.songoda.epichoppers.utils.gui.Range;
|
||||
@ -13,11 +14,13 @@ public class GUICrafting extends AbstractGUI {
|
||||
|
||||
private final EpicHoppers plugin;
|
||||
private final Hopper hopper;
|
||||
private final ModuleAutoCrafting module;
|
||||
|
||||
public GUICrafting(EpicHoppers plugin, Hopper hopper, Player player) {
|
||||
public GUICrafting(EpicHoppers plugin, ModuleAutoCrafting autoCrafting, Hopper hopper, Player player) {
|
||||
super(player);
|
||||
this.plugin = plugin;
|
||||
this.hopper = hopper;
|
||||
this.module = autoCrafting;
|
||||
|
||||
init(Methods.formatName(hopper.getLevel().getLevel(), false) + " &8-&f Crafting", 27);
|
||||
}
|
||||
@ -48,7 +51,8 @@ public class GUICrafting extends AbstractGUI {
|
||||
inventory.setItem(25, Methods.getBackgroundGlass(true));
|
||||
inventory.setItem(26, Methods.getBackgroundGlass(true));
|
||||
|
||||
inventory.setItem(13, hopper.getAutoCrafting() == null ? new ItemStack(Material.AIR) : hopper.getAutoCrafting());
|
||||
inventory.setItem(13, module.getAutoCrafting(hopper) == null
|
||||
? new ItemStack(Material.AIR) : module.getAutoCrafting(hopper));
|
||||
|
||||
addDraggable(new Range(13, 13, null, false), true);
|
||||
}
|
||||
@ -60,7 +64,6 @@ public class GUICrafting extends AbstractGUI {
|
||||
@Override
|
||||
protected void registerOnCloses() {
|
||||
registerOnClose(((player, inventory) ->
|
||||
hopper.setAutoCrafting(player, inventory.getItem(13))));
|
||||
|
||||
module.setAutoCrafting(hopper, player, inventory.getItem(13))));
|
||||
}
|
||||
}
|
||||
|
@ -8,18 +8,11 @@ import com.songoda.epichoppers.utils.CostType;
|
||||
import com.songoda.epichoppers.utils.Methods;
|
||||
import com.songoda.epichoppers.utils.ServerVersion;
|
||||
import com.songoda.epichoppers.utils.TeleportTrigger;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Created by songoda on 3/14/2017.
|
||||
@ -33,11 +26,10 @@ public class Hopper {
|
||||
private List<Location> linkedBlocks = new ArrayList<>();
|
||||
private Filter filter = new Filter();
|
||||
private TeleportTrigger teleportTrigger = TeleportTrigger.DISABLED;
|
||||
private ItemStack autoCrafting = null;
|
||||
private int autoSellTimer = -9999;
|
||||
private boolean autoBreaking = false;
|
||||
private int transferTick = 0;
|
||||
|
||||
private Map<String, Object> moduleCache = new HashMap<>();
|
||||
|
||||
public Hopper(Location location) {
|
||||
this.location = location;
|
||||
}
|
||||
@ -173,7 +165,7 @@ public class Hopper {
|
||||
/**
|
||||
* Ticks a hopper to determine when it can transfer items next
|
||||
*
|
||||
* @param maxTick The maximum amount the hopper can be ticked before next transferring items
|
||||
* @param maxTick The maximum amount the hopper can be ticked before next transferring items
|
||||
* @param allowLooping If true, the hopper is allowed to transfer items if the tick is also valid
|
||||
* @return true if the hopper should transfer an item, otherwise false
|
||||
*/
|
||||
@ -234,27 +226,6 @@ public class Hopper {
|
||||
lastPlayerOpened = uuid;
|
||||
}
|
||||
|
||||
public ItemStack getAutoCrafting() {
|
||||
return autoCrafting;
|
||||
}
|
||||
|
||||
public void setAutoCrafting(ItemStack autoCrafting) {
|
||||
this.autoCrafting = autoCrafting;
|
||||
}
|
||||
|
||||
public void setAutoCrafting(Player player, ItemStack autoCrafting) {
|
||||
this.autoCrafting = autoCrafting;
|
||||
if (autoCrafting != null) {
|
||||
int excess = autoCrafting.getAmount() - 1;
|
||||
autoCrafting.setAmount(1);
|
||||
if (excess > 0 && player != null) {
|
||||
ItemStack item = autoCrafting.clone();
|
||||
item.setAmount(excess);
|
||||
player.getInventory().addItem(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public TeleportTrigger getTeleportTrigger() {
|
||||
return teleportTrigger;
|
||||
}
|
||||
@ -264,26 +235,6 @@ public class Hopper {
|
||||
this.teleportTrigger = teleportTrigger;
|
||||
}
|
||||
|
||||
public int getAutoSellTimer() {
|
||||
return autoSellTimer;
|
||||
}
|
||||
|
||||
public void setAutoSellTimer(int autoSellTimer) {
|
||||
this.autoSellTimer = autoSellTimer;
|
||||
}
|
||||
|
||||
public boolean isAutoBreaking() {
|
||||
return autoBreaking;
|
||||
}
|
||||
|
||||
public void setAutoBreaking(boolean autoBreaking) {
|
||||
this.autoBreaking = autoBreaking;
|
||||
}
|
||||
|
||||
public void toggleAutoBreaking() {
|
||||
this.autoBreaking = !autoBreaking;
|
||||
}
|
||||
|
||||
public List<Location> getLinkedBlocks() {
|
||||
return new ArrayList<>(linkedBlocks);
|
||||
}
|
||||
@ -307,4 +258,24 @@ public class Hopper {
|
||||
public void setFilter(Filter filter) {
|
||||
this.filter = filter;
|
||||
}
|
||||
|
||||
public Object getDataFromModuleCache(String key) {
|
||||
return this.moduleCache.getOrDefault(key, null);
|
||||
}
|
||||
|
||||
public void addDataToModuleCache(String key, Object data) {
|
||||
this.moduleCache.put(key, data);
|
||||
}
|
||||
|
||||
public boolean isDataCachedInModuleCache(String key) {
|
||||
return this.moduleCache.containsKey(key);
|
||||
}
|
||||
|
||||
public void removeDataFromModuleCache(String key) {
|
||||
this.moduleCache.remove(key);
|
||||
}
|
||||
|
||||
public void clearModuleCache() {
|
||||
this.moduleCache.clear();
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,6 @@ import com.songoda.epichoppers.utils.TeleportTrigger;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
@ -61,21 +60,6 @@ public class HopperBuilder {
|
||||
return this;
|
||||
}
|
||||
|
||||
public HopperBuilder setAutoCrafting(ItemStack autoCrafting) {
|
||||
this.hopper.setAutoCrafting(autoCrafting);
|
||||
return this;
|
||||
}
|
||||
|
||||
public HopperBuilder setAutoSelling(boolean autoSelling) {
|
||||
this.hopper.setAutoSellTimer(autoSelling ? 0 : -9999);
|
||||
return this;
|
||||
}
|
||||
|
||||
public HopperBuilder setAutoBreaking(boolean autoBreaking) {
|
||||
this.hopper.setAutoBreaking(autoBreaking);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Hopper build() {
|
||||
return this.hopper;
|
||||
}
|
||||
|
@ -1,5 +1,8 @@
|
||||
package com.songoda.epichoppers.hopper;
|
||||
|
||||
import com.songoda.epichoppers.EpicHoppers;
|
||||
import com.songoda.epichoppers.hopper.levels.Level;
|
||||
import com.songoda.epichoppers.hopper.levels.modules.Module;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -33,6 +36,10 @@ public class HopperManager {
|
||||
for (Hopper hopper : this.registeredHoppers.values())
|
||||
hopper.removeLinkedBlock(location);
|
||||
|
||||
for (Level level : EpicHoppers.getInstance().getLevelManager().getLevels().values())
|
||||
for (Module module : level.getRegisteredModules())
|
||||
module.clearData(removed);
|
||||
|
||||
return removed;
|
||||
}
|
||||
|
||||
|
@ -10,10 +10,10 @@ public class Level {
|
||||
|
||||
private final ArrayList<Module> registeredModules;
|
||||
private final List<String> description = new ArrayList<>();
|
||||
private int level, costExperience, costEconomy, range, amount, linkAmount, autoSell;
|
||||
private int level, costExperience, costEconomy, range, amount, linkAmount;
|
||||
private boolean filter, teleport;
|
||||
|
||||
Level(int level, int costExperience, int costEconomy, int range, int amount, boolean filter, boolean teleport, int linkAmount, int autoSell, ArrayList<Module> registeredModules) {
|
||||
Level(int level, int costExperience, int costEconomy, int range, int amount, boolean filter, boolean teleport, int linkAmount, ArrayList<Module> registeredModules) {
|
||||
this.level = level;
|
||||
this.costExperience = costExperience;
|
||||
this.costEconomy = costEconomy;
|
||||
@ -22,7 +22,6 @@ public class Level {
|
||||
this.filter = filter;
|
||||
this.teleport = teleport;
|
||||
this.linkAmount = linkAmount;
|
||||
this.autoSell = autoSell;
|
||||
this.registeredModules = registeredModules;
|
||||
|
||||
buildDescription();
|
||||
@ -74,11 +73,6 @@ public class Level {
|
||||
}
|
||||
|
||||
|
||||
public int getAutoSell() {
|
||||
return autoSell;
|
||||
}
|
||||
|
||||
|
||||
public int getLinkAmount() {
|
||||
return linkAmount;
|
||||
}
|
||||
|
@ -11,8 +11,8 @@ public class LevelManager {
|
||||
private final NavigableMap<Integer, Level> registeredLevels = new TreeMap<>();
|
||||
|
||||
|
||||
public void addLevel(int level, int costExperience, int costEconomy, int range, int amount, boolean filter, boolean teleport, int linkAmount, int autoSell, ArrayList<Module> modules) {
|
||||
registeredLevels.put(level, new Level(level, costExperience, costEconomy, range, amount, filter, teleport, linkAmount, autoSell, modules));
|
||||
public void addLevel(int level, int costExperience, int costEconomy, int range, int amount, boolean filter, boolean teleport, int linkAmount, ArrayList<Module> modules) {
|
||||
registeredLevels.put(level, new Level(level, costExperience, costEconomy, range, amount, filter, teleport, linkAmount, modules));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,25 +1,70 @@
|
||||
package com.songoda.epichoppers.hopper.levels.modules;
|
||||
|
||||
import com.songoda.epichoppers.EpicHoppers;
|
||||
import com.songoda.epichoppers.hopper.Hopper;
|
||||
import com.songoda.epichoppers.utils.ConfigWrapper;
|
||||
import com.songoda.epichoppers.utils.Methods;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface Module {
|
||||
public abstract class Module {
|
||||
|
||||
String getName();
|
||||
protected final EpicHoppers plugin;
|
||||
private ConfigWrapper config;
|
||||
|
||||
void run(Hopper hopper, Inventory hopperInventory);
|
||||
public Module(EpicHoppers plugin) {
|
||||
this.plugin = plugin;
|
||||
this.config = new ConfigWrapper(plugin, File.separator + "modules", getName() + ".yml");
|
||||
}
|
||||
|
||||
ItemStack getGUIButton(Hopper hopper);
|
||||
abstract String getName();
|
||||
|
||||
void runButtonPress(Player player, Hopper hopper);
|
||||
public abstract void run(Hopper hopper, Inventory hopperInventory);
|
||||
|
||||
List<Material> getBlockedItems(Hopper hopper);
|
||||
public abstract ItemStack getGUIButton(Hopper hopper);
|
||||
|
||||
String getDescription();
|
||||
public abstract void runButtonPress(Player player, Hopper hopper);
|
||||
|
||||
public abstract List<Material> getBlockedItems(Hopper hopper);
|
||||
|
||||
public abstract String getDescription();
|
||||
|
||||
public void saveData(Hopper hopper, String setting, Object value) {
|
||||
saveData(hopper, setting, value, value);
|
||||
}
|
||||
|
||||
public void saveData(Hopper hopper, String setting, Object value, Object toCache) {
|
||||
config.getConfig().set("data." + Methods.serializeLocation(hopper.getLocation()) + "." + setting, value);
|
||||
modifyDataCache(hopper, setting, toCache);
|
||||
}
|
||||
|
||||
public void modifyDataCache(Hopper hopper, String setting, Object value) {
|
||||
hopper.addDataToModuleCache(setting, value);
|
||||
}
|
||||
|
||||
protected Object getData(Hopper hopper, String setting) {
|
||||
if (hopper.isDataCachedInModuleCache(setting))
|
||||
return hopper.getDataFromModuleCache(setting);
|
||||
|
||||
Object data = config.getConfig().get("data." + Methods.serializeLocation(hopper.getLocation()) + "." + setting);
|
||||
modifyDataCache(hopper, setting, data);
|
||||
return data;
|
||||
}
|
||||
|
||||
public void clearData(Hopper hopper) {
|
||||
config.getConfig().set("data." + Methods.serializeLocation(hopper.getLocation()), null);
|
||||
hopper.clearModuleCache();
|
||||
}
|
||||
|
||||
public void saveDataToFile() {
|
||||
config.saveConfig();
|
||||
}
|
||||
}
|
||||
|
@ -8,11 +8,7 @@ import com.songoda.epichoppers.utils.ServerVersion;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.Recipe;
|
||||
import org.bukkit.inventory.ShapedRecipe;
|
||||
import org.bukkit.inventory.ShapelessRecipe;
|
||||
import org.bukkit.inventory.*;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -20,25 +16,29 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class ModuleAutoCrafting implements Module {
|
||||
public class ModuleAutoCrafting extends Module {
|
||||
|
||||
private final Map<ItemStack, Recipes> cachedRecipes = new HashMap<>();
|
||||
|
||||
public ModuleAutoCrafting(EpicHoppers plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "AutoCrafting";
|
||||
}
|
||||
|
||||
public void run(Hopper hopper, Inventory hopperInventory) {
|
||||
if (hopper.getAutoCrafting() == null
|
||||
if (getAutoCrafting(hopper) == null
|
||||
|| hopperInventory == null
|
||||
|| hopperInventory.getSize() == 0
|
||||
|| !canMove(hopperInventory, new ItemStack(hopper.getAutoCrafting()))
|
||||
|| cachedRecipes.get(hopper.getAutoCrafting()) == null)
|
||||
|| !canMove(hopperInventory, new ItemStack(getAutoCrafting(hopper)))
|
||||
|| cachedRecipes.get(getAutoCrafting(hopper)) == null)
|
||||
return;
|
||||
|
||||
top:
|
||||
for (Recipe recipe : cachedRecipes.get(hopper.getAutoCrafting()).getRecipes()) {
|
||||
for (Recipe recipe : cachedRecipes.get(getAutoCrafting(hopper)).getRecipes()) {
|
||||
if (!(recipe instanceof ShapedRecipe) && !(recipe instanceof ShapelessRecipe))
|
||||
continue;
|
||||
|
||||
@ -113,14 +113,15 @@ public class ModuleAutoCrafting implements Module {
|
||||
|
||||
@Override
|
||||
public void runButtonPress(Player player, Hopper hopper) {
|
||||
new GUICrafting(EpicHoppers.getInstance(), hopper, player);
|
||||
new GUICrafting(EpicHoppers.getInstance(), this, hopper, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Material> getBlockedItems(Hopper hopper) {
|
||||
List<Material> materials = new ArrayList<>();
|
||||
if (hopper.getAutoCrafting() != null) {
|
||||
if (getAutoCrafting(hopper) != null) {
|
||||
|
||||
ItemStack itemStack = hopper.getAutoCrafting();
|
||||
ItemStack itemStack = getAutoCrafting(hopper);
|
||||
|
||||
if (itemStack.getType() == Material.AIR)
|
||||
return materials;
|
||||
@ -157,7 +158,36 @@ public class ModuleAutoCrafting implements Module {
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return EpicHoppers.getInstance().getLocale().getMessage("interface.hopper.crafting", EpicHoppers.getInstance().getLocale().getMessage("general.word.enabled"));
|
||||
return EpicHoppers.getInstance().getLocale().getMessage("interface.hopper.crafting",
|
||||
EpicHoppers.getInstance().getLocale().getMessage("general.word.enabled"));
|
||||
}
|
||||
|
||||
public ItemStack getAutoCrafting(Hopper hopper) {
|
||||
Object autocrafting = getData(hopper, "autocrafting");
|
||||
return autocrafting instanceof ItemStack ? (ItemStack) autocrafting : decode((String) autocrafting);
|
||||
}
|
||||
|
||||
public void setAutoCrafting(Hopper hopper, Player player, ItemStack autoCrafting) {
|
||||
saveData(hopper, "autocrafting", encode(autoCrafting), autoCrafting);
|
||||
int excess = autoCrafting.getAmount() - 1;
|
||||
autoCrafting.setAmount(1);
|
||||
if (excess > 0 && player != null) {
|
||||
ItemStack item = autoCrafting.clone();
|
||||
item.setAmount(excess);
|
||||
player.getInventory().addItem(item);
|
||||
}
|
||||
}
|
||||
|
||||
public String encode(ItemStack item) {
|
||||
return item.getType() == Material.AIR ? null : item.getType().name()
|
||||
+ (item.getDurability() == 0 ? "" : ":" + item.getDurability());
|
||||
}
|
||||
|
||||
public ItemStack decode(String string) {
|
||||
String autoCraftingStr = string == null ? "AIR" : string;
|
||||
String[] autoCraftingParts = autoCraftingStr.split(":");
|
||||
return new ItemStack(Material.valueOf(autoCraftingParts[0]),
|
||||
1, Short.parseShort(autoCraftingParts.length == 2 ? autoCraftingParts[1] : "0"));
|
||||
}
|
||||
|
||||
private boolean canMove(Inventory inventory, ItemStack item) {
|
||||
|
@ -17,29 +17,33 @@ import org.bukkit.inventory.meta.ItemMeta;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ModuleAutoSell implements Module {
|
||||
public class ModuleAutoSell extends Module {
|
||||
|
||||
private int timeOut;
|
||||
private int hopperTickRate;
|
||||
|
||||
public ModuleAutoSell(int timeOut) {
|
||||
public ModuleAutoSell(EpicHoppers plugin, int timeOut) {
|
||||
super(plugin);
|
||||
EpicHoppers instance = EpicHoppers.getInstance();
|
||||
this.timeOut = timeOut * 20;
|
||||
this.hopperTickRate = (int) instance.getConfig().getLong("Main.Amount of Ticks Between Hops");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "AutoSell";
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void run(Hopper hopper, Inventory hopperInventory) {
|
||||
if (hopperInventory == null) return;
|
||||
|
||||
if (hopper.getAutoSellTimer() == -9999) return;
|
||||
int currentTime = getTime(hopper);
|
||||
|
||||
if (hopper.getAutoSellTimer() <= 0) {
|
||||
if (currentTime == -9999) return;
|
||||
|
||||
if (currentTime <= 0) {
|
||||
EpicHoppers instance = EpicHoppers.getInstance();
|
||||
|
||||
if (instance.getEconomy() == null) return;
|
||||
@ -59,7 +63,7 @@ public class ModuleAutoSell implements Module {
|
||||
ItemStack clone = itemStack.clone();
|
||||
clone.setAmount(1);
|
||||
value = net.brcdev.shopgui.ShopGuiPlusApi.getItemStackPriceSell(player.getPlayer(), clone);
|
||||
} catch (Exception e){
|
||||
} catch (Exception e) {
|
||||
value = 0;
|
||||
}
|
||||
} else
|
||||
@ -68,27 +72,27 @@ public class ModuleAutoSell implements Module {
|
||||
|
||||
if (value == 0) continue;
|
||||
|
||||
instance.getEconomy().deposit(player, value * itemStack.getAmount());
|
||||
instance.getEconomy().deposit(player, value * itemStack.getAmount());
|
||||
hopperInventory.removeItem(itemStack);
|
||||
|
||||
updateComparators = true;
|
||||
}
|
||||
hopper.setAutoSellTimer(timeOut);
|
||||
modifyDataCache(hopper, "time", timeOut);
|
||||
|
||||
if (updateComparators)
|
||||
HopTask.updateAdjacentComparators(hopper.getLocation());
|
||||
}
|
||||
hopper.setAutoSellTimer(hopper.getAutoSellTimer() - hopperTickRate);
|
||||
modifyDataCache(hopper, "time", getTime(hopper) - hopperTickRate);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ItemStack getGUIButton(Hopper hopper) {
|
||||
Hopper eHopper = hopper;
|
||||
ItemStack sell = new ItemStack(EpicHoppers.getInstance().isServerVersionAtLeast(ServerVersion.V1_13) ? Material.SUNFLOWER : Material.valueOf("DOUBLE_PLANT"), 1);
|
||||
ItemMeta sellmeta = sell.getItemMeta();
|
||||
sellmeta.setDisplayName(EpicHoppers.getInstance().getLocale().getMessage("interface.hopper.selltitle"));
|
||||
ArrayList<String> loresell = new ArrayList<>();
|
||||
String[] parts = EpicHoppers.getInstance().getLocale().getMessage("interface.hopper.selllore", eHopper.getAutoSellTimer() == -9999 ? "\u221E" : (int) Math.floor(eHopper.getAutoSellTimer() / 20)).split("\\|");
|
||||
String[] parts = EpicHoppers.getInstance().getLocale().getMessage("interface.hopper.selllore", getTime(hopper) == -9999 ? "\u221E" : (int) Math.floor(getTime(hopper) / 20)).split("\\|");
|
||||
for (String line : parts) {
|
||||
loresell.add(Methods.formatText(line));
|
||||
}
|
||||
@ -97,23 +101,28 @@ public class ModuleAutoSell implements Module {
|
||||
return sell;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void runButtonPress(Player player, Hopper hopper) {
|
||||
Hopper eHopper = hopper;
|
||||
if (eHopper.getAutoSellTimer() == -9999) {
|
||||
eHopper.setAutoSellTimer(0);
|
||||
if (getTime(hopper) == -9999) {
|
||||
saveData(hopper, "time", 0);
|
||||
} else {
|
||||
eHopper.setAutoSellTimer(-9999);
|
||||
saveData(hopper, "time", -9999);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<Material> getBlockedItems(Hopper hopper) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return EpicHoppers.getInstance().getLocale().getMessage("interface.hopper.autosell", (int) Math.floor(timeOut / 20));
|
||||
}
|
||||
|
||||
public int getTime(Hopper hopper) {
|
||||
Object time = getData(hopper, "time");
|
||||
if (time == null) return -9999;
|
||||
return (int) time;
|
||||
}
|
||||
}
|
||||
|
@ -20,25 +20,26 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class ModuleBlockBreak implements Module {
|
||||
public class ModuleBlockBreak extends Module {
|
||||
|
||||
private final int amount;
|
||||
private Map<Block, Integer> blockTick = new HashMap<>();
|
||||
|
||||
public ModuleBlockBreak(int amount) {
|
||||
public ModuleBlockBreak(EpicHoppers plugin, int amount) {
|
||||
super(plugin);
|
||||
this.amount = amount;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "BlockBreak";
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void run(Hopper hopper, Inventory hopperInventory) {
|
||||
Block block = hopper.getLocation().getBlock();
|
||||
|
||||
if (!hopper.isAutoBreaking())
|
||||
if (!isEnabled(hopper))
|
||||
return;
|
||||
|
||||
if (!blockTick.containsKey(block)) {
|
||||
@ -59,11 +60,11 @@ public class ModuleBlockBreak implements Module {
|
||||
return;
|
||||
|
||||
// Don't break farm items from EpicFarming
|
||||
if (EpicHoppers.getInstance().isEpicFarming() && com.songoda.epicfarming.EpicFarmingPlugin.getInstance().getFarmManager().getFarm(above) != null)
|
||||
if (plugin.isEpicFarming() && com.songoda.epicfarming.EpicFarmingPlugin.getInstance().getFarmManager().getFarm(above) != null)
|
||||
return;
|
||||
|
||||
if (!EpicHoppers.getInstance().getConfig().getStringList("Main.BlockBreak Blacklisted Blocks").contains(above.getType().name())) {
|
||||
if (EpicHoppers.getInstance().isServerVersionAtLeast(ServerVersion.V1_9))
|
||||
if (!plugin.getConfig().getStringList("Main.BlockBreak Blacklisted Blocks").contains(above.getType().name())) {
|
||||
if (plugin.isServerVersionAtLeast(ServerVersion.V1_9))
|
||||
above.getWorld().playSound(above.getLocation(), Sound.BLOCK_STONE_BREAK, 1F, 1F);
|
||||
Location locationAbove = above.getLocation();
|
||||
locationAbove.add(.5, .5, .5);
|
||||
@ -71,11 +72,11 @@ public class ModuleBlockBreak implements Module {
|
||||
float xx = (float) (0 + (Math.random() * .5));
|
||||
float yy = (float) (0 + (Math.random() * .5));
|
||||
float zz = (float) (0 + (Math.random() * .5));
|
||||
if (EpicHoppers.getInstance().isServerVersionAtLeast(ServerVersion.V1_9))
|
||||
above.getWorld().spawnParticle(Particle.valueOf(EpicHoppers.getInstance().getConfig().getString("Main.BlockBreak Particle Type")), locationAbove, 15, xx, yy, zz);
|
||||
if (plugin.isServerVersionAtLeast(ServerVersion.V1_9))
|
||||
above.getWorld().spawnParticle(Particle.valueOf(plugin.getConfig().getString("Main.BlockBreak Particle Type")), locationAbove, 15, xx, yy, zz);
|
||||
|
||||
boolean waterlogged = false;
|
||||
if (EpicHoppers.getInstance().isServerVersionAtLeast(ServerVersion.V1_13)
|
||||
if (plugin.isServerVersionAtLeast(ServerVersion.V1_13)
|
||||
&& above.getBlockData() instanceof org.bukkit.block.data.Waterlogged
|
||||
&& ((org.bukkit.block.data.Waterlogged)above.getBlockData()).isWaterlogged()) {
|
||||
waterlogged = true;
|
||||
@ -89,15 +90,15 @@ public class ModuleBlockBreak implements Module {
|
||||
blockTick.remove(block);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ItemStack getGUIButton(Hopper hopper) {
|
||||
ItemStack block = new ItemStack(Material.IRON_ORE, 1);
|
||||
ItemMeta blockmeta = block.getItemMeta();
|
||||
blockmeta.setDisplayName(EpicHoppers.getInstance().getLocale().getMessage("interface.hopper.blocktitle"));
|
||||
blockmeta.setDisplayName(plugin.getLocale().getMessage("interface.hopper.blocktitle"));
|
||||
ArrayList<String> loreblock = new ArrayList<>();
|
||||
String[] parts = EpicHoppers.getInstance().getLocale().getMessage("interface.hopper.blocklore",
|
||||
hopper.isAutoBreaking() ? EpicHoppers.getInstance().getLocale().getMessage("general.word.enabled")
|
||||
: EpicHoppers.getInstance().getLocale().getMessage("general.word.disabled")).split("\\|");
|
||||
String[] parts = plugin.getLocale().getMessage("interface.hopper.blocklore",
|
||||
isEnabled(hopper) ? plugin.getLocale().getMessage("general.word.enabled")
|
||||
: plugin.getLocale().getMessage("general.word.disabled")).split("\\|");
|
||||
for (String line : parts) {
|
||||
loreblock.add(Methods.formatText(line));
|
||||
}
|
||||
@ -106,18 +107,23 @@ public class ModuleBlockBreak implements Module {
|
||||
return block;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void runButtonPress(Player player, Hopper hopper) {
|
||||
hopper.toggleAutoBreaking();
|
||||
saveData(hopper,"blockbreak", !isEnabled(hopper));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<Material> getBlockedItems(Hopper hopper) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return EpicHoppers.getInstance().getLocale().getMessage("interface.hopper.blockbreak", amount);
|
||||
return plugin.getLocale().getMessage("interface.hopper.blockbreak", amount);
|
||||
}
|
||||
|
||||
public boolean isEnabled(Hopper hopper) {
|
||||
Object isBlockBreaking = getData(hopper, "blockbreak");
|
||||
return isBlockBreaking != null && (boolean) isBlockBreaking;
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class ModuleSuction implements Module {
|
||||
public class ModuleSuction extends Module {
|
||||
|
||||
private final int amount;
|
||||
|
||||
@ -30,16 +30,17 @@ public class ModuleSuction implements Module {
|
||||
private boolean wildStacker = Bukkit.getPluginManager().isPluginEnabled("WildStacker");
|
||||
private boolean ultimateStacker = Bukkit.getPluginManager().isPluginEnabled("UltimateStacker");
|
||||
|
||||
public ModuleSuction(int amount) {
|
||||
public ModuleSuction(EpicHoppers plugin, int amount) {
|
||||
super(plugin);
|
||||
this.amount = amount;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Suction";
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void run(Hopper hopper, Inventory hopperInventory) {
|
||||
double radius = amount + .5;
|
||||
|
||||
@ -96,19 +97,20 @@ public class ModuleSuction implements Module {
|
||||
return blacklist.contains(uuid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getGUIButton(Hopper hopper) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void runButtonPress(Player player, Hopper hopper) {
|
||||
|
||||
}
|
||||
@Override
|
||||
public void runButtonPress(Player player, Hopper hopper) { }
|
||||
|
||||
@Override
|
||||
public List<Material> getBlockedItems(Hopper hopper) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return EpicHoppers.getInstance().getLocale().getMessage("interface.hopper.suction", amount);
|
||||
}
|
||||
|
@ -46,11 +46,9 @@ public abstract class Storage {
|
||||
new StorageItem("player", hopper.getLastPlayerOpened() == null ? null : hopper.getLastPlayerOpened().toString()),
|
||||
new StorageItem("teleporttrigger", hopper.getTeleportTrigger().toString()),
|
||||
|
||||
new StorageItem("autocrafting", hopper.getAutoCrafting() == null || hopper.getAutoCrafting().getType() == Material.AIR ? null : hopper.getAutoCrafting().getType().name() + (hopper.getAutoCrafting().getDurability() == 0 ? "" : ":" + hopper.getAutoCrafting().getDurability())), new StorageItem("whitelist", hopper.getFilter().getWhiteList()),
|
||||
new StorageItem("whitelist", hopper.getFilter().getWhiteList()),
|
||||
new StorageItem("blacklist", hopper.getFilter().getBlackList()),
|
||||
new StorageItem("void", hopper.getFilter().getVoidList()),
|
||||
new StorageItem("autobreak", hopper.isAutoBreaking()),
|
||||
new StorageItem("autosell", hopper.getAutoSellTimer() != -9999),
|
||||
new StorageItem("black", hopper.getFilter().getEndPoint() == null ? null : Methods.serializeLocation(hopper.getFilter().getEndPoint())));
|
||||
}
|
||||
|
||||
|
@ -30,13 +30,10 @@ public class MySQLDatabase {
|
||||
"\t`placedby` TEXT NULL,\n" +
|
||||
"\t`player` TEXT NULL,\n" +
|
||||
"\t`teleporttrigger` TEXT NULL,\n" +
|
||||
"\t`autocrafting` TEXT NULL,\n" +
|
||||
"\t`autosell` TEXT NULL,\n" +
|
||||
"\t`whitelist` TEXT NULL,\n" +
|
||||
"\t`blacklist` TEXT NULL,\n" +
|
||||
"\t`void` TEXT NULL,\n" +
|
||||
"\t`black` TEXT NULL,\n" +
|
||||
"\t`autobreak` TINYINT(1) NULL\n" +
|
||||
")");
|
||||
|
||||
connection.createStatement().execute("CREATE TABLE IF NOT EXISTS `" + instance.getConfig().getString("Database.Prefix") + "boosts` (\n" +
|
||||
|
Loading…
Reference in New Issue
Block a user