Search in sources :

Example 21 with IQuest

use of betterquesting.api.questing.IQuest in project BetterQuesting by Funwayguy.

the class CanvasQuestLine method setQuestLine.

/**
 * Loads in quests and connecting lines
 * @param line The quest line to load
 */
public void setQuestLine(IQuestLine line) {
    // Rest contents
    this.getAllPanels().clear();
    if (line == null) {
        return;
    }
    EntityPlayer player = Minecraft.getMinecraft().player;
    UUID pid = QuestingAPI.getQuestingUUID(player);
    String bgString = line.getProperties().getProperty(NativeProps.BG_IMAGE);
    if (bgString != null && bgString.length() > 0) {
        ResourceLocation bgRes = new ResourceLocation(bgString);
        int bgSize = line.getProperties().getProperty(NativeProps.BG_SIZE);
        this.addPanel(new PanelGeneric(new GuiRectangle(0, 0, bgSize, bgSize), new SimpleTexture(bgRes, new GuiRectangle(0, 0, 256, 256))));
    }
    // Used later to center focus the quest line within the window
    boolean flag = false;
    int minX = 0;
    int minY = 0;
    int maxX = 0;
    int maxY = 0;
    HashMap<Integer, PanelButtonStorage<IQuest>> questBtns = new HashMap<>();
    for (IQuestLineEntry qle : line.getAllValues()) {
        int id = line.getKey(qle);
        IQuest quest = QuestDatabase.INSTANCE.getValue(id);
        if (quest == null || !isQuestShown(quest, pid)) {
            continue;
        }
        EnumQuestState qState = quest.getState(pid);
        IGuiTexture txFrame = null;
        IGuiColor txIconCol = null;
        boolean main = quest.getProperties().getProperty(NativeProps.MAIN);
        switch(qState) {
            case LOCKED:
                txFrame = main ? PresetTexture.QUEST_MAIN_0.getTexture() : PresetTexture.QUEST_NORM_0.getTexture();
                txIconCol = PresetColor.QUEST_ICON_LOCKED.getColor();
                break;
            case UNLOCKED:
                txFrame = main ? PresetTexture.QUEST_MAIN_1.getTexture() : PresetTexture.QUEST_NORM_1.getTexture();
                txIconCol = PresetColor.QUEST_ICON_UNLOCKED.getColor();
                break;
            case UNCLAIMED:
                txFrame = main ? PresetTexture.QUEST_MAIN_2.getTexture() : PresetTexture.QUEST_NORM_2.getTexture();
                txIconCol = PresetColor.QUEST_ICON_PENDING.getColor();
                break;
            case COMPLETED:
                txFrame = main ? PresetTexture.QUEST_MAIN_3.getTexture() : PresetTexture.QUEST_NORM_3.getTexture();
                txIconCol = PresetColor.QUEST_ICON_COMPLETE.getColor();
                break;
        }
        IGuiRect rect = new GuiRectangle(qle.getPosX(), qle.getPosY(), qle.getSize(), qle.getSize());
        PanelButtonStorage<IQuest> paBtn = new PanelButtonStorage<>(rect, buttonId, "", quest);
        paBtn.setTextures(new GuiTextureColored(txFrame, txIconCol), new GuiTextureColored(txFrame, txIconCol), new GuiTextureColored(txFrame, txIconCol));
        paBtn.setIcon(new ItemTexture(quest.getItemIcon()), 4);
        paBtn.setTooltip(quest.getTooltip(player));
        this.addPanel(paBtn);
        questBtns.put(id, paBtn);
        if (!flag) {
            minX = rect.getX();
            minY = rect.getY();
            maxX = minX + rect.getWidth();
            maxY = minY + rect.getHeight();
            flag = true;
        } else {
            minX = Math.min(minX, rect.getX());
            minY = Math.min(minY, rect.getY());
            maxX = Math.max(maxX, rect.getX() + rect.getWidth());
            maxY = Math.max(maxY, rect.getY() + rect.getHeight());
        }
    }
    for (Entry<Integer, PanelButtonStorage<IQuest>> entry : questBtns.entrySet()) {
        IQuest quest = entry.getValue().getStoredValue();
        List<IQuest> reqList = quest.getPrerequisites();
        if (reqList.size() <= 0) {
            continue;
        }
        boolean main = quest.getProperties().getProperty(NativeProps.MAIN);
        EnumQuestState qState = quest.getState(pid);
        IGuiLine lineRender = null;
        IGuiColor txLineCol = null;
        switch(qState) {
            case LOCKED:
                lineRender = PresetLine.QUEST_LOCKED.getLine();
                txLineCol = PresetColor.QUEST_LINE_LOCKED.getColor();
                break;
            case UNLOCKED:
                lineRender = PresetLine.QUEST_UNLOCKED.getLine();
                txLineCol = PresetColor.QUEST_LINE_UNLOCKED.getColor();
                break;
            case UNCLAIMED:
                lineRender = PresetLine.QUEST_PENDING.getLine();
                txLineCol = PresetColor.QUEST_LINE_PENDING.getColor();
                break;
            case COMPLETED:
                lineRender = PresetLine.QUEST_COMPLETE.getLine();
                txLineCol = PresetColor.QUEST_LINE_COMPLETE.getColor();
                break;
        }
        for (IQuest req : reqList) {
            int id = QuestDatabase.INSTANCE.getKey(req);
            PanelButtonStorage<IQuest> parBtn = questBtns.get(id);
            if (parBtn != null) {
                PanelLine prLine = new PanelLine(parBtn.getTransform(), entry.getValue().getTransform(), lineRender, main ? 8 : 4, txLineCol, 1);
                this.addPanel(prLine);
            }
        }
    }
    float frameW = getTransform().getWidth();
    float frameH = getTransform().getHeight();
    if (frameW <= 0 || frameH <= 0) {
        return;
    }
    minX -= margin;
    minY -= margin;
    maxX += margin;
    maxY += margin;
    float scale = Math.min(frameW / (maxX - minX), frameH / (maxY - minY));
    scale = MathHelper.clamp(scale, 0.25F, 2F);
    this.setZoom(scale);
    int scrollX = Math.round((maxX - minX) / 2F - (frameW / scale) / 2F);
    int scrollY = Math.round((maxY - minY) / 2F - (frameH / scale) / 2F);
    this.setScrollX(scrollX);
    this.setScrollY(scrollY);
}
Also used : HashMap(java.util.HashMap) IGuiColor(betterquesting.api2.client.gui.resources.colors.IGuiColor) IGuiRect(betterquesting.api2.client.gui.misc.IGuiRect) ResourceLocation(net.minecraft.util.ResourceLocation) UUID(java.util.UUID) PanelButtonStorage(betterquesting.api2.client.gui.controls.PanelButtonStorage) IQuest(betterquesting.api.questing.IQuest) IGuiTexture(betterquesting.api2.client.gui.resources.textures.IGuiTexture) GuiRectangle(betterquesting.api2.client.gui.misc.GuiRectangle) IGuiLine(betterquesting.api2.client.gui.resources.lines.IGuiLine) IQuestLineEntry(betterquesting.api.questing.IQuestLineEntry) PanelLine(betterquesting.api2.client.gui.panels.content.PanelLine) SimpleTexture(betterquesting.api2.client.gui.resources.textures.SimpleTexture) GuiTextureColored(betterquesting.api2.client.gui.resources.textures.GuiTextureColored) EnumQuestState(betterquesting.api.enums.EnumQuestState) EntityPlayer(net.minecraft.entity.player.EntityPlayer) PanelGeneric(betterquesting.api2.client.gui.panels.content.PanelGeneric) ItemTexture(betterquesting.api2.client.gui.resources.textures.ItemTexture)

