Compare commits

...

2 Commits

9 changed files with 132 additions and 52 deletions
+17 -2
View File
@@ -20,7 +20,6 @@ buildscript {
repositories {
maven { url = 'https://files.minecraftforge.net/maven' }
maven { url = 'https://repo.spongepowered.org/maven' }
jcenter()
mavenCentral()
}
dependencies {
@@ -40,9 +39,15 @@ apply plugin: 'net.minecraftforge.gradle'
apply plugin: 'org.spongepowered.mixin'
apply plugin: "eclipse"
// All jar files from this folder will be added automatically as runtime mod dependencies
def extraModsDir = "extra-mods-${minecraft_version}"
repositories {
flatDir {
name "extra-mods"
dir file(extraModsDir)
}
mavenLocal()
jcenter()
mavenCentral()
maven { // modmaven, maven proxy
name 'modmaven'
@@ -61,6 +66,16 @@ dependencies {
runtimeOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}:${jei_version}")
runtimeOnly fg.deobf("mcjty.theoneprobe:TheOneProbe-${minecraft_release}:${minecraft_release}-${top_version}")
// Locally sourced extra mods for runtime (i.e. testing)
for (extraModJar in fileTree(dir: extraModsDir, include: '*.jar')) {
def basename = extraModJar.name.substring(0, extraModJar.name.length() - ".jar".length())
def versionSep = basename.lastIndexOf('-')
assert versionSep != -1
def artifactId = basename.substring(0, versionSep)
def version = basename.substring(versionSep + 1)
runtimeOnly fg.deobf("extra-mods:$artifactId:$version")
}
// unit test dependencies
testCompile "junit:junit:4.13"
+1 -1
View File
@@ -11,7 +11,7 @@ artifact_basename=appliedenergistics2
minecraft_release=1.16
minecraft_version=1.16.3
mcp_mappings=20200916-1.16.2
forge_version=34.0.8
forge_version=34.1.15
#########################################################
# Provided APIs #
@@ -142,6 +142,7 @@ public class CableBusBakedModel implements IBakedModel {
}
}
}
this.facadeBuilder.buildFacadeQuads(layer, renderState, rand, quads, this.partModels::get);
return quads;
@@ -327,12 +328,12 @@ public class CableBusBakedModel implements IBakedModel {
@Override
public boolean isGui3d() {
return false;
return false; // This model is never used in an UI
}
@Override
public boolean isSideLit() {
return false;// TODO
return false; // This model is never used in an UI
}
@Override
@@ -18,7 +18,9 @@
package appeng.client.render.cablebus;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Stream;
@@ -37,6 +39,7 @@ import net.minecraftforge.client.model.IModelConfiguration;
import appeng.api.util.AEColor;
import appeng.client.render.BasicUnbakedModel;
import appeng.core.AELog;
import appeng.core.AppEng;
import appeng.core.features.registries.PartModels;
/**
@@ -44,6 +47,8 @@ import appeng.core.features.registries.PartModels;
*/
public class CableBusModel implements BasicUnbakedModel<CableBusModel> {
public static final ResourceLocation TRANSLUCENT_FACADE_MODEL = AppEng.makeId("part/translucent_facade");
private final PartModels partModels;
public CableBusModel(PartModels partModels) {
@@ -53,7 +58,9 @@ public class CableBusModel implements BasicUnbakedModel<CableBusModel> {
@Override
public Collection<ResourceLocation> getModelDependencies() {
partModels.setInitialized(true);
return partModels.getModels();
List<ResourceLocation> models = new ArrayList<>(partModels.getModels());
models.add(TRANSLUCENT_FACADE_MODEL);
return models;
}
@Override
@@ -68,7 +75,11 @@ public class CableBusModel implements BasicUnbakedModel<CableBusModel> {
Map<ResourceLocation, IBakedModel> partModels = this.loadPartModels(bakery, spriteGetter, modelTransform);
CableBuilder cableBuilder = new CableBuilder(spriteGetter);
FacadeBuilder facadeBuilder = new FacadeBuilder();
IBakedModel translucentFacadeModel = bakery.getBakedModel(TRANSLUCENT_FACADE_MODEL, modelTransform,
spriteGetter);
FacadeBuilder facadeBuilder = new FacadeBuilder(translucentFacadeModel);
// This should normally not be used, but we *have* to provide a particle texture
// or otherwise damage models will
@@ -20,6 +20,7 @@ package appeng.client.render.cablebus;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -29,6 +30,8 @@ import java.util.function.Function;
import javax.annotation.Nullable;
import com.google.common.collect.ImmutableList;
import net.minecraft.block.BlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.BlockRendererDispatcher;
@@ -88,6 +91,9 @@ public class FacadeBuilder {
new AxisAlignedBB(0.0, 0.0, 0.0, THIN_THICKNESS, 1.0, 1.0),
new AxisAlignedBB(1.0 - THIN_THICKNESS, 0.0, 0.0, 1.0, 1.0, 1.0) };
// Pre-rotated transparent facade quads
private final Map<Direction, List<BakedQuad>> transparentFacadeQuads;
private final ThreadLocal<BakedPipeline> pipelines = ThreadLocal.withInitial(() -> BakedPipeline.builder()
// Clamper is responsible for clamping the vertex to the bounds specified.
.addElement("clamper", QuadClamper.FACTORY)
@@ -104,6 +110,29 @@ public class FacadeBuilder {
);
private final ThreadLocal<Quad> collectors = ThreadLocal.withInitial(Quad::new);
public FacadeBuilder() {
// This constructor is used for item models where transparent facades are not a
// concern
this.transparentFacadeQuads = new EnumMap<>(Direction.class);
for (Direction facing : Direction.values()) {
this.transparentFacadeQuads.put(facing, Collections.emptyList());
}
}
public FacadeBuilder(IBakedModel transparentFacadeModel) {
// Pre-rotate the transparent facade model to all possible sides so that we can
// add it quicker later
List<BakedQuad> partQuads = transparentFacadeModel.getQuads(null, null, new Random(), EmptyModelData.INSTANCE);
this.transparentFacadeQuads = new EnumMap<>(Direction.class);
for (Direction facing : Direction.values()) {
// Rotate quads accordingly
QuadRotator rotator = new QuadRotator();
List<BakedQuad> rotated = rotator.rotateQuads(partQuads, facing, Direction.UP);
this.transparentFacadeQuads.put(facing, ImmutableList.copyOf(rotated));
}
}
public void buildFacadeQuads(RenderType layer, CableBusRenderState renderState, Random rand, List<BakedQuad> quads,
Function<ResourceLocation, IBakedModel> modelLookup) {
BakedPipeline pipeline = this.pipelines.get();
@@ -130,14 +159,20 @@ public class FacadeBuilder {
Direction.UP));
}
}
// If we are forcing transparency and this isn't the Translucent layer.
if (transparent && layer != RenderType.getTranslucent()) {
// When we're forcing transparent facades, add a "border" model that indicates
// where the facade is,
// But otherwise skip the rest.
if (transparent) {
if (layer != RenderType.getCutout()) {
quads.addAll(transparentFacadeQuads.get(side));
}
continue;
}
BlockState blockState = facadeRenderState.getSourceBlock();
// If we aren't forcing transparency let the block decide if it should render.
if (!transparent && layer != null) {
if (layer != null) {
if (!RenderTypeLookup.canRenderInLayer(blockState, layer)) {
continue;
}
@@ -198,7 +233,7 @@ public class FacadeBuilder {
List<BakedQuad> modelQuads = new ArrayList<>();
// If we are forcing transparent facades, fake the render layer, and grab all
// quads.
if (transparent || layer == null) {
if (layer == null) {
for (RenderType forcedLayer : RenderType.getBlockRenderTypes()) {
// Check if the block renders on the layer we want to force.
if (RenderTypeLookup.canRenderInLayer(blockState, forcedLayer)) {
@@ -55,8 +55,7 @@ import appeng.core.AppEng;
@OnlyIn(Dist.CLIENT)
public class MolecularAssemblerRenderer extends TileEntityRenderer<MolecularAssemblerTileEntity> {
public static final ResourceLocation LIGHTS_MODEL = new ResourceLocation(AppEng.MOD_ID,
"block/molecular_assembler_lights");
public static final ResourceLocation LIGHTS_MODEL = AppEng.makeId("block/molecular_assembler_lights");
private static final RenderType MC_161917_RENDERTYPE_FIX = createRenderType();
@@ -1,39 +0,0 @@
{
"textures": {
"0": "appliedenergistics2:part/cable_anchor",
"particle": "appliedenergistics2:part/cable_anchor"
},
"elements": [
{
"name": "Element",
"from": [7.0, 7.0, 1.0],
"to": [9.0, 9.0, 6.0],
"faces": {
"north": {
"texture": "#0",
"uv": [0.0, 0.0, 2.0, 2.0]
},
"east": {
"texture": "#0",
"uv": [0.0, 0.0, 5.0, 2.0]
},
"south": {
"texture": "#0",
"uv": [0.0, 0.0, 2.0, 2.0]
},
"west": {
"texture": "#0",
"uv": [0.0, 0.0, 5.0, 2.0]
},
"up": {
"texture": "#0",
"uv": [0.0, 0.0, 2.0, 5.0]
},
"down": {
"texture": "#0",
"uv": [0.0, 0.0, 2.0, 5.0]
}
}
}
]
}
@@ -0,0 +1,58 @@
{
"textures": {
"facade": "appliedenergistics2:part/translucent_facade"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 0.25, 0.25],
"faces": {
"north": { "uv": [0, 15.75, 16, 16], "texture": "#facade" },
"east": { "uv": [15.75, 15.75, 16, 16], "texture": "#facade" },
"south": { "uv": [0, 15.75, 16, 16], "texture": "#facade" },
"west": { "uv": [0, 15.75, 1, 16], "texture": "#facade" },
"up": { "uv": [0, 0, 16, 1], "texture": "#facade" },
"down": { "uv": [0, 15.75, 16, 16], "texture": "#facade" }
}
},
{
"from": [0, 15.75, 0],
"to": [16, 16, 0.25],
"rotation": { "angle": 0, "axis": "y", "origin": [8, 23, 8] },
"faces": {
"north": { "uv": [0, 0, 16, 1], "texture": "#facade" },
"east": { "uv": [15.75, 0, 16, 1], "texture": "#facade" },
"south": { "uv": [0, 0, 16, 1], "texture": "#facade" },
"west": { "uv": [0, 0, 1, 1], "texture": "#facade" },
"up": { "uv": [0, 0, 16, 1], "texture": "#facade" },
"down": { "uv": [0, 15.75, 16, 16], "texture": "#facade" }
}
},
{
"from": [0, 0.25, 0],
"to": [0.25, 15.75, 0.25],
"rotation": { "angle": 0, "axis": "y", "origin": [8, 23, 8] },
"faces": {
"north": { "uv": [15.75, 1, 16, 15.75], "texture": "#facade" },
"east": { "uv": [15.75, 1, 16, 15.75], "texture": "#facade" },
"south": { "uv": [0, 1, 1, 15.75], "texture": "#facade" },
"west": { "uv": [0, 1, 1, 15.75], "texture": "#facade" },
"up": { "uv": [0, 0, 1, 1], "texture": "#facade" },
"down": { "uv": [0, 15.75, 1, 16], "texture": "#facade" }
}
},
{
"from": [15.75, 0.25, 0],
"to": [16, 15.75, 0.25],
"rotation": { "angle": 0, "axis": "y", "origin": [23, 23, 8] },
"faces": {
"north": { "uv": [0, 1, 1, 15.75], "texture": "#facade" },
"east": { "uv": [15.75, 1, 16, 15.75], "texture": "#facade" },
"south": { "uv": [15.75, 1, 16, 15.75], "texture": "#facade" },
"west": { "uv": [0, 1, 1, 15.75], "texture": "#facade" },
"up": { "uv": [15.75, 0, 16, 1], "texture": "#facade" },
"down": { "uv": [15.75, 15.75, 16, 16], "texture": "#facade" }
}
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 126 B