Fabric port in progress
This commit is contained in:
@@ -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);
|
||||
|
||||
+8
-8
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user