use of net.silentchaos512.gear.api.item.ICoreItem in project Silent-Gear by SilentChaos512.
the class GearClientHelper method addStatsInfo.
public static void addStatsInfo(ItemStack stack, List<Component> tooltip, GearTooltipFlag flag, ICoreItem item) {
if (KeyTracker.isDisplayStatsDown() && flag.showStats) {
tooltip.add(TextUtil.withColor(misc("tooltip.stats"), Color.GOLD));
tooltip.add(TextUtil.withColor(misc("tier", GearData.getTier(stack)), Color.DEEPSKYBLUE));
// Display only stats relevant to the item class
Collection<ItemStat> relevantStats = item.getRelevantStats(stack);
Collection<ItemStat> displayStats = flag.isAdvanced() && SilentGear.isDevBuild() ? ItemStats.allStatsOrdered() : relevantStats;
TextListBuilder builder = new TextListBuilder();
for (ItemStat stat : displayStats) {
if (stat == ItemStats.ENCHANTABILITY && !Config.Common.allowEnchanting.get()) {
// Enchanting not allowed, so hide the stat
continue;
}
float statValue = GearData.getStat(stack, stat);
StatInstance inst = StatInstance.of(statValue, StatInstance.Operation.AVG, StatInstance.DEFAULT_KEY);
Color nameColor = relevantStats.contains(stat) ? stat.getNameColor() : TooltipHandler.MC_DARK_GRAY;
Component textName = TextUtil.withColor(stat.getDisplayName(), nameColor);
MutableComponent textStat = inst.getFormattedText(stat, stat.isDisplayAsInt() ? 0 : 2, false);
// TODO: The stats should probably handle this instead
if (stat == ItemStats.DURABILITY) {
int durabilityLeft = stack.getMaxDamage() - stack.getDamageValue();
int durabilityMax = stack.getMaxDamage();
textStat = statText("durabilityFormat", durabilityLeft, durabilityMax);
} else if (stat == ItemStats.HARVEST_LEVEL) {
textStat = TooltipHandler.harvestLevelWithHint(textStat, statValue);
}
builder.add(statText("displayFormat", textName, textStat));
}
tooltip.addAll(builder.build());
} else if (flag.showStats) {
tooltip.add(TextUtil.withColor(TextUtil.misc("tooltip.stats"), Color.GOLD).append(new TextComponent(" ").append(TextUtil.withColor(TextUtil.keyBinding(KeyTracker.DISPLAY_STATS), ChatFormatting.GRAY))));
}
}
use of net.silentchaos512.gear.api.item.ICoreItem in project Silent-Gear by SilentChaos512.
the class GearModelOverrideList method getCrossbowCharge.
private static Optional<MaterialLayer> getCrossbowCharge(ItemStack stack, @Nullable ClientLevel world, @Nullable LivingEntity entity) {
// TODO: Maybe should add an ICoreItem method to get additional layers?
ItemPropertyFunction chargedProperty = ItemProperties.getProperty(stack.getItem(), new ResourceLocation("charged"));
ItemPropertyFunction fireworkProperty = ItemProperties.getProperty(stack.getItem(), new ResourceLocation("firework"));
if (chargedProperty != null && fireworkProperty != null) {
boolean charged = chargedProperty.call(stack, world, entity, 0) > 0;
boolean firework = fireworkProperty.call(stack, world, entity, 0) > 0;
if (charged) {
if (firework) {
return Optional.of(new MaterialLayer(PartTextures.CHARGED_FIREWORK, Color.VALUE_WHITE));
}
return Optional.of(new MaterialLayer(PartTextures.CHARGED_ARROW, Color.VALUE_WHITE));
}
}
return Optional.empty();
}
use of net.silentchaos512.gear.api.item.ICoreItem in project Silent-Gear by SilentChaos512.
the class GearModelOverrideList method getOverrideModel.
private BakedModel getOverrideModel(CacheKey key, ItemStack stack, @Nullable ClientLevel worldIn, @Nullable LivingEntity entityIn, int animationFrame) {
boolean broken = GearHelper.isBroken(stack);
if (isDebugLoggingEnabled()) {
SilentGear.LOGGER.info("getOverrideModel for {} ({})", stack.getHoverName().getString(), broken ? "broken" : "normal");
SilentGear.LOGGER.info("- model key {}", key.data);
}
List<MaterialLayer> layers = new ArrayList<>();
for (PartData part : getPartsInRenderOrder(stack)) {
if (((ICoreItem) stack.getItem()).hasTexturesFor(part.getType())) {
addSimplePartLayers(layers, part, stack);
if (part.get() instanceof CompoundPart) {
MaterialInstance mat = CompoundPart.getPrimaryMaterial(part);
if (mat != null) {
addWithBlendedColor(layers, part, mat, stack);
}
}
}
}
// TODO: Make this not a special case...
if (stack.getItem() instanceof GearCrossbowItem) {
getCrossbowCharge(stack, worldIn, entityIn).ifPresent(layers::add);
}
return model.bake(stack, layers, animationFrame, "test", owner, bakery, spriteGetter, modelTransform, this, modelLocation);
}
use of net.silentchaos512.gear.api.item.ICoreItem in project Silent-Gear by SilentChaos512.
the class GearModelOverrideList method getPartsInRenderOrder.
private static PartDataList getPartsInRenderOrder(ItemStack stack) {
PartDataList unsorted = GearData.getConstructionParts(stack);
PartDataList ret = PartDataList.of();
ICoreItem item = (ICoreItem) stack.getItem();
for (PartType partType : item.getRenderParts()) {
ret.addAll(unsorted.getPartsOfType(partType));
}
for (PartData part : unsorted) {
if (!ret.contains(part)) {
ret.add(part);
}
}
return ret;
}
use of net.silentchaos512.gear.api.item.ICoreItem in project Silent-Gear by SilentChaos512.
the class ColorHandlers method onItemColors.
public static void onItemColors(ColorHandlerEvent.Item event) {
ItemColors itemColors = event.getItemColors();
if (itemColors == null) {
SilentGear.LOGGER.error("ItemColors is null?", new IllegalStateException("wat?"));
return;
}
// Tools, armor, shields, etc.
ForgeRegistries.ITEMS.getValues().stream().filter(item -> item instanceof GearArmorItem || item instanceof GearShieldItem).map(item -> (ICoreItem) item).forEach(item -> itemColors.register(item.getItemColors(), item));
Registration.getItems(item -> item instanceof IColoredMaterialItem).forEach(item -> {
IColoredMaterialItem coloredMaterialItem = (IColoredMaterialItem) item;
itemColors.register(coloredMaterialItem::getColor, item);
});
}
Aggregations