Search in sources :

Example 11 with ITask

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();
    }
}
Also used : ITask(betterquesting.api.questing.tasks.ITask)

Example 12 with ITask

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;
    }
}
Also used : ITask(betterquesting.api.questing.tasks.ITask) IQuest(betterquesting.api.questing.IQuest) EnumPacketAction(betterquesting.api.enums.EnumPacketAction) QuestInstance(betterquesting.questing.QuestInstance) NBTTagCompound(net.minecraft.nbt.NBTTagCompound) UUID(java.util.UUID) TextComponentString(net.minecraft.util.text.TextComponentString)

Example 13 with ITask

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());
        }
    }
}
Also used : ITask(betterquesting.api.questing.tasks.ITask) UserEntry(betterquesting.misc.UserEntry) IParty(betterquesting.api.questing.party.IParty) UUID(java.util.UUID)

Example 14 with ITask

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());
    }
}
Also used : ITask(betterquesting.api.questing.tasks.ITask) NBTBase(net.minecraft.nbt.NBTBase) ResourceLocation(net.minecraft.util.ResourceLocation) ArrayList(java.util.ArrayList) NBTTagCompound(net.minecraft.nbt.NBTTagCompound) FactoryTaskPlaceholder(betterquesting.api.placeholders.tasks.FactoryTaskPlaceholder) TaskPlaceholder(betterquesting.api.placeholders.tasks.TaskPlaceholder)

Example 15 with ITask

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;
}
Also used : ITask(betterquesting.api.questing.tasks.ITask) ResourceLocation(net.minecraft.util.ResourceLocation) NBTTagCompound(net.minecraft.nbt.NBTTagCompound)

Aggregations

ITask (betterquesting.api.questing.tasks.ITask)20 IQuest (betterquesting.api.questing.IQuest)9 UUID (java.util.UUID)8 ArrayList (java.util.ArrayList)6 NBTTagCompound (net.minecraft.nbt.NBTTagCompound)6 ResourceLocation (net.minecraft.util.ResourceLocation)5 TaskPlaceholder (betterquesting.api.placeholders.tasks.TaskPlaceholder)3 QuestInstance (betterquesting.questing.QuestInstance)3 FactoryTaskPlaceholder (betterquesting.api.placeholders.tasks.FactoryTaskPlaceholder)2 IParty (betterquesting.api.questing.party.IParty)2 UserEntry (betterquesting.misc.UserEntry)2 HashMap (java.util.HashMap)2 List (java.util.List)2 NBTBase (net.minecraft.nbt.NBTBase)2 EnumPacketAction (betterquesting.api.enums.EnumPacketAction)1 RewardPlaceholder (betterquesting.api.placeholders.rewards.RewardPlaceholder)1 IPropertyContainer (betterquesting.api.properties.IPropertyContainer)1 IQuestDatabase (betterquesting.api.questing.IQuestDatabase)1 IReward (betterquesting.api.questing.rewards.IReward)1 IFluidTask (betterquesting.api.questing.tasks.IFluidTask)1