Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions src/main/java/me/knighthat/apis/events/BlockEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package me.knighthat.apis.events;

import lombok.Getter;
import lombok.NonNull;
import me.wonka01.ServerQuests.ServerQuests;
import me.wonka01.ServerQuests.enums.ObjectiveType;
import org.bukkit.block.Block;
import org.bukkit.entity.HumanEntity;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.metadata.MetadataValue;

@Getter
public abstract class BlockEvent<T extends org.bukkit.event.block.BlockEvent> extends MaterialEvent<T> {

private final @NonNull String state;
private final @NonNull MetadataValue metadata;

protected BlockEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType, @NonNull String state) {

super(plugin, objectiveType);
this.state = state;
this.metadata = new FixedMetadataValue(plugin, true);
}

protected void attemptToUpdate(@NonNull org.bukkit.event.block.BlockEvent event, @NonNull HumanEntity breaker) {

if (!event.getBlock().hasMetadata(state)) {

Block block = event.getBlock();
super.attemptToUpdate(breaker, block.getType());
block.setMetadata(state, metadata);
}
}
}
40 changes: 40 additions & 0 deletions src/main/java/me/knighthat/apis/events/EntityEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package me.knighthat.apis.events;

import lombok.NonNull;
import me.knighthat.apis.utils.Utils;
import me.wonka01.ServerQuests.ServerQuests;
import me.wonka01.ServerQuests.enums.ObjectiveType;
import me.wonka01.ServerQuests.questcomponents.QuestController;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.jetbrains.annotations.Range;

import java.util.List;

public abstract class EntityEvent<T extends Event> extends EventBase<T> {

protected EntityEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType) {
super(plugin, objectiveType);
}

protected <V> boolean attemptToUpdate(@NonNull HumanEntity player, @NonNull V value) {
return attemptToUpdate(player, value, 1);
}

protected <V> boolean attemptToUpdate(@NonNull HumanEntity player, @NonNull V value,
@Range(from = 0, to = Long.MAX_VALUE) int amount) {

for (QuestController ctrl : super.getControllers()) {

List<String> entities = ctrl.getEventConstraints().getMobNames();
if (entities.isEmpty() || Utils.contains(entities, value)) {

super.update(ctrl, (Player) player, amount);
return true;
}
}

return false;
}
}
64 changes: 64 additions & 0 deletions src/main/java/me/knighthat/apis/events/EventBase.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package me.knighthat.apis.events;

import lombok.Getter;
import lombok.NonNull;
import me.knighthat.apis.utils.Utils;
import me.wonka01.ServerQuests.ServerQuests;
import me.wonka01.ServerQuests.enums.ObjectiveType;
import me.wonka01.ServerQuests.questcomponents.ActiveQuests;
import me.wonka01.ServerQuests.questcomponents.QuestController;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.Listener;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

@Getter
public abstract class EventBase<T extends Event> implements Listener {

private final ServerQuests plugin;
private final ObjectiveType objectiveType;

protected EventBase(ServerQuests plugin, @NonNull ObjectiveType objectiveType) {

this.plugin = plugin;
this.objectiveType = objectiveType;

plugin.getServer().getPluginManager().registerEvents(this, plugin);
}

public abstract void event(T event);

protected @NonNull ActiveQuests getActiveQuests() {
return plugin.config().getActiveQuests();
}

protected @NonNull List<QuestController> getControllers() {

Stream<QuestController> result = getActiveQuests().getActiveQuestsList().stream();
return result.filter(ins -> ins.getObjective().equals(this.objectiveType)).collect(Collectors.toList());
}

protected void update(@NonNull QuestController controller, @NonNull Player player, double amount) {

if (!isWorldAllowed(controller, player.getWorld())) return;

if (controller.updateQuest(amount, player))
controller.endQuest();
}

private boolean isWorldAllowed(@NonNull QuestController controller, @NonNull World world) {

List<String> worlds = controller.getEventConstraints().getWorlds();
return worlds.isEmpty() || Utils.contains(worlds, world.getName());
}

protected void update(@NonNull Player player) {

for (QuestController ctrl : getControllers())
update(ctrl, player, 1);
}
}
40 changes: 40 additions & 0 deletions src/main/java/me/knighthat/apis/events/MaterialEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package me.knighthat.apis.events;

