Skip to content

Commit

Permalink
Add display validator
Browse files Browse the repository at this point in the history
  • Loading branch information
shedaniel committed Apr 15, 2024
1 parent e367051 commit 6bbc58f
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import me.shedaniel.rei.api.client.registry.category.ButtonArea;
import me.shedaniel.rei.api.client.registry.category.CategoryRegistry;
import me.shedaniel.rei.api.client.registry.display.DisplayCategory;
import me.shedaniel.rei.api.client.registry.display.DisplayRegistry;
import me.shedaniel.rei.api.client.view.ViewSearchBuilder;
import me.shedaniel.rei.api.common.category.CategoryIdentifier;
import me.shedaniel.rei.api.common.display.Display;
Expand All @@ -47,6 +48,7 @@
import me.shedaniel.rei.impl.client.gui.widget.EntryWidget;
import me.shedaniel.rei.impl.client.gui.widget.InternalWidgets;
import me.shedaniel.rei.impl.display.DisplaySpec;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.chat.NarratorChatListener;
import net.minecraft.client.gui.components.events.GuiEventListener;
Expand Down Expand Up @@ -181,7 +183,7 @@ public void init() {

this.widgets.add(Widgets.createClickableLabel(new Point(bounds.x + 4 + scrollListBounds.width / 2, bounds.y + 6), categories.get(selectedCategoryIndex).getTitle(), label -> {
ViewSearchBuilder.builder().addAllCategories().open();
}).tooltip(new TranslatableComponent("text.rei.view_all_categories")).noShadow().color(0xFF404040, 0xFFBBBBBB).hoveredColor(0xFF0041FF, 0xFFFFBD4D));
}).tooltip(new TranslatableComponent("text.rei.view_all_categories"), new TranslatableComponent("text.rei.view_all_categories.tooltip", CategoryRegistry.getInstance().stream().filter(config -> !DisplayRegistry.getInstance().get(config.getCategoryIdentifier()).isEmpty()).count()).withStyle(ChatFormatting.DARK_GRAY)).noShadow().color(0xFF404040, 0xFFBBBBBB).hoveredColor(0xFF0041FF, 0xFFFFBD4D));

this.widgets.add(new ButtonListWidget(buttonList));
this.children().addAll(widgets);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
import me.shedaniel.rei.api.client.registry.category.ButtonArea;
import me.shedaniel.rei.api.client.registry.category.CategoryRegistry;
import me.shedaniel.rei.api.client.registry.display.DisplayCategory;
import me.shedaniel.rei.api.client.registry.display.DisplayRegistry;
import me.shedaniel.rei.api.client.view.ViewSearchBuilder;
import me.shedaniel.rei.api.common.category.CategoryIdentifier;
import me.shedaniel.rei.api.common.display.Display;
Expand Down Expand Up @@ -172,7 +173,7 @@ public void init() {
.onClick(button -> previousCategory()).tooltipLine(new TranslatableComponent("text.rei.previous_category")));
this.widgets.add(Widgets.createClickableLabel(new Point(bounds.getCenterX(), bounds.getY() + 7), getCurrentCategory().getTitle(), clickableLabelWidget -> {
ViewSearchBuilder.builder().addAllCategories().open();
}).tooltip(new TranslatableComponent("text.rei.view_all_categories")));
}).tooltip(new TranslatableComponent("text.rei.view_all_categories"), new TranslatableComponent("text.rei.view_all_categories.tooltip", CategoryRegistry.getInstance().stream().filter(config -> !DisplayRegistry.getInstance().get(config.getCategoryIdentifier()).isEmpty()).count()).withStyle(ChatFormatting.DARK_GRAY)));
this.widgets.add(categoryNext = Widgets.createButton(new Rectangle(bounds.getCenterX() + guiWidth / 2 - 17, bounds.getY() + 5, 12, 12), ImmutableTextComponent.EMPTY)
.onClick(button -> nextCategory()).tooltipLine(new TranslatableComponent("text.rei.next_category")));
this.categoryBack.setEnabled(categories.size() > 1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,9 @@ public void add(Display display, @Nullable Object origin) {
lastAddWarning = System.currentTimeMillis();
}

this.displaysHolder.add(display, origin);
if (DisplayValidator.validate(display)) {
this.displaysHolder.add(display, origin);
}
}

@Override
Expand Down Expand Up @@ -199,6 +201,10 @@ public void endReload() {
}
}

for (List<Display> displays : getAll().values()) {
displays.removeIf(display -> !DisplayValidator.validate(display));
}

this.displaysHolder.endReload();

InternalLogger.getInstance().debug("Registered %d displays", displaySize());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/*
* This file is licensed under the MIT License, part of Roughly Enough Items.
* Copyright (c) 2018, 2019, 2020, 2021, 2022, 2023 shedaniel
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/

package me.shedaniel.rei.impl.client.registry.display;

import me.shedaniel.rei.api.client.registry.category.CategoryRegistry;
import me.shedaniel.rei.api.client.registry.display.DisplayCategory;
import me.shedaniel.rei.api.common.category.CategoryIdentifier;
import me.shedaniel.rei.api.common.display.Display;
import me.shedaniel.rei.impl.common.InternalLogger;

public class DisplayValidator {
public static boolean validate(Display display) {
CategoryIdentifier<?> identifier = display.getCategoryIdentifier();

try {
CategoryRegistry.CategoryConfiguration<?> configuration = CategoryRegistry.getInstance().get(identifier);

try {
DisplayCategory<Display> category = (DisplayCategory<Display>) configuration.getCategory();
category.getDisplayWidth(display);
return true;
} catch (ClassCastException exception) {
InternalLogger.getInstance().error("Display [%s] %s failed validation check for category [%s] %s", display.getDisplayLocation().orElse(null), display, identifier, configuration.getCategory());
return false;
}
} catch (NullPointerException exception) {
return true;
} catch (Throwable throwable) {
InternalLogger.getInstance().error("Display [%s] %s failed validation check for category [%s]".formatted(display.getDisplayLocation().orElse(null), display, identifier), throwable);
return false;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@
"text.rei.left_arrow": "<",
"text.rei.right_arrow": ">",
"text.rei.view_all_categories": "View All Categories",
"text.rei.view_all_categories.tooltip": "%d categories",
"text.rei.go_back_first_page": "Back to Page 1",
"text.rei.choose_page": "Choose Page",
"text.rei.shift_click_to": "Shift-Click to %s",
Expand Down

0 comments on commit 6bbc58f

Please sign in to comment.