Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Исходник Миксин 1.21 : Цена за 1 шт. FunTime.

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
16 Дек 2024
Сообщения
145
Реакции
0
Выберите загрузчик игры
  1. Fabric
СС-(скрин)
code:
Expand Collapse Copy
@Mixin(ItemStack.class)
public abstract class ItemStackTooltipMixin {
    private static final AuctionPriceParser AUCTION_PRICE_PARSER = new AuctionPriceParser();
    @Inject(method = "getTooltip", at = @At("RETURN"), cancellable = true)
    private void appendAuctionUnitPrice(CallbackInfoReturnable<List<Text>> cir) {
        MinecraftClient mc = MinecraftClient.getInstance();
        if (!(mc.currentScreen instanceof GenericContainerScreen screen) || !isAuctionScreen(screen)) return;
        ItemStack stack = (ItemStack) (Object) this;
        if (stack.isEmpty() || stack.getCount() <= 1) return;
        int totalPrice = AUCTION_PRICE_PARSER.getPrice(stack);
        if (totalPrice <= 0) return;
        int unitPrice = Math.max(1, Math.round((float) totalPrice / (float) Math.max(1, stack.getCount())));
        List<Text> original = cir.getReturnValue();
        List<Text> tooltip = new ArrayList<>(original);
        int insertAt = findPriceLineIndex(tooltip);
        Text unitLine = Text.literal("§2$ §fЗа 1 шт: §a" + formatPrice(unitPrice));
        if (insertAt >= 0 && insertAt + 1 <= tooltip.size()) {
            tooltip.add(insertAt + 1, unitLine); } else {
            tooltip.add(unitLine);}
        cir.setReturnValue(tooltip);}
    private static boolean isAuctionScreen(GenericContainerScreen screen) {
        String title = screen.getTitle() == null ? "" : screen.getTitle().getString();
        return title.contains("Аукцион") || title.contains("Аукционы") || title.contains("Поиск");}
    private static int findPriceLineIndex(List<Text> tooltip) {
        for (int i = 0; i < tooltip.size(); i++) {
            String line = tooltip.get(i).getString();
            if (line == null || line.isEmpty()) continue;

            String lower = line.toLowerCase();
            if (lower.contains("цена") || lower.contains("price") || line.contains("$")) {
                return i;
            }}
        return -1;}
    private static String formatPrice(int price) {
        String value = String.valueOf(Math.max(0, price));
        StringBuilder builder = new StringBuilder(value.length() + value.length() / 3);
        for (int i = 0; i < value.length(); i++) {
            if (i > 0 && (value.length() - i) % 3 == 0) {
                builder.append('.');}
            builder.append(value.charAt(i));}
        return builder.toString();
    }}
1775245712446.png
 
СС-(скрин)
code:
Expand Collapse Copy
@Mixin(ItemStack.class)
public abstract class ItemStackTooltipMixin {
    private static final AuctionPriceParser AUCTION_PRICE_PARSER = new AuctionPriceParser();
    @Inject(method = "getTooltip", at = @At("RETURN"), cancellable = true)
    private void appendAuctionUnitPrice(CallbackInfoReturnable<List<Text>> cir) {
        MinecraftClient mc = MinecraftClient.getInstance();
        if (!(mc.currentScreen instanceof GenericContainerScreen screen) || !isAuctionScreen(screen)) return;
        ItemStack stack = (ItemStack) (Object) this;
        if (stack.isEmpty() || stack.getCount() <= 1) return;
        int totalPrice = AUCTION_PRICE_PARSER.getPrice(stack);
        if (totalPrice <= 0) return;
        int unitPrice = Math.max(1, Math.round((float) totalPrice / (float) Math.max(1, stack.getCount())));
        List<Text> original = cir.getReturnValue();
        List<Text> tooltip = new ArrayList<>(original);
        int insertAt = findPriceLineIndex(tooltip);
        Text unitLine = Text.literal("§2$ §fЗа 1 шт: §a" + formatPrice(unitPrice));
        if (insertAt >= 0 && insertAt + 1 <= tooltip.size()) {
            tooltip.add(insertAt + 1, unitLine); } else {
            tooltip.add(unitLine);}
        cir.setReturnValue(tooltip);}
    private static boolean isAuctionScreen(GenericContainerScreen screen) {
        String title = screen.getTitle() == null ? "" : screen.getTitle().getString();
        return title.contains("Аукцион") || title.contains("Аукционы") || title.contains("Поиск");}
    private static int findPriceLineIndex(List<Text> tooltip) {
        for (int i = 0; i < tooltip.size(); i++) {
            String line = tooltip.get(i).getString();
            if (line == null || line.isEmpty()) continue;

            String lower = line.toLowerCase();
            if (lower.contains("цена") || lower.contains("price") || line.contains("$")) {
                return i;
            }}
        return -1;}
    private static String formatPrice(int price) {
        String value = String.valueOf(Math.max(0, price));
        StringBuilder builder = new StringBuilder(value.length() + value.length() / 3);
        for (int i = 0; i < value.length(); i++) {
            if (i > 0 && (value.length() - i) % 3 == 0) {
                builder.append('.');}
            builder.append(value.charAt(i));}
        return builder.toString();
    }}
