diff --git a/src/main/java/com/robertx22/library_of_exile/database/init/LibDatabase.java b/src/main/java/com/robertx22/library_of_exile/database/init/LibDatabase.java index c278acd..5fd048e 100644 --- a/src/main/java/com/robertx22/library_of_exile/database/init/LibDatabase.java +++ b/src/main/java/com/robertx22/library_of_exile/database/init/LibDatabase.java @@ -25,23 +25,23 @@ public class LibDatabase extends ExileDatabaseInit { public static LibDatabase INSTANCE = new LibDatabase(Ref.MODID); - public static ExileRegistryType MAP_DATA_BLOCK = ExileRegistryType.register(Ref.MODID, "map_data_block", 0, MapDataBlock.SERIALIZER, SyncTime.NEVER); - public static ExileRegistryType MOB_LIST = ExileRegistryType.register(Ref.MODID, "mob_list", 0, MobList.SERIALIZER, SyncTime.NEVER); - public static ExileRegistryType MOB_AFFIX = ExileRegistryType.register(Ref.MODID, "mob_affix", 0, ExileMobAffix.SERIALIZER, SyncTime.ON_LOGIN); - public static ExileRegistryType MAP_FINISH_RARITY = ExileRegistryType.register(Ref.MODID, "map_finish_rar", 0, MapFinishRarity.SERIALIZER, SyncTime.ON_LOGIN); - public static ExileRegistryType MAP_CONTENT = ExileRegistryType.register(Ref.MODID, "map_content", 0, MapContent.SERIALIZER, SyncTime.ON_LOGIN); - public static ExileRegistryType LEAGUE = ExileRegistryType.register(Ref.MODID, "league", 0, null, SyncTime.NEVER); + public static ExileRegistryType MAP_DATA_BLOCK = ExileRegistryType.register(Ref.MODID, "map_data_block", 0, MapDataBlock.SERIALIZER, SyncTime.NEVER); + public static ExileRegistryType MOB_LIST = ExileRegistryType.register(Ref.MODID, "mob_list", 0, MobList.SERIALIZER, SyncTime.NEVER); + public static ExileRegistryType MOB_AFFIX = ExileRegistryType.register(Ref.MODID, "mob_affix", 0, ExileMobAffix.SERIALIZER, SyncTime.ON_LOGIN); + public static ExileRegistryType MAP_FINISH_RARITY = ExileRegistryType.register(Ref.MODID, "map_finish_rar", 0, MapFinishRarity.SERIALIZER, SyncTime.ON_LOGIN); + public static ExileRegistryType MAP_CONTENT = ExileRegistryType.register(Ref.MODID, "map_content", 0, MapContent.SERIALIZER, SyncTime.ON_LOGIN); + public static ExileRegistryType LEAGUE = ExileRegistryType.register(Ref.MODID, "league", 0, null, SyncTime.NEVER); // Atlas - public static ExileRegistryType RELIC_STAT = ExileRegistryType.register(Ref.MODID, "relic_stat", 0, RelicStat.SERIALIZER, SyncTime.ON_LOGIN); - public static ExileRegistryType RELIC_TYPE = ExileRegistryType.register(Ref.MODID, "relic_type", 1, RelicType.SERIALIZER, SyncTime.ON_LOGIN); - public static ExileRegistryType RELIC_AFFIX = ExileRegistryType.register(Ref.MODID, "relic_affix", 2, RelicAffix.SERIALIZER, SyncTime.ON_LOGIN); - public static ExileRegistryType RELIC_RARITY = ExileRegistryType.register(Ref.MODID, "relic_rarity", 3, RelicRarity.SERIALIZER, SyncTime.ON_LOGIN); + public static ExileRegistryType RELIC_STAT = ExileRegistryType.register(Ref.MODID, "relic_stat", 0, RelicStat.SERIALIZER, SyncTime.ON_LOGIN); + public static ExileRegistryType RELIC_TYPE = ExileRegistryType.register(Ref.MODID, "relic_type", 1, RelicType.SERIALIZER, SyncTime.ON_LOGIN); + public static ExileRegistryType RELIC_AFFIX = ExileRegistryType.register(Ref.MODID, "relic_affix", 2, RelicAffix.SERIALIZER, SyncTime.ON_LOGIN); + public static ExileRegistryType RELIC_RARITY = ExileRegistryType.register(Ref.MODID, "relic_rarity", 3, RelicRarity.SERIALIZER, SyncTime.ON_LOGIN); - public static ExileRegistryType ITEM_MOD = ExileRegistryType.register(Ref.MODID, "item_modification", 48, ItemModification.SERIALIZER, SyncTime.ON_LOGIN); - public static ExileRegistryType ITEM_REQ = ExileRegistryType.register(Ref.MODID, "item_requirement", 49, ItemRequirement.SERIALIZER, SyncTime.ON_LOGIN); - public static ExileRegistryType CURRENCY = ExileRegistryType.register(Ref.MODID, "currency", 50, ExileCurrency.SERIALIZER, SyncTime.ON_LOGIN); - public static ExileRegistryType ORB_EDIT = ExileRegistryType.register(Ref.MODID, "orb_edit", 51, OrbEdit.SERIALIZER, SyncTime.ON_LOGIN); + public static ExileRegistryType ITEM_MOD = ExileRegistryType.register(Ref.MODID, "item_modification", 48, ItemModification.SERIALIZER, SyncTime.ON_LOGIN); + public static ExileRegistryType ITEM_REQ = ExileRegistryType.register(Ref.MODID, "item_requirement", 49, ItemRequirement.SERIALIZER, SyncTime.ON_LOGIN); + public static ExileRegistryType CURRENCY = ExileRegistryType.register(Ref.MODID, "currency", 50, ExileCurrency.SERIALIZER, SyncTime.ON_LOGIN); + public static ExileRegistryType ORB_EDIT = ExileRegistryType.register(Ref.MODID, "orb_edit", 51, OrbEdit.SERIALIZER, SyncTime.ON_LOGIN); public LibDatabase(String modid) { super(modid); @@ -66,21 +66,21 @@ public static ExileRegistryContainer ItemReq() { @Override public void initDatabases() { - Database.addRegistry(new ExileRegistryContainer<>(MAP_DATA_BLOCK, "empty")); - Database.addRegistry(new ExileRegistryContainer<>(MOB_LIST, "empty")); - Database.addRegistry(new ExileRegistryContainer<>(MOB_AFFIX, "empty")); - Database.addRegistry(new ExileRegistryContainer<>(MAP_FINISH_RARITY, "common")); - Database.addRegistry(new ExileRegistryContainer<>(MAP_CONTENT, "empty")); - Database.addRegistry(new ExileRegistryContainer<>(LEAGUE, "empty")); - Database.addRegistry(new ExileRegistryContainer<>(RELIC_STAT, "empty")); - Database.addRegistry(new ExileRegistryContainer<>(RELIC_TYPE, "empty")); - Database.addRegistry(new ExileRegistryContainer<>(RELIC_AFFIX, "empty")); - Database.addRegistry(new ExileRegistryContainer<>(RELIC_RARITY, "common")); - - Database.addRegistry(new ExileRegistryContainer<>(LibDatabase.ITEM_MOD, "")); - Database.addRegistry(new ExileRegistryContainer<>(LibDatabase.ITEM_REQ, "")); - Database.addRegistry(new ExileRegistryContainer<>(LibDatabase.ORB_EDIT, "")); - Database.addRegistry(new ExileRegistryContainer<>(LibDatabase.CURRENCY, "socket_adder")); + Database.addRegistry(new ExileRegistryContainer(MAP_DATA_BLOCK, "empty")); + Database.addRegistry(new ExileRegistryContainer(MOB_LIST, "empty")); + Database.addRegistry(new ExileRegistryContainer(MOB_AFFIX, "empty")); + Database.addRegistry(new ExileRegistryContainer(MAP_FINISH_RARITY, "common")); + Database.addRegistry(new ExileRegistryContainer(MAP_CONTENT, "empty")); + Database.addRegistry(new ExileRegistryContainer(LEAGUE, "empty")); + Database.addRegistry(new ExileRegistryContainer(RELIC_STAT, "empty")); + Database.addRegistry(new ExileRegistryContainer(RELIC_TYPE, "empty")); + Database.addRegistry(new ExileRegistryContainer(RELIC_AFFIX, "empty")); + Database.addRegistry(new ExileRegistryContainer(RELIC_RARITY, "common")); + + Database.addRegistry(new ExileRegistryContainer(LibDatabase.ITEM_MOD, "")); + Database.addRegistry(new ExileRegistryContainer(LibDatabase.ITEM_REQ, "")); + Database.addRegistry(new ExileRegistryContainer(LibDatabase.ORB_EDIT, "")); + Database.addRegistry(new ExileRegistryContainer(LibDatabase.CURRENCY, "socket_adder")); } diff --git a/src/main/java/com/robertx22/library_of_exile/main/MyPacket.java b/src/main/java/com/robertx22/library_of_exile/main/MyPacket.java index cbebf6e..06ee617 100644 --- a/src/main/java/com/robertx22/library_of_exile/main/MyPacket.java +++ b/src/main/java/com/robertx22/library_of_exile/main/MyPacket.java @@ -20,7 +20,7 @@ public abstract class MyPacket { public abstract MyPacket newInstance(); - public final MyPacket loadFromDataUSETHIS(FriendlyByteBuf buf) { + public final MyPacket loadFromDataUSETHIS(FriendlyByteBuf buf) { MyPacket data = newInstance(); try { diff --git a/src/main/java/com/robertx22/library_of_exile/packets/registry/EfficientRegistryPacket.java b/src/main/java/com/robertx22/library_of_exile/packets/registry/EfficientRegistryPacket.java index 06db808..b4be3d6 100644 --- a/src/main/java/com/robertx22/library_of_exile/packets/registry/EfficientRegistryPacket.java +++ b/src/main/java/com/robertx22/library_of_exile/packets/registry/EfficientRegistryPacket.java @@ -18,19 +18,19 @@ import java.util.List; -public class EfficientRegistryPacket extends MyPacket { +public class EfficientRegistryPacket & JsonExileRegistry> extends MyPacket> { public static final JsonParser PARSER = new JsonParser(); public static ResourceLocation ID = new ResourceLocation(Ref.MODID, "eff_reg"); private List items; - ExileRegistryType type; + ExileRegistryType type; public EfficientRegistryPacket() { } - public EfficientRegistryPacket(ExileRegistryType type, List list) { + public EfficientRegistryPacket(ExileRegistryType type, List list) { this.type = type; this.items = list; } @@ -43,9 +43,11 @@ public ResourceLocation getIdentifier() { @Override public void loadFromData(FriendlyByteBuf buf) { - this.type = ExileRegistryType.get(buf.readUtf()); + var type = ExileRegistryType.get(buf.readUtf()); + // TODO: try to remove this cast + this.type = (ExileRegistryType) type; - ISerializable serializer = type.getSerializer(); + ISerializable serializer = this.type.getSerializer(); this.items = Lists.newArrayList(); @@ -72,7 +74,7 @@ public void saveToData(FriendlyByteBuf buf) { @Override public void onReceived(ExilePacketContext ctx) { - ExileRegistryContainer reg = Database.getRegistry(type); + ExileRegistryContainer reg = Database.getRegistry(type); items.forEach(x -> { x.unregisterFromExileRegistry(); @@ -84,7 +86,7 @@ public void onReceived(ExilePacketContext ctx) { } @Override - public MyPacket newInstance() { - return new EfficientRegistryPacket(); + public MyPacket> newInstance() { + return new EfficientRegistryPacket<>(); } } \ No newline at end of file diff --git a/src/main/java/com/robertx22/library_of_exile/registry/Database.java b/src/main/java/com/robertx22/library_of_exile/registry/Database.java index 88783fa..4627ca0 100644 --- a/src/main/java/com/robertx22/library_of_exile/registry/Database.java +++ b/src/main/java/com/robertx22/library_of_exile/registry/Database.java @@ -10,7 +10,7 @@ public class Database { - private static HashMap SERVER = new HashMap<>(); + private static HashMap, ExileRegistryContainer> SERVER = new HashMap<>(); // private static HashMap BACKUP = new HashMap<>(); public static boolean areDatapacksLoaded(Level world) { @@ -21,22 +21,22 @@ public static boolean areDatapacksLoaded(Level world) { } - public static List getAllRegistries() { + public static List> getAllRegistries() { return new ArrayList<>(SERVER.values()); } - public static ExileRegistryContainer getRegistry(ExileRegistryType type) { - return SERVER.get(type); + public static > ExileRegistryContainer getRegistry(ExileRegistryType type) { + return (ExileRegistryContainer) SERVER.get(type); } - public static ExileRegistry get(ExileRegistryType type, String guid) { + public static > ExileRegistry get(ExileRegistryType type, String guid) { return getRegistry(type).get(guid); } public static void sendPacketsToClient(ServerPlayer player, SyncTime sync) { - List list = ExileRegistryType.getInRegisterOrder(sync); + List> list = ExileRegistryType.getInRegisterOrder(sync); list.forEach(x -> getRegistry(x).sendUpdatePacket(player)); } @@ -79,7 +79,7 @@ public static void unregisterInvalidEntries() { } - public static void addRegistry(ExileRegistryContainer cont) { + public static > void addRegistry(ExileRegistryContainer cont) { SERVER.put(cont.getType(), cont); } } diff --git a/src/main/java/com/robertx22/library_of_exile/registry/ExileRegistry.java b/src/main/java/com/robertx22/library_of_exile/registry/ExileRegistry.java index 81282f4..b11c33f 100644 --- a/src/main/java/com/robertx22/library_of_exile/registry/ExileRegistry.java +++ b/src/main/java/com/robertx22/library_of_exile/registry/ExileRegistry.java @@ -4,13 +4,22 @@ import com.robertx22.library_of_exile.registry.register_info.ExileRegistrationInfo; import com.robertx22.library_of_exile.registry.register_info.RegistrationInfoData; -public interface ExileRegistry extends IGUID, IWeighted { +/** + * Denotes a class whose instances can be registered by Library of Exile. + *

+ * Note that this does not actually contain the registry data; + * this is done in {@link ExileRegistryContainer}. + * + * @param the same class that implements this interface + */ +public interface ExileRegistry> extends IGUID, IWeighted { - ExileRegistryType getExileRegistryType(); + ExileRegistryType getExileRegistryType(); default void registerToExileRegistry(ExileRegistrationInfo info) { - Database.getRegistry(getExileRegistryType()).register(this, info); + // TODO: try to remove need for this cast + Database.getRegistry(getExileRegistryType()).register((C) this, info); } default RegistrationInfoData getRegistrationInfo() { diff --git a/src/main/java/com/robertx22/library_of_exile/registry/ExileRegistryContainer.java b/src/main/java/com/robertx22/library_of_exile/registry/ExileRegistryContainer.java index c394b61..ba2f2d8 100644 --- a/src/main/java/com/robertx22/library_of_exile/registry/ExileRegistryContainer.java +++ b/src/main/java/com/robertx22/library_of_exile/registry/ExileRegistryContainer.java @@ -17,7 +17,7 @@ import java.util.function.Predicate; import java.util.stream.Collectors; -public class ExileRegistryContainer { +public class ExileRegistryContainer> { private List registersErrorsAlertedFor = new ArrayList<>(); private List accessorErrosAletedFor = new ArrayList<>(); @@ -85,7 +85,7 @@ public List getFromDatapacks() { return fromDatapacks; } - public ExileRegistryType getType() { + public ExileRegistryType getType() { return type; } @@ -98,7 +98,7 @@ public static void logRegistryError(String text) { } - private ExileRegistryType type; + private ExileRegistryType type; private String emptyDefault; public C getDefault() { @@ -110,23 +110,21 @@ public C getDefault() { private boolean logAdditionsToRegistry = false; private boolean logMissingEntryOnAccess = true; - public ExileRegistryContainer logAdditions() { + public ExileRegistryContainer logAdditions() { this.logAdditionsToRegistry = true; return this; } - public void unRegister(ExileRegistry entry) { - if (map.containsKey(entry.GUID())) { - map.remove(entry.GUID()); - } + public void unRegister(ExileRegistry entry) { + map.remove(entry.GUID()); } - public ExileRegistryContainer dontErrorMissingEntriesOnAccess() { + public ExileRegistryContainer dontErrorMissingEntriesOnAccess() { this.logMissingEntryOnAccess = false; return this; } - public ExileRegistryContainer dontErrorIfEmpty() { + public ExileRegistryContainer dontErrorIfEmpty() { this.errorIfEmpty = false; return this; } @@ -139,7 +137,7 @@ public boolean isRegistrationDone() { return getSize() > 0; } - public ExileRegistryContainer(ExileRegistryType type, String emptyDefault) { + public ExileRegistryContainer(ExileRegistryType type, String emptyDefault) { this.type = type; this.emptyDefault = emptyDefault; } diff --git a/src/main/java/com/robertx22/library_of_exile/registry/ExileRegistryType.java b/src/main/java/com/robertx22/library_of_exile/registry/ExileRegistryType.java index dc9d494..538484c 100644 --- a/src/main/java/com/robertx22/library_of_exile/registry/ExileRegistryType.java +++ b/src/main/java/com/robertx22/library_of_exile/registry/ExileRegistryType.java @@ -10,23 +10,22 @@ import java.util.*; import java.util.stream.Collectors; -public class ExileRegistryType { +public class ExileRegistryType> { - private static HashMap map = new HashMap<>(); + private static final HashMap> map = new HashMap<>(); public String id; - ISerializable ser; + ISerializable ser; int order; public SyncTime syncTime; public String modid; // used for lang file tc public String idWithoutModid; - public ExileRegistryType(String modid, String id, int order, ISerializable ser, SyncTime synctime) { + public ExileRegistryType(String modid, String id, int order, ISerializable ser, SyncTime synctime) { Preconditions.checkNotNull(modid); Preconditions.checkNotNull(id); - Preconditions.checkNotNull(order); Preconditions.checkNotNull(synctime); this.modid = modid; @@ -41,11 +40,11 @@ public String getModName() { return ModList.get().getModContainerById(modid).get().getModInfo().getDisplayName(); } - public static ExileRegistryType get(String id) { + public static ExileRegistryType get(String id) { return map.get(id); } - public static ExileRegistryType register(ExileRegistryType type) { + public static > ExileRegistryType register(ExileRegistryType type) { Preconditions.checkNotNull(type); if (map.containsKey(type.id)) { @@ -56,24 +55,23 @@ public static ExileRegistryType register(ExileRegistryType type) { return type; } - public static ExileRegistryType register(String modid, String id, int order, ISerializable ser, SyncTime synctime) { - ExileRegistryType type = new ExileRegistryType(modid, id, order, ser, synctime); + public static > ExileRegistryType register(String modid, String id, int order, ISerializable ser, SyncTime synctime) { + ExileRegistryType type = new ExileRegistryType<>(modid, id, order, ser, synctime); return register(type); } - public static List getInRegisterOrder(SyncTime sync) { - List list = map.values().stream() + public static List> getInRegisterOrder(SyncTime sync) { + return map.values().stream() .filter(x -> x.syncTime == sync) + .sorted(Comparator.comparingInt(x -> x.order)) .collect(Collectors.toList()); - list.sort(Comparator.comparingInt(x -> x.order)); - return list; } - public static List getAllInRegisterOrder() { - List list = new ArrayList<>(); + public static List> getAllInRegisterOrder() { + List> list = new ArrayList<>(); - for (Map.Entry en : map.entrySet()) { + for (Map.Entry> en : map.entrySet()) { if (en.getValue() == null) { throw new RuntimeException(en.getKey() + " is a null registry type, how?!"); } else { @@ -88,7 +86,7 @@ public static List getAllInRegisterOrder() { public static void registerJsonListeners(AddReloadListenerEvent manager) { - List list = getAllInRegisterOrder(); + List> list = getAllInRegisterOrder(); list.forEach(x -> { if (x.getLoader() != null) { manager.addListener(x.getLoader()); @@ -114,7 +112,7 @@ public List getAllForSerialization() { .getSerializable(); } - public final ISerializable getSerializer() { + public final ISerializable getSerializer() { return ser; } diff --git a/src/main/java/com/robertx22/library_of_exile/registry/FilterListWrap.java b/src/main/java/com/robertx22/library_of_exile/registry/FilterListWrap.java index 60a3297..b368041 100644 --- a/src/main/java/com/robertx22/library_of_exile/registry/FilterListWrap.java +++ b/src/main/java/com/robertx22/library_of_exile/registry/FilterListWrap.java @@ -8,7 +8,7 @@ import java.util.function.Predicate; import java.util.stream.Collectors; -public class FilterListWrap { +public class FilterListWrap> { public FilterListWrap(List list) { this.list = list; diff --git a/src/main/java/com/robertx22/library_of_exile/registry/JsonExileRegistry.java b/src/main/java/com/robertx22/library_of_exile/registry/JsonExileRegistry.java index b9f4db9..a370abe 100644 --- a/src/main/java/com/robertx22/library_of_exile/registry/JsonExileRegistry.java +++ b/src/main/java/com/robertx22/library_of_exile/registry/JsonExileRegistry.java @@ -13,10 +13,11 @@ import java.util.Map; import java.util.Set; -public interface JsonExileRegistry extends ExileRegistry { +public interface JsonExileRegistry> extends ExileRegistry { default void addToSerializables(ExileRegistrationInfo info) { - Database.getRegistry(getExileRegistryType()).addSerializable(this, info); + // TOOD: try to remove need for this cast + Database.getRegistry(getExileRegistryType()).addSerializable((T) this, info); } diff --git a/src/main/java/com/robertx22/library_of_exile/registry/loaders/BaseDataPackLoader.java b/src/main/java/com/robertx22/library_of_exile/registry/loaders/BaseDataPackLoader.java index 7f504e6..d39f533 100644 --- a/src/main/java/com/robertx22/library_of_exile/registry/loaders/BaseDataPackLoader.java +++ b/src/main/java/com/robertx22/library_of_exile/registry/loaders/BaseDataPackLoader.java @@ -15,18 +15,18 @@ import java.util.*; -public class BaseDataPackLoader extends SimpleJsonResourceReloadListener { - private static Gson GSON = IAutoGson.createGson(); +public class BaseDataPackLoader> extends SimpleJsonResourceReloadListener { + private static final Gson GSON = IAutoGson.createGson(); public String id; ISerializable serializer; - public ExileRegistryType registryType; + public ExileRegistryType registryType; - public static HashMap> INFO_MAP = new HashMap<>(); + public static HashMap, List> INFO_MAP = new HashMap<>(); - public BaseDataPackLoader(ExileRegistryType registryType, String id, ISerializable serializer) { + public BaseDataPackLoader(ExileRegistryType registryType, String id, ISerializable serializer) { super(GSON, id); Objects.requireNonNull(registryType); this.id = id; @@ -57,7 +57,7 @@ String getInfoString(ResourceLocation key, LoaderType type) { protected void apply(Map mapToLoad, ResourceManager manager, ProfilerFiller profilerIn) { try { - ExileRegistryContainer reg = Database.getRegistry(registryType); + ExileRegistryContainer reg = Database.getRegistry(registryType); Watch normal = new Watch(); normal.min = 50000; diff --git a/src/main/java/com/robertx22/library_of_exile/registry/serialization/ISerializable.java b/src/main/java/com/robertx22/library_of_exile/registry/serialization/ISerializable.java index 192d842..fdbc4e1 100644 --- a/src/main/java/com/robertx22/library_of_exile/registry/serialization/ISerializable.java +++ b/src/main/java/com/robertx22/library_of_exile/registry/serialization/ISerializable.java @@ -29,14 +29,12 @@ default int getWeightFromJson(JsonObject json) { default JsonObject getDefaultJson() { JsonObject json = new JsonObject(); - if (this instanceof IGUID) { - IGUID claz = (IGUID) this; - json.addProperty(ID, claz.GUID()); + if (this instanceof IGUID self) { + json.addProperty(ID, self.GUID()); } - if (this instanceof IWeighted) { - IWeighted claz = (IWeighted) this; - json.addProperty(WEIGHT, claz.Weight()); + if (this instanceof IWeighted self) { + json.addProperty(WEIGHT, self.Weight()); } return json; diff --git a/src/main/java/com/robertx22/library_of_exile/util/iTiered.java b/src/main/java/com/robertx22/library_of_exile/util/iTiered.java index b681439..279ede0 100644 --- a/src/main/java/com/robertx22/library_of_exile/util/iTiered.java +++ b/src/main/java/com/robertx22/library_of_exile/util/iTiered.java @@ -6,7 +6,7 @@ import java.util.Optional; -public interface iTiered> { +public interface iTiered & iTiered> { public int getTier();