Example 22 with IQuest

use of betterquesting.api.questing.IQuest in project BetterQuesting by Funwayguy.

the class CanvasQuestLine method isQuestShown.

public static boolean isQuestShown(IQuest quest, UUID uuid) {
    if (quest == null || uuid == null) {
        return false;
    }
    Minecraft mc = Minecraft.getMinecraft();
    EnumQuestVisibility vis = quest.getProperties().getProperty(NativeProps.VISIBILITY);
    if (QuestingAPI.getAPI(ApiReference.SETTINGS).canUserEdit(mc.player) || vis == EnumQuestVisibility.ALWAYS) {
        return true;
    } else if (vis == EnumQuestVisibility.HIDDEN) {
        return false;
    } else if (vis == EnumQuestVisibility.UNLOCKED) {
        return quest.isComplete(uuid) || quest.isUnlocked(uuid);
    } else if (vis == EnumQuestVisibility.NORMAL) {
        if (quest.isComplete(uuid) || quest.isUnlocked(uuid)) {
            return true;
        }
        for (IQuest q : quest.getPrerequisites()) {
            if (!q.isUnlocked(uuid)) {
                return false;
            }
        }
        return true;
    } else if (vis == EnumQuestVisibility.COMPLETED) {
        return quest.isComplete(uuid);
    } else if (vis == EnumQuestVisibility.CHAIN) {
        if (quest.getPrerequisites().size() <= 0) {
            return true;
        }
        for (IQuest q : quest.getPrerequisites()) {
            if (isQuestShown(q, uuid)) {
                return true;
            }
        }
        return false;
    }
    return true;
}
Also used : IQuest(betterquesting.api.questing.IQuest) EnumQuestVisibility(betterquesting.api.enums.EnumQuestVisibility) Minecraft(net.minecraft.client.Minecraft)

Example 23 with IQuest

use of betterquesting.api.questing.IQuest in project BetterQuesting by Funwayguy.

the class GuiQuestLines method initPanel.

@Override
public void initPanel() {
    super.initPanel();
    if (selectedLineId >= 0) {
        selectedLine = QuestLineDatabase.INSTANCE.getValue(selectedLineId);
        if (selectedLine == null) {
            selectedLineId = -1;
        }
    } else {
        selectedLine = null;
    }
    boolean canEdit = QuestingAPI.getAPI(ApiReference.SETTINGS).canUserEdit(mc.player);
    PEventBroadcaster.INSTANCE.register(this, PEventButton.class);
    CanvasTextured cvBackground = new CanvasTextured(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(0, 0, 0, 0), 0), PresetTexture.PANEL_MAIN.getTexture());
    this.addPanel(cvBackground);
    if (canEdit) {
        cvBackground.addPanel(new PanelButton(new GuiTransform(GuiAlign.BOTTOM_CENTER, -100, -16, 100, 16, 0), 0, I18n.format("gui.back")));
        cvBackground.addPanel(new PanelButton(new GuiTransform(GuiAlign.BOTTOM_CENTER, 0, -16, 100, 16, 0), 3, I18n.format("betterquesting.btn.edit")));
    } else {
        cvBackground.addPanel(new PanelButton(new GuiTransform(GuiAlign.BOTTOM_CENTER, -100, -16, 200, 16, 0), 0, I18n.format("gui.back")));
    }
    CanvasScrolling cvList = new CanvasScrolling(new GuiTransform(GuiAlign.LEFT_EDGE, new GuiPadding(16, 16, -158, 16), 0));
    cvBackground.addPanel(cvList);
    PanelVScrollBar pnQScroll = new PanelVScrollBar(new GuiTransform(GuiAlign.RIGHT_EDGE, new GuiPadding(0, 0, -8, 0), 0));
    cvList.setScrollDriverY(pnQScroll);
    cvBackground.addPanel(pnQScroll);
    pnQScroll.getTransform().setParent(cvList.getTransform());
    List<IQuestLine> lineList = QuestLineDatabase.INSTANCE.getAllValues();
    this.qlBtns = new PanelButtonStorage[lineList.size()];
    UUID playerID = QuestingAPI.getQuestingUUID(mc.player);
    for (int i = 0; i < lineList.size(); i++) {
        IQuestLine ql = lineList.get(i);
        PanelButtonStorage<IQuestLine> btnLine = new PanelButtonStorage<>(new GuiRectangle(0, i * 16, 142, 16, 0), 1, I18n.format(ql.getUnlocalisedName()), ql);
        boolean show = canEdit;
        if (!show) {
            for (int qID : ql.getAllKeys()) {
                IQuest q = QuestDatabase.INSTANCE.getValue(qID);
                if (q != null && CanvasQuestLine.isQuestShown(q, playerID)) {
                    show = true;
                    break;
                }
            }
        }
        if (!show || ql == selectedLine) {
            btnLine.setBtnState(false);
        }
        cvList.addPanel(btnLine);
        qlBtns[i] = btnLine;
    }
    pnQScroll.setEnabled(cvList.getScrollBounds().getHeight() > 0);
    CanvasTextured cvFrame = new CanvasTextured(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(174, 16, 16, 66), 0), PresetTexture.AUX_FRAME_0.getTexture());
    cvBackground.addPanel(cvFrame);
    cvQuest = new CanvasQuestLine(new GuiTransform(GuiAlign.FULL_BOX, new GuiPadding(0, 0, 0, 0), 0), 2);
    cvFrame.addPanel(cvQuest);
    cvDesc = new CanvasScrolling(new GuiTransform(GuiAlign.BOTTOM_EDGE, new GuiPadding(174, -66, 24, 16), 0));
    cvBackground.addPanel(cvDesc);
    paDesc = new PanelTextBox(new GuiRectangle(0, 0, cvDesc.getTransform().getWidth(), 0, 0), "", true);
    paDesc.setColor(PresetColor.TEXT_MAIN.getColor());
    cvDesc.addPanel(paDesc);
    scDesc = new PanelVScrollBar(new GuiTransform(GuiAlign.BOTTOM_RIGHT, new GuiPadding(-24, -66, 16, 16), 0));
    cvDesc.setScrollDriverY(scDesc);
    cvBackground.addPanel(scDesc);
    if (selectedLine != null) {
        cvQuest.setQuestLine(selectedLine);
        cvQuest.setZoom(lastZoom);
        cvQuest.setScrollX(lastScrollX);
        cvQuest.setScrollY(lastScrollY);
        paDesc.setText(I18n.format(selectedLine.getUnlocalisedDescription()));
        scDesc.setEnabled(cvDesc.getScrollBounds().getHeight() > 0);
    }
    // === DECORATIVE LINES ===
    IGuiRect ls0 = new GuiTransform(GuiAlign.TOP_LEFT, 16, 16, 0, 0, 0);
    ls0.setParent(cvBackground.getTransform());
    IGuiRect le0 = new GuiTransform(GuiAlign.TOP_LEFT, 166, 16, 0, 0, 0);
    le0.setParent(cvBackground.getTransform());
    PanelLine paLine0 = new PanelLine(ls0, le0, PresetLine.GUI_DIVIDER.getLine(), 1, PresetColor.GUI_DIVIDER.getColor(), -1);
    cvBackground.addPanel(paLine0);
    IGuiRect ls1 = new GuiTransform(GuiAlign.BOTTOM_LEFT, 16, -16, 0, 0, 0);
    ls1.setParent(cvBackground.getTransform());
    IGuiRect le1 = new GuiTransform(GuiAlign.BOTTOM_LEFT, 166, -16, 0, 0, 0);
    le1.setParent(cvBackground.getTransform());
    PanelLine paLine1 = new PanelLine(ls1, le1, PresetLine.GUI_DIVIDER.getLine(), 1, PresetColor.GUI_DIVIDER.getColor(), 1);
    cvBackground.addPanel(paLine1);
    IGuiRect ls3 = new GuiTransform(GuiAlign.BOTTOM_LEFT, 174, -16, 0, 0, 0);
    ls3.setParent(cvBackground.getTransform());
    IGuiRect le3 = new GuiTransform(GuiAlign.BOTTOM_RIGHT, -16, -16, 0, 0, 0);
    le3.setParent(cvBackground.getTransform());
    PanelLine paLine3 = new PanelLine(ls3, le3, PresetLine.GUI_DIVIDER.getLine(), 1, PresetColor.GUI_DIVIDER.getColor(), 1);
    cvBackground.addPanel(paLine3);
}
Also used : PanelButton(betterquesting.api2.client.gui.controls.PanelButton) IPanelButton(betterquesting.api2.client.gui.controls.IPanelButton) IQuest(betterquesting.api.questing.IQuest) PanelVScrollBar(betterquesting.api2.client.gui.panels.bars.PanelVScrollBar) PanelLine(betterquesting.api2.client.gui.panels.content.PanelLine) PanelTextBox(betterquesting.api2.client.gui.panels.content.PanelTextBox) IQuestLine(betterquesting.api.questing.IQuestLine) CanvasTextured(betterquesting.api2.client.gui.panels.CanvasTextured) CanvasScrolling(betterquesting.api2.client.gui.panels.lists.CanvasScrolling) UUID(java.util.UUID) PanelButtonStorage(betterquesting.api2.client.gui.controls.PanelButtonStorage)