Посмотреть вложение 332233
Не ну реально вопрос, НАХУЯ???? Зачем такое блять сливать /del
 
СС-(скрин)
code:
Expand Collapse Copy
@Mixin(ItemStack.class)
public abstract class ItemStackTooltipMixin {
    private static final AuctionPriceParser AUCTION_PRICE_PARSER = new AuctionPriceParser();
    @Inject(method = "getTooltip", at = @At("RETURN"), cancellable = true)
    private void appendAuctionUnitPrice(CallbackInfoReturnable<List<Text>> cir) {
        MinecraftClient mc = MinecraftClient.getInstance();
        if (!(mc.currentScreen instanceof GenericContainerScreen screen) || !isAuctionScreen(screen)) return;
        ItemStack stack = (ItemStack) (Object) this;
        if (stack.isEmpty() || stack.getCount() <= 1) return;
        int totalPrice = AUCTION_PRICE_PARSER.getPrice(stack);
        if (totalPrice <= 0) return;
        int unitPrice = Math.max(1, Math.round((float) totalPrice / (float) Math.max(1, stack.getCount())));
        List<Text> original = cir.getReturnValue();
        List<Text> tooltip = new ArrayList<>(original);
        int insertAt = findPriceLineIndex(tooltip);
        Text unitLine = Text.literal("§2$ §fЗа 1 шт: §a" + formatPrice(unitPrice));
        if (insertAt >= 0 && insertAt + 1 <= tooltip.size()) {
            tooltip.add(insertAt + 1, unitLine); } else {
            tooltip.add(unitLine);}
        cir.setReturnValue(tooltip);}
    private static boolean isAuctionScreen(GenericContainerScreen screen) {
        String title = screen.getTitle() == null ? "" : screen.getTitle().getString();
        return title.contains("Аукцион") || title.contains("Аукционы") || title.contains("Поиск");}
    private static int findPriceLineIndex(List<Text> tooltip) {
        for (int i = 0; i < tooltip.size(); i++) {
            String line = tooltip.get(i).getString();
            if (line == null || line.isEmpty()) continue;

            String lower = line.toLowerCase();
            if (lower.contains("цена") || lower.contains("price") || line.contains("$")) {
                return i;
            }}
        return -1;}
    private static String formatPrice(int price) {
        String value = String.valueOf(Math.max(0, price));
        StringBuilder builder = new StringBuilder(value.length() + value.length() / 3);
        for (int i = 0; i < value.length(); i++) {
            if (i > 0 && (value.length() - i) % 3 == 0) {
                builder.append('.');}
            builder.append(value.charAt(i));}
        return builder.toString();
    }}
Посмотреть вложение 332233
зачем
 
