Skip to content
This repository has been archived by the owner on Nov 29, 2024. It is now read-only.

Commit

Permalink
should be finished
Browse files Browse the repository at this point in the history
  • Loading branch information
eric2788 committed May 25, 2022
1 parent 88b0338 commit 60b4432
Show file tree
Hide file tree
Showing 35 changed files with 1,047 additions and 88 deletions.
27 changes: 27 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: build plugin


env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

on:
push:
branches:
- master

jobs:
build_plugin:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v3
with:
java-version: '18'
distribution: 'adopt'
- name: Build with Maven
run: mvn --batch-mode package
- name: upload artifacts
uses: actions/upload-artifact@v1
with:
name: MinigamesQuests
path: target/
12 changes: 12 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,18 @@
<version>1.18.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.dragonite.mc</groupId>
<artifactId>dragonshop</artifactId>
<version>0.0.7</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>me.clip</groupId>
<artifactId>placeholderapi</artifactId>
<version>2.11.1</version>
<scope>provided</scope>
</dependency>
</dependencies>

<build>
Expand Down
51 changes: 51 additions & 0 deletions src/main/java/com/ericlam/mc/mgquests/MinigameQuestListener.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.ericlam.mc.mgquests;

import com.ericlam.mc.mgquests.config.QuestMessage;
import com.ericlam.mc.mgquests.manager.ProgressManager;
import com.ericlam.mc.mgquests.manager.QuestsStatsManager;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.inject.Inject;
import java.util.concurrent.CompletableFuture;

public class MinigameQuestListener implements Listener {

private static final Logger LOGGER = LoggerFactory.getLogger(MinigameQuestListener.class);
@Inject
private QuestsStatsManager questsStatsManager;

@Inject
private ProgressManager progressManager;

@Inject
private QuestMessage message;


@EventHandler
public void onPlayerJoin(PlayerJoinEvent e) {
var player = e.getPlayer();
questsStatsManager.loadPlayerStats(player.getUniqueId())
.thenCompose(cache -> {
try {
return progressManager.loadAllResults(player.getUniqueId(), cache);
} catch (QuestException qe) {
var err = message.getLang().get(qe.getPath(), qe.getArgs());
LOGGER.warn(err);
player.sendMessage(err);
return CompletableFuture.completedFuture(null);
}
}).whenComplete((v, ex) -> {
if (ex != null) {
LOGGER.error("Error when loading player stats", ex);
player.sendMessage("&c任務資料加載失敗: " + ex.getMessage());
} else {
LOGGER.info("Player {} quests stats updated", player.getName());
}
});

}
}
38 changes: 38 additions & 0 deletions src/main/java/com/ericlam/mc/mgquests/MinigameQuests.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,22 @@
package com.ericlam.mc.mgquests;

import chu77.eldependenci.sql.SQLInstallation;
import com.ericlam.mc.eld.BukkitManagerProvider;
import com.ericlam.mc.eld.ELDBukkit;
import com.ericlam.mc.eld.ELDBukkitPlugin;
import com.ericlam.mc.eld.ServiceCollection;
import com.ericlam.mc.mgquests.config.GameTable;
import com.ericlam.mc.mgquests.config.QuestConfig;
import com.ericlam.mc.mgquests.config.QuestMessage;
import com.ericlam.mc.mgquests.config.QuestObject;
import com.ericlam.mc.mgquests.db.Quest;
import com.ericlam.mc.mgquests.dshop.AcceptQuestTask;
import com.ericlam.mc.mgquests.dshop.FinishQuestTask;
import com.ericlam.mc.mgquests.dshop.QuestAcceptedCondition;
import com.ericlam.mc.mgquests.dshop.QuestAvailableCondition;
import com.ericlam.mc.mgquests.manager.*;
import com.ericlam.mc.mgquests.papi.QuestPlaceholder;
import com.ericlam.mc.mgquests.repository.QuestRepository;

