Skip to content

Commit

Permalink
nested providers!
Browse files Browse the repository at this point in the history
  • Loading branch information
KrLite committed Mar 12, 2024
1 parent 6516710 commit 933480e
Show file tree
Hide file tree
Showing 20 changed files with 209 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import net.krlite.knowledges.api.entrypoint.base.Provider;

public interface ComponentProvider<T extends Knowledge> extends Provider<T> {
interface General extends ComponentProvider<Knowledge> {

interface Global extends ComponentProvider<Knowledge> {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import net.krlite.knowledges.api.entrypoint.base.Provider;

public interface ContractProvider<T extends Contract<?, ?>> extends Provider<T> {
interface General extends ContractProvider<Contract<?, ?>> {

interface Global extends ContractProvider<Contract<?, ?>> {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import net.krlite.knowledges.api.entrypoint.base.Provider;

public interface DataProvider<T extends Data<?>> extends Provider<T> {
interface General extends DataProvider<Data<?>> {

interface Global extends DataProvider<Data<?>> {
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,43 @@
package net.krlite.knowledges.api.entrypoint.base;

import net.krlite.knowledges.KnowledgesCommon;
import org.jetbrains.annotations.NotNull;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

public interface Provider<E> {
@NotNull List<Class<? extends E>> provide();
public interface Provider<T> {
@NotNull List<Class<? extends T>> provide();

default @NotNull List<Class<? extends Provider<? extends T>>> provideNested() {
return new ArrayList<>();
}

default @NotNull List<? extends Class<? extends T>> provideAll() {
List<? extends Provider<? extends T>> nested = provideNested().stream()
.map(c -> {
try {
return c.getDeclaredConstructor().newInstance();
} catch (Exception e) {
KnowledgesCommon.LOGGER.error("Failed creating child provider {} for {}: constructor not found!", c, getClass(), e);
}

return null;
})
.filter(Objects::nonNull)
.toList();

List<? extends Class<? extends T>> nestedProvided = nested.stream()
.map(Provider::provideAll)
.flatMap(List::stream)
.toList();

var provided = new ArrayList<>(List.copyOf(provide()));
if (provided.isEmpty()) return nestedProvided;

provided.addAll(nestedProvided);
return provided;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package net.krlite.knowledges.api.representable;
package net.krlite.knowledges.api.representable.base;

import net.minecraft.network.PacketByteBuf;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package net.krlite.knowledges.api.representable.base;

import net.krlite.knowledges.api.representable.PacketByteBufWritable;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.util.hit.HitResult;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package net.krlite.knowledges.impl.entrypoint;

import net.krlite.knowledges.api.data.Data;
import net.krlite.knowledges.api.entrypoint.DataProvider;
import net.krlite.knowledges.impl.data.info.block.MineableToolData;
import net.krlite.knowledges.impl.data.info.block.blockinformation.*;
import net.krlite.knowledges.impl.data.info.entity.entitydescription.AnimalOwnerEntityDescriptionData;
Expand All @@ -14,7 +13,7 @@

import java.util.List;

public class DataProviderImpl implements DataProvider {
public class DataProvider implements net.krlite.knowledges.api.entrypoint.DataProvider.Global {
@Override
public @NotNull List<Class<? extends Data<?>>> provide() {
return List.of(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package net.krlite.knowledges.impl.entrypoint;
package net.krlite.knowledges.impl.entrypoint.component;

import net.krlite.knowledges.api.component.Knowledge;
import net.krlite.knowledges.api.entrypoint.ComponentProvider;
import net.krlite.knowledges.impl.component.ArmorDurabilityComponent;
import net.krlite.knowledges.impl.component.CrosshairComponent;
import net.krlite.knowledges.impl.component.info.BlockInfoComponent;
Expand All @@ -12,17 +11,11 @@

import java.util.List;

public class ComponentProviderImpl implements ComponentProvider {
public class ComponentProvider implements net.krlite.knowledges.api.entrypoint.ComponentProvider.Global {
@Override
public @NotNull List<Class<? extends Knowledge>> provide() {
return List.of(
CrosshairComponent.class,
InfoComponent.class,

BlockInfoComponent.class,
EntityInfoComponent.class,
FluidInfoComponent.class,

ArmorDurabilityComponent.class
);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package net.krlite.knowledges.impl.entrypoint.component;

import net.krlite.knowledges.api.entrypoint.ComponentProvider;
import net.krlite.knowledges.impl.component.base.InfoComponent;
import net.krlite.knowledges.impl.component.info.BlockInfoComponent;
import net.krlite.knowledges.impl.component.info.EntityInfoComponent;
import net.krlite.knowledges.impl.component.info.FluidInfoComponent;
import org.jetbrains.annotations.NotNull;

import java.util.List;

public class InfoComponentProvider implements ComponentProvider<InfoComponent> {
@Override
public @NotNull List<Class<? extends InfoComponent>> provide() {
return List.of(
net.krlite.knowledges.impl.component.info.InfoComponent.class,

BlockInfoComponent.class,
EntityInfoComponent.class,
FluidInfoComponent.class
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

import java.util.List;

public class BlockContractProviderImpl implements BlockContract.Provider {
public class BlockContractProvider implements BlockContract.Provider {
@Override
public @NotNull List<Class<? extends BlockContract>> provide() {
return List.of(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import java.util.List;

public class EntityContractProviderImpl implements EntityContract.Provider {
public class EntityContractProvider implements EntityContract.Provider {
@Override
public @NotNull List<Class<? extends EntityContract>> provide() {
return List.of(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package net.krlite.knowledges.impl.entrypoint.data.info;

import net.krlite.knowledges.api.entrypoint.DataProvider;
import net.krlite.knowledges.api.entrypoint.base.Provider;
import net.krlite.knowledges.impl.data.info.base.BlockInfoComponentData;
import net.krlite.knowledges.impl.entrypoint.data.info.block.BlockInformationDataProvider;
import net.krlite.knowledges.impl.entrypoint.data.info.block.MineableToolDataProvider;
import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;

public class BlockInfoComponentDataProvider implements DataProvider<BlockInfoComponentData> {
@Override
public @NotNull List<Class<? extends BlockInfoComponentData>> provide() {
return new ArrayList<>();
}

@Override
public @NotNull List<Class<? extends Provider<? extends BlockInfoComponentData>>> provideNested() {
return List.of(
BlockInformationDataProvider.class,
MineableToolDataProvider.class
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package net.krlite.knowledges.impl.entrypoint.data.info;

import net.krlite.knowledges.api.entrypoint.DataProvider;
import net.krlite.knowledges.api.entrypoint.base.Provider;
import net.krlite.knowledges.impl.data.info.base.EntityInfoComponentData;
import net.krlite.knowledges.impl.entrypoint.data.info.entity.EntityDescriptionDataProvider;
import net.krlite.knowledges.impl.entrypoint.data.info.entity.EntityInformationDataProvider;
import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;

public class EntityInfoComponentDataProvider implements DataProvider<EntityInfoComponentData> {
@Override
public @NotNull List<Class<? extends EntityInfoComponentData>> provide() {
return new ArrayList<>();
}

@Override
public @NotNull List<Class<? extends Provider<? extends EntityInfoComponentData>>> provideNested() {
return List.of(
EntityDescriptionDataProvider.class,
EntityInformationDataProvider.class
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package net.krlite.knowledges.impl.entrypoint.data.info.block;

import net.krlite.knowledges.api.entrypoint.DataProvider;
import net.krlite.knowledges.impl.data.info.base.block.BlockInformationData;
import net.krlite.knowledges.impl.data.info.block.blockinformation.*;
import org.jetbrains.annotations.NotNull;

import java.util.List;

public class BlockInformationDataProvider implements DataProvider<BlockInformationData> {
@Override
public @NotNull List<Class<? extends BlockInformationData>> provide() {
return List.of(
NoteBlockInformationData.class,
BannerBlockInformationData.class,
ComposterBlockInformationData.class,
RedstoneWireBlockInformationData.class,
CropBlockInformationData.class,
SaplingBlockInformationData.class,
BeehiveBlockInformationData.class
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package net.krlite.knowledges.impl.entrypoint.data.info.block;

import net.krlite.knowledges.api.entrypoint.DataProvider;
import net.krlite.knowledges.impl.data.info.block.MineableToolData;
import org.jetbrains.annotations.NotNull;

import java.util.List;

public class MineableToolDataProvider implements DataProvider<MineableToolData> {
@Override
public @NotNull List<Class<? extends MineableToolData>> provide() {
return List.of(
MineableToolData.class
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package net.krlite.knowledges.impl.entrypoint.data.info.entity;

import net.krlite.knowledges.api.entrypoint.DataProvider;
import net.krlite.knowledges.impl.data.info.base.entity.EntityDescriptionData;
import net.krlite.knowledges.impl.data.info.entity.entitydescription.AnimalOwnerEntityDescriptionData;
import net.krlite.knowledges.impl.data.info.entity.entitydescription.ItemFrameEntityDescriptionData;
import net.krlite.knowledges.impl.data.info.entity.entitydescription.VillagerEntityDescriptionData;
import org.jetbrains.annotations.NotNull;

import java.util.List;

public class EntityDescriptionDataProvider implements DataProvider<EntityDescriptionData> {
@Override
public @NotNull List<Class<? extends EntityDescriptionData>> provide() {
return List.of(
AnimalOwnerEntityDescriptionData.class,
ItemFrameEntityDescriptionData.class,
VillagerEntityDescriptionData.class
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package net.krlite.knowledges.impl.entrypoint.data.info.entity;

import net.krlite.knowledges.api.entrypoint.DataProvider;
import net.krlite.knowledges.impl.data.info.base.entity.EntityInformationData;
import net.krlite.knowledges.impl.data.info.entity.entityinformation.ItemFrameEntityInformationData;
import net.krlite.knowledges.impl.data.info.entity.entityinformation.PaintingEntityInformationData;
import net.krlite.knowledges.impl.data.info.entity.entityinformation.VillagerEntityInformationData;
import org.jetbrains.annotations.NotNull;

import java.util.List;

public class EntityInformationDataProvider implements DataProvider<EntityInformationData> {
@Override
public @NotNull List<Class<? extends EntityInformationData>> provide() {
return List.of(
PaintingEntityInformationData.class,
ItemFrameEntityInformationData.class,
VillagerEntityInformationData.class
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ interface Registerable<T extends Provider<?>, A> {
default void register(EntrypointInvoker invoker, Class<T> clazz) {
FabricLoader.getInstance().getEntrypointContainers(invoker.entrypointPath(), clazz).forEach(entrypoint -> {
T provider = entrypoint.getEntrypoint();
var classes = provider.provide();
var classes = provider.provideAll();
if (classes.isEmpty()) return;

ModContainer mod = entrypoint.getProvider();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.krlite.knowledges.KnowledgesClient;
import net.krlite.knowledges.api.representable.PacketByteBufWritable;
import net.krlite.knowledges.api.representable.base.PacketByteBufWritable;
import net.krlite.knowledges.networking.base.KnowledgesNetworking;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayNetworkHandler;
Expand Down
10 changes: 6 additions & 4 deletions src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,16 @@
"net.krlite.knowledges.config.modmenu.KnowledgesModMenuIntegration"
],
"knowledges:component": [
"net.krlite.knowledges.impl.entrypoint.ComponentProviderImpl"
"net.krlite.knowledges.impl.entrypoint.component.ComponentProvider",
"net.krlite.knowledges.impl.entrypoint.component.InfoComponentProvider"
],
"knowledges:data": [
"net.krlite.knowledges.impl.entrypoint.DataProviderImpl"
"net.krlite.knowledges.impl.entrypoint.data.info.BlockInfoComponentDataProvider",
"net.krlite.knowledges.impl.entrypoint.data.info.EntityInfoComponentDataProvider"
],
"knowledges:contract": [
"net.krlite.knowledges.impl.entrypoint.contract.BlockContractProviderImpl",
"net.krlite.knowledges.impl.entrypoint.contract.EntityContractProviderImpl"
"net.krlite.knowledges.impl.entrypoint.contract.BlockContractProvider",
"net.krlite.knowledges.impl.entrypoint.contract.EntityContractProvider"
]
},
"mixins": [
Expand Down

0 comments on commit 933480e

Please sign in to comment.