Block Colors Registration,
fixing... schtuff.
This commit is contained in:
@@ -22,6 +22,7 @@ import java.util.function.BiFunction;
|
||||
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.color.block.BlockColorProvider;
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
@@ -80,7 +81,7 @@ class BlockRendering implements IBlockRendering {
|
||||
}
|
||||
|
||||
if (this.blockColor != null) {
|
||||
factory.addBootstrapComponent(new BlockColorComponent(block, this.blockColor));
|
||||
ColorProviderRegistry.BLOCK.register(this.blockColor, block);
|
||||
}
|
||||
|
||||
if (this.renderType != null) {
|
||||
|
||||
@@ -60,6 +60,7 @@ public enum FacingToRotation implements StringIdentifiable {
|
||||
private final Quaternion xRot;
|
||||
private final Quaternion yRot;
|
||||
private final Quaternion zRot;
|
||||
private final Quaternion combinedRotation;
|
||||
private final Matrix4f mat;
|
||||
|
||||
private FacingToRotation(Vector3f rot) {
|
||||
@@ -69,14 +70,15 @@ public enum FacingToRotation implements StringIdentifiable {
|
||||
this.mat.multiply(xRot = Vector3f.POSITIVE_X.getDegreesQuaternion(rot.getX()));
|
||||
this.mat.multiply(yRot = Vector3f.POSITIVE_Y.getDegreesQuaternion(rot.getY()));
|
||||
this.mat.multiply(zRot = Vector3f.POSITIVE_Z.getDegreesQuaternion(rot.getZ()));
|
||||
this.combinedRotation = new Quaternion(rot.getX(), rot.getY(), rot.getZ(), true);
|
||||
}
|
||||
|
||||
public boolean isRedundant() {
|
||||
return rot.getX() == 0 && rot.getY() == 0 && rot.getZ() == 0;
|
||||
}
|
||||
|
||||
public Vector3f getRot() {
|
||||
return this.rot;
|
||||
public Quaternion getRot() {
|
||||
return this.combinedRotation;
|
||||
}
|
||||
|
||||
public Matrix4f getMat() {
|
||||
|
||||
@@ -18,30 +18,28 @@
|
||||
|
||||
package appeng.client.render.cablebus;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
|
||||
import appeng.api.util.AEColor;
|
||||
import appeng.core.AELog;
|
||||
import appeng.core.features.registries.PartModels;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.mojang.datafixers.util.Pair;
|
||||
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
import net.minecraft.client.render.model.BakedModel;
|
||||
import net.minecraft.client.render.model.ModelBakeSettings;
|
||||
import net.minecraft.client.render.model.UnbakedModel;
|
||||
import net.minecraft.client.util.SpriteIdentifier;
|
||||
import net.minecraft.client.render.model.ModelLoader;
|
||||
import net.minecraft.client.render.model.UnbakedModel;
|
||||
import net.minecraft.client.texture.Sprite;
|
||||
import net.minecraft.client.util.SpriteIdentifier;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import appeng.api.util.AEColor;
|
||||
import appeng.core.AELog;
|
||||
import appeng.core.features.registries.PartModels;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* The built-in model for the cable bus block.
|
||||
@@ -57,6 +55,7 @@ public class CableBusModel implements UnbakedModel {
|
||||
|
||||
@Override
|
||||
public Collection<Identifier> getModelDependencies() {
|
||||
partModels.setInitialized(true);
|
||||
return partModels.getModels();
|
||||
}
|
||||
|
||||
@@ -78,7 +77,12 @@ public class CableBusModel implements UnbakedModel {
|
||||
|
||||
@Override
|
||||
public Collection<SpriteIdentifier> getTextureDependencies(Function<Identifier, UnbakedModel> unbakedModelGetter, Set<Pair<String, String>> unresolvedTextureReferences) {
|
||||
return Collections.unmodifiableList(CableBuilder.getTextures());
|
||||
return Stream.concat(
|
||||
getModelDependencies().stream()
|
||||
.map(unbakedModelGetter)
|
||||
.flatMap(ubm -> ubm.getTextureDependencies(unbakedModelGetter, unresolvedTextureReferences).stream()),
|
||||
CableBuilder.getTextures().stream()
|
||||
).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private Map<Identifier, BakedModel> loadPartModels(ModelLoader loader,
|
||||
|
||||
@@ -24,8 +24,13 @@ import net.fabricmc.api.Environment;
|
||||
import net.fabricmc.fabric.api.renderer.v1.mesh.MutableQuadView;
|
||||
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
|
||||
import net.minecraft.client.util.math.Vector3f;
|
||||
import net.minecraft.client.util.math.Vector4f;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.util.math.Matrix3f;
|
||||
import net.minecraft.util.math.Matrix4f;
|
||||
import net.minecraft.util.math.Quaternion;
|
||||
|
||||
import java.util.EnumMap;
|
||||
|
||||
/**
|
||||
* Assuming a default-orientation of forward=NORTH and up=UP, this class rotates
|
||||
@@ -33,47 +38,59 @@ import net.minecraft.util.math.Matrix4f;
|
||||
*/
|
||||
@Environment(EnvType.CLIENT)
|
||||
public class QuadRotator implements RenderContext.QuadTransform {
|
||||
// FIXME private static final ThreadLocal<BakedPipeline> pipelines = ThreadLocal.withInitial(() -> //
|
||||
// FIXME BakedPipeline.builder()//
|
||||
// FIXME .addElement("transformer", QuadMatrixTransformer.FACTORY)//
|
||||
// FIXME .build());
|
||||
// FIXME private static final ThreadLocal<Quad> collectors = ThreadLocal.withInitial(Quad::new);
|
||||
|
||||
private static final RenderContext.QuadTransform NULL_TRANSFORM = quad -> true;
|
||||
|
||||
private static final EnumMap<FacingToRotation, RenderContext.QuadTransform> TRANSFORMS
|
||||
= new EnumMap<>(FacingToRotation.class);
|
||||
|
||||
static {
|
||||
for (FacingToRotation rotation : FacingToRotation.values()) {
|
||||
if (rotation.isRedundant()) {
|
||||
TRANSFORMS.put(rotation, NULL_TRANSFORM);
|
||||
} else {
|
||||
TRANSFORMS.put(rotation, new QuadRotator(rotation));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private final FacingToRotation rotation;
|
||||
|
||||
private final Quaternion quaternion;
|
||||
|
||||
public QuadRotator(FacingToRotation rotation) {
|
||||
this.rotation = rotation;
|
||||
this.quaternion = rotation.getRot();
|
||||
}
|
||||
|
||||
public static RenderContext.QuadTransform get(Direction newForward, Direction newUp) {
|
||||
if (newForward == Direction.NORTH && newUp == Direction.UP) {
|
||||
return NULL_TRANSFORM; // This is the default orientation
|
||||
}
|
||||
FacingToRotation rotation = getRotation(newForward, newUp);
|
||||
if (rotation.isRedundant()) {
|
||||
return NULL_TRANSFORM;
|
||||
}
|
||||
return new QuadRotator(rotation);
|
||||
return TRANSFORMS.get(getRotation(newForward, newUp));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean transform(MutableQuadView quad) {
|
||||
|
||||
// FIXME: Temporary rotation fix
|
||||
Matrix4f mat = new Matrix4f();
|
||||
mat.addToLastColumn(new Vector3f(-0.5f, -0.5f, -0.5f));
|
||||
mat.multiply(rotation.getMat());
|
||||
mat.addToLastColumn(new Vector3f(0.5f, 0.5f, 0.5f));
|
||||
Vector3f tmp = new Vector3f();
|
||||
|
||||
// FIXME ROTATION pipeline.reset(format);
|
||||
// FIXME ROTATION collector.reset(format);
|
||||
// FIXME ROTATION
|
||||
// FIXME ROTATION transformer.setMatrix(mat);
|
||||
// FIXME ROTATION pipeline.prepare(collector);
|
||||
// FIXME ROTATION quad.pipe(pipeline);
|
||||
for (int i = 0; i < 4; i++) {
|
||||
// Transform the position (center of rotation is 0.5, 0.5, 0.5)
|
||||
quad.copyPos(i, tmp);
|
||||
tmp.add(-0.5f, -0.5f, -0.5f);
|
||||
tmp.rotate(quaternion);
|
||||
tmp.add(0.5f, 0.5f, 0.5f);
|
||||
quad.pos(i, tmp);
|
||||
|
||||
// Transform the normal
|
||||
quad.copyNormal(i, tmp);
|
||||
tmp.rotate(rotation.getRot());
|
||||
quad.normal(i, tmp);
|
||||
|
||||
// Transform the nominal face
|
||||
quad.nominalFace(rotation.rotate(quad.nominalFace()));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -33,15 +33,12 @@ import appeng.core.features.ActivityState;
|
||||
import appeng.core.features.ColoredItemDefinition;
|
||||
import appeng.core.features.ItemStackSrc;
|
||||
import appeng.core.features.registries.PartModels;
|
||||
import appeng.fluids.parts.*;
|
||||
import appeng.items.parts.ColoredPartItem;
|
||||
import appeng.items.parts.PartItem;
|
||||
import appeng.items.parts.PartItemRendering;
|
||||
import appeng.items.parts.PartModelsHelper;
|
||||
import appeng.parts.automation.*;
|
||||
import appeng.parts.misc.*;
|
||||
import appeng.parts.networking.*;
|
||||
import appeng.parts.p2p.*;
|
||||
import appeng.parts.reporting.*;
|
||||
|
||||
/**
|
||||
@@ -112,44 +109,74 @@ public final class ApiParts implements IParts {
|
||||
this.monitor = createPart("monitor", PanelPart.class, PanelPart::new);
|
||||
this.semiDarkMonitor = createPart("semi_dark_monitor", SemiDarkPanelPart.class, SemiDarkPanelPart::new);
|
||||
this.darkMonitor = createPart("dark_monitor", DarkPanelPart.class, DarkPanelPart::new);
|
||||
this.storageBus = createPart("storage_bus", StorageBusPart.class, StorageBusPart::new);
|
||||
this.fluidStorageBus = createPart("fluid_storage_bus", FluidStorageBusPart.class, FluidStorageBusPart::new);
|
||||
this.importBus = createPart("import_bus", ImportBusPart.class, ImportBusPart::new);
|
||||
this.fluidImportBus = createPart("fluid_import_bus", FluidImportBusPart.class, FluidImportBusPart::new);
|
||||
this.exportBus = createPart("export_bus", ExportBusPart.class, ExportBusPart::new);
|
||||
this.fluidExportBus = createPart("fluid_export_bus", FluidExportBusPart.class, FluidExportBusPart::new);
|
||||
this.levelEmitter = createPart("level_emitter", LevelEmitterPart.class, LevelEmitterPart::new);
|
||||
this.fluidLevelEmitter = createPart("fluid_level_emitter", FluidLevelEmitterPart.class,
|
||||
FluidLevelEmitterPart::new);
|
||||
this.annihilationPlane = createPart("annihilation_plane", AnnihilationPlanePart.class,
|
||||
AnnihilationPlanePart::new);
|
||||
this.identityAnnihilationPlane = createPart("identity_annihilation_plane", IdentityAnnihilationPlanePart.class,
|
||||
IdentityAnnihilationPlanePart::new);
|
||||
this.fluidAnnihilationPlane = createPart("fluid_annihilation_plane", FluidAnnihilationPlanePart.class,
|
||||
FluidAnnihilationPlanePart::new);
|
||||
this.formationPlane = createPart("formation_plane", FormationPlanePart.class, FormationPlanePart::new);
|
||||
this.fluidFormationPlane = createPart("fluid_formation_plane", FluidFormationPlanePart.class,
|
||||
FluidFormationPlanePart::new);
|
||||
this.patternTerminal = createPart("pattern_terminal", PatternTerminalPart.class, PatternTerminalPart::new);
|
||||
this.craftingTerminal = createPart("crafting_terminal", CraftingTerminalPart.class, CraftingTerminalPart::new);
|
||||
this.terminal = createPart("terminal", TerminalPart.class, TerminalPart::new);
|
||||
this.storageMonitor = createPart("storage_monitor", StorageMonitorPart.class, StorageMonitorPart::new);
|
||||
this.conversionMonitor = createPart("conversion_monitor", ConversionMonitorPart.class,
|
||||
ConversionMonitorPart::new);
|
||||
this.iface = createPart("cable_interface", InterfacePart.class, InterfacePart::new);
|
||||
this.fluidIface = createPart("cable_fluid_interface", FluidInterfacePart.class, FluidInterfacePart::new);
|
||||
this.p2PTunnelME = createPart("me_p2p_tunnel", MEP2PTunnelPart.class, MEP2PTunnelPart::new);
|
||||
this.p2PTunnelRedstone = createPart("redstone_p2p_tunnel", RedstoneP2PTunnelPart.class,
|
||||
RedstoneP2PTunnelPart::new);
|
||||
this.p2PTunnelItems = createPart("item_p2p_tunnel", ItemP2PTunnelPart.class, ItemP2PTunnelPart::new);
|
||||
this.p2PTunnelFluids = createPart("fluid_p2p_tunnel", FluidP2PTunnelPart.class, FluidP2PTunnelPart::new);
|
||||
this.p2PTunnelEU = null; // FIXME createPart( "ic2_p2p_tunnel", PartType.P2P_TUNNEL_IC2,
|
||||
// PartP2PIC2Power.class, PartP2PIC2Power::new);
|
||||
this.p2PTunnelFE = createPart("fe_p2p_tunnel", FEP2PTunnelPart.class, FEP2PTunnelPart::new);
|
||||
this.p2PTunnelLight = createPart("light_p2p_tunnel", LightP2PTunnelPart.class, LightP2PTunnelPart::new);
|
||||
this.interfaceTerminal = createPart("interface_terminal", InterfaceTerminalPart.class,
|
||||
InterfaceTerminalPart::new);
|
||||
this.fluidTerminal = createPart("fluid_terminal", FluidTerminalPart.class, FluidTerminalPart::new);
|
||||
// FIXME FABRIC this.storageBus = createPart("storage_bus", StorageBusPart.class, StorageBusPart::new);
|
||||
// FIXME FABRIC this.fluidStorageBus = createPart("fluid_storage_bus", FluidStorageBusPart.class, FluidStorageBusPart::new);
|
||||
// FIXME FABRIC this.importBus = createPart("import_bus", ImportBusPart.class, ImportBusPart::new);
|
||||
// FIXME FABRIC this.fluidImportBus = createPart("fluid_import_bus", FluidImportBusPart.class, FluidImportBusPart::new);
|
||||
// FIXME FABRIC this.exportBus = createPart("export_bus", ExportBusPart.class, ExportBusPart::new);
|
||||
// FIXME FABRIC this.fluidExportBus = createPart("fluid_export_bus", FluidExportBusPart.class, FluidExportBusPart::new);
|
||||
// FIXME FABRIC this.levelEmitter = createPart("level_emitter", LevelEmitterPart.class, LevelEmitterPart::new);
|
||||
// FIXME FABRIC this.fluidLevelEmitter = createPart("fluid_level_emitter", FluidLevelEmitterPart.class,
|
||||
// FIXME FABRIC FluidLevelEmitterPart::new);
|
||||
// FIXME FABRIC this.annihilationPlane = createPart("annihilation_plane", AnnihilationPlanePart.class,
|
||||
// FIXME FABRIC AnnihilationPlanePart::new);
|
||||
// FIXME FABRIC this.identityAnnihilationPlane = createPart("identity_annihilation_plane", IdentityAnnihilationPlanePart.class,
|
||||
// FIXME FABRIC IdentityAnnihilationPlanePart::new);
|
||||
// FIXME FABRIC this.fluidAnnihilationPlane = createPart("fluid_annihilation_plane", FluidAnnihilationPlanePart.class,
|
||||
// FIXME FABRIC FluidAnnihilationPlanePart::new);
|
||||
// FIXME FABRIC this.formationPlane = createPart("formation_plane", FormationPlanePart.class, FormationPlanePart::new);
|
||||
// FIXME FABRIC this.fluidFormationPlane = createPart("fluid_formation_plane", FluidFormationPlanePart.class,
|
||||
// FIXME FABRIC FluidFormationPlanePart::new);
|
||||
// FIXME FABRIC this.patternTerminal = createPart("pattern_terminal", PatternTerminalPart.class, PatternTerminalPart::new);
|
||||
// FIXME FABRIC this.craftingTerminal = createPart("crafting_terminal", CraftingTerminalPart.class, CraftingTerminalPart::new);
|
||||
// FIXME FABRIC this.terminal = createPart("terminal", TerminalPart.class, TerminalPart::new);
|
||||
// FIXME FABRIC this.storageMonitor = createPart("storage_monitor", StorageMonitorPart.class, StorageMonitorPart::new);
|
||||
// FIXME FABRIC this.conversionMonitor = createPart("conversion_monitor", ConversionMonitorPart.class,
|
||||
// FIXME FABRIC ConversionMonitorPart::new);
|
||||
// FIXME FABRIC this.iface = createPart("cable_interface", InterfacePart.class, InterfacePart::new);
|
||||
// FIXME FABRIC this.fluidIface = createPart("cable_fluid_interface", FluidInterfacePart.class, FluidInterfacePart::new);
|
||||
// FIXME FABRIC this.p2PTunnelME = createPart("me_p2p_tunnel", MEP2PTunnelPart.class, MEP2PTunnelPart::new);
|
||||
// FIXME FABRIC this.p2PTunnelRedstone = createPart("redstone_p2p_tunnel", RedstoneP2PTunnelPart.class,
|
||||
// FIXME FABRIC RedstoneP2PTunnelPart::new);
|
||||
// FIXME FABRIC this.p2PTunnelItems = createPart("item_p2p_tunnel", ItemP2PTunnelPart.class, ItemP2PTunnelPart::new);
|
||||
// FIXME FABRIC this.p2PTunnelFluids = createPart("fluid_p2p_tunnel", FluidP2PTunnelPart.class, FluidP2PTunnelPart::new);
|
||||
// FIXME FABRIC this.p2PTunnelEU = null; // FIXME createPart( "ic2_p2p_tunnel", PartType.P2P_TUNNEL_IC2,
|
||||
// FIXME FABRIC // PartP2PIC2Power.class, PartP2PIC2Power::new);
|
||||
// FIXME FABRIC this.p2PTunnelFE = createPart("fe_p2p_tunnel", FEP2PTunnelPart.class, FEP2PTunnelPart::new);
|
||||
// FIXME FABRIC this.p2PTunnelLight = createPart("light_p2p_tunnel", LightP2PTunnelPart.class, LightP2PTunnelPart::new);
|
||||
// FIXME FABRIC this.interfaceTerminal = createPart("interface_terminal", InterfaceTerminalPart.class,
|
||||
// FIXME FABRIC InterfaceTerminalPart::new);
|
||||
// FIXME FABRIC this.fluidTerminal = createPart("fluid_terminal", FluidTerminalPart.class, FluidTerminalPart::new);
|
||||
|
||||
this.storageBus = null;
|
||||
this.importBus = null;
|
||||
this.exportBus = null;
|
||||
this.iface = null;
|
||||
this.fluidIface = null;
|
||||
this.levelEmitter = null;
|
||||
this.fluidLevelEmitter = null;
|
||||
this.annihilationPlane = null;
|
||||
this.identityAnnihilationPlane = null;
|
||||
this.fluidAnnihilationPlane = null;
|
||||
this.formationPlane = null;
|
||||
this.fluidFormationPlane = null;
|
||||
this.p2PTunnelME = null;
|
||||
this.p2PTunnelRedstone = null;
|
||||
this.p2PTunnelItems = null;
|
||||
this.p2PTunnelFluids = null;
|
||||
this.p2PTunnelEU = null;
|
||||
this.p2PTunnelFE = null;
|
||||
this.p2PTunnelLight = null;
|
||||
this.interfaceTerminal = null;
|
||||
this.patternTerminal = null;
|
||||
this.craftingTerminal = null;
|
||||
this.terminal = null;
|
||||
this.storageMonitor = null;
|
||||
this.conversionMonitor = null;
|
||||
this.fluidImportBus = null;
|
||||
this.fluidExportBus = null;
|
||||
this.fluidTerminal = null;
|
||||
this.fluidStorageBus = null;
|
||||
|
||||
this.registry = null;
|
||||
this.partModels = null;
|
||||
|
||||
Reference in New Issue
Block a user