aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/src/main/java')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java26
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java8
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/InputSlotCrafter.java26
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/MenuInfoRegistryImpl.java41
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java2
7 files changed, 66 insertions, 44 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
index 0ed0e6f78..6f7e36118 100644
--- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
+++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
@@ -142,18 +142,18 @@ import java.util.stream.Stream;
public class RoughlyEnoughItemsCore {
@ApiStatus.Internal
public static final Logger LOGGER = LogManager.getFormatterLogger("REI");
- private static final ExecutorService RELOAD_PLUGINS;
+ private static ExecutorService reloadPlugins;
@ApiStatus.Experimental
public static boolean isLeftMousePressed = false;
static {
- RELOAD_PLUGINS = Executors.newSingleThreadScheduledExecutor(r -> {
- Thread thread = new Thread(r, "REI-ReloadPlugins");
- thread.setDaemon(true);
- return thread;
- });
attachCommonInternals();
if (Platform.getEnvironment() == Env.CLIENT) {
+ reloadPlugins = Executors.newSingleThreadScheduledExecutor(r -> {
+ Thread thread = new Thread(r, "REI-ReloadPlugins");
+ thread.setDaemon(true);
+ return thread;
+ });
attachClientInternals();
}
}
@@ -401,15 +401,19 @@ public class RoughlyEnoughItemsCore {
lastReload.setValue(System.currentTimeMillis());
}
if (ConfigObject.getInstance().doesRegisterRecipesInAnotherThread()) {
- CompletableFuture.runAsync(RoughlyEnoughItemsCore::_reloadPlugins, RELOAD_PLUGINS);
+ CompletableFuture.runAsync(RoughlyEnoughItemsCore::_reloadPlugins, reloadPlugins);
} else {
_reloadPlugins();
}
}
private static void _reloadPlugins() {
- for (PluginManager<? extends REIPlugin<?>> instance : PluginManager.getActiveInstances()) {
- instance.startReload();
+ try {
+ for (PluginManager<? extends REIPlugin<?>> instance : PluginManager.getActiveInstances()) {
+ instance.startReload();
+ }
+ } catch (Throwable throwable) {
+ throwable.printStackTrace();
}
}
@@ -421,9 +425,7 @@ public class RoughlyEnoughItemsCore {
if (Platform.getEnvironment() == Env.SERVER) {
MutableLong lastReload = new MutableLong(-1);
ReloadListeners.registerReloadListener(PackType.SERVER_DATA, (preparationBarrier, resourceManager, profilerFiller, profilerFiller2, executor, executor2) -> {
- return preparationBarrier.wait(Unit.INSTANCE).thenRunAsync(() -> {
- CompletableFuture.runAsync(RoughlyEnoughItemsCore::_reloadPlugins, RELOAD_PLUGINS);
- }, executor2);
+ return preparationBarrier.wait(Unit.INSTANCE).thenRunAsync(RoughlyEnoughItemsCore::_reloadPlugins, executor2);
});
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java
index 4e14a6db2..6610dd7b4 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/entries/FilteringScreen.java
@@ -66,7 +66,7 @@ import static me.shedaniel.rei.impl.client.gui.widget.EntryListWidget.entrySize;
@ApiStatus.Internal
public class FilteringScreen extends Screen {
- protected List<EntryStack> selected = Lists.newArrayList();
+ protected List<EntryStack<?>> selected = Lists.newArrayList();
protected final ScrollingContainer scrolling = new ScrollingContainer() {
@Override
public int getMaxScrollHeight() {
@@ -87,7 +87,7 @@ public class FilteringScreen extends Screen {
Screen parent;
private FilteringEntry filteringEntry;
private Tooltip tooltip = null;
- private List<EntryStack> entryStacks = null;
+ private List<EntryStack<?>> entryStacks = null;
private Rectangle innerBounds;
private List<EntryListEntry> entries = Collections.emptyList();
private List<GuiEventListener> elements = Collections.emptyList();
@@ -127,7 +127,7 @@ public class FilteringScreen extends Screen {
Component hideText = new TranslatableComponent("config.roughlyenoughitems.filteredEntries.hide");
this.hideButton = new Button(0, 0, Minecraft.getInstance().font.width(hideText) + 10, 20, hideText, button -> {
for (int i = 0; i < entryStacks.size(); i++) {
- EntryStack stack = entryStacks.get(i);
+ EntryStack<?> stack = entryStacks.get(i);
EntryListEntry entry = entries.get(i);
entry.getBounds().y = (int) (entry.backupY - scrolling.scrollAmount);
if (entry.isSelected() && !entry.isFiltered()) {
@@ -142,7 +142,7 @@ public class FilteringScreen extends Screen {
Component showText = new TranslatableComponent("config.roughlyenoughitems.filteredEntries.show");
this.showButton = new Button(0, 0, Minecraft.getInstance().font.width(showText) + 10, 20, showText, button -> {
for (int i = 0; i < entryStacks.size(); i++) {
- EntryStack stack = entryStacks.get(i);
+ EntryStack<?> stack = entryStacks.get(i);
EntryListEntry entry = entries.get(i);
entry.getBounds().y = (int) (entry.backupY - scrolling.scrollAmount);
if (entry.isSelected() && filteringEntry.configFiltered.remove(stack)) {
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/InputSlotCrafter.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/InputSlotCrafter.java
index d0c3a4409..3746420b6 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/InputSlotCrafter.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/InputSlotCrafter.java
@@ -31,7 +31,7 @@ import me.shedaniel.rei.api.common.transfer.RecipeFinder;
import me.shedaniel.rei.api.common.transfer.info.MenuInfo;
import me.shedaniel.rei.api.common.transfer.info.MenuInfoContext;
import me.shedaniel.rei.api.common.transfer.info.MenuInfoRegistry;
-import me.shedaniel.rei.api.common.transfer.info.stack.StackAccessor;
+import me.shedaniel.rei.api.common.transfer.info.stack.SlotAccessor;
import me.shedaniel.rei.api.common.util.CollectionUtils;
import net.minecraft.core.NonNullList;
import net.minecraft.nbt.CompoundTag;
@@ -51,8 +51,8 @@ public class InputSlotCrafter<T extends AbstractContainerMenu, C extends Contain
protected T container;
protected D display;
protected MenuInfo<T, D> menuInfo;
- private Iterable<StackAccessor> inputStacks;
- private Iterable<StackAccessor> inventoryStacks;
+ private Iterable<SlotAccessor> inputStacks;
+ private Iterable<SlotAccessor> inventoryStacks;
private ServerPlayer player;
private InputSlotCrafter(CategoryIdentifier<D> category, T container, CompoundTag display, MenuInfo<T, D> menuInfo) {
@@ -71,8 +71,8 @@ public class InputSlotCrafter<T extends AbstractContainerMenu, C extends Contain
private void fillInputSlots(ServerPlayer player, boolean hasShift) {
this.player = player;
- this.inventoryStacks = this.menuInfo.getInventoryStacks(this);
- this.inputStacks = this.menuInfo.getInputStacks(this);
+ this.inventoryStacks = this.menuInfo.getInventorySlots(this);
+ this.inputStacks = this.menuInfo.getInputSlots(this);
// Return the already placed items on the grid
this.cleanInputs();
@@ -80,7 +80,7 @@ public class InputSlotCrafter<T extends AbstractContainerMenu, C extends Contain
RecipeFinder recipeFinder = new RecipeFinder();
this.menuInfo.getRecipeFinderPopulator().populate(this, recipeFinder);
NonNullList<Ingredient> ingredients = NonNullList.create();
- for (List<ItemStack> itemStacks : this.menuInfo.getDisplayInputs(this)) {
+ for (List<ItemStack> itemStacks : this.menuInfo.getInputs(this)) {
ingredients.add(CollectionUtils.toIngredient(itemStacks));
}
@@ -95,8 +95,8 @@ public class InputSlotCrafter<T extends AbstractContainerMenu, C extends Contain
this.menuInfo.markDirty(this);
}
- public void alignRecipeToGrid(Iterable<StackAccessor> inputStacks, Iterator<Integer> recipeItemIds, int craftsAmount) {
- for (StackAccessor inputStack : inputStacks) {
+ public void alignRecipeToGrid(Iterable<SlotAccessor> inputStacks, Iterator<Integer> recipeItemIds, int craftsAmount) {
+ for (SlotAccessor inputStack : inputStacks) {
if (!recipeItemIds.hasNext()) {
return;
}
@@ -105,7 +105,7 @@ public class InputSlotCrafter<T extends AbstractContainerMenu, C extends Contain
}
}
- public void acceptAlignedInput(Integer recipeItemId, StackAccessor inputStack, int craftsAmount) {
+ public void acceptAlignedInput(Integer recipeItemId, SlotAccessor inputStack, int craftsAmount) {
ItemStack toBeTakenStack = RecipeFinder.getStackFromId(recipeItemId);
if (!toBeTakenStack.isEmpty()) {
for (int i = 0; i < craftsAmount; ++i) {
@@ -114,8 +114,8 @@ public class InputSlotCrafter<T extends AbstractContainerMenu, C extends Contain
}
}
- protected void fillInputSlot(StackAccessor slot, ItemStack toBeTakenStack) {
- StackAccessor takenSlot = this.takeInventoryStack(toBeTakenStack);
+ protected void fillInputSlot(SlotAccessor slot, ItemStack toBeTakenStack) {
+ SlotAccessor takenSlot = this.takeInventoryStack(toBeTakenStack);
if (takenSlot != null) {
ItemStack takenStack = takenSlot.getItemStack().copy();
if (!takenStack.isEmpty()) {
@@ -158,8 +158,8 @@ public class InputSlotCrafter<T extends AbstractContainerMenu, C extends Contain
}
@Nullable
- public StackAccessor takeInventoryStack(ItemStack itemStack) {
- for (StackAccessor inventoryStack : inventoryStacks) {
+ public SlotAccessor takeInventoryStack(ItemStack itemStack) {
+ for (SlotAccessor inventoryStack : inventoryStacks) {
ItemStack itemStack1 = inventoryStack.getItemStack();
if (!itemStack1.isEmpty() && areItemsEqual(itemStack, itemStack1) && !itemStack1.isDamaged() && !itemStack1.isEnchanted() && !itemStack1.hasCustomHoverName()) {
return inventoryStack;
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/MenuInfoRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/MenuInfoRegistryImpl.java
index b6760a424..8b38b73bf 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/MenuInfoRegistryImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/transfer/MenuInfoRegistryImpl.java
@@ -29,46 +29,63 @@ import me.shedaniel.rei.api.common.category.CategoryIdentifier;
import me.shedaniel.rei.api.common.display.Display;
import me.shedaniel.rei.api.common.plugins.REIServerPlugin;
import me.shedaniel.rei.api.common.transfer.info.MenuInfo;
+import me.shedaniel.rei.api.common.transfer.info.MenuInfoProvider;
import me.shedaniel.rei.api.common.transfer.info.MenuInfoRegistry;
import net.minecraft.world.inventory.AbstractContainerMenu;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.function.Predicate;
public class MenuInfoRegistryImpl implements MenuInfoRegistry {
- private final Map<CategoryIdentifier<?>, Map<Class<? extends AbstractContainerMenu>, MenuInfo<?, ?>>> map = Maps.newLinkedHashMap();
- private final Map<Predicate<CategoryIdentifier<?>>, List<MenuInfo<?, ?>>> mapGeneric = Maps.newLinkedHashMap();
+ private final Map<CategoryIdentifier<?>, Map<Class<? extends AbstractContainerMenu>, List<MenuInfoProvider<?, ?>>>> map = Maps.newLinkedHashMap();
+ private final Map<Predicate<CategoryIdentifier<?>>, List<MenuInfoProvider<?, ?>>> mapGeneric = Maps.newLinkedHashMap();
@Override
- public <C extends AbstractContainerMenu, D extends Display> void register(CategoryIdentifier<D> category, Class<C> menuClass, MenuInfo<C, D> menuInfo) {
- map.computeIfAbsent(category, id -> Maps.newLinkedHashMap()).put(menuClass, menuInfo);
+ public <C extends AbstractContainerMenu, D extends Display> void register(CategoryIdentifier<D> category, Class<C> menuClass, MenuInfoProvider<C, D> menuInfo) {
+ map.computeIfAbsent(category, id -> Maps.newLinkedHashMap())
+ .computeIfAbsent(menuClass, c -> Lists.newArrayList())
+ .add(menuInfo);
}
@Override
- public <D extends Display> void registerGeneric(Predicate<CategoryIdentifier<?>> categoryPredicate, MenuInfo<?, D> menuInfo) {
+ public <D extends Display> void registerGeneric(Predicate<CategoryIdentifier<?>> categoryPredicate, MenuInfoProvider<?, D> menuInfo) {
mapGeneric.computeIfAbsent(categoryPredicate, id -> Lists.newArrayList()).add(menuInfo);
}
@Override
public <T extends AbstractContainerMenu, D extends Display> MenuInfo<T, D> get(CategoryIdentifier<D> category, Class<T> menuClass) {
- Map<Class<? extends AbstractContainerMenu>, MenuInfo<?, ?>> infoMap = map.get(category);
+ Map<Class<? extends AbstractContainerMenu>, List<MenuInfoProvider<?, ?>>> infoMap = map.get(category);
if (infoMap != null && !infoMap.isEmpty()) {
if (infoMap.containsKey(menuClass)) {
- return (MenuInfo<T, D>) infoMap.get(menuClass);
+ for (MenuInfoProvider<?, ?> provider : infoMap.get(menuClass)) {
+ Optional<MenuInfo<T, D>> info = ((MenuInfoProvider<T, D>) provider).provide(category, menuClass);
+ if (info.isPresent()) {
+ return info.get();
+ }
+ }
}
- for (Map.Entry<Class<? extends AbstractContainerMenu>, MenuInfo<?, ?>> entry : infoMap.entrySet()) {
+ for (Map.Entry<Class<? extends AbstractContainerMenu>, List<MenuInfoProvider<?, ?>>> entry : infoMap.entrySet()) {
if (entry.getKey().isAssignableFrom(menuClass)) {
- return (MenuInfo<T, D>) entry.getValue();
+ for (MenuInfoProvider<?, ?> provider : entry.getValue()) {
+ Optional<MenuInfo<T, D>> info = ((MenuInfoProvider<T, D>) provider).provide(category, menuClass);
+ if (info.isPresent()) {
+ return info.get();
+ }
+ }
}
}
}
- for (Map.Entry<Predicate<CategoryIdentifier<?>>, List<MenuInfo<?, ?>>> entry : mapGeneric.entrySet()) {
+ for (Map.Entry<Predicate<CategoryIdentifier<?>>, List<MenuInfoProvider<?, ?>>> entry : mapGeneric.entrySet()) {
if (entry.getKey().test(category) && !entry.getValue().isEmpty()) {
- List<MenuInfo<?, ?>> infoList = entry.getValue();
+ List<MenuInfoProvider<?, ?>> infoList = entry.getValue();
if (!infoList.isEmpty()) {
- return (MenuInfo<T, D>) infoList.get(0);
+ Optional<MenuInfo<T, D>> info = ((MenuInfoProvider<T, D>) infoList.get(0)).provide(category, menuClass);
+ if (info.isPresent()) {
+ return info.get();
+ }
}
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java b/runtime/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java
index dba6fe449..a400c0155 100644
--- a/runtime/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java
+++ b/runtime/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java
@@ -74,7 +74,7 @@ public class DefaultCategoryHandler implements TransferHandler {
} catch (MenuTransferException e) {
return Result.createFailed(e.getError());
}
- List<List<ItemStack>> input = menuInfo.getDisplayInputs(menuInfoContext);
+ List<List<ItemStack>> input = menuInfo.getInputs(menuInfoContext);
IntList intList = hasItems(menu, menuInfo, display, input);
if (!intList.isEmpty()) {
return Result.createFailed(new TranslatableComponent("error.rei.not.enough.materials"), intList);
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java
index 9356c3bc5..225e7e12a 100644
--- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java
+++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/entry/FluidEntryDefinition.java
@@ -60,6 +60,7 @@ import net.minecraft.tags.TagCollection;
import net.minecraft.tags.TagContainer;
import net.minecraft.util.Mth;
import net.minecraft.world.inventory.InventoryMenu;
+import net.minecraft.world.level.material.FlowingFluid;
import net.minecraft.world.level.material.Fluid;
import org.jetbrains.annotations.Nullable;
@@ -113,7 +114,9 @@ public class FluidEntryDefinition implements EntryDefinition<FluidStack>, EntryS
@Override
public FluidStack normalize(EntryStack<FluidStack> entry, FluidStack value) {
- FluidStack copy = value.copy();
+ Fluid fluid = value.getFluid();
+ if (fluid instanceof FlowingFluid) fluid = ((FlowingFluid) fluid).getSource();
+ FluidStack copy = FluidStack.create(fluid, value.getAmount(), value.getTag());
copy.setAmount(FluidStack.bucketAmount());
return copy;
}
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 f0f1dae76..c31c1e864 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
@@ -53,7 +53,7 @@ public class REITestPlugin implements REIClientPlugin {
@Override
public void registerEntries(EntryRegistry registry) {
- int times = 1000;
+ int times = 100;
for (Item item : Registry.ITEM) {
EntryStack<ItemStack> base = EntryStacks.of(item);
registry.addEntriesAfter(base, IntStream.range(0, times).mapToObj(value -> transformStack(EntryStacks.of(item))).collect(Collectors.toList()));