Change models loading (WIP)

This commit is contained in:
Aleksey 2021-05-16 13:29:31 +03:00
parent f5c91c3aad
commit 8b94c91ea5
6 changed files with 78 additions and 15 deletions

View file

@ -48,15 +48,4 @@ public class BlockBase extends Block implements BlockModelProvider {
public ResourceLocation statePatternId() { public ResourceLocation statePatternId() {
return Patterns.STATE_SIMPLE; return Patterns.STATE_SIMPLE;
} }
@Override
public BlockModel getBlockModel(ResourceLocation blockId, BlockState blockState) {
String pattern = Patterns.createBlockSimple(blockId.getPath());
return BlockModelProvider.createBlockModel(blockId, pattern);
}
@Override
public MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) {
return BlockModelProvider.createBlockSimple(resourceLocation);
}
} }

View file

@ -6,6 +6,7 @@ import java.util.List;
import java.util.Random; import java.util.Random;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;

View file

@ -6,6 +6,8 @@ import java.util.List;
import java.util.Random; import java.util.Random;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.client.renderer.block.model.MultiVariant;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
@ -126,4 +128,15 @@ public abstract class FeatureSaplingBlock extends SaplingBlock implements IRende
public ResourceLocation statePatternId() { public ResourceLocation statePatternId() {
return Patterns.STATE_SAPLING; return Patterns.STATE_SAPLING;
} }
@Override
public BlockModel getModel(ResourceLocation resourceLocation) {
return BlockModelProvider.createBlockItem(resourceLocation);
}
@Override
public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
String pattern = Patterns.createJson(Patterns.BLOCK_CROSS, resourceLocation.getPath());
return BlockModel.fromString(pattern);
}
} }

View file

@ -6,6 +6,7 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import net.minecraft.client.renderer.block.model.BlockModel;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
@ -42,6 +43,7 @@ import ru.betterend.blocks.BlockProperties;
import ru.betterend.blocks.BlockProperties.PedestalState; import ru.betterend.blocks.BlockProperties.PedestalState;
import ru.betterend.blocks.InfusionPedestal; import ru.betterend.blocks.InfusionPedestal;
import ru.betterend.blocks.entities.PedestalBlockEntity; import ru.betterend.blocks.entities.PedestalBlockEntity;
import ru.betterend.patterns.BlockModelProvider;
import ru.betterend.patterns.Patterns; import ru.betterend.patterns.Patterns;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import ru.betterend.rituals.InfusionRitual; import ru.betterend.rituals.InfusionRitual;
@ -368,6 +370,52 @@ public class PedestalBlock extends BlockBaseNotFull implements EntityBlock {
return Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures); return Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures);
} }
@Override
public BlockModel getModel(ResourceLocation blockId) {
return getBlockModel(blockId, defaultBlockState());
}
@Override
public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
ResourceLocation blockId = Registry.BLOCK.getKey(parent);
String name = blockId.getPath();
Map<String, String> textures = new HashMap<String, String>() {
private static final long serialVersionUID = 1L;
{
put("%mod%", blockId.getNamespace() );
put("%top%", name + "_top");
put("%base%", name + "_base");
put("%pillar%", name + "_pillar");
put("%bottom%", name + "_bottom");
}
};
PedestalState state = blockState.getValue(STATE);
String pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_DEFAULT, textures);
switch (state) {
case COLUMN_TOP: {
pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_COLUMN_TOP, textures);
break;
}
case COLUMN: {
pattern = Patterns.createJson(Patterns.BLOKC_PEDESTAL_COLUMN, textures);
break;
}
case PEDESTAL_TOP: {
pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_TOP, textures);
break;
}
case BOTTOM: {
pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_BOTTOM, textures);
break;
}
case PILLAR: {
pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_PILLAR, textures);
break;
}
}
return BlockModelProvider.createBlockModel(resourceLocation, pattern);
}
@Override @Override
public ResourceLocation statePatternId() { public ResourceLocation statePatternId() {
return Patterns.STATE_PEDESTAL; return Patterns.STATE_PEDESTAL;

View file

@ -51,7 +51,7 @@ public abstract class ModelLoaderMixin {
@Inject(method = "loadModel", at = @At("HEAD"), cancellable = true) @Inject(method = "loadModel", at = @At("HEAD"), cancellable = true)
private void be_loadModels(ResourceLocation resourceLocation, CallbackInfo info) { private void be_loadModels(ResourceLocation resourceLocation, CallbackInfo info) {
if (BetterEnd.isModId(resourceLocation) && resourceLocation instanceof ModelResourceLocation) { if (resourceLocation instanceof ModelResourceLocation) {
String modId = resourceLocation.getNamespace(); String modId = resourceLocation.getNamespace();
String path = resourceLocation.getPath(); String path = resourceLocation.getPath();
ResourceLocation clearLoc = new ResourceLocation(modId, path); ResourceLocation clearLoc = new ResourceLocation(modId, path);

View file

@ -15,8 +15,20 @@ import net.minecraft.world.level.block.state.BlockState;
public interface BlockModelProvider extends ModelProvider { public interface BlockModelProvider extends ModelProvider {
String getStatesPattern(Reader data); String getStatesPattern(Reader data);
ResourceLocation statePatternId(); ResourceLocation statePatternId();
BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState);
MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState); default BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
String pattern = Patterns.createBlockSimple(resourceLocation.getPath());
return createBlockModel(resourceLocation, pattern);
}
default MultiVariant getModelVariant(ResourceLocation resourceLocation, BlockState blockState) {
return createBlockSimple(resourceLocation);
}
static BlockModel createBlockItem(ResourceLocation resourceLocation) {
String pattern = Patterns.createJson(Patterns.ITEM_BLOCK, resourceLocation.getPath());
return BlockModel.fromString(pattern);
}
static BlockModel createBlockModel(ResourceLocation blockId, String pattern) { static BlockModel createBlockModel(ResourceLocation blockId, String pattern) {
BlockModel model = BlockModel.fromString(pattern); BlockModel model = BlockModel.fromString(pattern);