Example 24 with IQuest

use of betterquesting.api.questing.IQuest in project BetterQuesting by Funwayguy.

the class ImportedQuests method readFromNBT.

@Override
public void readFromNBT(NBTTagList json, EnumSaveType saveType) {
    if (saveType != EnumSaveType.CONFIG) {
        return;
    }
    database.clear();
    for (int i = 0; i < json.tagCount(); i++) {
        NBTBase entry = json.get(i);
        if (entry == null || entry.getId() != 10) {
            continue;
        }
        NBTTagCompound qTag = (NBTTagCompound) entry;
        int qID = qTag.hasKey("questID", 99) ? qTag.getInteger("questID") : -1;
        if (qID < 0) {
            continue;
        }
        IQuest quest = getValue(qID);
        quest = quest != null ? quest : this.createNew();
        quest.readFromNBT(qTag, EnumSaveType.CONFIG);
        database.put(qID, quest);
    }
}
Also used : NBTBase(net.minecraft.nbt.NBTBase) IQuest(betterquesting.api.questing.IQuest) NBTTagCompound(net.minecraft.nbt.NBTTagCompound)

Example 25 with IQuest

use of betterquesting.api.questing.IQuest in project BetterQuesting by Funwayguy.

the class ImportedQuests method createNew.

@Override
public IQuest createNew() {
    IQuest q = new QuestInstance();
    q.setParentDatabase(this);
    return q;
}
Also used : IQuest(betterquesting.api.questing.IQuest) QuestInstance(betterquesting.questing.QuestInstance)

