Removed code for custom sign-models

This commit is contained in:
Frank Bauer 2021-06-28 17:47:23 +02:00
parent ad40784871
commit 3725ed9367
3 changed files with 22 additions and 78 deletions

View file

@ -1,53 +0,0 @@
package ru.bclib.client;
import com.google.common.collect.ImmutableMap;
import net.minecraft.client.model.geom.EntityModelSet;
import net.minecraft.client.model.geom.ModelLayers;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.client.renderer.blockentity.SignRenderer;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.SignBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.WoodType;
import org.jetbrains.annotations.ApiStatus;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
@ApiStatus.Internal
public class SignModelFactory {
public static final Set<WoodType> TYPES = new HashSet<>();
public final Map<WoodType, SignRenderer.SignModel> signModels;
public final SignRenderer.SignModel defaultModel;
public SignModelFactory(EntityModelSet ctx) {
//build a list of all new sign models.
this.signModels = (Map) TYPES.stream().collect(ImmutableMap.toImmutableMap((signType) -> {
return signType;
}, (signType) -> {
return new SignRenderer.SignModel(ctx.bakeLayer(ModelLayers.createSignModelName(signType)));
}));
//set up a default model
defaultModel = new SignRenderer.SignModel(ctx.bakeLayer(ModelLayers.createSignModelName(WoodType.OAK)));
}
public static WoodType getSignType(Block block) {
WoodType signType2;
if (block instanceof SignBlock) {
signType2 = ((SignBlock) block).type();
} else {
signType2 = WoodType.OAK;
}
return signType2;
}
public SignRenderer.SignModel getSignModel(BlockState state) {
WoodType woodType = getSignType(state.getBlock());
SignRenderer.SignModel model = this.signModels.get(woodType);
return model;
}
}

View file

@ -18,6 +18,7 @@ import net.minecraft.client.gui.GuiComponent;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.font.TextFieldHelper;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.model.geom.ModelLayers;
import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.blockentity.SignRenderer;
@ -27,9 +28,9 @@ import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.network.protocol.game.ServerboundSignUpdatePacket;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.WoodType;
import ru.bclib.blockentities.BaseSignBlockEntity;
import ru.bclib.blocks.BaseSignBlock;
import ru.bclib.client.SignModelFactory;
import ru.bclib.client.render.BaseSignBlockEntityRenderer;
import java.util.Arrays;
@ -43,12 +44,14 @@ public class BlockSignEditScreen extends Screen {
private final String[] text = (String[]) Util.make(new String[4], (strings) -> {
Arrays.fill(strings, "");
});
final private SignModelFactory signModelFactory;
private final SignRenderer.SignModel model;
public BlockSignEditScreen(BaseSignBlockEntity sign) {
super(new TranslatableComponent("sign.edit"));
this.sign = sign;
signModelFactory = new SignModelFactory(this.minecraft.getEntityModels());
//set up a default model
model = new SignRenderer.SignModel(this.minecraft.getEntityModels().bakeLayer(ModelLayers.createSignModelName(WoodType.OAK)));
}
protected void init() {
@ -125,7 +128,6 @@ public class BlockSignEditScreen extends Screen {
matrices.scale(93.75F, -93.75F, 93.75F);
matrices.translate(0.0D, -1.3125D, 0.0D);
BlockState blockState = this.sign.getBlockState();
final SignRenderer.SignModel model = signModelFactory.getSignModel(blockState);
boolean bl = blockState.getValue(BaseSignBlock.FLOOR);
if (!bl) {

View file

@ -5,7 +5,6 @@ import com.mojang.blaze3d.platform.NativeImage;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Vector3f;
import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityModelLayerRegistry;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
import net.minecraft.client.model.geom.ModelLayers;
@ -15,7 +14,7 @@ import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.Sheets;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.client.renderer.blockentity.SignRenderer.SignModel;
import net.minecraft.client.renderer.blockentity.SignRenderer;
import net.minecraft.client.resources.model.Material;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation;
@ -24,13 +23,13 @@ import net.minecraft.util.Mth;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.item.DyeColor;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.SignBlock;
import net.minecraft.world.level.block.StandingSignBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.WoodType;
import net.minecraft.world.phys.Vec3;
import ru.bclib.blockentities.BaseSignBlockEntity;
import ru.bclib.blocks.BaseSignBlock;
import ru.bclib.client.SignModelFactory;
import java.util.HashMap;
import java.util.List;
@ -39,21 +38,22 @@ public class BaseSignBlockEntityRenderer implements BlockEntityRenderer<BaseSign
private static final HashMap<Block, RenderType> LAYERS = Maps.newHashMap();
private static final RenderType defaultLayer;
private final Font font;
private final SignModelFactory signModelFactory;
private final SignRenderer.SignModel model;
private static final int OUTLINE_RENDER_DISTANCE = Mth.square(16);
public BaseSignBlockEntityRenderer(BlockEntityRendererProvider.Context ctx) {
super();
this.signModelFactory = new SignModelFactory(ctx.getModelSet());
this.font = ctx.getFont();
//set up a default model
model = new SignRenderer.SignModel(ctx.bakeLayer(ModelLayers.createSignModelName(WoodType.OAK)));
}
public void render(BaseSignBlockEntity signBlockEntity, float tickDelta, PoseStack matrixStack,
MultiBufferSource provider, int light, int overlay) {
BlockState state = signBlockEntity.getBlockState();
SignModel model = signModelFactory.getSignModel(state);
matrixStack.pushPose();
@ -139,24 +139,25 @@ public class BaseSignBlockEntityRenderer implements BlockEntityRenderer<BaseSign
}
}
public static WoodType getSignType(Block block) {
WoodType signType2;
if (block instanceof SignBlock) {
signType2 = ((SignBlock) block).type();
} else {
signType2 = WoodType.OAK;
}
return signType2;
}
public static Material getModelTexture(Block block) {
return Sheets.getSignMaterial(SignModelFactory.getSignType(block));
return Sheets.getSignMaterial(getSignType(block));
}
public static VertexConsumer getConsumer(MultiBufferSource provider, Block block) {
return provider.getBuffer(LAYERS.getOrDefault(block, defaultLayer));
}
public static void registerCustomModel(Block block, EntityModelLayerRegistry.TexturedModelDataProvider provider) {
ResourceLocation blockId = Registry.BLOCK.getKey(block);
SignType type = new SignType(blockId.getPath());
SignModelFactory.TYPES.add(type);
EntityModelLayerRegistry.registerModelLayer(ModelLayers.createSignModelName(type), provider);
}
public static void registerRenderLayer(Block block) {
ResourceLocation blockId = Registry.BLOCK.getKey(block);
RenderType layer = RenderType.entitySolid(new ResourceLocation(blockId.getNamespace(),
@ -167,10 +168,4 @@ public class BaseSignBlockEntityRenderer implements BlockEntityRenderer<BaseSign
static {
defaultLayer = RenderType.entitySolid(new ResourceLocation("textures/entity/signs/oak.png"));
}
public static class SignType extends WoodType {
protected SignType(String string) {
super(string);
}
}
}