Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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<MapDataBlock> MAP_DATA_BLOCK = ExileRegistryType.register(Ref.MODID, "map_data_block", 0, MapDataBlock.SERIALIZER, SyncTime.NEVER);
public static ExileRegistryType<MobList> MOB_LIST = ExileRegistryType.register(Ref.MODID, "mob_list", 0, MobList.SERIALIZER, SyncTime.NEVER);
public static ExileRegistryType<ExileMobAffix> MOB_AFFIX = ExileRegistryType.register(Ref.MODID, "mob_affix", 0, ExileMobAffix.SERIALIZER, SyncTime.ON_LOGIN);
public static ExileRegistryType<MapFinishRarity> MAP_FINISH_RARITY = ExileRegistryType.register(Ref.MODID, "map_finish_rar", 0, MapFinishRarity.SERIALIZER, SyncTime.ON_LOGIN);
public static ExileRegistryType<MapContent> MAP_CONTENT = ExileRegistryType.register(Ref.MODID, "map_content", 0, MapContent.SERIALIZER, SyncTime.ON_LOGIN);
public static ExileRegistryType<League> 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<RelicStat> RELIC_STAT = ExileRegistryType.register(Ref.MODID, "relic_stat", 0, RelicStat.SERIALIZER, SyncTime.ON_LOGIN);
public static ExileRegistryType<RelicType> RELIC_TYPE = ExileRegistryType.register(Ref.MODID, "relic_type", 1, RelicType.SERIALIZER, SyncTime.ON_LOGIN);
public static ExileRegistryType<RelicAffix> RELIC_AFFIX = ExileRegistryType.register(Ref.MODID, "relic_affix", 2, RelicAffix.SERIALIZER, SyncTime.ON_LOGIN);
public static ExileRegistryType<RelicRarity> 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<ItemModification> ITEM_MOD = ExileRegistryType.register(Ref.MODID, "item_modification", 48, ItemModification.SERIALIZER, SyncTime.ON_LOGIN);
public static ExileRegistryType<ItemRequirement> ITEM_REQ = ExileRegistryType.register(Ref.MODID, "item_requirement", 49, ItemRequirement.SERIALIZER, SyncTime.ON_LOGIN);
public static ExileRegistryType<ExileCurrency> CURRENCY = ExileRegistryType.register(Ref.MODID, "currency", 50, ExileCurrency.SERIALIZER, SyncTime.ON_LOGIN);
public static ExileRegistryType<OrbEdit> ORB_EDIT = ExileRegistryType.register(Ref.MODID, "orb_edit", 51, OrbEdit.SERIALIZER, SyncTime.ON_LOGIN);

public LibDatabase(String modid) {
super(modid);
Expand All @@ -66,21 +66,21 @@ public static ExileRegistryContainer<ItemRequirement> 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<MapDataBlock>(MAP_DATA_BLOCK, "empty"));
Database.addRegistry(new ExileRegistryContainer<MobList>(MOB_LIST, "empty"));
Database.addRegistry(new ExileRegistryContainer<ExileMobAffix>(MOB_AFFIX, "empty"));
Database.addRegistry(new ExileRegistryContainer<MapFinishRarity>(MAP_FINISH_RARITY, "common"));
Database.addRegistry(new ExileRegistryContainer<MapContent>(MAP_CONTENT, "empty"));
Database.addRegistry(new ExileRegistryContainer<League>(LEAGUE, "empty"));
Database.addRegistry(new ExileRegistryContainer<RelicStat>(RELIC_STAT, "empty"));
Database.addRegistry(new ExileRegistryContainer<RelicType>(RELIC_TYPE, "empty"));
Database.addRegistry(new ExileRegistryContainer<RelicAffix>(RELIC_AFFIX, "empty"));
Database.addRegistry(new ExileRegistryContainer<RelicRarity>(RELIC_RARITY, "common"));

Database.addRegistry(new ExileRegistryContainer<ItemModification>(LibDatabase.ITEM_MOD, ""));
Database.addRegistry(new ExileRegistryContainer<ItemRequirement>(LibDatabase.ITEM_REQ, ""));
Database.addRegistry(new ExileRegistryContainer<OrbEdit>(LibDatabase.ORB_EDIT, ""));
Database.addRegistry(new ExileRegistryContainer<ExileCurrency>(LibDatabase.CURRENCY, "socket_adder"));


}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public abstract class MyPacket<T> {

public abstract MyPacket<T> newInstance();

public final MyPacket loadFromDataUSETHIS(FriendlyByteBuf buf) {
public final MyPacket<T> loadFromDataUSETHIS(FriendlyByteBuf buf) {

MyPacket<T> data = newInstance();
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,19 @@

import java.util.List;

public class EfficientRegistryPacket<T extends ISerializable & JsonExileRegistry> extends MyPacket<EfficientRegistryPacket> {
public class EfficientRegistryPacket<T extends ISerializable<T> & JsonExileRegistry<T>> extends MyPacket<EfficientRegistryPacket<T>> {
public static final JsonParser PARSER = new JsonParser();

public static ResourceLocation ID = new ResourceLocation(Ref.MODID, "eff_reg");
private List<T> items;

ExileRegistryType type;
ExileRegistryType<T> type;

public EfficientRegistryPacket() {

}

public EfficientRegistryPacket(ExileRegistryType type, List<T> list) {
public EfficientRegistryPacket(ExileRegistryType<T> type, List<T> list) {
this.type = type;
this.items = list;
}
Expand All @@ -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<T>) type;

ISerializable<T> serializer = type.getSerializer();
ISerializable<T> serializer = this.type.getSerializer();

this.items = Lists.newArrayList();

Expand All @@ -72,7 +74,7 @@ public void saveToData(FriendlyByteBuf buf) {
@Override
public void onReceived(ExilePacketContext ctx) {

ExileRegistryContainer reg = Database.getRegistry(type);
ExileRegistryContainer<T> reg = Database.getRegistry(type);

items.forEach(x -> {
x.unregisterFromExileRegistry();
Expand All @@ -84,7 +86,7 @@ public void onReceived(ExilePacketContext ctx) {
}

@Override
public MyPacket<EfficientRegistryPacket> newInstance() {
return new EfficientRegistryPacket();
public MyPacket<EfficientRegistryPacket<T>> newInstance() {
return new EfficientRegistryPacket<>();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

public class Database {

private static HashMap<ExileRegistryType, ExileRegistryContainer> SERVER = new HashMap<>();
private static HashMap<ExileRegistryType<?>, ExileRegistryContainer<?>> SERVER = new HashMap<>();
// private static HashMap<ExileRegistryType, ExileRegistryContainer> BACKUP = new HashMap<>();

public static boolean areDatapacksLoaded(Level world) {
Expand All @@ -21,22 +21,22 @@ public static boolean areDatapacksLoaded(Level world) {
}


public static List<ExileRegistryContainer> getAllRegistries() {
public static List<ExileRegistryContainer<?>> getAllRegistries() {
return new ArrayList<>(SERVER.values());
}

public static ExileRegistryContainer getRegistry(ExileRegistryType type) {
return SERVER.get(type);
public static <T extends ExileRegistry<T>> ExileRegistryContainer<T> getRegistry(ExileRegistryType<T> type) {
return (ExileRegistryContainer<T>) SERVER.get(type);
}

public static ExileRegistry get(ExileRegistryType type, String guid) {
public static <T extends ExileRegistry<T>> ExileRegistry<T> get(ExileRegistryType<T> type, String guid) {
return getRegistry(type).get(guid);

}

public static void sendPacketsToClient(ServerPlayer player, SyncTime sync) {

List<ExileRegistryType> list = ExileRegistryType.getInRegisterOrder(sync);
List<ExileRegistryType<?>> list = ExileRegistryType.getInRegisterOrder(sync);

list.forEach(x -> getRegistry(x).sendUpdatePacket(player));
}
Expand Down Expand Up @@ -79,7 +79,7 @@ public static void unregisterInvalidEntries() {

}

public static void addRegistry(ExileRegistryContainer cont) {
public static <C extends ExileRegistry<C>> void addRegistry(ExileRegistryContainer<C> cont) {
SERVER.put(cont.getType(), cont);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<C> extends IGUID, IWeighted {
/**
* Denotes a class whose instances can be registered by Library of Exile.
* <p>
* Note that this does not actually contain the registry data;
* this is done in {@link ExileRegistryContainer}.
*
* @param <C> the same class that implements this interface
*/
public interface ExileRegistry<C extends ExileRegistry<C>> extends IGUID, IWeighted {

ExileRegistryType getExileRegistryType();
ExileRegistryType<C> 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() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import java.util.function.Predicate;
import java.util.stream.Collectors;

public class ExileRegistryContainer<C extends ExileRegistry> {
public class ExileRegistryContainer<C extends ExileRegistry<C>> {

private List<String> registersErrorsAlertedFor = new ArrayList<>();
private List<String> accessorErrosAletedFor = new ArrayList<>();
Expand Down Expand Up @@ -85,7 +85,7 @@ public List<C> getFromDatapacks() {
return fromDatapacks;
}

public ExileRegistryType getType() {
public ExileRegistryType<C> getType() {
return type;
}

Expand All @@ -98,7 +98,7 @@ public static void logRegistryError(String text) {

}

private ExileRegistryType type;
private ExileRegistryType<C> type;
private String emptyDefault;

public C getDefault() {
Expand All @@ -110,23 +110,21 @@ public C getDefault() {
private boolean logAdditionsToRegistry = false;
private boolean logMissingEntryOnAccess = true;

public ExileRegistryContainer logAdditions() {
public ExileRegistryContainer<C> logAdditions() {
this.logAdditionsToRegistry = true;
return this;
}

public void unRegister(ExileRegistry entry) {
if (map.containsKey(entry.GUID())) {
map.remove(entry.GUID());
}
public void unRegister(ExileRegistry<C> entry) {
map.remove(entry.GUID());
}

public ExileRegistryContainer dontErrorMissingEntriesOnAccess() {
public ExileRegistryContainer<C> dontErrorMissingEntriesOnAccess() {
this.logMissingEntryOnAccess = false;
return this;
}

public ExileRegistryContainer dontErrorIfEmpty() {
public ExileRegistryContainer<C> dontErrorIfEmpty() {
this.errorIfEmpty = false;
return this;
}
Expand All @@ -139,7 +137,7 @@ public boolean isRegistrationDone() {
return getSize() > 0;
}

public ExileRegistryContainer(ExileRegistryType type, String emptyDefault) {
public ExileRegistryContainer(ExileRegistryType<C> type, String emptyDefault) {
this.type = type;
this.emptyDefault = emptyDefault;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,22 @@
import java.util.*;
import java.util.stream.Collectors;

public class ExileRegistryType {
public class ExileRegistryType<T extends ExileRegistry<T>> {

private static HashMap<String, ExileRegistryType> map = new HashMap<>();
private static final HashMap<String, ExileRegistryType<?>> map = new HashMap<>();

public String id;
ISerializable ser;
ISerializable<T> 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<T> ser, SyncTime synctime) {

Preconditions.checkNotNull(modid);
Preconditions.checkNotNull(id);
Preconditions.checkNotNull(order);
Preconditions.checkNotNull(synctime);

this.modid = modid;
Expand All @@ -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 <C extends ExileRegistry<C>> ExileRegistryType<C> register(ExileRegistryType<C> type) {
Preconditions.checkNotNull(type);

if (map.containsKey(type.id)) {
Expand All @@ -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 <C extends ExileRegistry<C>> ExileRegistryType<C> register(String modid, String id, int order, ISerializable<C> ser, SyncTime synctime) {
ExileRegistryType<C> type = new ExileRegistryType<>(modid, id, order, ser, synctime);
return register(type);
}

public static List<ExileRegistryType> getInRegisterOrder(SyncTime sync) {
List<ExileRegistryType> list = map.values().stream()
public static List<ExileRegistryType<?>> 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<ExileRegistryType> getAllInRegisterOrder() {
List<ExileRegistryType> list = new ArrayList<>();
public static List<ExileRegistryType<?>> getAllInRegisterOrder() {
List<ExileRegistryType<?>> list = new ArrayList<>();

for (Map.Entry<String, ExileRegistryType> en : map.entrySet()) {
for (Map.Entry<String, ExileRegistryType<?>> en : map.entrySet()) {
if (en.getValue() == null) {
throw new RuntimeException(en.getKey() + " is a null registry type, how?!");
} else {
Expand All @@ -88,7 +86,7 @@ public static List<ExileRegistryType> getAllInRegisterOrder() {


public static void registerJsonListeners(AddReloadListenerEvent manager) {
List<ExileRegistryType> list = getAllInRegisterOrder();
List<ExileRegistryType<?>> list = getAllInRegisterOrder();
list.forEach(x -> {
if (x.getLoader() != null) {
manager.addListener(x.getLoader());
Expand All @@ -114,7 +112,7 @@ public List getAllForSerialization() {
.getSerializable();
}

public final ISerializable getSerializer() {
public final ISerializable<T> getSerializer() {
return ser;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import java.util.function.Predicate;
import java.util.stream.Collectors;

public class FilterListWrap<C extends ExileRegistry> {
public class FilterListWrap<C extends ExileRegistry<C>> {

public FilterListWrap(List<C> list) {
this.list = list;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@
import java.util.Map;
import java.util.Set;

public interface JsonExileRegistry<T> extends ExileRegistry<T> {
public interface JsonExileRegistry<T extends ExileRegistry<T>> extends ExileRegistry<T> {

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);
}


Expand Down
Loading