Aggregations

IQuest (betterquesting.api.questing.IQuest)44 NBTTagCompound (net.minecraft.nbt.NBTTagCompound)12 ITask (betterquesting.api.questing.tasks.ITask)9 UUID (java.util.UUID)9 QuestInstance (betterquesting.questing.QuestInstance)8 ArrayList (java.util.ArrayList)6 GuiButtonQuestInstance (betterquesting.api.client.gui.controls.GuiButtonQuestInstance)5 QuestingPacket (betterquesting.api.network.QuestingPacket)4 IQuestLine (betterquesting.api.questing.IQuestLine)4 HashMap (java.util.HashMap)4 NBTBase (net.minecraft.nbt.NBTBase)4 GuiButtonThemed (betterquesting.api.client.gui.controls.GuiButtonThemed)3 IQuestLineEntry (betterquesting.api.questing.IQuestLineEntry)3 PanelButtonStorage (betterquesting.api2.client.gui.controls.PanelButtonStorage)3 QuestLineEntry (betterquesting.questing.QuestLineEntry)3 List (java.util.List)3 Minecraft (net.minecraft.client.Minecraft)3 CommandException (net.minecraft.command.CommandException)3 TextComponentTranslation (net.minecraft.util.text.TextComponentTranslation)3 IPanelButton (betterquesting.api2.client.gui.controls.IPanelButton)2