Skip to content
This repository has been archived by the owner on Mar 8, 2022. It is now read-only.

Commit

Permalink
[skip ci]quest db #31
Browse files Browse the repository at this point in the history
  • Loading branch information
RecursiveG committed Sep 3, 2017
1 parent ac9e440 commit 771c838
Show file tree
Hide file tree
Showing 10 changed files with 405 additions and 1 deletion.
3 changes: 3 additions & 0 deletions src/main/java/cat/nyaa/HamsterEcoHelper/HamsterEcoHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import cat.nyaa.HamsterEcoHelper.balance.BalanceAPI;
import cat.nyaa.HamsterEcoHelper.market.MarketListener;
import cat.nyaa.HamsterEcoHelper.market.MarketManager;
import cat.nyaa.HamsterEcoHelper.quest.QuestListener;
import cat.nyaa.HamsterEcoHelper.requisition.RequisitionManager;
import cat.nyaa.HamsterEcoHelper.signshop.SignShopManager;
import cat.nyaa.HamsterEcoHelper.utils.EconomyUtil;
Expand Down Expand Up @@ -33,6 +34,7 @@ public class HamsterEcoHelper extends JavaPlugin {
public MarketListener marketListener;
public AdsManager adsManager;
public Essentials ess = null;
public QuestListener questListener;

@Override
public void onEnable() {
Expand All @@ -53,6 +55,7 @@ public void onEnable() {
balanceAPI = new BalanceAPI(this);
signShopManager = new SignShopManager(this);
signShopListener = new SignShopListener(this);
questListener = new QuestListener(this);
adsManager = new AdsManager(this);
if (getServer().getPluginManager().getPlugin("Essentials") != null) {
this.ess = (Essentials) getServer().getPluginManager().getPlugin("Essentials");
Expand Down
22 changes: 22 additions & 0 deletions src/main/java/cat/nyaa/HamsterEcoHelper/quest/QuestCommon.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package cat.nyaa.HamsterEcoHelper.quest;

import cat.nyaa.HamsterEcoHelper.HamsterEcoHelper;
import cat.nyaa.HamsterEcoHelper.utils.database.tables.quest.QuestInstance;
import cat.nyaa.HamsterEcoHelper.utils.database.tables.quest.QuestStation;
import org.bukkit.Location;


public class QuestCommon {
public static QuestStation toQuestStation(Location loc) {
try {
return HamsterEcoHelper.instance.database.query(QuestStation.class)
.whereEq("world", loc.getWorld().getName())
.whereEq("x", loc.getBlockX())
.whereEq("y", loc.getBlockY())
.whereEq("z", loc.getBlockZ())
.selectUnique();
} catch (RuntimeException ex) {
return null;
}
}
}
52 changes: 52 additions & 0 deletions src/main/java/cat/nyaa/HamsterEcoHelper/quest/QuestListener.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package cat.nyaa.HamsterEcoHelper.quest;

import cat.nyaa.HamsterEcoHelper.HamsterEcoHelper;
import cat.nyaa.HamsterEcoHelper.I18n;
import cat.nyaa.HamsterEcoHelper.utils.database.tables.quest.QuestStation;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.player.PlayerInteractEvent;

public class QuestListener implements Listener {
private final HamsterEcoHelper plugin;

public QuestListener(HamsterEcoHelper plugin) {
this.plugin = plugin;
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onSignChangeEvent(SignChangeEvent event) {
if ("[Quest]".equalsIgnoreCase(event.getLine(0))) {
Player player = event.getPlayer();
if (!player.hasPermission("heh.quest.admin")) return;
Double fee;
try {
fee = Double.parseDouble(event.getLine(3));
} catch (NumberFormatException ex) {
fee = null;
}
if (fee == null) {
event.getPlayer().sendMessage(I18n.format("user.quest.invalid_fee"));
return;
}
plugin.database.query(QuestStation.class).insert(new QuestStation(event.getBlock().getLocation(), fee));
event.getPlayer().sendMessage(I18n.format("user.quest.station_created"));
}
}

@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
Block block = event.getClickedBlock();
QuestStation station = QuestCommon.toQuestStation(block.getLocation());
if (station == null) return;
event.getPlayer().sendMessage("Station clicked");
}
}
}
70 changes: 70 additions & 0 deletions src/main/java/cat/nyaa/HamsterEcoHelper/utils/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,24 @@

import cat.nyaa.HamsterEcoHelper.HamsterEcoHelper;
import cat.nyaa.nyaacore.utils.InventoryUtils;
import cat.nyaa.nyaacore.utils.ReflectionUtils;
import com.google.common.io.BaseEncoding;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.librazy.nyaautils_lang_checker.LangKey;
import org.librazy.nyaautils_lang_checker.LangKeyType;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.function.Function;
import java.util.zip.DataFormatException;
import java.util.zip.Deflater;
import java.util.zip.Inflater;

public class Utils {
public static final Random random = new Random();
Expand Down Expand Up @@ -88,4 +96,66 @@ public static String getItemName(ItemStack item) {
}
return itemName;
}

public static String encodeItemStack(ItemStack item) {
byte[] nbt = ReflectionUtils.dumpRawNbt(item);
byte[] compressedNbt = null;
try {
Deflater compresser = new Deflater();
compresser.setInput(nbt);
compresser.finish();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while (!compresser.finished()) {
byte[] buf = new byte[1024];
int len = compresser.deflate(buf);
bos.write(buf, 0, len);
}
compresser.end();
bos.close();
compressedNbt = bos.toByteArray();
return BaseEncoding.base64().encode(compressedNbt);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
}

public static ItemStack decodeItemStack(String item) {
byte[] nbt;
byte[] compressedNbt = BaseEncoding.base64().decode(item);

try {
Inflater decompresser = new Inflater();
decompresser.setInput(compressedNbt);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while (!decompresser.finished()) {
byte[] buf = new byte[1024];
int len = decompresser.inflate(buf);
bos.write(buf, 0, len);
}
decompresser.end();
bos.close();
nbt = bos.toByteArray();
return ReflectionUtils.loadItemStackFromNbt(nbt);
} catch (DataFormatException | IOException ex) {
throw new RuntimeException(ex);
}
}

public static String encodeItemStacks(List<ItemStack> items) {
if (items.size() <= 0) return "";
StringBuilder b = new StringBuilder();
b.append(encodeItemStack(items.get(0)));
for (int i=1;i<items.size();i++) {
b.append(",");
b.append(encodeItemStack(items.get(i)));
}
return b.toString();
}

public static List<ItemStack> decodeItemStacks(String items) {
String[] a = items.split(",");
List<ItemStack> r = new ArrayList<>();
for (String str : a) r.add(decodeItemStack(str));
return r;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
import cat.nyaa.HamsterEcoHelper.utils.database.tables.ItemLog;
import cat.nyaa.HamsterEcoHelper.utils.database.tables.MarketItem;
import cat.nyaa.HamsterEcoHelper.utils.database.tables.TempStorageRepo;
import cat.nyaa.HamsterEcoHelper.utils.database.tables.quest.QuestEntry;
import cat.nyaa.HamsterEcoHelper.utils.database.tables.quest.QuestInstance;
import cat.nyaa.HamsterEcoHelper.utils.database.tables.quest.QuestStation;
import cat.nyaa.HamsterEcoHelper.utils.database.tables.signshop.LottoStorageLocation;
import cat.nyaa.HamsterEcoHelper.utils.database.tables.signshop.ShopStorageLocation;
import cat.nyaa.HamsterEcoHelper.utils.database.tables.signshop.Sign;
Expand Down Expand Up @@ -51,7 +54,10 @@ protected Class<?>[] getTables() {
Sign.class,
ShopStorageLocation.class,
SignShop.class,
LottoStorageLocation.class
LottoStorageLocation.class,
QuestStation.class,
QuestEntry.class,
QuestInstance.class
};
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
package cat.nyaa.HamsterEcoHelper.utils.database.tables.quest;

import cat.nyaa.HamsterEcoHelper.utils.Utils;
import cat.nyaa.nyaacore.database.DataColumn;
import cat.nyaa.nyaacore.database.DataTable;
import cat.nyaa.nyaacore.database.PrimaryKey;
import org.bukkit.inventory.ItemStack;

import java.time.Duration;
import java.time.ZonedDateTime;
import java.util.List;

@DataTable("quest_entry")
public class QuestEntry {
public enum QuestType {
NONE,
ITEM,
MONEY,
OTHER;
}

@DataColumn
@PrimaryKey
public String id;
@DataColumn
public String station_id; // which station this quest is in
@DataColumn
public String questName;
@DataColumn
public String questDescription;
@DataColumn
public String publisher; // uuid of the player who published the quest
@DataColumn
public Boolean claimable; // if this quest can be claimed by a player
@DataColumn
public Boolean isRecurrentQuest; // if the quest can be claimed by many players. NOTE: the rewards will be created from nowhere (i.e. duplicated)
@DataColumn
public Long singlePlayerClaimLimit; // how many time a single player can claim this quest, valid only if is recurrent quest

public QuestType prerequisiteType; // NONE, ITEM or MONEY
public List<ItemStack> prerequisiteItems;
@DataColumn("prereq_money")
public Double prerequisiteMoney;

public List<ItemStack> earlyRewardItems; // items will be given to player when they claimed the quest

public QuestType targetType; // NONE, ITEM or OTHER
public List<ItemStack> targetItems;

public QuestType rewardType; // NONE, ITEM or MONEY
public List<ItemStack> rewardItem;
@DataColumn("reward_money")
public Double rewardMoney;

public ZonedDateTime questExpire; // when will the quest expire
public Duration questTimeLimit; // the time limit the quest should be finished once it's claimed

@DataColumn("prereq_type")
public String getPrerequisiteType() {
return prerequisiteType.name();
}

public void setPrerequisiteType(String prerequisiteType) {
this.prerequisiteType = QuestType.valueOf(prerequisiteType);
}

@DataColumn("prereq_item")
public String getPrerequisiteItems() {
return Utils.encodeItemStacks(prerequisiteItems);
}

public void setPrerequisiteItems(String prerequisiteItems) {
this.prerequisiteItems = Utils.decodeItemStacks(prerequisiteItems);
}

@DataColumn("early_reward_item")
public String getEarlyRewardItems() {
return Utils.encodeItemStacks(earlyRewardItems);
}

public void setEarlyRewardItems(String earlyRewardItems) {
this.earlyRewardItems = Utils.decodeItemStacks(earlyRewardItems);
}

@DataColumn("target_type")
public String getTargetType() {
return targetType.name();
}

public void setTargetType(String targetType) {
this.targetType = QuestType.valueOf(targetType);
}

@DataColumn("target_item")
public String getTargetItems() {
return Utils.encodeItemStacks(targetItems);
}

public void setTargetItems(String targetItems) {
this.targetItems = Utils.decodeItemStacks(targetItems);
}

@DataColumn("reward_type")
public String getRewardType() {
return rewardType.name();
}

public void setRewardType(String rewardType) {
this.rewardType = QuestType.valueOf(rewardType);
}

@DataColumn("reward_item")
public String getRewardItem() {
return Utils.encodeItemStacks(rewardItem);
}

public void setRewardItem(String rewardItem) {
this.rewardItem = Utils.decodeItemStacks(rewardItem);
}

@DataColumn("expire")
public String getQuestExpire() {
return questExpire.toString();
}

public void setQuestExpire(String questExpire) {
this.questExpire = ZonedDateTime.parse(questExpire);
}

@DataColumn("time_limit")
public String getQuestTimeLimit() {
return questTimeLimit.toString();
}

public void setQuestTimeLimit(String questTimeLimit) {
this.questTimeLimit = Duration.parse(questTimeLimit);
}
}
Loading

0 comments on commit 771c838

Please sign in to comment.