Added module saving system.

Autocrafting and blockbreak settings will not be saved.
This commit is contained in:
Brianna 2019-07-11 02:21:23 -04:00
parent 0f15f9dbfd
commit 6f29eea10c
15 changed files with 214 additions and 176 deletions

View File

@ -4,7 +4,7 @@ stages:
variables: variables:
name: "EpicHoppers" name: "EpicHoppers"
path: "/builds/$CI_PROJECT_PATH" path: "/builds/$CI_PROJECT_PATH"
version: "4.0.4" version: "4.1"
build: build:
stage: build stage: build

View File

@ -9,7 +9,6 @@ import com.songoda.epichoppers.economy.VaultEconomy;
import com.songoda.epichoppers.enchantment.Enchantment; import com.songoda.epichoppers.enchantment.Enchantment;
import com.songoda.epichoppers.handlers.TeleportHandler; import com.songoda.epichoppers.handlers.TeleportHandler;
import com.songoda.epichoppers.hopper.Filter; import com.songoda.epichoppers.hopper.Filter;
import com.songoda.epichoppers.hopper.Hopper;
import com.songoda.epichoppers.hopper.HopperBuilder; import com.songoda.epichoppers.hopper.HopperBuilder;
import com.songoda.epichoppers.hopper.HopperManager; import com.songoda.epichoppers.hopper.HopperManager;
import com.songoda.epichoppers.hopper.levels.Level; import com.songoda.epichoppers.hopper.levels.Level;
@ -236,6 +235,10 @@ public class EpicHoppers extends JavaPlugin {
private void saveToFile() { private void saveToFile() {
checkStorage(); checkStorage();
for (Level level : EpicHoppers.getInstance().getLevelManager().getLevels().values())
for (Module module : level.getRegisteredModules())
module.saveDataToFile();
storage.doSave(); 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()); 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) hopperManager.addHopper(new HopperBuilder(location)
.setLevel(level) .setLevel(level)
.setLastPlayerOpened(lastPlayer) .setLastPlayerOpened(lastPlayer)
@ -296,9 +291,6 @@ public class EpicHoppers extends JavaPlugin {
.addLinkedBlocks(blocks.toArray(new Location[0])) .addLinkedBlocks(blocks.toArray(new Location[0]))
.setFilter(filter) .setFilter(filter)
.setTeleportTrigger(teleportTrigger) .setTeleportTrigger(teleportTrigger)
.setAutoCrafting(autoCrafting)
.setAutoSelling(autoSell)
.setAutoBreaking(autoBreak)
.build()); .build());
} }
} }
@ -351,17 +343,17 @@ public class EpicHoppers extends JavaPlugin {
for (String key : levels.getKeys(false)) { for (String key : levels.getKeys(false)) {
if (key.equals("Suction") && levels.getInt("Suction") != 0) { 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) { } 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")) { } else if (key.equals("AutoCrafting")) {
modules.add(new ModuleAutoCrafting()); modules.add(new ModuleAutoCrafting(this));
} else if (key.equals("AutoSell")) { } 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);
} }
} }

View File

@ -2,6 +2,7 @@ package com.songoda.epichoppers.gui;
import com.songoda.epichoppers.EpicHoppers; import com.songoda.epichoppers.EpicHoppers;
import com.songoda.epichoppers.hopper.Hopper; 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.Methods;
import com.songoda.epichoppers.utils.gui.AbstractGUI; import com.songoda.epichoppers.utils.gui.AbstractGUI;
import com.songoda.epichoppers.utils.gui.Range; import com.songoda.epichoppers.utils.gui.Range;
@ -13,11 +14,13 @@ public class GUICrafting extends AbstractGUI {
private final EpicHoppers plugin; private final EpicHoppers plugin;
private final Hopper hopper; 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); super(player);
this.plugin = plugin; this.plugin = plugin;
this.hopper = hopper; this.hopper = hopper;
this.module = autoCrafting;
init(Methods.formatName(hopper.getLevel().getLevel(), false) + " &8-&f Crafting", 27); 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(25, Methods.getBackgroundGlass(true));
inventory.setItem(26, 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); addDraggable(new Range(13, 13, null, false), true);
} }
@ -60,7 +64,6 @@ public class GUICrafting extends AbstractGUI {
@Override @Override
protected void registerOnCloses() { protected void registerOnCloses() {
registerOnClose(((player, inventory) -> registerOnClose(((player, inventory) ->
hopper.setAutoCrafting(player, inventory.getItem(13)))); module.setAutoCrafting(hopper, player, inventory.getItem(13))));
} }
} }

