use of betterquesting.api.questing.tasks.ITask in project BetterQuesting by Funwayguy.
the class GuiTaskEditDefault method setValue.
@Override
public void setValue(NBTTagCompound value) {
ITask task = quest.getTasks().getValue(tID);
if (task != null) {
task.readFromNBT(value, EnumSaveType.CONFIG);
this.SendChanges();
}
}
use of betterquesting.api.questing.tasks.ITask in project BetterQuesting by Funwayguy.
the class PktHandlerQuestEdit method handleServer.
@Override
public void handleServer(NBTTagCompound data, EntityPlayerMP sender) {
if (sender == null) {
return;
}
boolean isOP = sender.world.getMinecraftServer().getPlayerList().canSendCommands(sender.getGameProfile());
if (!isOP) {
BetterQuesting.logger.log(Level.WARN, "Player " + sender.getName() + " (UUID:" + QuestingAPI.getQuestingUUID(sender) + ") tried to edit quest without OP permissions!");
sender.sendStatusMessage(new TextComponentString(TextFormatting.RED + "You need to be OP to edit quests!"), false);
// Player is not operator. Do nothing
return;
}
int aID = !data.hasKey("action") ? -1 : data.getInteger("action");
int qID = !data.hasKey("questID") ? -1 : data.getInteger("questID");
IQuest quest = QuestDatabase.INSTANCE.getValue(qID);
EnumPacketAction action = null;
if (aID < 0 || aID >= EnumPacketAction.values().length) {
return;
}
action = EnumPacketAction.values()[aID];
if (action == EnumPacketAction.EDIT && quest != null) {
quest.readPacket(data);
PacketSender.INSTANCE.sendToAll(quest.getSyncPacket());
return;
} else if (action == EnumPacketAction.REMOVE) {
if (quest == null || qID < 0) {
BetterQuesting.logger.log(Level.ERROR, sender.getName() + " tried to delete non-existent quest with ID:" + qID);
return;
}
BetterQuesting.logger.log(Level.INFO, "Player " + sender.getName() + " deleted quest " + quest.getUnlocalisedName());
QuestDatabase.INSTANCE.removeKey(qID);
PacketSender.INSTANCE.sendToAll(QuestDatabase.INSTANCE.getSyncPacket());
return;
} else if (// Force Complete/Reset
action == EnumPacketAction.SET && quest != null) {
if (data.getBoolean("state")) {
UUID senderID = QuestingAPI.getQuestingUUID(sender);
boolean com = quest.isComplete(senderID);
if (com && quest instanceof QuestInstance) {
((QuestInstance) quest).setClaimed(senderID, 0);
} else {
quest.setComplete(senderID, 0);
int done = 0;
if (// Preliminary check
!quest.getProperties().getProperty(NativeProps.LOGIC_TASK).getResult(done, quest.getTasks().size())) {
for (ITask task : quest.getTasks().getAllValues()) {
task.setComplete(senderID);
done += 1;
if (quest.getProperties().getProperty(NativeProps.LOGIC_TASK).getResult(done, quest.getTasks().size())) {
// Only complete enough quests to claim the reward
break;
}
}
}
}
} else {
quest.resetAll(true);
}
PacketSender.INSTANCE.sendToAll(quest.getSyncPacket());
return;
} else if (action == EnumPacketAction.ADD) {
IQuest nq = new QuestInstance();
int nID = QuestDatabase.INSTANCE.nextKey();
if (data.hasKey("data") && data.hasKey("questID")) {
nID = data.getInteger("questID");
NBTTagCompound base = data.getCompoundTag("data");
nq.readFromNBT(base.getCompoundTag("config"), EnumSaveType.CONFIG);
}
QuestDatabase.INSTANCE.add(nq, nID);
PacketSender.INSTANCE.sendToAll(nq.getSyncPacket());
return;
}
}
use of betterquesting.api.questing.tasks.ITask in project BetterQuesting by Funwayguy.
the class QuestInstance method update.
/**
* Quest specific living update event. Do not use for item submissions
*/
@Override
public void update(EntityPlayer player) {
UUID playerID = QuestingAPI.getQuestingUUID(player);
if (isComplete(playerID)) {
UserEntry entry = GetUserEntry(playerID);
if (!hasClaimed(playerID)) {
if (canClaim(player)) {
// Task logic is not required to run.
if (qInfo.getProperty(NativeProps.AUTO_CLAIM) && player.ticksExisted % 20 == 0) {
claimReward(player);
}
return;
} else if (qInfo.getProperty(NativeProps.REPEAT_TIME).intValue() < 0 || rewards.size() <= 0) {
// Task is non repeatable or has no rewards to claim
return;
} else {
// Task logic will now run for repeat quest
}
} else if (rewards.size() > 0 && qInfo.getProperty(NativeProps.REPEAT_TIME).intValue() >= 0 && player.world.getTotalWorldTime() - entry.getTimestamp() >= qInfo.getProperty(NativeProps.REPEAT_TIME).intValue()) {
// Task is scheduled to reset
if (qInfo.getProperty(NativeProps.GLOBAL)) {
resetAll(false);
} else {
resetUser(playerID, false);
}
if (!QuestSettings.INSTANCE.getProperty(NativeProps.EDIT_MODE) && !qInfo.getProperty(NativeProps.SILENT)) {
postPresetNotice(player, 1);
}
PacketSender.INSTANCE.sendToAll(getSyncPacket());
return;
} else {
// No reset or reset is pending
return;
}
}
if (isUnlocked(playerID) || qInfo.getProperty(NativeProps.LOCKED_PROGRESS)) {
int done = 0;
for (ITask tsk : tasks.getAllValues()) {
if (tsk.isComplete(playerID)) {
IParty party = PartyManager.INSTANCE.getUserParty(playerID);
if (// Ensures task is marked as complete for all team members
party != null) {
for (UUID mem : party.getMembers()) {
tsk.setComplete(mem);
}
}
done += 1;
}
}
if (!isUnlocked(playerID)) {
return;
} else if ((tasks.size() > 0 || !QuestSettings.INSTANCE.getProperty(NativeProps.EDIT_MODE)) && qInfo.getProperty(NativeProps.LOGIC_TASK).getResult(done, tasks.size())) {
setComplete(playerID, player.world.getTotalWorldTime());
PacketSender.INSTANCE.sendToAll(getSyncPacket());
if (!QuestSettings.INSTANCE.getProperty(NativeProps.EDIT_MODE) && !qInfo.getProperty(NativeProps.SILENT)) {
postPresetNotice(player, 2);
}
} else if (done > 0 && qInfo.getProperty(NativeProps.SIMULTANEOUS)) {
resetUser(playerID, false);
PacketSender.INSTANCE.sendToAll(getSyncPacket());
}
}
}
use of betterquesting.api.questing.tasks.ITask in project BetterQuesting by Funwayguy.
the class TaskStorage method readFromJson_Config.
private void readFromJson_Config(NBTTagList json) {
database.clear();
ArrayList<ITask> unassigned = new ArrayList<ITask>();
for (int i = 0; i < json.tagCount(); i++) {
NBTBase entry = json.get(i);
if (entry == null || entry.getId() != 10) {
continue;
}
NBTTagCompound jsonTask = (NBTTagCompound) entry;
ResourceLocation loc = new ResourceLocation(jsonTask.getString("taskID"));
int index = jsonTask.hasKey("index", 99) ? jsonTask.getInteger("index") : -1;
ITask task = TaskRegistry.INSTANCE.createTask(loc);
if (task instanceof TaskPlaceholder) {
NBTTagCompound jt2 = jsonTask.getCompoundTag("orig_data");
ResourceLocation loc2 = new ResourceLocation(jt2.getString("taskID"));
ITask t2 = TaskRegistry.INSTANCE.createTask(loc2);
if (// Restored original task
t2 != null) {
jsonTask = jt2;
task = t2;
}
}
if (task != null) {
task.readFromNBT(jsonTask, EnumSaveType.CONFIG);
if (index >= 0) {
add(task, index);
} else {
unassigned.add(task);
}
} else {
TaskPlaceholder tph = new TaskPlaceholder();
tph.setTaskData(jsonTask, EnumSaveType.CONFIG);
if (index >= 0) {
add(tph, index);
} else {
unassigned.add(tph);
}
}
}
for (ITask t : unassigned) {
add(t, nextKey());
}
}
use of betterquesting.api.questing.tasks.ITask in project BetterQuesting by Funwayguy.
the class TaskStorage method writeToJson_Config.
private NBTTagList writeToJson_Config(NBTTagList json) {
for (Entry<Integer, ITask> entry : database.entrySet()) {
ResourceLocation taskID = entry.getValue().getFactoryID();
NBTTagCompound qJson = entry.getValue().writeToNBT(new NBTTagCompound(), EnumSaveType.CONFIG);
qJson.setString("taskID", taskID.toString());
qJson.setInteger("index", entry.getKey());
json.appendTag(qJson);
}
return json;
}
Aggregations