СС-(скрин)
code:
Expand Collapse Copy
@Mixin(ItemStack.class)
public abstract class ItemStackTooltipMixin {
    private static final AuctionPriceParser AUCTION_PRICE_PARSER = new AuctionPriceParser();
    @Inject(method = "getTooltip", at = @At("RETURN"), cancellable = true)
    private void appendAuctionUnitPrice(CallbackInfoReturnable<List<Text>> cir) {
        MinecraftClient mc = MinecraftClient.getInstance();
        if (!(mc.currentScreen instanceof GenericContainerScreen screen) || !isAuctionScreen(screen)) return;
        ItemStack stack = (ItemStack) (Object) this;
        if (stack.isEmpty() || stack.getCount() <= 1) return;
        int totalPrice = AUCTION_PRICE_PARSER.getPrice(stack);
        if (totalPrice <= 0) return;
        int unitPrice = Math.max(1, Math.round((float) totalPrice / (float) Math.max(1, stack.getCount())));
        List<Text> original = cir.getReturnValue();
        List<Text> tooltip = new ArrayList<>(original);
        int insertAt = findPriceLineIndex(tooltip);
        Text unitLine = Text.literal("§2$ §fЗа 1 шт: §a" + formatPrice(unitPrice));
        if (insertAt >= 0 && insertAt + 1 <= tooltip.size()) {
            tooltip.add(insertAt + 1, unitLine); } else {
            tooltip.add(unitLine);}
        cir.setReturnValue(tooltip);}
    private static boolean isAuctionScreen(GenericContainerScreen screen) {
        String title = screen.getTitle() == null ? "" : screen.getTitle().getString();
        return title.contains("Аукцион") || title.contains("Аукционы") || title.contains("Поиск");}
    private static int findPriceLineIndex(List<Text> tooltip) {
        for (int i = 0; i < tooltip.size(); i++) {
            String line = tooltip.get(i).getString();
            if (line == null || line.isEmpty()) continue;

            String lower = line.toLowerCase();
            if (lower.contains("цена") || lower.contains("price") || line.contains("$")) {
                return i;
            }}
        return -1;}
    private static String formatPrice(int price) {
        String value = String.valueOf(Math.max(0, price));
        StringBuilder builder = new StringBuilder(value.length() + value.length() / 3);
        for (int i = 0; i < value.length(); i++) {
            if (i > 0 && (value.length() - i) % 3 == 0) {
                builder.append('.');}
            builder.append(value.charAt(i));}
        return builder.toString();
    }}
Посмотреть вложение 332233
Бля, я думал кто то придумал писать по 1 миксинку за деньги
 
твой паста код не пашит вот рабочий:
@Mixin(ItemStack.class)
public abstract class ItemStackTooltipMixin {

private static final Pattern PRICE_PATTERN = Pattern.compile("Цен[аaAАыЫ]?:?\\s*([\\d,\\s\\.]+)", Pattern.CASE_INSENSITIVE);

@Inject(method = "getTooltip", at = @At("RETURN"), cancellable = true)
private void appendUnitPrice(Item.TooltipContext context,
PlayerEntity player,
TooltipType type,
CallbackInfoReturnable<List<Text>> cir) {
try {
MinecraftClient mc = MinecraftClient.getInstance();

if (!(mc.currentScreen instanceof GenericContainerScreen)) {
return;
}

ItemStack stack = (ItemStack) (Object) this;
if (stack.isEmpty() || stack.getCount() <= 1) {
return;
}

int totalPrice = parsePriceFromLore(stack);
if (totalPrice <= 0) {
return;
}

int unitPrice = totalPrice / stack.getCount();
if (unitPrice <= 0) {
unitPrice = 1;
}

List<Text> tooltip = new ArrayList<>(cir.getReturnValue());

int priceLineIndex = findPriceLineIndex(tooltip);

Text unitLine = Text.literal("")
.append(Text.literal("$ ").formatted(Formatting.DARK_GREEN))
.append(Text.literal("За 1 шт: ").formatted(Formatting.WHITE))
.append(Text.literal(formatPrice(unitPrice)).formatted(Formatting.GREEN));

if (priceLineIndex >= 0 && priceLineIndex + 1 <= tooltip.size()) {
tooltip.add(priceLineIndex + 1, unitLine);
} else {
tooltip.add(unitLine);
}

cir.setReturnValue(tooltip);

} catch (Exception e) {
}
}
private int parsePriceFromLore(ItemStack stack) {
LoreComponent loreComp = stack.get(DataComponentTypes.LORE);
if (loreComp == null) return 0;

for (Text text : loreComp.lines()) {
String line = Formatting.strip(text.getString());
if (line == null) continue;

Matcher m = PRICE_PATTERN.matcher(line);
if (m.find()) {
try {
String priceStr = m.group(1).replaceAll("[,\\s\\.]", "");
return Integer.parseInt(priceStr);
} catch (NumberFormatException ignored) {}
}
}
return 0;
}
private int findPriceLineIndex(List<Text> tooltip) {
for (int i = 0; i < tooltip.size(); i++) {
String line = Formatting.strip(tooltip.get(i).getString());
if (line == null) continue;

Matcher m = PRICE_PATTERN.matcher(line);
if (m.find()) {
return i;
}

String lowerLine = line.toLowerCase();
if (lowerLine.contains("цена") || lowerLine.contains("price") || lowerLine.contains("цен")) {
return i;
}
}
return -1;
}
private String formatPrice(int price) {
String value = String.valueOf(price);
StringBuilder builder = new StringBuilder();
for (int i = 0; i < value.length(); i++) {
if (i > 0 && (value.length() - i) % 3 == 0) {
builder.append('.');
}
builder.append(value.charAt(i));
}
return builder.toString();
}
}
 