View File

@ -8,18 +8,11 @@ import com.songoda.epichoppers.utils.CostType;
import com.songoda.epichoppers.utils.Methods; import com.songoda.epichoppers.utils.Methods;
import com.songoda.epichoppers.utils.ServerVersion; import com.songoda.epichoppers.utils.ServerVersion;
import com.songoda.epichoppers.utils.TeleportTrigger; import com.songoda.epichoppers.utils.TeleportTrigger;
import org.bukkit.Bukkit; import org.bukkit.*;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.World;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.UUID;
/** /**
* Created by songoda on 3/14/2017. * Created by songoda on 3/14/2017.
@ -33,11 +26,10 @@ public class Hopper {
private List<Location> linkedBlocks = new ArrayList<>(); private List<Location> linkedBlocks = new ArrayList<>();
private Filter filter = new Filter(); private Filter filter = new Filter();
private TeleportTrigger teleportTrigger = TeleportTrigger.DISABLED; private TeleportTrigger teleportTrigger = TeleportTrigger.DISABLED;
private ItemStack autoCrafting = null;
private int autoSellTimer = -9999;
private boolean autoBreaking = false;
private int transferTick = 0; private int transferTick = 0;
private Map<String, Object> moduleCache = new HashMap<>();
public Hopper(Location location) { public Hopper(Location location) {
this.location = location; this.location = location;
} }
@ -234,27 +226,6 @@ public class Hopper {
lastPlayerOpened = uuid; 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() { public TeleportTrigger getTeleportTrigger() {
return teleportTrigger; return teleportTrigger;
} }
@ -264,26 +235,6 @@ public class Hopper {
this.teleportTrigger = teleportTrigger; 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() { public List<Location> getLinkedBlocks() {
return new ArrayList<>(linkedBlocks); return new ArrayList<>(linkedBlocks);
} }
@ -307,4 +258,24 @@ public class Hopper {
public void setFilter(Filter filter) { public void setFilter(Filter filter) {
this.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();
}
} }

View File

@ -5,7 +5,6 @@ import com.songoda.epichoppers.utils.TeleportTrigger;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.inventory.ItemStack;
import java.util.UUID; import java.util.UUID;
@ -61,21 +60,6 @@ public class HopperBuilder {
return this; 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() { public Hopper build() {
return this.hopper; return this.hopper;
} }

View File

@ -1,5 +1,8 @@
package com.songoda.epichoppers.hopper; 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.Location;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -33,6 +36,10 @@ public class HopperManager {
for (Hopper hopper : this.registeredHoppers.values()) for (Hopper hopper : this.registeredHoppers.values())
hopper.removeLinkedBlock(location); hopper.removeLinkedBlock(location);
for (Level level : EpicHoppers.getInstance().getLevelManager().getLevels().values())
for (Module module : level.getRegisteredModules())
module.clearData(removed);
return removed; return removed;
} }

View File

@ -10,10 +10,10 @@ public class Level {
private final ArrayList<Module> registeredModules; private final ArrayList<Module> registeredModules;
private final List<String> description = new ArrayList<>(); 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; 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.level = level;
this.costExperience = costExperience; this.costExperience = costExperience;
this.costEconomy = costEconomy; this.costEconomy = costEconomy;
@ -22,7 +22,6 @@ public class Level {
this.filter = filter; this.filter = filter;
this.teleport = teleport; this.teleport = teleport;
this.linkAmount = linkAmount; this.linkAmount = linkAmount;
this.autoSell = autoSell;
this.registeredModules = registeredModules; this.registeredModules = registeredModules;
buildDescription(); buildDescription();
@ -74,11 +73,6 @@ public class Level {
} }
public int getAutoSell() {
return autoSell;
}
public int getLinkAmount() { public int getLinkAmount() {
return linkAmount; return linkAmount;
} }

View File

@ -11,8 +11,8 @@ public class LevelManager {
private final NavigableMap<Integer, Level> registeredLevels = new TreeMap<>(); 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) { 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, autoSell, modules)); registeredLevels.put(level, new Level(level, costExperience, costEconomy, range, amount, filter, teleport, linkAmount, modules));
} }

View File

@ -1,25 +1,70 @@
package com.songoda.epichoppers.hopper.levels.modules; package com.songoda.epichoppers.hopper.levels.modules;
import com.songoda.epichoppers.EpicHoppers;
import com.songoda.epichoppers.hopper.Hopper; 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.Material;
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 java.io.File;
import java.util.HashMap;
import java.util.List; 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();
}
} }

View File

@ -8,11 +8,7 @@ import com.songoda.epichoppers.utils.ServerVersion;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.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.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList; import java.util.ArrayList;
@ -20,25 +16,29 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
public class ModuleAutoCrafting implements Module { public class ModuleAutoCrafting extends Module {
private final Map<ItemStack, Recipes> cachedRecipes = new HashMap<>(); private final Map<ItemStack, Recipes> cachedRecipes = new HashMap<>();
public ModuleAutoCrafting(EpicHoppers plugin) {
super(plugin);
}
@Override @Override
public String getName() { public String getName() {
return "AutoCrafting"; return "AutoCrafting";
} }
public void run(Hopper hopper, Inventory hopperInventory) { public void run(Hopper hopper, Inventory hopperInventory) {
if (hopper.getAutoCrafting() == null if (getAutoCrafting(hopper) == null
|| hopperInventory == null || hopperInventory == null
|| hopperInventory.getSize() == 0 || hopperInventory.getSize() == 0
|| !canMove(hopperInventory, new ItemStack(hopper.getAutoCrafting())) || !canMove(hopperInventory, new ItemStack(getAutoCrafting(hopper)))
|| cachedRecipes.get(hopper.getAutoCrafting()) == null) || cachedRecipes.get(getAutoCrafting(hopper)) == null)
return; return;
top: top:
for (Recipe recipe : cachedRecipes.get(hopper.getAutoCrafting()).getRecipes()) { for (Recipe recipe : cachedRecipes.get(getAutoCrafting(hopper)).getRecipes()) {
if (!(recipe instanceof ShapedRecipe) && !(recipe instanceof ShapelessRecipe)) if (!(recipe instanceof ShapedRecipe) && !(recipe instanceof ShapelessRecipe))
continue; continue;
@ -113,14 +113,15 @@ public class ModuleAutoCrafting implements Module {
@Override @Override
public void runButtonPress(Player player, Hopper hopper) { 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) { public List<Material> getBlockedItems(Hopper hopper) {
List<Material> materials = new ArrayList<>(); 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) if (itemStack.getType() == Material.AIR)
return materials; return materials;
@ -157,7 +158,36 @@ public class ModuleAutoCrafting implements Module {
@Override @Override
public String getDescription() { 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) { private boolean canMove(Inventory inventory, ItemStack item) {

View File

@ -17,29 +17,33 @@ import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class ModuleAutoSell implements Module { public class ModuleAutoSell extends Module {
private int timeOut; private int timeOut;
private int hopperTickRate; private int hopperTickRate;
public ModuleAutoSell(int timeOut) { public ModuleAutoSell(EpicHoppers plugin, int timeOut) {
super(plugin);
EpicHoppers instance = EpicHoppers.getInstance(); EpicHoppers instance = EpicHoppers.getInstance();
this.timeOut = timeOut * 20; this.timeOut = timeOut * 20;
this.hopperTickRate = (int) instance.getConfig().getLong("Main.Amount of Ticks Between Hops"); this.hopperTickRate = (int) instance.getConfig().getLong("Main.Amount of Ticks Between Hops");
} }
@Override
public String getName() { public String getName() {
return "AutoSell"; return "AutoSell";
} }
@Override
public void run(Hopper hopper, Inventory hopperInventory) { public void run(Hopper hopper, Inventory hopperInventory) {
if (hopperInventory == null) return; 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(); EpicHoppers instance = EpicHoppers.getInstance();
if (instance.getEconomy() == null) return; if (instance.getEconomy() == null) return;
@ -59,7 +63,7 @@ public class ModuleAutoSell implements Module {
ItemStack clone = itemStack.clone(); ItemStack clone = itemStack.clone();
clone.setAmount(1); clone.setAmount(1);
value = net.brcdev.shopgui.ShopGuiPlusApi.getItemStackPriceSell(player.getPlayer(), clone); value = net.brcdev.shopgui.ShopGuiPlusApi.getItemStackPriceSell(player.getPlayer(), clone);
} catch (Exception e){ } catch (Exception e) {
value = 0; value = 0;
} }
} else } else
@ -73,22 +77,22 @@ public class ModuleAutoSell implements Module {
updateComparators = true; updateComparators = true;
} }
hopper.setAutoSellTimer(timeOut); modifyDataCache(hopper, "time", timeOut);
if (updateComparators) if (updateComparators)
HopTask.updateAdjacentComparators(hopper.getLocation()); HopTask.updateAdjacentComparators(hopper.getLocation());
} }
hopper.setAutoSellTimer(hopper.getAutoSellTimer() - hopperTickRate); modifyDataCache(hopper, "time", getTime(hopper) - hopperTickRate);
} }
@Override
public ItemStack getGUIButton(Hopper hopper) { public ItemStack getGUIButton(Hopper hopper) {
Hopper eHopper = hopper; Hopper eHopper = hopper;
ItemStack sell = new ItemStack(EpicHoppers.getInstance().isServerVersionAtLeast(ServerVersion.V1_13) ? Material.SUNFLOWER : Material.valueOf("DOUBLE_PLANT"), 1); ItemStack sell = new ItemStack(EpicHoppers.getInstance().isServerVersionAtLeast(ServerVersion.V1_13) ? Material.SUNFLOWER : Material.valueOf("DOUBLE_PLANT"), 1);
ItemMeta sellmeta = sell.getItemMeta(); ItemMeta sellmeta = sell.getItemMeta();
sellmeta.setDisplayName(EpicHoppers.getInstance().getLocale().getMessage("interface.hopper.selltitle")); sellmeta.setDisplayName(EpicHoppers.getInstance().getLocale().getMessage("interface.hopper.selltitle"));
ArrayList<String> loresell = new ArrayList<>(); 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) { for (String line : parts) {
loresell.add(Methods.formatText(line)); loresell.add(Methods.formatText(line));
} }
@ -97,23 +101,28 @@ public class ModuleAutoSell implements Module {
return sell; return sell;
} }
@Override
public void runButtonPress(Player player, Hopper hopper) { public void runButtonPress(Player player, Hopper hopper) {
Hopper eHopper = hopper; if (getTime(hopper) == -9999) {
if (eHopper.getAutoSellTimer() == -9999) { saveData(hopper, "time", 0);
eHopper.setAutoSellTimer(0);
} else { } else {
eHopper.setAutoSellTimer(-9999); saveData(hopper, "time", -9999);
} }
} }
@Override
public List<Material> getBlockedItems(Hopper hopper) { public List<Material> getBlockedItems(Hopper hopper) {
return null; return null;
} }
@Override
public String getDescription() { public String getDescription() {
return EpicHoppers.getInstance().getLocale().getMessage("interface.hopper.autosell", (int) Math.floor(timeOut / 20)); 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;
}
} }

View File

@ -20,25 +20,26 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
public class ModuleBlockBreak implements Module { public class ModuleBlockBreak extends Module {
private final int amount; private final int amount;
private Map<Block, Integer> blockTick = new HashMap<>(); private Map<Block, Integer> blockTick = new HashMap<>();
public ModuleBlockBreak(int amount) { public ModuleBlockBreak(EpicHoppers plugin, int amount) {
super(plugin);
this.amount = amount; this.amount = amount;
} }
@Override
public String getName() { public String getName() {
return "BlockBreak"; return "BlockBreak";
} }
@Override
public void run(Hopper hopper, Inventory hopperInventory) { public void run(Hopper hopper, Inventory hopperInventory) {
Block block = hopper.getLocation().getBlock(); Block block = hopper.getLocation().getBlock();
if (!hopper.isAutoBreaking()) if (!isEnabled(hopper))
return; return;
if (!blockTick.containsKey(block)) { if (!blockTick.containsKey(block)) {
@ -59,11 +60,11 @@ public class ModuleBlockBreak implements Module {
return; return;
// Don't break farm items from EpicFarming // 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; return;
if (!EpicHoppers.getInstance().getConfig().getStringList("Main.BlockBreak Blacklisted Blocks").contains(above.getType().name())) { if (!plugin.getConfig().getStringList("Main.BlockBreak Blacklisted Blocks").contains(above.getType().name())) {
if (EpicHoppers.getInstance().isServerVersionAtLeast(ServerVersion.V1_9)) if (plugin.isServerVersionAtLeast(ServerVersion.V1_9))
above.getWorld().playSound(above.getLocation(), Sound.BLOCK_STONE_BREAK, 1F, 1F); above.getWorld().playSound(above.getLocation(), Sound.BLOCK_STONE_BREAK, 1F, 1F);
Location locationAbove = above.getLocation(); Location locationAbove = above.getLocation();
locationAbove.add(.5, .5, .5); locationAbove.add(.5, .5, .5);
@ -71,11 +72,11 @@ public class ModuleBlockBreak implements Module {
float xx = (float) (0 + (Math.random() * .5)); float xx = (float) (0 + (Math.random() * .5));
float yy = (float) (0 + (Math.random() * .5)); float yy = (float) (0 + (Math.random() * .5));
float zz = (float) (0 + (Math.random() * .5)); float zz = (float) (0 + (Math.random() * .5));
if (EpicHoppers.getInstance().isServerVersionAtLeast(ServerVersion.V1_9)) if (plugin.isServerVersionAtLeast(ServerVersion.V1_9))
above.getWorld().spawnParticle(Particle.valueOf(EpicHoppers.getInstance().getConfig().getString("Main.BlockBreak Particle Type")), locationAbove, 15, xx, yy, zz); above.getWorld().spawnParticle(Particle.valueOf(plugin.getConfig().getString("Main.BlockBreak Particle Type")), locationAbove, 15, xx, yy, zz);
boolean waterlogged = false; boolean waterlogged = false;
if (EpicHoppers.getInstance().isServerVersionAtLeast(ServerVersion.V1_13) if (plugin.isServerVersionAtLeast(ServerVersion.V1_13)
&& above.getBlockData() instanceof org.bukkit.block.data.Waterlogged && above.getBlockData() instanceof org.bukkit.block.data.Waterlogged
&& ((org.bukkit.block.data.Waterlogged)above.getBlockData()).isWaterlogged()) { && ((org.bukkit.block.data.Waterlogged)above.getBlockData()).isWaterlogged()) {
waterlogged = true; waterlogged = true;
@ -89,15 +90,15 @@ public class ModuleBlockBreak implements Module {
blockTick.remove(block); blockTick.remove(block);
} }
@Override
public ItemStack getGUIButton(Hopper hopper) { public ItemStack getGUIButton(Hopper hopper) {
ItemStack block = new ItemStack(Material.IRON_ORE, 1); ItemStack block = new ItemStack(Material.IRON_ORE, 1);
ItemMeta blockmeta = block.getItemMeta(); 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<>(); ArrayList<String> loreblock = new ArrayList<>();
String[] parts = EpicHoppers.getInstance().getLocale().getMessage("interface.hopper.blocklore", String[] parts = plugin.getLocale().getMessage("interface.hopper.blocklore",
hopper.isAutoBreaking() ? EpicHoppers.getInstance().getLocale().getMessage("general.word.enabled") isEnabled(hopper) ? plugin.getLocale().getMessage("general.word.enabled")
: EpicHoppers.getInstance().getLocale().getMessage("general.word.disabled")).split("\\|"); : plugin.getLocale().getMessage("general.word.disabled")).split("\\|");
for (String line : parts) { for (String line : parts) {
loreblock.add(Methods.formatText(line)); loreblock.add(Methods.formatText(line));
} }
@ -106,18 +107,23 @@ public class ModuleBlockBreak implements Module {
return block; return block;
} }
@Override
public void runButtonPress(Player player, Hopper hopper) { public void runButtonPress(Player player, Hopper hopper) {
hopper.toggleAutoBreaking(); saveData(hopper,"blockbreak", !isEnabled(hopper));
} }
@Override
public List<Material> getBlockedItems(Hopper hopper) { public List<Material> getBlockedItems(Hopper hopper) {
return null; return null;
} }
@Override
public String getDescription() { 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;
} }
} }

View File

@ -21,7 +21,7 @@ import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class ModuleSuction implements Module { public class ModuleSuction extends Module {
private final int amount; private final int amount;
@ -30,16 +30,17 @@ public class ModuleSuction implements Module {
private boolean wildStacker = Bukkit.getPluginManager().isPluginEnabled("WildStacker"); private boolean wildStacker = Bukkit.getPluginManager().isPluginEnabled("WildStacker");
private boolean ultimateStacker = Bukkit.getPluginManager().isPluginEnabled("UltimateStacker"); private boolean ultimateStacker = Bukkit.getPluginManager().isPluginEnabled("UltimateStacker");
public ModuleSuction(int amount) { public ModuleSuction(EpicHoppers plugin, int amount) {
super(plugin);
this.amount = amount; this.amount = amount;
} }
@Override
public String getName() { public String getName() {
return "Suction"; return "Suction";
} }
@Override
public void run(Hopper hopper, Inventory hopperInventory) { public void run(Hopper hopper, Inventory hopperInventory) {
double radius = amount + .5; double radius = amount + .5;
@ -96,19 +97,20 @@ public class ModuleSuction implements Module {
return blacklist.contains(uuid); return blacklist.contains(uuid);
} }
@Override
public ItemStack getGUIButton(Hopper hopper) { public ItemStack getGUIButton(Hopper hopper) {
return null; return null;
} }
public void runButtonPress(Player player, Hopper hopper) { @Override
public void runButtonPress(Player player, Hopper hopper) { }
}
@Override
public List<Material> getBlockedItems(Hopper hopper) { public List<Material> getBlockedItems(Hopper hopper) {
return null; return null;
} }
@Override
public String getDescription() { public String getDescription() {
return EpicHoppers.getInstance().getLocale().getMessage("interface.hopper.suction", amount); return EpicHoppers.getInstance().getLocale().getMessage("interface.hopper.suction", amount);
} }

View File

@ -46,11 +46,9 @@ public abstract class Storage {
new StorageItem("player", hopper.getLastPlayerOpened() == null ? null : hopper.getLastPlayerOpened().toString()), new StorageItem("player", hopper.getLastPlayerOpened() == null ? null : hopper.getLastPlayerOpened().toString()),
new StorageItem("teleporttrigger", hopper.getTeleportTrigger().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("blacklist", hopper.getFilter().getBlackList()),
new StorageItem("void", hopper.getFilter().getVoidList()), 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()))); new StorageItem("black", hopper.getFilter().getEndPoint() == null ? null : Methods.serializeLocation(hopper.getFilter().getEndPoint())));
} }

View File

@ -30,13 +30,10 @@ public class MySQLDatabase {
"\t`placedby` TEXT NULL,\n" + "\t`placedby` TEXT NULL,\n" +
"\t`player` TEXT NULL,\n" + "\t`player` TEXT NULL,\n" +
"\t`teleporttrigger` TEXT NULL,\n" + "\t`teleporttrigger` TEXT NULL,\n" +
"\t`autocrafting` TEXT NULL,\n" +
"\t`autosell` TEXT NULL,\n" +
"\t`whitelist` TEXT NULL,\n" + "\t`whitelist` TEXT NULL,\n" +
"\t`blacklist` TEXT NULL,\n" + "\t`blacklist` TEXT NULL,\n" +
"\t`void` TEXT NULL,\n" + "\t`void` TEXT NULL,\n" +
"\t`black` 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" + connection.createStatement().execute("CREATE TABLE IF NOT EXISTS `" + instance.getConfig().getString("Database.Prefix") + "boosts` (\n" +