import lombok.NonNull;
import me.knighthat.apis.utils.Utils;
import me.wonka01.ServerQuests.ServerQuests;
import me.wonka01.ServerQuests.enums.ObjectiveType;
import me.wonka01.ServerQuests.questcomponents.QuestController;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.jetbrains.annotations.Range;

import java.util.List;

public abstract class MaterialEvent<T extends Event> extends EventBase<T> {

protected MaterialEvent(ServerQuests plugin, @NonNull ObjectiveType objectiveType) {
super(plugin, objectiveType);
}

protected <V> boolean attemptToUpdate(@NonNull HumanEntity player, @NonNull V value) {
return attemptToUpdate(player, value, 1);
}

protected <V> boolean attemptToUpdate(@NonNull HumanEntity player, @NonNull V value,
@Range(from = 0, to = Long.MAX_VALUE) int amount) {

for (QuestController ctrl : super.getControllers()) {

List<String> materials = ctrl.getEventConstraints().getMaterialNames();
if (materials.isEmpty() || Utils.contains(materials, value)) {

super.update(ctrl, (Player) player, amount);
return true;
}
}

return false;
}
}
3 changes: 2 additions & 1 deletion src/main/java/me/knighthat/apis/menus/Menu.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NonNull;
import me.knighthat.apis.utils.Colorization;
import me.wonka01.ServerQuests.ServerQuests;
import me.wonka01.ServerQuests.questcomponents.ActiveQuests;
import me.wonka01.ServerQuests.questcomponents.QuestController;
import me.wonka01.ServerQuests.questcomponents.QuestData;
import me.knighthat.apis.utils.Colorization;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
Expand Down Expand Up @@ -45,6 +45,7 @@ protected Menu(ServerQuests plugin, @NonNull Player owner, @NonNull String title

String title = plugin.messages().string(titlePath);
this.inventory = Bukkit.createInventory(this, slots, title);

}

