From f8fc41207ca444c0a90ae10d78a821831b245bc2 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sun, 7 Nov 2021 16:21:34 +0800 Subject: Fix #654 --- .../client/runtime/PluginStageExecutionWatcher.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'runtime/src/main/java/me/shedaniel/rei/plugin') diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/PluginStageExecutionWatcher.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/PluginStageExecutionWatcher.java index 10326394c..86eddd5c0 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/PluginStageExecutionWatcher.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/PluginStageExecutionWatcher.java @@ -40,7 +40,7 @@ import java.util.*; import java.util.stream.Collectors; public class PluginStageExecutionWatcher implements HintProvider { - private Map, Set> allStages = new HashMap<>(); + private final Map, Set> allStages = new HashMap<>(); public > Reloadable reloadable(PluginManager manager) { return new Reloadable<>() { @@ -53,17 +53,21 @@ public class PluginStageExecutionWatcher implements HintProvider { @Override public void startReload(ReloadStage stage) { - Set stages = allStages.computeIfAbsent(manager, $ -> new HashSet<>()); - if (stage.ordinal() == 0) stages.clear(); - stages.add(stage); + synchronized (allStages) { + Set stages = allStages.computeIfAbsent(manager, $ -> new HashSet<>()); + if (stage.ordinal() == 0) stages.clear(); + stages.add(stage); + } } }; } public Set notVisited() { - Set notVisited = new HashSet<>(Arrays.asList(ReloadStage.values())); - notVisited.removeIf(stage -> allStages.values().stream().allMatch(stages -> stages.contains(stage))); - return notVisited; + synchronized (allStages) { + Set notVisited = new HashSet<>(Arrays.asList(ReloadStage.values())); + notVisited.removeIf(stage -> allStages.values().stream().allMatch(stages -> stages.contains(stage))); + return notVisited; + } } @Override -- cgit From ba981379e97f53ffdea4db83666bd0e65c693f66 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sun, 7 Nov 2021 21:07:54 +0800 Subject: Introduce System Favorites --- .../shedaniel/rei/plugin/test/REITestPlugin.java | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'runtime/src/main/java/me/shedaniel/rei/plugin') diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java b/runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java index f9eedfdce..28bbe66ca 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java @@ -23,6 +23,9 @@ package me.shedaniel.rei.plugin.test; +import com.google.common.collect.ImmutableList; +import me.shedaniel.rei.api.client.favorites.FavoriteEntry; +import me.shedaniel.rei.api.client.favorites.FavoriteEntryType; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.client.registry.entry.EntryRegistry; import me.shedaniel.rei.api.common.entry.EntryStack; @@ -30,10 +33,13 @@ import me.shedaniel.rei.api.common.entry.comparison.ItemComparatorRegistry; import me.shedaniel.rei.api.common.util.EntryStacks; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.minecraft.client.Minecraft; import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.GameType; import org.apache.logging.log4j.LogManager; import org.jetbrains.annotations.TestOnly; @@ -76,4 +82,22 @@ public class REITestPlugin implements REIClientPlugin { tag.putInt("Whatever", random.nextInt(Integer.MAX_VALUE)); return stack; } + + @Override + public void registerFavorites(FavoriteEntryType.Registry registry) { + registry.registerSystemFavorites(() -> { + GameType mode = Minecraft.getInstance().gameMode.getPlayerMode(); + switch (mode) { + case SURVIVAL: + return ImmutableList.of(FavoriteEntry.fromEntryStack(EntryStacks.of(Items.STONE))); + case CREATIVE: + return ImmutableList.of(FavoriteEntry.fromEntryStack(EntryStacks.of(Items.PACKED_ICE))); + case ADVENTURE: + return ImmutableList.of(FavoriteEntry.fromEntryStack(EntryStacks.of(Items.ANVIL))); + case SPECTATOR: + default: + return ImmutableList.of(); + } + }); + } } -- cgit From aba4c079befd4bb32f732b65c746a22559644d35 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Mon, 8 Nov 2021 23:15:08 +0800 Subject: Big Visual and Functional Changes - Fix #503 - Shift Click to select page, normal click to go back to page 1 - Allow non-consuming draggable visitors - Add scale down animation when dragging a stack to the main item list to dismiss it - Make Cheat Mode not active in Display Screens - Add colors to cosmetic transfer handler errors - Implement JEI animations, fix #501 - Allow favorites dragged stacks to go back to where they are if they are ignored, instead of being at the end of the favorites - Implement favorites & entry list column and row limits - Implement display page height limit - Updated localizations --- .../rei/plugin/client/runtime/DefaultClientRuntimePlugin.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'runtime/src/main/java/me/shedaniel/rei/plugin') diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java index c9c57d4ab..3a174ffa4 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/DefaultClientRuntimePlugin.java @@ -39,6 +39,7 @@ import me.shedaniel.rei.api.client.gui.AbstractRenderer; import me.shedaniel.rei.api.client.gui.Renderer; import me.shedaniel.rei.api.client.gui.drag.DraggableStackProviderWidget; import me.shedaniel.rei.api.client.gui.drag.DraggableStackVisitorWidget; +import me.shedaniel.rei.api.client.gui.screen.DisplayScreen; import me.shedaniel.rei.api.client.gui.widgets.Panel; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.api.client.gui.widgets.Widgets; @@ -64,6 +65,7 @@ import me.shedaniel.rei.impl.client.gui.widget.FavoritesListWidget; import me.shedaniel.rei.plugin.autocrafting.DefaultCategoryHandler; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.TextComponent; @@ -225,7 +227,7 @@ public class DefaultClientRuntimePlugin implements REIClientPlugin { @Override public boolean doAction(int button) { - if (!ClientHelper.getInstance().isCheating()) return false; + if (!(ClientHelper.getInstance().isCheating() && !(Minecraft.getInstance().screen instanceof DisplayScreen))) return false; EntryStack entry = stack.copy(); if (!entry.isEmpty()) { if (entry.getValueType() == FluidStack.class) { -- cgit