Fabric port in progress

This commit is contained in:
Sebastian Hartte
2020-06-27 23:25:38 +02:00
parent 80fbb58d4f
commit b79cd732b2
368 changed files with 2498 additions and 2698 deletions
@@ -18,29 +18,11 @@
package appeng.bootstrap;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Supplier;
import javax.annotation.Nullable;
import net.fabricmc.api.Environment;
import net.minecraft.block.Block;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.fabricmc.api.EnvType;
import appeng.api.definitions.IBlockDefinition;
import appeng.api.features.AEFeature;
import appeng.block.AEBaseBlock;
import appeng.block.AEBaseBlockItem;
import appeng.block.AEBaseTileBlock;
import appeng.bootstrap.components.IBlockRegistrationComponent;
import appeng.bootstrap.components.IItemRegistrationComponent;
import appeng.bootstrap.definitions.TileEntityDefinition;
import appeng.core.AEItemGroup;
import appeng.core.AppEng;
@@ -48,12 +30,28 @@ import appeng.core.CreativeTab;
import appeng.core.features.BlockDefinition;
import appeng.core.features.TileDefinition;
import appeng.util.Platform;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.block.Block;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Supplier;
class BlockDefinitionBuilder implements IBlockBuilder {
private final FeatureFactory factory;
private final String registryName;
private final Identifier id;
private final Supplier<? extends Block> blockSupplier;
@@ -67,7 +65,7 @@ class BlockDefinitionBuilder implements IBlockBuilder {
private boolean disableItem = false;
private BiFunction<Block, Item.Properties, BlockItem> itemFactory;
private BiFunction<Block, Item.Settings, BlockItem> itemFactory;
@Environment(EnvType.CLIENT)
private BlockRendering blockRendering;
@@ -77,11 +75,11 @@ class BlockDefinitionBuilder implements IBlockBuilder {
BlockDefinitionBuilder(FeatureFactory factory, String id, Supplier<? extends Block> blockSupplier) {
this.factory = factory;
this.registryName = id;
this.id = new Identifier(AppEng.MOD_ID, id);
this.blockSupplier = blockSupplier;
if (Platform.hasClientClasses()) {
this.blockRendering = new BlockRendering();
this.blockRendering = new BlockRendering(this.id);
this.itemRendering = new ItemRendering();
}
}
@@ -121,7 +119,7 @@ class BlockDefinitionBuilder implements IBlockBuilder {
}
@Override
public IBlockBuilder item(BiFunction<Block, Item.Properties, BlockItem> factory) {
public IBlockBuilder item(BiFunction<Block, Item.Settings, BlockItem> factory) {
this.itemFactory = factory;
return this;
}
@@ -142,18 +140,12 @@ class BlockDefinitionBuilder implements IBlockBuilder {
public <T extends IBlockDefinition> T build() {
// Create block and matching item, and set factory name of both
Block block = this.blockSupplier.get();
block.setRegistryName(AppEng.MOD_ID, this.registryName);
BlockItem item = this.constructItemFromBlock(block);
if (item != null) {
item.setRegistryName(AppEng.MOD_ID, this.registryName);
}
// Register the item and block with the game
this.factory.addBootstrapComponent((IBlockRegistrationComponent) (side, registry) -> registry.register(block));
Registry.register(Registry.BLOCK, id, block);
BlockItem item = this.constructItemFromBlock(block);
if (item != null) {
this.factory
.addBootstrapComponent((IItemRegistrationComponent) (side, registry) -> registry.register(item));
Registry.register(Registry.ITEM, id, item);
}
// Register all extra handlers
@@ -174,9 +166,9 @@ class BlockDefinitionBuilder implements IBlockBuilder {
T definition;
if (block instanceof AEBaseTileBlock) {
definition = (T) new TileDefinition(this.registryName, (AEBaseTileBlock<?>) block, item, features);
definition = (T) new TileDefinition(this.id.getPath(), (AEBaseTileBlock<?>) block, item, features);
} else {
definition = (T) new BlockDefinition(this.registryName, block, item, features);
definition = (T) new BlockDefinition(this.id.getPath(), block, item, features);
}
if (itemGroup instanceof AEItemGroup) {
@@ -192,7 +184,7 @@ class BlockDefinitionBuilder implements IBlockBuilder {
return null;
}
Item.Properties itemProperties = new Item.Properties();
Item.Settings itemProperties = new Item.Settings();
if (itemGroup != null) {
itemProperties.group(itemGroup);
@@ -24,7 +24,7 @@ import appeng.bootstrap.definitions.TileEntityDefinition;
import appeng.core.AppEng;
import appeng.core.features.ActivityState;
import appeng.core.features.BlockStackSrc;
import appeng.tile.AEBaseTileEntity;
import appeng.tile.AEBaseBlockEntity;
import appeng.util.Platform;
/**
@@ -33,7 +33,7 @@ import appeng.util.Platform;
*
* @param <T>
*/
public class TileEntityBuilder<T extends AEBaseTileEntity> {
public class BlockEntityBuilder<T extends AEBaseBlockEntity> {
private final FeatureFactory factory;
@@ -54,8 +54,8 @@ public class TileEntityBuilder<T extends AEBaseTileEntity> {
private final EnumSet<AEFeature> features = EnumSet.noneOf(AEFeature.class);
public TileEntityBuilder(FeatureFactory factory, String registryName, Class<T> tileClass,
Function<BlockEntityType<T>, T> supplier) {
public BlockEntityBuilder(FeatureFactory factory, String registryName, Class<T> tileClass,
Function<BlockEntityType<T>, T> supplier) {
this.factory = factory;
this.registryName = registryName;
this.tileClass = tileClass;
@@ -66,18 +66,18 @@ public class TileEntityBuilder<T extends AEBaseTileEntity> {
}
}
public TileEntityBuilder<T> features(AEFeature... features) {
public BlockEntityBuilder<T> features(AEFeature... features) {
this.features.clear();
this.addFeatures(features);
return this;
}
public TileEntityBuilder<T> addFeatures(AEFeature... features) {
public BlockEntityBuilder<T> addFeatures(AEFeature... features) {
Collections.addAll(this.features, features);
return this;
}
public TileEntityBuilder<T> rendering(TileEntityRenderingCustomizer<T> customizer) {
public BlockEntityBuilder<T> rendering(TileEntityRenderingCustomizer<T> customizer) {
DistExecutor.runWhenOn(EnvType.CLIENT, () -> () -> customizer.customize(tileEntityRendering));
return this;
}
@@ -95,7 +95,7 @@ public class TileEntityBuilder<T extends AEBaseTileEntity> {
type.setRegistryName(AppEng.MOD_ID, registryName);
registry.register(type);
AEBaseTileEntity.registerTileItem(tileClass, new BlockStackSrc(blocks.get(0), ActivityState.Enabled));
AEBaseBlockEntity.registerTileItem(tileClass, new BlockStackSrc(blocks.get(0), ActivityState.Enabled));
for (Block block : blocks) {
if (block instanceof AEBaseTileBlock) {
@@ -19,69 +19,67 @@
package appeng.bootstrap;
import java.util.function.BiFunction;
import java.util.function.Predicate;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.color.IBlockColor;
import net.minecraft.client.render.model.IBakedModel;
import net.minecraft.client.color.block.BlockColorProvider;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.render.model.ModelBakeSettings;
import net.minecraft.util.Identifier;
import appeng.block.AEBaseTileBlock;
import appeng.bootstrap.components.BlockColorComponent;
import appeng.bootstrap.components.RenderTypeComponent;
import appeng.client.render.model.AutoRotatingBakedModel;
import net.minecraft.util.registry.Registry;
class BlockRendering implements IBlockRendering {
@Environment(EnvType.CLIENT)
private BiFunction<Identifier, IBakedModel, IBakedModel> modelCustomizer;
private final Identifier id;
@Environment(EnvType.CLIENT)
private IBlockColor blockColor;
private BiFunction<Identifier, BakedModel, BakedModel> modelCustomizer;
@Environment(EnvType.CLIENT)
private RenderType renderType;
private BlockColorProvider blockColor;
@Environment(EnvType.CLIENT)
private Predicate<RenderType> renderTypes;
private RenderLayer renderType;
public BlockRendering(Identifier id) {
this.id = id;
}
@Override
@Environment(EnvType.CLIENT)
public IBlockRendering modelCustomizer(BiFunction<Identifier, IBakedModel, IBakedModel> customizer) {
public IBlockRendering modelCustomizer(BiFunction<Identifier, BakedModel, BakedModel> customizer) {
this.modelCustomizer = customizer;
return this;
}
@Environment(EnvType.CLIENT)
@Override
public IBlockRendering blockColor(IBlockColor blockColor) {
public IBlockRendering blockColor(BlockColorProvider blockColor) {
this.blockColor = blockColor;
return this;
}
@Override
public IBlockRendering renderType(RenderType type) {
public IBlockRendering renderType(RenderLayer type) {
this.renderType = type;
return this;
}
@Override
public IBlockRendering renderType(Predicate<RenderType> typePredicate) {
this.renderTypes = typePredicate;
return this;
}
void apply(FeatureFactory factory, Block block) {
if (this.modelCustomizer != null) {
factory.addModelOverride(block.getRegistryName().getPath(), this.modelCustomizer);
factory.addModelOverride(id.getPath(), this.modelCustomizer);
} else if (block instanceof AEBaseTileBlock) {
// This is a default rotating model if the base-block uses an AE tile entity
// which exposes UP/FRONT as
// extended props
factory.addModelOverride(block.getRegistryName().getPath(), (l, m) -> new AutoRotatingBakedModel(m));
factory.addModelOverride(id.getPath(), (l, m) -> new AutoRotatingBakedModel(m));
}
// TODO : 1.12
@@ -89,8 +87,8 @@ class BlockRendering implements IBlockRendering {
factory.addBootstrapComponent(new BlockColorComponent(block, this.blockColor));
}
if (this.renderType != null || this.renderTypes != null) {
factory.addBootstrapComponent(new RenderTypeComponent(block, this.renderType, this.renderTypes));
if (this.renderType != null) {
factory.addBootstrapComponent(new RenderTypeComponent(block, this.renderType));
}
}
}
@@ -1,17 +1,15 @@
package appeng.bootstrap;
import appeng.api.features.AEFeature;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.SpawnGroup;
import net.minecraft.util.registry.Registry;
import java.util.Collections;
import java.util.EnumSet;
import java.util.function.Consumer;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityClassification;
import net.minecraft.entity.EntityType;
import appeng.api.features.AEFeature;
import appeng.bootstrap.components.IEntityRegistrationComponent;
import appeng.core.AppEng;
/**
* Helper to register a custom Entity with Minecraft.
*/
@@ -25,8 +23,8 @@ public class EntityBuilder<T extends Entity> {
private final EnumSet<AEFeature> features = EnumSet.noneOf(AEFeature.class);
public EntityBuilder(FeatureFactory factory, String id, EntityType.IFactory<T> entityFactory,
EntityClassification classification) {
public EntityBuilder(FeatureFactory factory, String id, EntityType.EntityFactory<T> entityFactory,
SpawnGroup classification) {
this.factory = factory;
this.id = id;
this.builder = EntityType.Builder.create(entityFactory, classification);
@@ -49,11 +47,9 @@ public class EntityBuilder<T extends Entity> {
}
public EntityType<T> build() {
EntityType<T> entityType = builder.build("appliedenergistics2:" + id);
entityType.setRegistryName(AppEng.MOD_ID, id);
factory.addBootstrapComponent((IEntityRegistrationComponent) r -> {
r.register(entityType);
});
String fullId = "appliedenergistics2:" + this.id;
EntityType<T> entityType = builder.build(fullId);
Registry.register(Registry.ENTITY_TYPE, fullId, entityType);
return entityType;
}
}
@@ -31,9 +31,9 @@ import java.util.function.Supplier;
import net.fabricmc.api.Environment;
import net.minecraft.block.Block;
import net.minecraft.client.render.model.IBakedModel;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityClassification;
import net.minecraft.entity.SpawnGroup;
import net.minecraft.entity.EntityType;
import net.minecraft.item.Item;
import net.minecraft.block.entity.BlockEntityType;
@@ -42,7 +42,7 @@ import net.fabricmc.api.EnvType;
import appeng.api.features.AEFeature;
import appeng.bootstrap.components.ModelOverrideComponent;
import appeng.tile.AEBaseTileEntity;
import appeng.tile.AEBaseBlockEntity;
import appeng.util.Platform;
public class FeatureFactory {
@@ -76,18 +76,18 @@ public class FeatureFactory {
return new BlockDefinitionBuilder(this, id, block).features(this.defaultFeatures);
}
public IItemBuilder item(String id, Function<Item.Properties, Item> itemFactory) {
public IItemBuilder item(String id, Function<Item.Settings, Item> itemFactory) {
return new ItemDefinitionBuilder(this, id, itemFactory).features(this.defaultFeatures);
}
public <T extends Entity> EntityBuilder<T> entity(String id, EntityType.IFactory<T> factory,
EntityClassification classification) {
public <T extends Entity> EntityBuilder<T> entity(String id, EntityType.EntityFactory<T> factory,
SpawnGroup classification) {
return new EntityBuilder<T>(this, id, factory, classification).features(this.defaultFeatures);
}
public <T extends AEBaseTileEntity> TileEntityBuilder<T> tileEntity(String id, Class<T> teClass,
Function<BlockEntityType<T>, T> factory) {
return new TileEntityBuilder<>(this, id, teClass, factory).features(this.defaultFeatures);
public <T extends AEBaseBlockEntity> BlockEntityBuilder<T> tileEntity(String id, Class<T> teClass,
Function<BlockEntityType<T>, T> factory) {
return new BlockEntityBuilder<>(this, id, teClass, factory).features(this.defaultFeatures);
}
public FeatureFactory features(AEFeature... features) {
@@ -105,7 +105,7 @@ public class FeatureFactory {
}
@Environment(EnvType.CLIENT)
void addModelOverride(String resourcePath, BiFunction<Identifier, IBakedModel, IBakedModel> customizer) {
void addModelOverride(String resourcePath, BiFunction<Identifier, BakedModel, BakedModel> customizer) {
this.modelOverrideComponent.addOverride(resourcePath, customizer);
}
@@ -44,7 +44,7 @@ public interface IBlockBuilder {
*/
IBlockBuilder disableItem();
IBlockBuilder item(BiFunction<Block, Item.Properties, BlockItem> factory);
IBlockBuilder item(BiFunction<Block, Item.Settings, BlockItem> factory);
<T extends IBlockDefinition> T build();
}
@@ -23,9 +23,9 @@ import java.util.function.Predicate;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.color.IBlockColor;
import net.minecraft.client.render.model.IBakedModel;
import net.minecraft.client.color.block.BlockColorProvider;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.util.Identifier;
/**
@@ -35,15 +35,12 @@ import net.minecraft.util.Identifier;
public interface IBlockRendering {
@Environment(EnvType.CLIENT)
IBlockRendering modelCustomizer(BiFunction<Identifier, IBakedModel, IBakedModel> customizer);
IBlockRendering modelCustomizer(BiFunction<Identifier, BakedModel, BakedModel> customizer);
@Environment(EnvType.CLIENT)
IBlockRendering blockColor(IBlockColor blockColor);
IBlockRendering blockColor(BlockColorProvider blockColor);
@Environment(EnvType.CLIENT)
IBlockRendering renderType(RenderType type);
@Environment(EnvType.CLIENT)
IBlockRendering renderType(Predicate<RenderType> type);
IBlockRendering renderType(RenderLayer type);
}
@@ -18,10 +18,10 @@
package appeng.bootstrap;
import net.minecraft.advancements.ICriterionInstance;
import net.minecraft.advancements.ICriterionTrigger;
import net.minecraft.advancement.criterion.Criterion;
import net.minecraft.advancement.criterion.CriterionConditions;
@FunctionalInterface
public interface ICriterionTriggerRegistry {
void register(ICriterionTrigger<? extends ICriterionInstance> trigger);
void register(Criterion<? extends CriterionConditions> trigger);
}
@@ -22,7 +22,7 @@ import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
import net.minecraft.dispenser.IDispenseItemBehavior;
import net.minecraft.block.dispenser.DispenserBehavior;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
@@ -42,14 +42,14 @@ public interface IItemBuilder {
IItemBuilder itemGroup(ItemGroup tab);
IItemBuilder props(Consumer<Item.Properties> customizer);
IItemBuilder props(Consumer<Item.Settings> customizer);
IItemBuilder rendering(ItemRenderingCustomizer callback);
/**
* Registers a custom dispenser behavior for this item.
*/
IItemBuilder dispenserBehavior(Supplier<IDispenseItemBehavior> behavior);
IItemBuilder dispenserBehavior(Supplier<DispenserBehavior> behavior);
ItemDefinition build();
}
@@ -18,7 +18,7 @@
package appeng.bootstrap;
import net.minecraft.client.renderer.color.IItemColor;
import net.minecraft.client.color.item.ItemColorProvider;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
@@ -32,6 +32,6 @@ public interface IItemRendering {
* and returns a color multiplier.
*/
@Environment(EnvType.CLIENT)
IItemRendering color(IItemColor itemColor);
IItemRendering color(ItemColorProvider itemColor);
}
@@ -27,7 +27,7 @@ import java.util.function.Function;
import java.util.function.Supplier;
import net.minecraft.block.DispenserBlock;
import net.minecraft.dispenser.IDispenseItemBehavior;
import net.minecraft.block.dispenser.DispenserBehavior;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.fabricmc.api.EnvType;
@@ -35,37 +35,38 @@ import net.fabricmc.api.Environment;
import appeng.api.features.AEFeature;
import appeng.bootstrap.components.IInitComponent;
import appeng.bootstrap.components.IItemRegistrationComponent;
import appeng.core.AEItemGroup;
import appeng.core.AppEng;
import appeng.core.CreativeTab;
import appeng.core.features.ItemDefinition;
import appeng.util.Platform;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
class ItemDefinitionBuilder implements IItemBuilder {
private final FeatureFactory factory;
private final String registryName;
private final Identifier id;
private final Function<Item.Properties, Item> itemFactory;
private final Function<Item.Settings, Item> itemFactory;
private final EnumSet<AEFeature> features = EnumSet.noneOf(AEFeature.class);
private final List<Function<Item, IBootstrapComponent>> boostrapComponents = new ArrayList<>();
private final Item.Properties props = new Item.Properties();
private final Item.Settings props = new Item.Settings();
private Supplier<IDispenseItemBehavior> dispenserBehaviorSupplier;
private Supplier<DispenserBehavior> dispenserBehaviorSupplier;
@Environment(EnvType.CLIENT)
private ItemRendering itemRendering;
private ItemGroup itemGroup = CreativeTab.INSTANCE;
ItemDefinitionBuilder(FeatureFactory factory, String registryName, Function<Item.Properties, Item> itemFactory) {
ItemDefinitionBuilder(FeatureFactory factory, String id, Function<Item.Settings, Item> itemFactory) {
this.factory = factory;
this.registryName = registryName;
this.id = AppEng.makeId(id);
this.itemFactory = itemFactory;
if (Platform.hasClientClasses()) {
this.itemRendering = new ItemRendering();
@@ -98,7 +99,7 @@ class ItemDefinitionBuilder implements IItemBuilder {
}
@Override
public IItemBuilder props(Consumer<Item.Properties> consumer) {
public IItemBuilder props(Consumer<Item.Settings> consumer) {
consumer.accept(props);
return this;
}
@@ -113,7 +114,7 @@ class ItemDefinitionBuilder implements IItemBuilder {
}
@Override
public IItemBuilder dispenserBehavior(Supplier<IDispenseItemBehavior> behavior) {
public IItemBuilder dispenserBehavior(Supplier<DispenserBehavior> behavior) {
this.dispenserBehaviorSupplier = behavior;
return this;
}
@@ -128,9 +129,8 @@ class ItemDefinitionBuilder implements IItemBuilder {
props.group(itemGroup);
Item item = this.itemFactory.apply(props);
item.setRegistryName(AppEng.MOD_ID, this.registryName);
ItemDefinition definition = new ItemDefinition(this.registryName, item, features);
ItemDefinition definition = new ItemDefinition(id.getPath(), item, features);
// Register all extra handlers
this.boostrapComponents.forEach(component -> this.factory.addBootstrapComponent(component.apply(item)));
@@ -138,12 +138,12 @@ class ItemDefinitionBuilder implements IItemBuilder {
// Register custom dispenser behavior if requested
if (this.dispenserBehaviorSupplier != null) {
this.factory.addBootstrapComponent((IInitComponent) () -> {
IDispenseItemBehavior behavior = this.dispenserBehaviorSupplier.get();
DispenserBlock.registerDispenseBehavior(item, behavior);
DispenserBehavior behavior = this.dispenserBehaviorSupplier.get();
DispenserBlock.registerBehavior(item, behavior);
});
}
this.factory.addBootstrapComponent((IItemRegistrationComponent) (side, reg) -> reg.register(item));
Registry.register(Registry.ITEM, id, item);
if (Platform.hasClientClasses()) {
this.itemRendering.apply(this.factory, item);
@@ -19,7 +19,7 @@
package appeng.bootstrap;
import net.fabricmc.api.Environment;
import net.minecraft.client.renderer.color.IItemColor;
import net.minecraft.client.color.item.ItemColorProvider;
import net.minecraft.item.Item;
import net.fabricmc.api.EnvType;
@@ -28,11 +28,11 @@ import appeng.bootstrap.components.ItemColorComponent;
class ItemRendering implements IItemRendering {
@Environment(EnvType.CLIENT)
private IItemColor itemColor;
private ItemColorProvider itemColor;
@Override
@Environment(EnvType.CLIENT)
public IItemRendering color(IItemColor itemColor) {
public IItemRendering color(ItemColorProvider itemColor) {
this.itemColor = itemColor;
return this;
}
@@ -20,21 +20,21 @@ package appeng.bootstrap;
import java.util.function.Function;
import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.client.render.block.entity.BlockEntityRenderer;
import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import appeng.tile.AEBaseTileEntity;
import appeng.tile.AEBaseBlockEntity;
public class TileEntityRendering<T extends AEBaseTileEntity> {
public class TileEntityRendering<T extends AEBaseBlockEntity> {
@Environment(EnvType.CLIENT)
Function<TileEntityRendererDispatcher, TileEntityRenderer<T>> tileEntityRenderer;
Function<BlockEntityRenderDispatcher, BlockEntityRenderer<T>> tileEntityRenderer;
@Environment(EnvType.CLIENT)
public TileEntityRendering<T> tileEntityRenderer(
Function<TileEntityRendererDispatcher, TileEntityRenderer<T>> tileEntityRenderer) {
Function<BlockEntityRenderDispatcher, BlockEntityRenderer<T>> tileEntityRenderer) {
this.tileEntityRenderer = tileEntityRenderer;
return this;
}
@@ -21,14 +21,14 @@ package appeng.bootstrap;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import appeng.tile.AEBaseTileEntity;
import appeng.tile.AEBaseBlockEntity;
/**
* A callback that allows the rendering of a tile entity to be customized. Sadly
* this class is required and no lambdas can be used due to them not being able
* to be annotated with @OnlyIn(CLIENT).
*/
public abstract class TileEntityRenderingCustomizer<T extends AEBaseTileEntity> {
public abstract class TileEntityRenderingCustomizer<T extends AEBaseBlockEntity> {
@Environment(EnvType.CLIENT)
public abstract void customize(TileEntityRendering<T> rendering);
@@ -19,23 +19,23 @@
package appeng.bootstrap.components;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.color.IBlockColor;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.color.block.BlockColorProvider;
public class BlockColorComponent implements IInitComponent {
private final Block block;
private final IBlockColor blockColor;
private final BlockColorProvider blockColor;
public BlockColorComponent(Block block, IBlockColor blockColor) {
public BlockColorComponent(Block block, BlockColorProvider blockColor) {
this.block = block;
this.blockColor = blockColor;
}
@Override
public void initialize() {
Minecraft.getInstance().getBlockColors().register(this.blockColor, this.block);
MinecraftClient.getInstance().getBlockColors().registerColorProvider(this.blockColor, this.block);
}
}
@@ -1,13 +0,0 @@
package appeng.bootstrap.components;
import net.fabricmc.api.EnvType;
import net.minecraft.block.Block;
import net.minecraftforge.registries.IForgeRegistry;
import appeng.bootstrap.IBootstrapComponent;
@FunctionalInterface
public interface IBlockRegistrationComponent extends IBootstrapComponent {
void blockRegistration(EnvType dist, IForgeRegistry<Block> blockRegistry);
}
@@ -1,12 +0,0 @@
package appeng.bootstrap.components;
import net.minecraft.entity.EntityType;
import net.minecraftforge.registries.IForgeRegistry;
import appeng.bootstrap.IBootstrapComponent;
@FunctionalInterface
public interface IEntityRegistrationComponent extends IBootstrapComponent {
void entityRegistration(IForgeRegistry<EntityType<?>> entityRegistry);
}
@@ -1,7 +1,7 @@
package appeng.bootstrap.components;
import net.minecraft.client.renderer.color.BlockColors;
import net.minecraft.client.renderer.color.ItemColors;
import net.minecraft.client.color.block.BlockColors;
import net.minecraft.client.color.item.ItemColors;
import appeng.bootstrap.IBootstrapComponent;
@@ -1,13 +0,0 @@
package appeng.bootstrap.components;
import net.minecraft.item.Item;
import net.fabricmc.api.EnvType;
import net.minecraftforge.registries.IForgeRegistry;
import appeng.bootstrap.IBootstrapComponent;
@FunctionalInterface
public interface IItemRegistrationComponent extends IBootstrapComponent {
void itemRegistration(EnvType dist, IForgeRegistry<Item> itemRegistry);
}
@@ -1,13 +0,0 @@
package appeng.bootstrap.components;
import net.fabricmc.api.EnvType;
import net.minecraft.item.crafting.IRecipeSerializer;
import net.minecraftforge.registries.IForgeRegistry;
import appeng.bootstrap.IBootstrapComponent;
@FunctionalInterface
public interface IRecipeRegistrationComponent extends IBootstrapComponent {
void recipeRegistration(EnvType dist, IForgeRegistry<IRecipeSerializer<?>> recipeRegistry);
}
@@ -18,17 +18,17 @@
package appeng.bootstrap.components;
import net.minecraft.client.renderer.color.BlockColors;
import net.minecraft.client.renderer.color.IItemColor;
import net.minecraft.client.renderer.color.ItemColors;
import net.minecraft.client.color.block.BlockColors;
import net.minecraft.client.color.item.ItemColorProvider;
import net.minecraft.client.color.item.ItemColors;
import net.minecraft.item.Item;
public class ItemColorComponent implements IItemColorRegistrationComponent {
private final Item item;
private final IItemColor itemColor;
private final ItemColorProvider itemColor;
public ItemColorComponent(Item item, IItemColor itemColor) {
public ItemColorComponent(Item item, ItemColorProvider itemColor) {
this.item = item;
this.itemColor = itemColor;
}
@@ -25,8 +25,8 @@ import java.util.function.BiFunction;
import com.google.common.collect.Sets;
import net.minecraft.client.render.model.IBakedModel;
import net.minecraft.client.render.model.ModelBakery;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.render.model.ModelLoader;
import net.minecraft.util.Identifier;
import net.minecraftforge.client.event.ModelBakeEvent;
@@ -35,33 +35,33 @@ import appeng.core.AppEng;
public class ModelOverrideComponent implements IModelBakeComponent {
// Maps from resource path to customizer
private final Map<String, BiFunction<Identifier, IBakedModel, IBakedModel>> customizer = new HashMap<>();
private final Map<String, BiFunction<Identifier, BakedModel, BakedModel>> customizer = new HashMap<>();
public void addOverride(String resourcePath, BiFunction<Identifier, IBakedModel, IBakedModel> customizer) {
public void addOverride(String resourcePath, BiFunction<Identifier, BakedModel, BakedModel> customizer) {
this.customizer.put(resourcePath, customizer);
}
@Override
public void onModelBakeEvent(final ModelBakeEvent event) {
Map<Identifier, IBakedModel> modelRegistry = event.getModelRegistry();
Map<Identifier, BakedModel> modelRegistry = event.getModelRegistry();
Set<Identifier> keys = Sets.newHashSet(modelRegistry.keySet());
IBakedModel missingModel = modelRegistry.get(ModelBakery.MODEL_MISSING);
BakedModel missingModel = modelRegistry.get(ModelLoader.MISSING);
for (Identifier location : keys) {
if (!location.getNamespace().equals(AppEng.MOD_ID)) {
continue;
}
IBakedModel orgModel = modelRegistry.get(location);
BakedModel orgModel = modelRegistry.get(location);
// Don't customize the missing model. This causes Forge to swallow exceptions
if (orgModel == missingModel) {
continue;
}
BiFunction<Identifier, IBakedModel, IBakedModel> customizer = this.customizer.get(location.getPath());
BiFunction<Identifier, BakedModel, BakedModel> customizer = this.customizer.get(location.getPath());
if (customizer != null) {
IBakedModel newModel = customizer.apply(location, orgModel);
BakedModel newModel = customizer.apply(location, orgModel);
if (newModel != orgModel) {
modelRegistry.put(location, newModel);
@@ -1,10 +1,9 @@
package appeng.bootstrap.components;
import java.util.function.Predicate;
import com.google.common.base.Preconditions;
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.RenderTypeLookup;
import net.minecraft.client.render.RenderLayer;
/**
* Sets the rendering type for a block.
@@ -13,25 +12,16 @@ public class RenderTypeComponent implements IClientSetupComponent {
private final Block block;
private final RenderType renderType;
private final RenderLayer renderType;
private final Predicate<RenderType> renderTypes;
public RenderTypeComponent(Block block, RenderType renderType, Predicate<RenderType> renderTypes) {
public RenderTypeComponent(Block block, RenderLayer renderType) {
this.block = block;
this.renderType = renderType;
this.renderTypes = renderTypes;
this.renderType = Preconditions.checkNotNull(renderType);
}
@Override
public void setup() {
if (renderType != null) {
RenderTypeLookup.setRenderLayer(block, renderType);
}
if (renderTypes != null) {
RenderTypeLookup.setRenderLayer(block, renderTypes);
}
BlockRenderLayerMap.INSTANCE.putBlock(block, renderType);
}
}