Anvils fix

This commit is contained in:
Aleksey 2021-07-16 23:50:58 +03:00
parent 193fc41fb7
commit 1342326e70
9 changed files with 62 additions and 97 deletions

View file

@ -26,14 +26,14 @@ import java.util.List;
import java.util.stream.Collectors;
public class REIAnvilCategory implements TransferDisplayCategory<REIAnvilDisplay> {
private final EntryStack[] ANVILS;
private final EntryStack<?>[] ANVILS;
REIAnvilCategory(EntryStack[] anvils) {
REIAnvilCategory(EntryStack<?>[] anvils) {
ANVILS = anvils;
}
@Override
public @NotNull CategoryIdentifier getCategoryIdentifier() {
public CategoryIdentifier<REIAnvilDisplay> getCategoryIdentifier() {
return REIPlugin.SMITHING;
}
@ -43,7 +43,7 @@ public class REIAnvilCategory implements TransferDisplayCategory<REIAnvilDisplay
}
@Override
public @NotNull EntryStack getIcon() {
public @NotNull EntryStack<?> getIcon() {
return ANVILS[0];
}
@ -59,7 +59,7 @@ public class REIAnvilCategory implements TransferDisplayCategory<REIAnvilDisplay
List<EntryIngredient> inputEntries = display.getInputEntries();
EntryIngredient materials = inputEntries.get(1);
int anvilLevel = display.getAnvilLevel();
List anvils = Arrays.stream(ANVILS).filter(anvil -> {
List<EntryStack<?>> anvils = Arrays.stream(ANVILS).filter(anvil -> {
Object value = anvil.getValue();
if (value instanceof ItemStack) {
value = ((ItemStack) value).getItem();
@ -70,7 +70,6 @@ public class REIAnvilCategory implements TransferDisplayCategory<REIAnvilDisplay
}
return anvilLevel == 1;
}).collect(Collectors.toList());
//materials.forEach(entryStack -> entryStack.setAmount(display.getInputCount()));
widgets.add(Widgets.createArrow(new Point(x + 24, y + 4)));
widgets.add(Widgets.createLabel(new Point(bounds.x + bounds.width - 7, bounds.y + bounds.height - 15), new TranslatableComponent("category.rei.damage.amount&dmg", display.getDamage())).noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB));
widgets.add(Widgets.createSlot(new Point(x - 20, y + 4)).entries(materials).markInput());

View file

@ -5,6 +5,7 @@ import me.shedaniel.rei.api.common.display.SimpleGridMenuDisplay;
import me.shedaniel.rei.api.common.display.basic.BasicDisplay;
import me.shedaniel.rei.api.common.util.EntryIngredients;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Recipe;
import org.jetbrains.annotations.NotNull;
import ru.betterend.recipe.builders.AnvilRecipe;
@ -19,16 +20,18 @@ public class REIAnvilDisplay extends BasicDisplay implements SimpleGridMenuDispl
public REIAnvilDisplay(AnvilRecipe recipe) {
super(EntryIngredients.ofIngredients(recipe.getIngredients()), Collections.singletonList(EntryIngredients.of(recipe.getResultItem())));
this.recipe = recipe;
inputs.get(1).forEach(entryStack -> {
if (entryStack.getValue() instanceof ItemStack itemStack) {
itemStack.setCount(recipe.getInputCount());
}
});
}
public int getDamage() {
return recipe.getDamage();
}
public int getInputCount() {
return recipe.getInputCount();
}
public int getAnvilLevel() {
return recipe.getAnvilLevel();
}
@ -43,11 +46,6 @@ public class REIAnvilDisplay extends BasicDisplay implements SimpleGridMenuDispl
return REIPlugin.SMITHING;
}
// @Override
// public @NotNull List<List<EntryStack>> getRequiredEntries() {
// return input;
// }
@Override
public int getWidth() {
return 2;
@ -57,10 +55,4 @@ public class REIAnvilDisplay extends BasicDisplay implements SimpleGridMenuDispl
public int getHeight() {
return 1;
}
// @Override
// public List<List<EntryStack>> getOrganisedInputEntries(ContainerInfo<AbstractContainerMenu> containerInfo,
// AbstractContainerMenu container) {
// return input;
// }
}

View file

@ -5,6 +5,7 @@ import me.shedaniel.rei.api.client.plugins.REIClientPlugin;
import me.shedaniel.rei.api.client.registry.category.CategoryRegistry;
import me.shedaniel.rei.api.client.registry.display.DisplayRegistry;
import me.shedaniel.rei.api.common.category.CategoryIdentifier;
import me.shedaniel.rei.api.common.display.Display;
import me.shedaniel.rei.api.common.entry.EntryIngredient;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.util.EntryIngredients;
@ -12,6 +13,7 @@ import me.shedaniel.rei.api.common.util.EntryStacks;
import me.shedaniel.rei.plugin.common.DefaultPlugin;
import net.fabricmc.fabric.impl.content.registry.FuelRegistryImpl;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.BlastingRecipe;
import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.level.block.Blocks;
@ -24,38 +26,17 @@ import ru.betterend.recipe.builders.InfusionRecipe;
import ru.betterend.registry.EndBlocks;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
//https://github.com/shedaniel/RoughlyEnoughItems/blob/6.x-1.17/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java
public class REIPlugin implements REIClientPlugin {
public final static ResourceLocation PLUGIN_ID = BetterEnd.makeID("rei_plugin");
public final static CategoryIdentifier ALLOYING_FUEL = CategoryIdentifier.of(BetterEnd.MOD_ID, "alloying_fuel");
public final static CategoryIdentifier ALLOYING = CategoryIdentifier.of(BetterEnd.MOD_ID, AlloyingRecipe.GROUP);
public final static CategoryIdentifier SMITHING = CategoryIdentifier.of(BetterEnd.MOD_ID, AnvilRecipe.ID.getPath());
public final static CategoryIdentifier INFUSION = CategoryIdentifier.of(BetterEnd.MOD_ID, InfusionRecipe.GROUP);
private EntryStack END_STONE_SMELTER;
private EntryStack INFUSION_RITUAL;
private EntryStack[] ANVILS;
private EntryStack[] FURNACES;
void init() {
//we need to initialize those variables after the static initialization
//otherwise the registry does not know the BlockItems
if (END_STONE_SMELTER != null) {
return;
}
END_STONE_SMELTER = EntryStacks.of(EndBlocks.END_STONE_SMELTER);
INFUSION_RITUAL = EntryStacks.of(EndBlocks.INFUSION_PEDESTAL);
List<EntryStack> anvils = Lists.newArrayList(EntryIngredients.ofItems(EndBlocks.getModBlocks().stream().filter(EndAnvilBlock.class::isInstance).collect(Collectors.toList())));
anvils.add(0, EntryStacks.of(Blocks.ANVIL));
ANVILS = anvils.toArray(new EntryStack[0]);
FURNACES = Lists.newArrayList(EntryIngredients.ofItems(EndBlocks.getModBlocks().stream().filter(BaseFurnaceBlock.class::isInstance).collect(Collectors.toList()))).toArray(new EntryStack[0]);
}
public final static CategoryIdentifier<REIAlloyingFuelDisplay> ALLOYING_FUEL = CategoryIdentifier.of(BetterEnd.MOD_ID, "alloying_fuel");
public final static CategoryIdentifier<REIAlloyingDisplay> ALLOYING = CategoryIdentifier.of(BetterEnd.MOD_ID, AlloyingRecipe.GROUP);
public final static CategoryIdentifier<REIAnvilDisplay> SMITHING = CategoryIdentifier.of(BetterEnd.MOD_ID, AnvilRecipe.ID.getPath());
public final static CategoryIdentifier<REIInfusionDisplay> INFUSION = CategoryIdentifier.of(BetterEnd.MOD_ID, InfusionRecipe.GROUP);
@Override
public void registerDisplays(DisplayRegistry registry) {
@ -66,7 +47,7 @@ public class REIPlugin implements REIClientPlugin {
FuelRegistryImpl.INSTANCE.getFuelTimes().forEach((item, time) -> {
if (time >= 2000) {
final List<EntryIngredient> list = Arrays.asList(EntryIngredients.of(item));
final List<EntryIngredient> list = Collections.singletonList(EntryIngredients.of(item));
registry.add(new REIAlloyingFuelDisplay(list, time));
}
});
@ -74,18 +55,24 @@ public class REIPlugin implements REIClientPlugin {
@Override
public void registerCategories(CategoryRegistry registry) {
init();
EntryStack<ItemStack> endStoneSmelter = EntryStacks.of(EndBlocks.END_STONE_SMELTER);
EntryStack<ItemStack> infusionRitual = EntryStacks.of(EndBlocks.INFUSION_PEDESTAL);
List<EntryStack<?>> anvils = Lists.newArrayList(EntryIngredients.ofItems(EndBlocks.getModBlocks().stream().filter(EndAnvilBlock.class::isInstance).collect(Collectors.toList())));
anvils.add(0, EntryStacks.of(Blocks.ANVIL));
List<EntryStack<?>> furnaces = Lists.newArrayList(EntryIngredients.ofItems(EndBlocks.getModBlocks().stream().filter(BaseFurnaceBlock.class::isInstance).collect(Collectors.toList())));
EntryStack<?>[] anvilsArray = anvils.toArray(new EntryStack[0]);
EntryStack<?>[] furnacesArray = furnaces.toArray(new EntryStack[0]);
registry.add(new REIAlloyingFuelCategory(), new REIAlloyingCategory(endStoneSmelter), new REIInfusionCategory(infusionRitual), new REIAnvilCategory(anvilsArray));
registry.add(new REIAlloyingFuelCategory(), new REIAlloyingCategory(END_STONE_SMELTER), new REIInfusionCategory(INFUSION_RITUAL), new REIAnvilCategory(ANVILS));
registry.addWorkstations(ALLOYING_FUEL, END_STONE_SMELTER);
registry.addWorkstations(ALLOYING, END_STONE_SMELTER);
registry.addWorkstations(INFUSION, INFUSION_RITUAL);
registry.addWorkstations(SMITHING, ANVILS);
registry.addWorkstations(ALLOYING_FUEL, endStoneSmelter);
registry.addWorkstations(ALLOYING, endStoneSmelter);
registry.addWorkstations(INFUSION, infusionRitual);
registry.addWorkstations(SMITHING, anvilsArray);
registry.removePlusButton(ALLOYING_FUEL);
registry.removePlusButton(SMITHING);
registry.addWorkstations(DefaultPlugin.SMELTING, FURNACES);
registry.addWorkstations(DefaultPlugin.FUEL, FURNACES);
registry.addWorkstations(DefaultPlugin.SMELTING, furnacesArray);
registry.addWorkstations(DefaultPlugin.FUEL, furnacesArray);
}
}