Add ISimpleReloadListener

ISimpleReloadListener is a reload listener functional interface meant to
be used when preparation is not needed. All current reload listeners
have been moved to this interface, which allows them to be lambdas and
not have to create a new Object for every reload.
This commit is contained in:
PepperBell 2021-04-28 13:37:21 -07:00
parent 559146ef04
commit 61f2a35a61
5 changed files with 46 additions and 59 deletions

View file

@ -3,7 +3,8 @@ package com.simibubi.create.content.contraptions.fluids.recipe;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.client.resources.ReloadListener;
import com.simibubi.create.foundation.utility.ISimpleReloadListener;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.profiler.IProfiler;
@ -14,20 +15,9 @@ public class FluidTransferRecipes {
public static List<ItemStack> POTION_ITEMS = new ArrayList<>();
public static List<Item> FILLED_BUCKETS = new ArrayList<>();
public static final ReloadListener<Object> LISTENER = new ReloadListener<Object>() {
@Override
protected Object prepare(IResourceManager p_212854_1_, IProfiler p_212854_2_) {
return new Object();
}
@Override
protected void apply(Object p_212853_1_, IResourceManager p_212853_2_, IProfiler p_212853_3_) {
POTION_ITEMS.clear();
FILLED_BUCKETS.clear();
}
public static final ISimpleReloadListener LISTENER = (IResourceManager resourceManager, IProfiler profiler) -> {
POTION_ITEMS.clear();
FILLED_BUCKETS.clear();
};
}

View file

@ -15,8 +15,8 @@ import com.simibubi.create.content.contraptions.fluids.potion.PotionFluidHandler
import com.simibubi.create.content.contraptions.processing.HeatCondition;
import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder;
import com.simibubi.create.foundation.fluid.FluidIngredient;
import com.simibubi.create.foundation.utility.ISimpleReloadListener;
import net.minecraft.client.resources.ReloadListener;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.Ingredient;
@ -133,27 +133,17 @@ public class PotionMixingRecipeManager {
.collect(Collectors.toList());
}
public static final ReloadListener<Object> LISTENER = new ReloadListener<Object>() {
@Override
protected Object prepare(IResourceManager p_212854_1_, IProfiler p_212854_2_) {
return new Object();
}
@Override
protected void apply(Object p_212853_1_, IResourceManager p_212853_2_, IProfiler p_212853_3_) {
ALL.clear();
getAllBrewingRecipes().forEach(recipe -> {
for (Ingredient ingredient : recipe.getIngredients()) {
for (ItemStack itemStack : ingredient.getMatchingStacks()) {
ALL.computeIfAbsent(itemStack.getItem(), t -> new ArrayList<>())
.add(recipe);
return;
}
public static final ISimpleReloadListener LISTENER = (IResourceManager resourceManager, IProfiler profiler) -> {
ALL.clear();
getAllBrewingRecipes().forEach(recipe -> {
for (Ingredient ingredient : recipe.getIngredients()) {
for (ItemStack itemStack : ingredient.getMatchingStacks()) {
ALL.computeIfAbsent(itemStack.getItem(), t -> new ArrayList<>())
.add(recipe);
return;
}
});
}
}
});
};
}

View file

@ -3,20 +3,15 @@ package com.simibubi.create.foundation;
import com.simibubi.create.CreateClient;
import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation;
import com.simibubi.create.foundation.block.render.SpriteShifter;
import com.simibubi.create.foundation.utility.ISimpleReloadListener;
import net.minecraft.client.resources.ReloadListener;
import net.minecraft.profiler.IProfiler;
import net.minecraft.resources.IResourceManager;
public class ResourceReloadHandler extends ReloadListener<Object> {
public class ResourceReloadHandler implements ISimpleReloadListener {
@Override
protected Object prepare(IResourceManager resourceManagerIn, IProfiler profilerIn) {
return new Object();
}
@Override
protected void apply(Object $, IResourceManager resourceManagerIn, IProfiler profilerIn) {
public void onReload(IResourceManager resourceManagerIn, IProfiler profilerIn) {
SpriteShifter.reloadUVs();
CreateClient.invalidateRenderers();
IHaveGoggleInformation.numberFormat.update();

View file

@ -0,0 +1,23 @@
package com.simibubi.create.foundation.utility;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import net.minecraft.profiler.IProfiler;
import net.minecraft.resources.IFutureReloadListener;
import net.minecraft.resources.IResourceManager;
import net.minecraft.util.Unit;
@FunctionalInterface
public interface ISimpleReloadListener extends IFutureReloadListener {
@Override
default CompletableFuture<Void> reload(IFutureReloadListener.IStage stage, IResourceManager resourceManager, IProfiler prepareProfiler, IProfiler applyProfiler, Executor prepareExecutor, Executor applyExecutor) {
return stage.markCompleteAwaitingOthers(Unit.INSTANCE).thenRunAsync(() -> {
onReload(resourceManager, applyProfiler);
}, applyExecutor);
}
void onReload(IResourceManager resourceManager, IProfiler profiler);
}

View file

@ -10,8 +10,8 @@ import javax.annotation.Nullable;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.simibubi.create.foundation.utility.ISimpleReloadListener;
import net.minecraft.client.resources.ReloadListener;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.profiler.IProfiler;
import net.minecraft.resources.IResourceManager;
@ -58,19 +58,8 @@ public class RecipeFinder {
return list;
}
public static final ReloadListener<Object> LISTENER = new ReloadListener<Object>() {
@Override
protected Object prepare(IResourceManager p_212854_1_, IProfiler p_212854_2_) {
return new Object();
}
@Override
protected void apply(Object p_212853_1_, IResourceManager p_212853_2_, IProfiler p_212853_3_) {
cachedSearches.invalidateAll();
}
public static final ISimpleReloadListener LISTENER = (IResourceManager resourceManager, IProfiler profiler) -> {
cachedSearches.invalidateAll();
};
}