126 lines
5.9 KiB
Java
126 lines
5.9 KiB
Java
package net.minecraft.client.data.models.model;
|
|
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Optional;
|
|
import net.fabricmc.api.EnvType;
|
|
import net.fabricmc.api.Environment;
|
|
import net.minecraft.client.color.item.Constant;
|
|
import net.minecraft.client.color.item.ItemTintSource;
|
|
import net.minecraft.client.renderer.item.ItemModel.Unbaked;
|
|
import net.minecraft.client.renderer.item.RangeSelectItemModel.Entry;
|
|
import net.minecraft.client.renderer.item.SelectItemModel.SwitchCase;
|
|
import net.minecraft.client.renderer.item.SelectItemModel.UnbakedSwitch;
|
|
import net.minecraft.client.renderer.item.properties.conditional.ConditionalItemModelProperty;
|
|
import net.minecraft.client.renderer.item.properties.conditional.HasComponent;
|
|
import net.minecraft.client.renderer.item.properties.conditional.IsUsingItem;
|
|
import net.minecraft.client.renderer.item.properties.numeric.RangeSelectItemModelProperty;
|
|
import net.minecraft.client.renderer.item.properties.select.ContextDimension;
|
|
import net.minecraft.client.renderer.item.properties.select.ItemBlockState;
|
|
import net.minecraft.client.renderer.item.properties.select.LocalTime;
|
|
import net.minecraft.client.renderer.item.properties.select.SelectItemModelProperty;
|
|
import net.minecraft.core.component.DataComponentType;
|
|
import net.minecraft.resources.ResourceLocation;
|
|
import net.minecraft.world.level.Level;
|
|
import net.minecraft.world.level.block.state.properties.Property;
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
public class ItemModelUtils {
|
|
public static Unbaked plainModel(ResourceLocation model) {
|
|
return new net.minecraft.client.renderer.item.BlockModelWrapper.Unbaked(model, List.of());
|
|
}
|
|
|
|
public static Unbaked tintedModel(ResourceLocation model, ItemTintSource... tintSources) {
|
|
return new net.minecraft.client.renderer.item.BlockModelWrapper.Unbaked(model, List.of(tintSources));
|
|
}
|
|
|
|
public static ItemTintSource constantTint(int value) {
|
|
return new Constant(value);
|
|
}
|
|
|
|
public static Unbaked composite(Unbaked... models) {
|
|
return new net.minecraft.client.renderer.item.CompositeModel.Unbaked(List.of(models));
|
|
}
|
|
|
|
public static Unbaked specialModel(ResourceLocation base, net.minecraft.client.renderer.special.SpecialModelRenderer.Unbaked specialModel) {
|
|
return new net.minecraft.client.renderer.item.SpecialModelWrapper.Unbaked(base, specialModel);
|
|
}
|
|
|
|
public static Entry override(Unbaked model, float threshold) {
|
|
return new Entry(threshold, model);
|
|
}
|
|
|
|
public static Unbaked rangeSelect(RangeSelectItemModelProperty property, Unbaked fallback, Entry... entries) {
|
|
return new net.minecraft.client.renderer.item.RangeSelectItemModel.Unbaked(property, 1.0F, List.of(entries), Optional.of(fallback));
|
|
}
|
|
|
|
public static Unbaked rangeSelect(RangeSelectItemModelProperty property, float scale, Unbaked fallback, Entry... entries) {
|
|
return new net.minecraft.client.renderer.item.RangeSelectItemModel.Unbaked(property, scale, List.of(entries), Optional.of(fallback));
|
|
}
|
|
|
|
public static Unbaked rangeSelect(RangeSelectItemModelProperty property, Unbaked fallback, List<Entry> entries) {
|
|
return new net.minecraft.client.renderer.item.RangeSelectItemModel.Unbaked(property, 1.0F, entries, Optional.of(fallback));
|
|
}
|
|
|
|
public static Unbaked rangeSelect(RangeSelectItemModelProperty property, List<Entry> entries) {
|
|
return new net.minecraft.client.renderer.item.RangeSelectItemModel.Unbaked(property, 1.0F, entries, Optional.empty());
|
|
}
|
|
|
|
public static Unbaked rangeSelect(RangeSelectItemModelProperty property, float scale, List<Entry> entries) {
|
|
return new net.minecraft.client.renderer.item.RangeSelectItemModel.Unbaked(property, scale, entries, Optional.empty());
|
|
}
|
|
|
|
public static Unbaked conditional(ConditionalItemModelProperty property, Unbaked onTrue, Unbaked onFalse) {
|
|
return new net.minecraft.client.renderer.item.ConditionalItemModel.Unbaked(property, onTrue, onFalse);
|
|
}
|
|
|
|
public static <T> SwitchCase<T> when(T value, Unbaked model) {
|
|
return new SwitchCase<>(List.of(value), model);
|
|
}
|
|
|
|
public static <T> SwitchCase<T> when(List<T> values, Unbaked model) {
|
|
return new SwitchCase<>(values, model);
|
|
}
|
|
|
|
@SafeVarargs
|
|
public static <T> Unbaked select(SelectItemModelProperty<T> property, Unbaked fallback, SwitchCase<T>... cases) {
|
|
return select(property, fallback, List.of(cases));
|
|
}
|
|
|
|
public static <T> Unbaked select(SelectItemModelProperty<T> property, Unbaked fallback, List<SwitchCase<T>> cases) {
|
|
return new net.minecraft.client.renderer.item.SelectItemModel.Unbaked(new UnbakedSwitch<>(property, cases), Optional.of(fallback));
|
|
}
|
|
|
|
@SafeVarargs
|
|
public static <T> Unbaked select(SelectItemModelProperty<T> property, SwitchCase<T>... cases) {
|
|
return select(property, List.of(cases));
|
|
}
|
|
|
|
public static <T> Unbaked select(SelectItemModelProperty<T> property, List<SwitchCase<T>> cases) {
|
|
return new net.minecraft.client.renderer.item.SelectItemModel.Unbaked(new UnbakedSwitch<>(property, cases), Optional.empty());
|
|
}
|
|
|
|
public static ConditionalItemModelProperty isUsingItem() {
|
|
return new IsUsingItem();
|
|
}
|
|
|
|
public static ConditionalItemModelProperty hasComponent(DataComponentType<?> componentType) {
|
|
return new HasComponent(componentType, false);
|
|
}
|
|
|
|
public static Unbaked inOverworld(Unbaked inOverworldModel, Unbaked notInOverworldModel) {
|
|
return select(new ContextDimension(), notInOverworldModel, when(Level.OVERWORLD, inOverworldModel));
|
|
}
|
|
|
|
public static <T extends Comparable<T>> Unbaked selectBlockItemProperty(Property<T> property, Unbaked fallback, Map<T, Unbaked> modelMap) {
|
|
List<SwitchCase<String>> list = modelMap.entrySet().stream().sorted(java.util.Map.Entry.comparingByKey()).map(entry -> {
|
|
String string = property.getName((T)entry.getKey());
|
|
return new SwitchCase(List.of(string), (Unbaked)entry.getValue());
|
|
}).toList();
|
|
return select(new ItemBlockState(property.getName()), fallback, list);
|
|
}
|
|
|
|
public static Unbaked isXmas(Unbaked xmasModel, Unbaked normalModel) {
|
|
return select(LocalTime.create("MM-dd", "", Optional.empty()), normalModel, List.of(when(List.of("12-24", "12-25", "12-26"), xmasModel)));
|
|
}
|
|
}
|