Flattening part 1
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
package appeng.bootstrap;
|
||||
|
||||
import appeng.api.features.AEFeature;
|
||||
import appeng.bootstrap.components.IEntityRegistrationComponent;
|
||||
import appeng.core.AppEng;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityClassification;
|
||||
import net.minecraft.entity.EntityType;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.EnumSet;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* Helper to register a custom Entity with Minecraft.
|
||||
*/
|
||||
public class EntityBuilder<T extends Entity> {
|
||||
|
||||
private final FeatureFactory factory;
|
||||
|
||||
private final String id;
|
||||
|
||||
private final EntityType.Builder<T> builder;
|
||||
|
||||
private final EnumSet<AEFeature> features = EnumSet.noneOf(AEFeature.class);
|
||||
|
||||
public EntityBuilder(FeatureFactory factory, String id, EntityType.IFactory<T> entityFactory, EntityClassification classification) {
|
||||
this.factory = factory;
|
||||
this.id = id;
|
||||
this.builder = EntityType.Builder.<T>create(entityFactory, classification);
|
||||
}
|
||||
|
||||
public EntityBuilder<T> features(AEFeature... features) {
|
||||
this.features.clear();
|
||||
this.addFeatures(features);
|
||||
return this;
|
||||
}
|
||||
|
||||
public EntityBuilder<T> addFeatures(AEFeature... features) {
|
||||
Collections.addAll(this.features, features);
|
||||
return this;
|
||||
}
|
||||
|
||||
public EntityBuilder<T> customize(Consumer<EntityType.Builder<T>> function) {
|
||||
function.accept(builder);
|
||||
return this;
|
||||
}
|
||||
|
||||
public void build() {
|
||||
factory.addBootstrapComponent((IEntityRegistrationComponent) r -> {
|
||||
EntityType<T> entityType = builder.build("appliedenergistics2:" + id);
|
||||
r.register( entityType.setRegistryName(AppEng.MOD_ID, id) );
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -36,9 +36,13 @@ import appeng.tile.AEBaseTile;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.model.IBakedModel;
|
||||
import net.minecraft.client.renderer.model.IUnbakedModel;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityClassification;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
|
||||
@@ -100,6 +104,11 @@ public class FeatureFactory
|
||||
return new ItemDefinitionBuilder( this, id, itemFactory ).features( this.defaultFeatures );
|
||||
}
|
||||
|
||||
public <T extends Entity> EntityBuilder<T> entity(String id, EntityType.IFactory<T> factory, EntityClassification classification)
|
||||
{
|
||||
return new EntityBuilder<T>( this, id, factory, classification ).features( this.defaultFeatures );
|
||||
}
|
||||
|
||||
public <T extends AEBaseTile> TileEntityBuilder<T> tileEntity(String id, Class<T> teClass, Function<TileEntityType<T>, T> factory)
|
||||
{
|
||||
return new TileEntityBuilder<>( this, id, teClass, factory ).features( this.defaultFeatures );
|
||||
|
||||
Reference in New Issue
Block a user