Update BaseBlockModel.java
This commit is contained in:
parent
7af7b26bd6
commit
440171eb1b
1 changed files with 148 additions and 8 deletions
|
@ -8,6 +8,7 @@ import java.util.Set;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
import com.google.common.math.Quantiles;
|
||||||
import com.mojang.datafixers.util.Pair;
|
import com.mojang.datafixers.util.Pair;
|
||||||
|
|
||||||
import net.fabricmc.fabric.api.renderer.v1.Renderer;
|
import net.fabricmc.fabric.api.renderer.v1.Renderer;
|
||||||
|
@ -18,6 +19,7 @@ import net.fabricmc.fabric.api.renderer.v1.mesh.MutableQuadView;
|
||||||
import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter;
|
import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter;
|
||||||
import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel;
|
import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel;
|
||||||
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
|
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.client.render.model.BakedModel;
|
import net.minecraft.client.render.model.BakedModel;
|
||||||
import net.minecraft.client.render.model.BakedQuad;
|
import net.minecraft.client.render.model.BakedQuad;
|
||||||
|
@ -30,11 +32,16 @@ import net.minecraft.client.render.model.json.ModelTransformation;
|
||||||
import net.minecraft.client.texture.Sprite;
|
import net.minecraft.client.texture.Sprite;
|
||||||
import net.minecraft.client.texture.SpriteAtlasTexture;
|
import net.minecraft.client.texture.SpriteAtlasTexture;
|
||||||
import net.minecraft.client.util.SpriteIdentifier;
|
import net.minecraft.client.util.SpriteIdentifier;
|
||||||
|
import net.minecraft.client.util.math.AffineTransformation;
|
||||||
|
import net.minecraft.client.util.math.Vector3f;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
|
import net.minecraft.util.math.Matrix3f;
|
||||||
|
import net.minecraft.util.math.Quaternion;
|
||||||
import net.minecraft.world.BlockRenderView;
|
import net.minecraft.world.BlockRenderView;
|
||||||
|
|
||||||
import ru.betterend.BetterEnd;
|
import ru.betterend.BetterEnd;
|
||||||
|
|
||||||
public class BaseBlockModel implements UnbakedModel, BakedModel, FabricBakedModel {
|
public class BaseBlockModel implements UnbakedModel, BakedModel, FabricBakedModel {
|
||||||
|
@ -61,23 +68,25 @@ public class BaseBlockModel implements UnbakedModel, BakedModel, FabricBakedMode
|
||||||
this.sprites[i] = textureGetter.apply(spritesIDs[i]);
|
this.sprites[i] = textureGetter.apply(spritesIDs[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonUnbakedModel defaultBlockModel = (JsonUnbakedModel) loader.getOrLoadModel(DEFAULT_BLOCK_MODEL);
|
JsonUnbakedModel jsonBlockModel = (JsonUnbakedModel) loader.getOrLoadModel(DEFAULT_BLOCK_MODEL);
|
||||||
this.transformation = defaultBlockModel.getTransformations();
|
this.transformation = jsonBlockModel.getTransformations();
|
||||||
|
|
||||||
Renderer renderer = RendererAccess.INSTANCE.getRenderer();
|
Renderer renderer = RendererAccess.INSTANCE.getRenderer();
|
||||||
MeshBuilder builder = renderer.meshBuilder();
|
MeshBuilder builder = renderer.meshBuilder();
|
||||||
QuadEmitter emitter = builder.getEmitter();
|
QuadEmitter emitter = builder.getEmitter();
|
||||||
|
|
||||||
|
Vector3f rotation = AffineTransformation.getLinearTransformationAndTranslationFromAffine(rotationContainer.getRotation().getMatrix()).getSecond();
|
||||||
|
|
||||||
|
System.out.println("=====");
|
||||||
|
System.out.println(rotation);
|
||||||
|
|
||||||
Direction[] directions = Direction.values();
|
Direction[] directions = Direction.values();
|
||||||
for (Direction direction : directions) {
|
for (Direction direction : directions) {
|
||||||
emitter.square(direction, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f);
|
Direction rotate = Direction.transform(rotationContainer.getRotation().getMatrix(), direction);
|
||||||
|
this.rotate(emitter, direction, rotate);
|
||||||
switch (sprites.length) {
|
switch (sprites.length) {
|
||||||
case 1: {
|
case 1: {
|
||||||
emitter.sprite(0, 0, 1.0F, 1.0F);
|
emitter.spriteBake(0, sprites[0], MutableQuadView.BAKE_LOCK_UV);
|
||||||
emitter.sprite(1, 0, 1.0F, 1.0F);
|
|
||||||
emitter.sprite(2, 0, 1.0F, 1.0F);
|
|
||||||
emitter.sprite(3, 0, 1.0F, 1.0F);
|
|
||||||
emitter.spriteBake(0, sprites[0], MutableQuadView.BAKE_ROTATE_NONE);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 2: {
|
case 2: {
|
||||||
|
@ -156,6 +165,137 @@ public class BaseBlockModel implements UnbakedModel, BakedModel, FabricBakedMode
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void rotate(QuadEmitter emitter, Direction direction, Direction rotation) {
|
||||||
|
switch (direction) {
|
||||||
|
case NORTH: {
|
||||||
|
switch (rotation) {
|
||||||
|
case DOWN:
|
||||||
|
case SOUTH: {
|
||||||
|
emitter.square(rotation, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EAST: {
|
||||||
|
emitter.square(rotation, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WEST: {
|
||||||
|
emitter.square(rotation, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
emitter.square(rotation, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SOUTH: {
|
||||||
|
switch (rotation) {
|
||||||
|
case DOWN:
|
||||||
|
case NORTH: {
|
||||||
|
emitter.square(rotation, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EAST: {
|
||||||
|
emitter.square(rotation, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WEST: {
|
||||||
|
emitter.square(rotation, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
emitter.square(rotation, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case EAST: {
|
||||||
|
switch (rotation) {
|
||||||
|
case NORTH: {
|
||||||
|
emitter.square(rotation, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SOUTH: {
|
||||||
|
emitter.square(rotation, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DOWN:
|
||||||
|
case WEST: {
|
||||||
|
emitter.square(rotation, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
emitter.square(rotation, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WEST: {
|
||||||
|
switch (rotation) {
|
||||||
|
case NORTH: {
|
||||||
|
emitter.square(rotation, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SOUTH: {
|
||||||
|
emitter.square(rotation, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DOWN:
|
||||||
|
case EAST: {
|
||||||
|
emitter.square(rotation, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
emitter.square(rotation, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DOWN: {
|
||||||
|
switch (rotation) {
|
||||||
|
case EAST: {
|
||||||
|
emitter.square(rotation, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WEST: {
|
||||||
|
emitter.square(rotation, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SOUTH:
|
||||||
|
case UP: {
|
||||||
|
emitter.square(rotation, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
emitter.square(rotation, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case UP: {
|
||||||
|
switch (rotation) {
|
||||||
|
case EAST: {
|
||||||
|
emitter.square(rotation, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WEST: {
|
||||||
|
emitter.square(rotation, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SOUTH:
|
||||||
|
case DOWN: {
|
||||||
|
emitter.square(rotation, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
emitter.square(rotation, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isVanillaAdapter() {
|
public boolean isVanillaAdapter() {
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue