mirror of
https://github.com/MinecraftForge/MinecraftForge
synced 2026-08-22 04:26:10 -04:00
Fix ModList screen selection getting out of sync. Closes #10855
This commit is contained in:
parent
278bdfc132
commit
88bb2217e5
2 changed files with 24 additions and 11 deletions
|
|
@ -23,6 +23,7 @@ import net.minecraftforge.client.gui.widget.ModListWidget;
|
|||
import net.minecraftforge.client.gui.widget.ScrollPanel;
|
||||
import net.minecraftforge.fml.loading.moddiscovery.ModFileInfo;
|
||||
import org.apache.maven.artifact.versioning.ComparableVersion;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.ActiveTextCollector;
|
||||
|
|
@ -299,8 +300,6 @@ public class ModListScreen extends Screen {
|
|||
|
||||
@Override
|
||||
public void tick() {
|
||||
modList.setSelected(selected);
|
||||
|
||||
if (!search.getValue().equals(lastFilterText)) {
|
||||
reloadMods();
|
||||
sorted = false;
|
||||
|
|
@ -311,11 +310,11 @@ public class ModListScreen extends Screen {
|
|||
mods.sort(sortType);
|
||||
modList.refreshList();
|
||||
if (selected != null) {
|
||||
selected = modList.children().stream()
|
||||
final var newSelected = modList.children().stream()
|
||||
.filter(e -> e.getInfo() == selected.getInfo())
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
updateCache();
|
||||
this.modList.setSelected(newSelected);
|
||||
}
|
||||
sorted = true;
|
||||
}
|
||||
|
|
@ -365,8 +364,14 @@ public class ModListScreen extends Screen {
|
|||
}
|
||||
|
||||
public void setSelected(ModListWidget.ModEntry entry) {
|
||||
this.selected = entry == this.selected ? null : entry;
|
||||
updateCache();
|
||||
if (this.selected != entry) {
|
||||
this.selected = entry;
|
||||
updateCache();
|
||||
}
|
||||
}
|
||||
|
||||
public ModListWidget.@Nullable ModEntry getSelected() {
|
||||
return this.selected;
|
||||
}
|
||||
|
||||
record Logo(Identifier texture, Size2i size) {}
|
||||
|
|
@ -473,7 +478,6 @@ public class ModListScreen extends Screen {
|
|||
ModListWidget.ModEntry selected = this.selected;
|
||||
this.init(width, height);
|
||||
this.search.setValue(s);
|
||||
this.selected = selected;
|
||||
|
||||
if (!this.search.getValue().isEmpty())
|
||||
reloadMods();
|
||||
|
|
@ -481,7 +485,7 @@ public class ModListScreen extends Screen {
|
|||
if (sort != SortType.NORMAL)
|
||||
resortMods(sort);
|
||||
|
||||
updateCache();
|
||||
this.modList.setSelected(selected);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@
|
|||
|
||||
package net.minecraftforge.client.gui.widget;
|
||||
|
||||
import org.jspecify.annotations.Nullable;
|
||||
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.gui.components.ObjectSelectionList;
|
||||
|
|
@ -60,6 +62,12 @@ public class ModListWidget extends ObjectSelectionList<ModListWidget.ModEntry> {
|
|||
parent.buildModList(this::addEntry, mod->new ModEntry(mod, this.parent));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSelected(final @Nullable ModEntry selected) {
|
||||
parent.setSelected(selected);
|
||||
super.setSelected(selected);
|
||||
}
|
||||
|
||||
public class ModEntry extends ObjectSelectionList.Entry<ModEntry> {
|
||||
private final IModInfo modInfo;
|
||||
private final ModListScreen parent;
|
||||
|
|
@ -92,14 +100,15 @@ public class ModListWidget extends ObjectSelectionList<ModListWidget.ModEntry> {
|
|||
guiGraphics.pose().pushMatrix();
|
||||
guiGraphics.blit(RenderPipelines.GUI_TEXTURED, VERSION_CHECK_ICONS, getX() + width - 12 - barOffset, top + entryHeight / 4, vercheck.status().getSheetOffset() * 8, (vercheck.status().isAnimated() && ((System.currentTimeMillis() / 800 & 1)) == 1) ? 8 : 0, 8, 8, 64, 16);
|
||||
guiGraphics.pose().popMatrix();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(MouseButtonEvent info, boolean recent) {
|
||||
parent.setSelected(this);
|
||||
ModListWidget.this.setSelected(this);
|
||||
if (this.parent.getSelected() == this)
|
||||
ModListWidget.this.setSelected(null);
|
||||
else
|
||||
ModListWidget.this.setSelected(this);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue