Skip to content

Commit

Permalink
Use UUID for quest ID, and split up giant quest JSON file (#89)
Browse files Browse the repository at this point in the history
* Delete legacy loaders

Removing code that we don't need, to reduce the amount of code that needs to be updated

* Delete importers

Removing code that we don't need, to reduce the amount of code that needs to be updated

* Define UUID database class

* Update quest database interfaces to use UUID

* Add NBT conversion methods for UUIDs

* Update quest database implementations

* Update QuestCache and imported DB classes

* Update misc handlers

* Update network handlers

* Update more network handlers

* Update more handlers

* Update commands

* Update misc code

* Update GUI 1

* Update GUI 2

* Update GUI 3

* Update blocks

* Update ParticipantInfo

* Update interfaces, placeholders, QuestEvent

* Update tools

* Update rewards

* Update tasks

* Update format version

* Update localized strings

* Add button to copy quest ID to clipboard

* Improve formatting of QuestCommandDefaults.java

* Refactor in preparation for implementing multi-file

* Implement multi-file saving

* Replace other instances of database loading with references to new loading code

We should probably refactor this code out of QuestCommandDefaults at some point

* Fix ConcurrentModificationException

This isn't directly related to my other changes, but somehow something I changed seems to be triggering this latent bug.

* Optimize UuidDatabase.filterKeys

* Fix bug where we weren't restoring world-specific settings

* Delete old save files when saving over it

Also fix incorrect method of deleting directories

* Add check to avoid deleting non-database directories

* Add `savelegacy` command to save in old format

* Add translation methods for names and descriptions

* Refactor to use new translation methods

* Write lang file when saving

* Refactor quest lines to use new translation methods

* Fix obfuscated reflection field name and add missing `String.format()` call

* Fix lang file format

* Add non-obfuscated reflection field name

Now works in non-obfuscated dev client environment

* Fix typo

* Group up quests in `en_US.lang`

Quests are now grouped by quest line, and ordered within a quest line by an algorithm approximating depth-first traversal of the requirements graph

* Refactor NBTConverter UUID methods

Share code for quest IDs and quest line IDs

* Update QuestDatabase

 * Update to new NBTConverter methods
 * Fix bad type in subset param

* Update QuestLineDatabase to use UUID

Also remove code duplication in ImportedQuestLines

* Refactor quest ID code to new methods

* Update core code

* Update GUI code

* Update toolbox code

* Update command code

* Update net code
  • Loading branch information
D-Cysteine authored Mar 19, 2023
1 parent a8eb2f4 commit 2769b7c
Show file tree
Hide file tree
Showing 154 changed files with 3,181 additions and 4,216 deletions.
10 changes: 5 additions & 5 deletions src/main/java/betterquesting/api/events/QuestEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ public class QuestEvent extends Event
{
private final Type type;
private final UUID playerID;
private final Set<Integer> questIDs;
private final Set<UUID> questIDs;

public Set<Integer> getQuestIDs()
public Set<UUID> getQuestIDs()
{
return this.questIDs;
}
Expand All @@ -25,18 +25,18 @@ public Type getType()
return this.type;
}

public QuestEvent(Type type, UUID playerID, int questID)
public QuestEvent(Type type, UUID playerID, UUID questID)
{
this.type = type;
this.playerID = playerID;
this.questIDs = Collections.singleton(questID);
}

public QuestEvent(Type type, UUID playerID, Collection<Integer> questIDs)
public QuestEvent(Type type, UUID playerID, Collection<UUID> questIDs)
{
this.type = type;
this.playerID = playerID;
this.questIDs = Collections.unmodifiableSet(new TreeSet<>(questIDs));
this.questIDs = Collections.unmodifiableSet(new HashSet<>(questIDs));
}

public enum Type
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
import betterquesting.api.questing.rewards.IReward;
import betterquesting.api2.client.gui.misc.IGuiRect;
import betterquesting.api2.client.gui.panels.IGuiPanel;
import betterquesting.api2.storage.DBEntry;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ResourceLocation;

import java.util.Map;
import java.util.UUID;

public class RewardPlaceholder implements IReward
{
private NBTTagCompound nbtSaved = new NBTTagCompound();
Expand Down Expand Up @@ -51,24 +53,24 @@ public ResourceLocation getFactoryID()
}

@Override
public boolean canClaim(EntityPlayer player, DBEntry<IQuest> quest)
public boolean canClaim(EntityPlayer player, Map.Entry<UUID, IQuest> quest)
{
return false;
}

@Override
public void claimReward(EntityPlayer player, DBEntry<IQuest> quest)
public void claimReward(EntityPlayer player, Map.Entry<UUID, IQuest> quest)
{
}

@Override
public IGuiPanel getRewardGui(IGuiRect rect, DBEntry<IQuest> quest)
public IGuiPanel getRewardGui(IGuiRect rect, Map.Entry<UUID, IQuest> quest)
{
return null;
}

@Override
public GuiScreen getRewardEditor(GuiScreen parent, DBEntry<IQuest> quest)
public GuiScreen getRewardEditor(GuiScreen parent, Map.Entry<UUID, IQuest> quest)
{
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@
import betterquesting.api.questing.tasks.ITask;
import betterquesting.api2.client.gui.misc.IGuiRect;
import betterquesting.api2.client.gui.panels.IGuiPanel;
import betterquesting.api2.storage.DBEntry;
import betterquesting.api2.utils.ParticipantInfo;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ResourceLocation;

import javax.annotation.Nullable;
import java.util.List;
import java.util.Map;
import java.util.UUID;

public class TaskPlaceholder implements ITask
Expand Down Expand Up @@ -77,7 +77,7 @@ public ResourceLocation getFactoryID()
}

@Override
public void detect(ParticipantInfo participant, DBEntry<IQuest> quest)
public void detect(ParticipantInfo participant, Map.Entry<UUID, IQuest> quest)
{
}

Expand All @@ -98,13 +98,13 @@ public void resetUser(@Nullable UUID uuid)
}

@Override
public IGuiPanel getTaskGui(IGuiRect rect, DBEntry<IQuest> quest)
public IGuiPanel getTaskGui(IGuiRect rect, Map.Entry<UUID, IQuest> quest)
{
return null;
}

@Override
public GuiScreen getTaskEditor(GuiScreen parent, DBEntry<IQuest> quest)
public GuiScreen getTaskEditor(GuiScreen parent, Map.Entry<UUID, IQuest> quest)
{
return null;
}
Expand Down
12 changes: 7 additions & 5 deletions src/main/java/betterquesting/api/questing/IQuest.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Locale;
import java.util.Set;
import java.util.UUID;

public interface IQuest extends INBTSaveLoad<NBTTagCompound>, INBTProgress<NBTTagCompound>, IPropertyContainer
Expand Down Expand Up @@ -60,14 +61,15 @@ public interface IQuest extends INBTSaveLoad<NBTTagCompound>, INBTProgress<NBTTa

IDatabaseNBT<ITask, NBTTagList, NBTTagList> getTasks();
IDatabaseNBT<IReward, NBTTagList, NBTTagList> getRewards();


/** Returns a mutable set. Changes made to the returned set will be reflected in the quest! */
@Nonnull
int[] getRequirements();
void setRequirements(@Nonnull int[] req);
Set<UUID> getRequirements();
void setRequirements(@Nonnull Iterable<UUID> req);

@Nonnull
RequirementType getRequirementType(int req);
void setRequirementType(int req, @Nonnull RequirementType kind);
RequirementType getRequirementType(UUID req);
void setRequirementType(UUID req, @Nonnull RequirementType kind);

enum RequirementType {
NORMAL(PresetIcon.ICON_VISIBILITY_NORMAL),
Expand Down
8 changes: 5 additions & 3 deletions src/main/java/betterquesting/api/questing/IQuestDatabase.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package betterquesting.api.questing;

import betterquesting.api2.storage.IDatabase;
import betterquesting.api2.storage.INBTPartial;
import betterquesting.api2.storage.INBTProgress;
import betterquesting.api2.storage.IUuidDatabase;
import net.minecraft.nbt.NBTTagList;

public interface IQuestDatabase extends IDatabase<IQuest>, INBTPartial<NBTTagList, Integer>, INBTProgress<NBTTagList>
import java.util.UUID;

public interface IQuestDatabase extends IUuidDatabase<IQuest>, INBTPartial<NBTTagList, UUID>, INBTProgress<NBTTagList>
{
IQuest createNew(int id);
IQuest createNew(UUID uuid);
}
12 changes: 7 additions & 5 deletions src/main/java/betterquesting/api/questing/IQuestLine.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
package betterquesting.api.questing;

import betterquesting.api.properties.IPropertyContainer;
import betterquesting.api2.storage.DBEntry;
import betterquesting.api2.storage.IDatabase;
import betterquesting.api2.storage.INBTPartial;
import betterquesting.api2.storage.IUuidDatabase;
import net.minecraft.nbt.NBTTagCompound;

public interface IQuestLine extends IDatabase<IQuestLineEntry>, INBTPartial<NBTTagCompound, Integer>, IPropertyContainer
import java.util.Map;
import java.util.UUID;

public interface IQuestLine extends IUuidDatabase<IQuestLineEntry>, INBTPartial<NBTTagCompound, Integer>, IPropertyContainer
{
IQuestLineEntry createNew(int id);
IQuestLineEntry createNew(UUID uuid);

String getUnlocalisedName();

String getUnlocalisedDescription();

DBEntry<IQuestLineEntry> getEntryAt(int x, int y);
Map.Entry<UUID, IQuestLineEntry> getEntryAt(int x, int y);
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,25 @@
package betterquesting.api.questing;

import betterquesting.api2.storage.DBEntry;
import betterquesting.api2.storage.IDatabase;
import betterquesting.api2.storage.INBTPartial;
import betterquesting.api2.storage.IUuidDatabase;
import net.minecraft.nbt.NBTTagList;

import java.util.List;
import java.util.Map;
import java.util.UUID;

public interface IQuestLineDatabase extends IDatabase<IQuestLine>, INBTPartial<NBTTagList, Integer>
public interface IQuestLineDatabase extends IUuidDatabase<IQuestLine>, INBTPartial<NBTTagList, UUID>
{
IQuestLine createNew(int id);
IQuestLine createNew(UUID lineID);

/**
* Deletes quest from all quest lines
*/
void removeQuest(int questID);
void removeQuest(UUID questID);

int getOrderIndex(int lineID);
void setOrderIndex(int lineID, int index);
int getOrderIndex(UUID lineID);
void setOrderIndex(UUID lineID, int index);

List<DBEntry<IQuestLine>> getSortedEntries();
List<Map.Entry<UUID, IQuestLine>> getOrderedEntries();

}
11 changes: 6 additions & 5 deletions src/main/java/betterquesting/api/questing/rewards/IReward.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import betterquesting.api.questing.IQuest;
import betterquesting.api2.client.gui.misc.IGuiRect;
import betterquesting.api2.client.gui.panels.IGuiPanel;
import betterquesting.api2.storage.DBEntry;
import betterquesting.api2.storage.INBTSaveLoad;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
Expand All @@ -13,19 +12,21 @@
import net.minecraft.util.ResourceLocation;

import javax.annotation.Nullable;
import java.util.Map;
import java.util.UUID;

public interface IReward extends INBTSaveLoad<NBTTagCompound>
{
String getUnlocalisedName();
ResourceLocation getFactoryID();

boolean canClaim(EntityPlayer player, DBEntry<IQuest> quest);
void claimReward(EntityPlayer player, DBEntry<IQuest> quest);
boolean canClaim(EntityPlayer player, Map.Entry<UUID, IQuest> quest);
void claimReward(EntityPlayer player, Map.Entry<UUID, IQuest> quest);

@SideOnly(Side.CLIENT)
IGuiPanel getRewardGui(IGuiRect rect, DBEntry<IQuest> quest);
IGuiPanel getRewardGui(IGuiRect rect, Map.Entry<UUID, IQuest> quest);

@Nullable
@SideOnly(Side.CLIENT)
GuiScreen getRewardEditor(GuiScreen parent, DBEntry<IQuest> quest);
GuiScreen getRewardEditor(GuiScreen parent, Map.Entry<UUID, IQuest> quest);
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
package betterquesting.api.questing.tasks;

import betterquesting.api.questing.IQuest;
import betterquesting.api2.storage.DBEntry;
import betterquesting.api2.utils.ParticipantInfo;
import net.minecraftforge.fluids.FluidStack;

import java.util.Map;
import java.util.UUID;

public interface IFluidTask extends ITask
{
boolean canAcceptFluid(UUID owner, DBEntry<IQuest> quest, FluidStack fluid);
FluidStack submitFluid(UUID owner, DBEntry<IQuest> quest, FluidStack fluid);
boolean canAcceptFluid(UUID owner, Map.Entry<UUID, IQuest> quest, FluidStack fluid);
FluidStack submitFluid(UUID owner, Map.Entry<UUID, IQuest> quest, FluidStack fluid);

/**
* @param fluids read-only list of fluids
*/
default void retrieveFluids(ParticipantInfo pInfo, DBEntry<IQuest> quest, FluidStack[] fluids) {}
default void retrieveFluids(ParticipantInfo pInfo, Map.Entry<UUID, IQuest> quest, FluidStack[] fluids) {}
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
package betterquesting.api.questing.tasks;

import betterquesting.api.questing.IQuest;
import betterquesting.api2.storage.DBEntry;
import betterquesting.api2.utils.ParticipantInfo;
import net.minecraft.item.ItemStack;

import java.util.Map;
import java.util.UUID;

public interface IItemTask extends ITask
{
boolean canAcceptItem(UUID owner, DBEntry<IQuest> quest, ItemStack stack);
ItemStack submitItem(UUID owner, DBEntry<IQuest> quest, ItemStack stack);
boolean canAcceptItem(UUID owner, Map.Entry<UUID, IQuest> quest, ItemStack stack);
ItemStack submitItem(UUID owner, Map.Entry<UUID, IQuest> quest, ItemStack stack);

/**
* @param items read-only list of items
*/
default void retrieveItems(ParticipantInfo pInfo, DBEntry<IQuest> quest, ItemStack[] items) {}
default void retrieveItems(ParticipantInfo pInfo, Map.Entry<UUID, IQuest> quest, ItemStack[] items) {}
}
8 changes: 4 additions & 4 deletions src/main/java/betterquesting/api/questing/tasks/ITask.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import betterquesting.api.questing.IQuest;
import betterquesting.api2.client.gui.misc.IGuiRect;
import betterquesting.api2.client.gui.panels.IGuiPanel;
import betterquesting.api2.storage.DBEntry;
import betterquesting.api2.storage.INBTProgress;
import betterquesting.api2.storage.INBTSaveLoad;
import betterquesting.api2.utils.ParticipantInfo;
Expand All @@ -15,14 +14,15 @@

import javax.annotation.Nullable;
import java.util.List;
import java.util.Map;
import java.util.UUID;

public interface ITask extends INBTSaveLoad<NBTTagCompound>, INBTProgress<NBTTagCompound>
{
String getUnlocalisedName();
ResourceLocation getFactoryID();

void detect(ParticipantInfo participant, DBEntry<IQuest> quest);
void detect(ParticipantInfo participant, Map.Entry<UUID, IQuest> quest);

boolean isComplete(UUID uuid);
void setComplete(UUID uuid);
Expand All @@ -31,11 +31,11 @@ public interface ITask extends INBTSaveLoad<NBTTagCompound>, INBTProgress<NBTTag

@Nullable
@SideOnly(Side.CLIENT)
IGuiPanel getTaskGui(IGuiRect rect, DBEntry<IQuest> quest);
IGuiPanel getTaskGui(IGuiRect rect, Map.Entry<UUID, IQuest> quest);

@Nullable
@SideOnly(Side.CLIENT)
GuiScreen getTaskEditor(GuiScreen parent, DBEntry<IQuest> quest);
GuiScreen getTaskEditor(GuiScreen parent, Map.Entry<UUID, IQuest> quest);

/**
* Tasks that set this to true will be ignored by quest completion logic.
Expand Down
Loading

0 comments on commit 2769b7c

Please sign in to comment.