@ELDBukkit(
registry = QuestsRegistry.class,
Expand All @@ -19,6 +32,31 @@ protected void manageProvider(BukkitManagerProvider bukkitManagerProvider) {
@Override
public void bindServices(ServiceCollection serviceCollection) {

// configuration
serviceCollection.addConfiguration(QuestConfig.class);
serviceCollection.addConfiguration(QuestMessage.class);

serviceCollection.addGroupConfiguration(QuestObject.class);
serviceCollection.addGroupConfiguration(GameTable.class);

// manager
serviceCollection.addSingleton(DurationConvertManager.class);
serviceCollection.addSingleton(ProgressManager.class);
serviceCollection.addSingleton(QuestsManager.class);
serviceCollection.addSingleton(QuestsStatsManager.class);
serviceCollection.addSingleton(TableManager.class);

// hook
serviceCollection.addSingleton(QuestPlaceholder.class);
serviceCollection.addSingleton(AcceptQuestTask.class);
serviceCollection.addSingleton(FinishQuestTask.class);
serviceCollection.addSingleton(QuestAcceptedCondition.class);
serviceCollection.addSingleton(QuestAvailableCondition.class);

// sql register
SQLInstallation sql = serviceCollection.getInstallation(SQLInstallation.class);
sql.bindEntities(Quest.class);
sql.bindJpaRepository(QuestRepository.class);
}

}
31 changes: 30 additions & 1 deletion src/main/java/com/ericlam/mc/mgquests/QuestLifeCycle.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,41 @@
package com.ericlam.mc.mgquests;

import com.ericlam.mc.eld.bukkit.ELDLifeCycle;
import com.ericlam.mc.mgquests.dshop.AcceptQuestTask;
import com.ericlam.mc.mgquests.dshop.FinishQuestTask;
import com.ericlam.mc.mgquests.dshop.QuestAcceptedCondition;
import com.ericlam.mc.mgquests.dshop.QuestAvailableCondition;
import com.ericlam.mc.mgquests.papi.QuestPlaceholder;
import org.bukkit.plugin.java.JavaPlugin;
import org.dragonitemc.dragonshop.api.ShopTaskService;

import javax.inject.Inject;

public class QuestLifeCycle implements ELDLifeCycle {

@Inject
private ShopTaskService taskService;

@Inject
private AcceptQuestTask questTask;
@Inject
private FinishQuestTask finishQuestTask;
@Inject
private QuestAcceptedCondition questAcceptedCondition;
@Inject
private QuestAvailableCondition questAvailableCondition;

@Inject
private QuestPlaceholder questPlaceholder;


@Override
public void onEnable(JavaPlugin javaPlugin) {

taskService.addPriceTask(questTask);
taskService.addPriceTask(finishQuestTask);
taskService.addCondition(questAcceptedCondition);
taskService.addCondition(questAvailableCondition);
questPlaceholder.register();
}

@Override
Expand Down
12 changes: 10 additions & 2 deletions src/main/java/com/ericlam/mc/mgquests/QuestsRegistry.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,24 @@
import com.ericlam.mc.eld.bukkit.ComponentsRegistry;
import com.ericlam.mc.eld.registration.CommandRegistry;
import com.ericlam.mc.eld.registration.ListenerRegistry;
import com.ericlam.mc.mgquests.command.QuestsCancelCommand;
import com.ericlam.mc.mgquests.command.QuestsCommand;
import com.ericlam.mc.mgquests.command.QuestsReloadCommand;
import org.bukkit.event.Listener;

import java.util.List;

public class QuestsRegistry implements ComponentsRegistry {
@Override
public void registerCommand(CommandRegistry<CommandNode> commandRegistry) {

commandRegistry.command(QuestsCommand.class, cc -> {
cc.command(QuestsReloadCommand.class);
cc.command(QuestsCancelCommand.class);
});
}

@Override
public void registerListeners(ListenerRegistry<Listener> listenerRegistry) {

listenerRegistry.listeners(List.of(MinigameQuestListener.class));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.ericlam.mc.mgquests.command;

import com.ericlam.mc.eld.annotations.CommandArg;
import com.ericlam.mc.eld.annotations.Commander;
import com.ericlam.mc.eld.bukkit.CommandNode;
import com.ericlam.mc.mgquests.config.QuestMessage;
import com.ericlam.mc.mgquests.manager.QuestsManager;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

import javax.inject.Inject;

@Commander(
name = "cancel",
description = "取消任務"
)
public class QuestsCancelCommand implements CommandNode {

@Inject
private QuestsManager questsManager;

@Inject
private QuestMessage message;

@CommandArg(order = 1)
private String questId;

@CommandArg(order = 2, optional = true)
private OfflinePlayer player;

@Override
public void execute(CommandSender commandSender) {
if (player == null){

if (!(commandSender instanceof Player p)){
commandSender.sendMessage("§c你必須是玩家才能使用此指令");
return;
} else {
this.player = p;
}

}

questsManager.cancelQuest(player.getUniqueId(), questId).whenComplete((v, ex) -> {
if (ex != null){
ex.printStackTrace();
commandSender.sendMessage(message.getLang().get("operation-failed", ex.getMessage()));
}else{
commandSender.sendMessage(message.getLang().get("operation-success"));
}
});
}

}
17 changes: 17 additions & 0 deletions src/main/java/com/ericlam/mc/mgquests/command/QuestsCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.ericlam.mc.mgquests.command;

import com.ericlam.mc.eld.annotations.Commander;
import com.ericlam.mc.eld.bukkit.CommandNode;
import org.bukkit.command.CommandSender;

@Commander(
name = "quests",
description = "quests 主指令",
permission = "mgquests.admin"
)
public class QuestsCommand implements CommandNode {
@Override
public void execute(CommandSender commandSender) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.ericlam.mc.mgquests.command;

import com.ericlam.mc.eld.annotations.Commander;
import com.ericlam.mc.eld.annotations.InjectPool;
import com.ericlam.mc.eld.bukkit.CommandNode;
import com.ericlam.mc.eld.configurations.GroupConfig;
import com.ericlam.mc.mgquests.config.GameTable;
import com.ericlam.mc.mgquests.config.QuestConfig;
import com.ericlam.mc.mgquests.config.QuestMessage;
import com.ericlam.mc.mgquests.config.QuestObject;
import org.bukkit.command.CommandSender;

import javax.inject.Inject;

@Commander(
name = "reload",
description = "reload configuration"
)
public class QuestsReloadCommand implements CommandNode {

@Inject
private QuestConfig config;

@Inject
private QuestMessage message;

@InjectPool
private GroupConfig<QuestObject> questObjects;

@InjectPool
private GroupConfig<GameTable> gameTables;

@Override
public void execute(CommandSender commandSender) {
config.getController().reload();
message.getController().reload();
questObjects.fetch();
gameTables.fetch();
commandSender.sendMessage(message.getLang().get("reload"));
}
}
11 changes: 11 additions & 0 deletions src/main/java/com/ericlam/mc/mgquests/config/QuestConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.ericlam.mc.mgquests.config;

import com.ericlam.mc.eld.annotations.Resource;
import com.ericlam.mc.eld.components.Configuration;

@Resource(locate = "config.yml")
public class QuestConfig extends Configuration {

public int progress_bar_count;

}
10 changes: 10 additions & 0 deletions src/main/java/com/ericlam/mc/mgquests/config/QuestMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.ericlam.mc.mgquests.config;

import com.ericlam.mc.eld.annotations.Prefix;
import com.ericlam.mc.eld.annotations.Resource;
import com.ericlam.mc.eld.components.LangConfiguration;

@Resource(locate = "lang.yml")
@Prefix(path = "prefix")
public class QuestMessage extends LangConfiguration {
}
25 changes: 25 additions & 0 deletions src/main/java/com/ericlam/mc/mgquests/config/QuestObject.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.ericlam.mc.mgquests.config;

import com.ericlam.mc.eld.annotations.GroupResource;
import com.ericlam.mc.eld.components.GroupConfiguration;

import java.util.Map;

@GroupResource(
folder = "quests",
preloads = {"win-5-mcinf-hourly", "kill-20-mcinf-daily"}
)
public class QuestObject extends GroupConfiguration {

public String type;
public Map<String, Double> targets;
public TimeDuration timeLimit;

public TimeDuration coolDown;

public static class TimeDuration {
public long time;
public String type;
}

}
Loading

0 comments on commit 60b4432

Please sign in to comment.