СС-(скрин)
code:
Expand Collapse Copy
@Mixin(ItemStack.class)
public abstract class ItemStackTooltipMixin {
    private static final AuctionPriceParser AUCTION_PRICE_PARSER = new AuctionPriceParser();
    @Inject(method = "getTooltip", at = @At("RETURN"), cancellable = true)
    private void appendAuctionUnitPrice(CallbackInfoReturnable<List<Text>> cir) {
        MinecraftClient mc = MinecraftClient.getInstance();
        if (!(mc.currentScreen instanceof GenericContainerScreen screen) || !isAuctionScreen(screen)) return;
        ItemStack stack = (ItemStack) (Object) this;
        if (stack.isEmpty() || stack.getCount() <= 1) return;
        int totalPrice = AUCTION_PRICE_PARSER.getPrice(stack);
        if (totalPrice <= 0) return;
        int unitPrice = Math.max(1, Math.round((float) totalPrice / (float) Math.max(1, stack.getCount())));
        List<Text> original = cir.getReturnValue();
        List<Text> tooltip = new ArrayList<>(original);
        int insertAt = findPriceLineIndex(tooltip);
        Text unitLine = Text.literal("§2$ §fЗа 1 шт: §a" + formatPrice(unitPrice));
        if (insertAt >= 0 && insertAt + 1 <= tooltip.size()) {
            tooltip.add(insertAt + 1, unitLine); } else {
            tooltip.add(unitLine);}
        cir.setReturnValue(tooltip);}
    private static boolean isAuctionScreen(GenericContainerScreen screen) {
        String title = screen.getTitle() == null ? "" : screen.getTitle().getString();
        return title.contains("Аукцион") || title.contains("Аукционы") || title.contains("Поиск");}
    private static int findPriceLineIndex(List<Text> tooltip) {
        for (int i = 0; i < tooltip.size(); i++) {
            String line = tooltip.get(i).getString();
            if (line == null || line.isEmpty()) continue;

            String lower = line.toLowerCase();
            if (lower.contains("цена") || lower.contains("price") || line.contains("$")) {
                return i;
            }}
        return -1;}
    private static String formatPrice(int price) {
        String value = String.valueOf(Math.max(0, price));
        StringBuilder builder = new StringBuilder(value.length() + value.length() / 3);
        for (int i = 0; i < value.length(); i++) {
            if (i > 0 && (value.length() - i) % 3 == 0) {
                builder.append('.');}
            builder.append(value.charAt(i));}
        return builder.toString();
    }}
Посмотреть вложение 332233
хз чё типы доебались, мне нравится
 