protected void setBorder() {
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/me/knighthat/apis/menus/MenuEvents.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@ public class MenuEvents implements Listener {
@EventHandler
public void inventoryClickEvent(InventoryClickEvent event) {

Inventory topInventory = event.getView().getTopInventory();

if (topInventory.getHolder() instanceof Menu) {
Inventory clicked = event.getClickedInventory();

Menu menu = (Menu) topInventory.getHolder();
if (clicked.getHolder() instanceof Menu) {

Menu menu = (Menu) clicked.getHolder();
event.setCancelled(true);

if (event.getCurrentItem() != null)
menu.onItemClick(event);
menu.onItemClick(event);
}
}

Expand Down
37 changes: 21 additions & 16 deletions src/main/java/me/wonka01/ServerQuests/ServerQuests.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,16 @@
import me.knighthat.apis.menus.MenuEvents;
import me.wonka01.ServerQuests.commands.CommandManager;
import me.wonka01.ServerQuests.configuration.JsonQuestSave;
import me.wonka01.ServerQuests.events.*;
import me.wonka01.ServerQuests.questcomponents.ActiveQuests;
import me.wonka01.ServerQuests.events.entities.*;
import me.wonka01.ServerQuests.events.materials.ConsumeEvent;
import me.wonka01.ServerQuests.events.materials.CraftingEvent;
import me.wonka01.ServerQuests.events.materials.EnchantEvent;
import me.wonka01.ServerQuests.events.materials.blocks.BreakEvent;
import me.wonka01.ServerQuests.events.materials.blocks.PlaceEvent;
import me.wonka01.ServerQuests.questcomponents.bossbar.BarManager;
import me.wonka01.placeholders.CommunityQuestsPlaceholders;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;

import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;

Expand Down Expand Up @@ -79,20 +82,22 @@ private boolean setupEconomy() {
}

private void registerQuestEvents() {
ActiveQuests activeQuests = config.getActiveQuests();

new MobKillEvent(this);
new BreakEvent(this);
new CraftingEvent(this);
new KillPlayerEvent(this);
new MilkingEvent(this);
new PlaceEvent(this);
new ProjectileKillEvent(this);
new ShearEvent(this);
new TameEvent(this);
new ConsumeEvent(this);
new CatchFishEvent(this);
new EnchantEvent(this);
new NPCInteractEvent(this);

getServer().getPluginManager().registerEvents(new BarManager(), this);
getServer().getPluginManager().registerEvents(new BreakEvent(activeQuests), this);
getServer().getPluginManager().registerEvents(new CatchFishEvent(activeQuests), this);
getServer().getPluginManager().registerEvents(new KillPlayerEvent(activeQuests), this);
getServer().getPluginManager().registerEvents(new MobKillEvent(activeQuests), this);
getServer().getPluginManager().registerEvents(new ProjectileKillEvent(activeQuests), this);
getServer().getPluginManager().registerEvents(new PlaceEvent(activeQuests), this);
getServer().getPluginManager().registerEvents(new ShearEvent(activeQuests), this);
getServer().getPluginManager().registerEvents(new TameEvent(activeQuests), this);
getServer().getPluginManager().registerEvents(new MilkCowEvent(activeQuests), this);
getServer().getPluginManager().registerEvents(new CraftItemQuestEvent(activeQuests), this);
getServer().getPluginManager().registerEvents(new ConsumeItemQuestEvent(activeQuests), this);
getServer().getPluginManager().registerEvents(new EnchantItemQuestEvent(activeQuests), this);
}

private void registerGuiEvents() {
Expand Down
52 changes: 48 additions & 4 deletions src/main/java/me/wonka01/ServerQuests/commands/MoneyCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,18 @@
import lombok.NonNull;
import me.knighthat.apis.commands.PluginCommand;
import me.wonka01.ServerQuests.ServerQuests;
import me.wonka01.ServerQuests.events.MoneyQuest;
import me.wonka01.ServerQuests.enums.ObjectiveType;
import me.wonka01.ServerQuests.questcomponents.ActiveQuests;
import me.wonka01.ServerQuests.questcomponents.QuestController;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Range;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class MoneyCommand extends PluginCommand {

Expand Down Expand Up @@ -36,10 +43,9 @@ public void execute(@NonNull CommandSender sender, @NotNull @NonNull String[] ar
}

try {
double money = Double.parseDouble(args[1]);
MoneyQuest moneyQuest = new MoneyQuest(ActiveQuests.getActiveQuestsInstance(), getPlugin().getEconomy());

if (!moneyQuest.tryAddItemsToQuest(money, player)) {
double money = Double.parseDouble(args[1]);
if (!deposit(money, player)) {
String noActiveDonateQuests = getPlugin().messages().message("noActiveDonateQuests");
player.sendMessage(noActiveDonateQuests);
}
Expand All @@ -48,4 +54,42 @@ public void execute(@NonNull CommandSender sender, @NotNull @NonNull String[] ar
player.sendMessage(message);
}
}

private boolean deposit(@Range(from = 0, to = Long.MAX_VALUE) double amount, @NonNull Player player) {

Economy economy = getPlugin().getEconomy();
boolean canWithdraw = false;
double money = amount;

for (QuestController ctrl : this.getControllers()) {

int goal = ctrl.getQuestData().getQuestGoal();
double completed = ctrl.getQuestData().getAmountCompleted();

if (goal > 0 && (completed + amount) > goal) {

money = amount - completed - goal;
economy.depositPlayer(player, completed + money - goal);
}

canWithdraw = true;

if (ctrl.updateQuest(money, player))
ctrl.endQuest();
}

if (canWithdraw)
economy.withdrawPlayer(player, money);


return canWithdraw;
}

private @NonNull List<QuestController> getControllers() {

ActiveQuests activeQuests = ActiveQuests.getActiveQuestsInstance();
Stream<QuestController> result = activeQuests.getActiveQuestsList().stream();
result = result.filter(ins -> ins.getObjective().equals(ObjectiveType.GIVE_MONEY));
return result.collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public enum ObjectiveType {
PROJ_KILL("projectilekill", Material.BOW),
BLOCK_PLACE("blockplace", Material.DIRT),
SHEAR("shear", Material.SHEARS),
TAME("team", Material.BONE),
TAME("tame", Material.BONE),
GUI("donate", Material.MILK_BUCKET),
MILK_COW("milkcow", Material.CHEST),
CRAFT_ITEM("craftitem", Material.CHAINMAIL_HELMET),
Expand Down
Loading