use of betterquesting.api.questing.IQuest in project BetterQuesting by Funwayguy.
the class QuestCache method updateCache.
public void updateCache(EntityPlayer player) {
if (player == null) {
return;
}
UUID uuid = QuestingAPI.getQuestingUUID(player);
HashMap<Integer, List<Integer>> pCache = new HashMap<Integer, List<Integer>>();
IQuestDatabase questDB = QuestingAPI.getAPI(ApiReference.QUEST_DB);
List<Integer> idList = questDB.getAllKeys();
for (int qID : idList) {
IQuest quest = questDB.getValue(qID);
if (quest == null || (!quest.isUnlocked(uuid) && !quest.getProperties().getProperty(NativeProps.LOCKED_PROGRESS))) {
// Invalid or locked
continue;
} else if (quest.canSubmit(player) || quest.getProperties().getProperty(NativeProps.REPEAT_TIME).intValue() >= 0) {
// Active quest or pending repeat reset
} else if (quest.getProperties().getProperty(NativeProps.AUTO_CLAIM) && !quest.hasClaimed(uuid)) {
// Pending auto-claim
} else {
continue;
}
List<Integer> tList = new ArrayList<Integer>();
for (int tID : quest.getTasks().getAllKeys()) {
ITask task = quest.getTasks().getValue(tID);
if (task != null && !task.isComplete(uuid)) {
tList.add(tID);
}
}
pCache.put(qID, tList);
}
rawCache.put(uuid, pCache);
}
use of betterquesting.api.questing.IQuest in project BetterQuesting by Funwayguy.
the class QuestCache method getActiveQuests.
/**
* Returns a cached list of active quests
*/
public List<IQuest> getActiveQuests(UUID uuid) {
List<IQuest> list = new ArrayList<IQuest>();
HashMap<Integer, List<Integer>> pCache = rawCache.get(uuid);
pCache = pCache != null ? pCache : new HashMap<Integer, List<Integer>>();
for (int id : pCache.keySet()) {
IQuest quest = QuestingAPI.getAPI(ApiReference.QUEST_DB).getValue(id);
if (quest != null) {
list.add(quest);
}
}
return list;
}
use of betterquesting.api.questing.IQuest in project BetterQuesting by Funwayguy.
the class TileSubmitStation method fill.
@Override
public int fill(FluidStack fluid, boolean doFill) {
IQuest q = getQuest();
IFluidTask t = getFluidTask();
if (q == null || t == null || fluid == null) {
return 0;
}
FluidStack remainder = null;
int amount = fluid.amount;
if (doFill) {
remainder = t.submitFluid(owner, fluid);
if (((ITask) t).isComplete(owner)) {
PacketSender.INSTANCE.sendToAll(q.getSyncPacket());
reset();
world.getMinecraftServer().getPlayerList().sendToAllNearExcept(null, pos.getX(), pos.getY(), pos.getZ(), 128, world.provider.getDimension(), getUpdatePacket());
} else {
needsUpdate = true;
}
}
return remainder != null ? amount - remainder.amount : amount;
}
use of betterquesting.api.questing.IQuest in project BetterQuesting by Funwayguy.
the class TileSubmitStation method update.
@Override
public void update() {
if (world.isRemote || QuestSettings.INSTANCE.getProperty(NativeProps.EDIT_MODE)) {
return;
}
IQuest q = getQuest();
IItemTask t = getItemTask();
if (world.getTotalWorldTime() % 10 == 0) {
if (owner != null && q != null && t != null && owner != null && !itemStack.get(0).isEmpty() && itemStack.get(1).isEmpty()) {
ItemStack inStack = itemStack.get(0).copy();
if (t.canAcceptItem(owner, inStack)) {
// Even if this returns an invalid item for submission it will be moved next pass
itemStack.set(0, t.submitItem(owner, inStack));
if (((ITask) t).isComplete(owner)) {
PacketSender.INSTANCE.sendToAll(q.getSyncPacket());
reset();
world.getMinecraftServer().getPlayerList().sendToAllNearExcept(null, pos.getX(), pos.getY(), pos.getZ(), 128, world.provider.getDimension(), getUpdatePacket());
} else {
needsUpdate = true;
}
} else {
itemStack.set(1, inStack);
itemStack.set(0, ItemStack.EMPTY);
}
}
if (needsUpdate) {
needsUpdate = false;
if (q != null && !world.isRemote) {
PacketSender.INSTANCE.sendToAll(q.getSyncPacket());
}
} else if (t != null && ((ITask) t).isComplete(owner)) {
reset();
world.getMinecraftServer().getPlayerList().sendToAllNearExcept(null, pos.getX(), pos.getY(), pos.getZ(), 128, world.provider.getDimension(), getUpdatePacket());
}
}
}
Aggregations