твой паста код не пашит вот рабочий:
@Mixin(ItemStack.class)
public abstract class ItemStackTooltipMixin {

private static final Pattern PRICE_PATTERN = Pattern.compile("Цен[аaAАыЫ]?:?\\s*([\\d,\\s\\.]+)", Pattern.CASE_INSENSITIVE);

@Inject(method = "getTooltip", at = @At("RETURN"), cancellable = true)
private void appendUnitPrice(Item.TooltipContext context,
PlayerEntity player,
TooltipType type,
CallbackInfoReturnable<List<Text>> cir) {
try {
MinecraftClient mc = MinecraftClient.getInstance();

if (!(mc.currentScreen instanceof GenericContainerScreen)) {
return;
}

ItemStack stack = (ItemStack) (Object) this;
if (stack.isEmpty() || stack.getCount() <= 1) {
return;
}

int totalPrice = parsePriceFromLore(stack);
if (totalPrice <= 0) {
return;
}

int unitPrice = totalPrice / stack.getCount();
if (unitPrice <= 0) {
unitPrice = 1;
}

List<Text> tooltip = new ArrayList<>(cir.getReturnValue());

int priceLineIndex = findPriceLineIndex(tooltip);

Text unitLine = Text.literal("")
.append(Text.literal("$ ").formatted(Formatting.DARK_GREEN))
.append(Text.literal("За 1 шт: ").formatted(Formatting.WHITE))
.append(Text.literal(formatPrice(unitPrice)).formatted(Formatting.GREEN));

if (priceLineIndex >= 0 && priceLineIndex + 1 <= tooltip.size()) {
tooltip.add(priceLineIndex + 1, unitLine);
} else {
tooltip.add(unitLine);
}

cir.setReturnValue(tooltip);

} catch (Exception e) {
}
}
private int parsePriceFromLore(ItemStack stack) {
LoreComponent loreComp = stack.get(DataComponentTypes.LORE);
if (loreComp == null) return 0;

for (Text text : loreComp.lines()) {
String line = Formatting.strip(text.getString());
if (line == null) continue;

Matcher m = PRICE_PATTERN.matcher(line);
if (m.find()) {
try {
String priceStr = m.group(1).replaceAll("[,\\s\\.]", "");
return Integer.parseInt(priceStr);
} catch (NumberFormatException ignored) {}
}
}
return 0;
}
private int findPriceLineIndex(List<Text> tooltip) {
for (int i = 0; i < tooltip.size(); i++) {
String line = Formatting.strip(tooltip.get(i).getString());
if (line == null) continue;

Matcher m = PRICE_PATTERN.matcher(line);
if (m.find()) {
return i;
}

String lowerLine = line.toLowerCase();
if (lowerLine.contains("цена") || lowerLine.contains("price") || lowerLine.contains("цен")) {
return i;
}
}
return -1;
}
private String formatPrice(int price) {
String value = String.valueOf(price);
StringBuilder builder = new StringBuilder();
for (int i = 0; i < value.length(); i++) {
if (i > 0 && (value.length() - i) % 3 == 0) {
builder.append('.');
}
builder.append(value.charAt(i));
}
return builder.toString();
}
}
чем не пашит?
 
СС-(скрин)
code:
Expand Collapse Copy
@Mixin(ItemStack.class)
public abstract class ItemStackTooltipMixin {
    private static final AuctionPriceParser AUCTION_PRICE_PARSER = new AuctionPriceParser();
    @Inject(method = "getTooltip", at = @At("RETURN"), cancellable = true)
    private void appendAuctionUnitPrice(CallbackInfoReturnable<List<Text>> cir) {
        MinecraftClient mc = MinecraftClient.getInstance();
        if (!(mc.currentScreen instanceof GenericContainerScreen screen) || !isAuctionScreen(screen)) return;
        ItemStack stack = (ItemStack) (Object) this;
        if (stack.isEmpty() || stack.getCount() <= 1) return;
        int totalPrice = AUCTION_PRICE_PARSER.getPrice(stack);
        if (totalPrice <= 0) return;
        int unitPrice = Math.max(1, Math.round((float) totalPrice / (float) Math.max(1, stack.getCount())));
        List<Text> original = cir.getReturnValue();
        List<Text> tooltip = new ArrayList<>(original);
        int insertAt = findPriceLineIndex(tooltip);
        Text unitLine = Text.literal("§2$ §fЗа 1 шт: §a" + formatPrice(unitPrice));
        if (insertAt >= 0 && insertAt + 1 <= tooltip.size()) {
            tooltip.add(insertAt + 1, unitLine); } else {
            tooltip.add(unitLine);}
        cir.setReturnValue(tooltip);}
    private static boolean isAuctionScreen(GenericContainerScreen screen) {
        String title = screen.getTitle() == null ? "" : screen.getTitle().getString();
        return title.contains("Аукцион") || title.contains("Аукционы") || title.contains("Поиск");}
    private static int findPriceLineIndex(List<Text> tooltip) {
        for (int i = 0; i < tooltip.size(); i++) {
            String line = tooltip.get(i).getString();
            if (line == null || line.isEmpty()) continue;

            String lower = line.toLowerCase();
            if (lower.contains("цена") || lower.contains("price") || line.contains("$")) {
                return i;
            }}
        return -1;}
    private static String formatPrice(int price) {
        String value = String.valueOf(Math.max(0, price));
        StringBuilder builder = new StringBuilder(value.length() + value.length() / 3);
        for (int i = 0; i < value.length(); i++) {
            if (i > 0 && (value.length() - i) % 3 == 0) {
                builder.append('.');}
            builder.append(value.charAt(i));}
        return builder.toString();
    }}
Посмотреть вложение 332233
бро не посажаешь как ты сделал что у тебя показывает дешевые слоты когда ты велл /ah search (предмет)? вот у меня только дешевые слоты показывает /ah , на 1.16.5 работает хорошо а на 1.21.4 не так
 
Назад
Сверху Снизу