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

@ -1,20 +1,14 @@
package ru.betterend.blocks;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.state.properties.IntegerProperty;
import ru.betterend.blocks.basis.EndAnvilBlock;
import ru.betterend.item.EndAnvilItem;
import ru.betterend.item.material.EndToolMaterial;
import ru.betterend.registry.EndBlocks;
import ru.betterend.registry.EndItems;
public class AeterniumAnvil extends EndAnvilBlock {
protected final Item anvilItem;
public AeterniumAnvil() {
super(EndBlocks.AETERNIUM_BLOCK.defaultMaterialColor(), EndToolMaterial.AETERNIUM.getLevel());
this.anvilItem = EndItems.registerEndItem("aeternuim_anvil_item", new EndAnvilItem(this));
}
@Override
@ -25,9 +19,4 @@ public class AeterniumAnvil extends EndAnvilBlock {
}
return durability;
}
@Override
public Item asItem() {
return anvilItem;
}
}

View file

@ -10,6 +10,7 @@ import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.IntegerProperty;
import net.minecraft.world.level.material.MaterialColor;
import net.minecraft.world.level.storage.loot.LootContext;
import org.jetbrains.annotations.NotNull;
import ru.bclib.blocks.BaseAnvilBlock;
import ru.betterend.blocks.complex.MetalMaterial;
import ru.betterend.item.EndAnvilItem;
@ -20,12 +21,14 @@ import java.util.Objects;
public class EndAnvilBlock extends BaseAnvilBlock {
protected final int level;
protected final Item anvilItem;
protected IntegerProperty durability;
protected MetalMaterial metalMaterial;
protected int maxDurability;
public EndAnvilBlock(MaterialColor color, int level) {
super(color);
this.anvilItem = new EndAnvilItem(this);
this.level = level;
}
@ -63,16 +66,12 @@ public class EndAnvilBlock extends BaseAnvilBlock {
}
@Override
@SuppressWarnings("deprecation")
public Item asItem() {
if (metalMaterial != null) {
return metalMaterial.anvilItem;
}
return Item.byBlock(this);
return anvilItem;
}
@Override
public BlockState getStateForPlacement(BlockPlaceContext blockPlaceContext) {
public BlockState getStateForPlacement(@NotNull BlockPlaceContext blockPlaceContext) {
return Objects.requireNonNull(super.getStateForPlacement(blockPlaceContext)).setValue(durability, maxDurability);
}
@ -88,8 +87,7 @@ public class EndAnvilBlock extends BaseAnvilBlock {
public static BlockState applyDamage(BlockState blockState) {
Block anvilBlock = blockState.getBlock();
if (anvilBlock instanceof EndAnvilBlock) {
EndAnvilBlock endAnvilBlock = (EndAnvilBlock) anvilBlock;
if (anvilBlock instanceof EndAnvilBlock endAnvilBlock) {
IntegerProperty durability = endAnvilBlock.getDurability();
int damage = blockState.getValue(durability) - 1;
if (damage > 0) {

View file

@ -66,7 +66,6 @@ public class MetalMaterial {
public final ColoredMaterial bulb_lantern_colored;
public final Block anvilBlock;
public final Item anvilItem;
public final Item rawOre;
public final Item nugget;
@ -158,8 +157,7 @@ public class MetalMaterial {
leggings = EndItems.registerEndItem(name + "_leggings", new EndArmorItem(armor, EquipmentSlot.LEGS, itemSettings));
boots = EndItems.registerEndItem(name + "_boots", new EndArmorItem(armor, EquipmentSlot.FEET, itemSettings));
anvilBlock = EndBlocks.registerBlock(name + "_anvil", new EndAnvilBlock(this, block.defaultMaterialColor(), level));
anvilItem = EndItems.registerEndItem(name + "_anvil_item", new EndAnvilItem(anvilBlock));
anvilBlock = EndBlocks.registerAnvil(name + "_anvil", new EndAnvilBlock(this, block.defaultMaterialColor(), level));
if (hasOre) {
FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_ingot_furnace_ore", ore, ingot).checkConfig(Configs.RECIPE_CONFIG).setGroup("end_ingot").buildWithBlasting();

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(END_STONE_SMELTER), new REIInfusionCategory(INFUSION_RITUAL), new REIAnvilCategory(ANVILS));
registry.add(new REIAlloyingFuelCategory(), new REIAlloyingCategory(endStoneSmelter), new REIInfusionCategory(infusionRitual), new REIAnvilCategory(anvilsArray));
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);
}
}

View file

@ -26,8 +26,8 @@ public class SmithingRecipes {
SmithingTableRecipe.create(BetterEnd.MOD_ID, "aeternium_leggings").checkConfig(Configs.RECIPE_CONFIG).setResult(EndItems.AETERNIUM_LEGGINGS).setBase(EndBlocks.TERMINITE.leggings).setAddition(EndItems.AETERNIUM_FORGED_PLATE).build();
SmithingTableRecipe.create(BetterEnd.MOD_ID, "aeternium_boots").checkConfig(Configs.RECIPE_CONFIG).setResult(EndItems.AETERNIUM_BOOTS).setBase(EndBlocks.TERMINITE.boots).setAddition(EndItems.AETERNIUM_FORGED_PLATE).build();
SmithingTableRecipe.create(BetterEnd.MOD_ID, "thallasium_anvil_updrade").checkConfig(Configs.RECIPE_CONFIG).setResult(EndBlocks.TERMINITE.anvilBlock).setBase(EndBlocks.THALLASIUM.anvilBlock).setAddition(EndBlocks.TERMINITE.block).build();
SmithingTableRecipe.create(BetterEnd.MOD_ID, "terminite_anvil_updrade").checkConfig(Configs.RECIPE_CONFIG).setResult(EndBlocks.AETERNIUM_ANVIL).setBase(EndBlocks.TERMINITE.anvilBlock).setAddition(EndItems.AETERNIUM_INGOT).build();
SmithingTableRecipe.create(BetterEnd.MOD_ID, "thallasium_anvil_updrade").checkConfig(Configs.RECIPE_CONFIG).setResult(EndBlocks.TERMINITE.anvilBlock.asItem()).setBase(EndBlocks.THALLASIUM.anvilBlock.asItem()).setAddition(EndBlocks.TERMINITE.block).build();
SmithingTableRecipe.create(BetterEnd.MOD_ID, "terminite_anvil_updrade").checkConfig(Configs.RECIPE_CONFIG).setResult(EndBlocks.AETERNIUM_ANVIL.asItem()).setBase(EndBlocks.TERMINITE.anvilBlock.asItem()).setAddition(EndItems.AETERNIUM_INGOT).build();
SmithingTableRecipe.create(BetterEnd.MOD_ID, "armored_elytra").checkConfig(Configs.RECIPE_CONFIG).setResult(EndItems.ARMORED_ELYTRA).setBase(Items.ELYTRA).setAddition(EndItems.AETERNIUM_INGOT).build();
}

View file

@ -125,15 +125,7 @@ import ru.betterend.blocks.UmbrellaTreeClusterEmptyBlock;
import ru.betterend.blocks.UmbrellaTreeMembraneBlock;
import ru.betterend.blocks.UmbrellaTreeSaplingBlock;
import ru.betterend.blocks.VentBubbleColumnBlock;
import ru.betterend.blocks.basis.EndTerrainBlock;
import ru.betterend.blocks.basis.EndTripleTerrain;
import ru.betterend.blocks.basis.EndUnderwaterWallPlantBlock;
import ru.betterend.blocks.basis.EndWallMushroom;
import ru.betterend.blocks.basis.EndWallPlantBlock;
import ru.betterend.blocks.basis.FurBlock;
import ru.betterend.blocks.basis.PottableCropBlock;
import ru.betterend.blocks.basis.PottableLeavesBlock;
import ru.betterend.blocks.basis.StoneLanternBlock;
import ru.betterend.blocks.basis.*;
import ru.betterend.blocks.complex.ColoredMaterial;
import ru.betterend.blocks.complex.CrystalSubblocksMaterial;
import ru.betterend.blocks.complex.MetalMaterial;
@ -422,7 +414,7 @@ public class EndBlocks extends BlocksRegistry {
public static final Block END_STONE_SMELTER = registerBlock("end_stone_smelter", new EndStoneSmelter());
public static final Block ETERNAL_PEDESTAL = registerBlock("eternal_pedestal", new EternalPedestal());
public static final Block INFUSION_PEDESTAL = registerBlock("infusion_pedestal", new InfusionPedestal());
public static final Block AETERNIUM_ANVIL = registerBlock("aeternium_anvil", new AeterniumAnvil());
public static final Block AETERNIUM_ANVIL = registerAnvil("aeternium_anvil", new AeterniumAnvil());
// Technical
public static final Block END_PORTAL_BLOCK = registerEndBlockOnly("end_portal_block", new EndPortalBlock());
@ -437,6 +429,16 @@ public class EndBlocks extends BlocksRegistry {
return getModBlocks(BetterEnd.MOD_ID).stream().filter(BlockItem.class::isInstance).map(item -> ((BlockItem) item).getBlock()).collect(Collectors.toList());
}
public static Block registerAnvil(String name, EndAnvilBlock anvilBlock) {
if (!Configs.BLOCK_CONFIG.getBooleanRoot(name, true)) {
return anvilBlock;
}
BlocksRegistry registry = getBlockRegistry();
registry.registerBlockOnly(name, anvilBlock);
registry.registerBlockItem(BetterEnd.makeID(name + "_item"), anvilBlock.asItem());
return anvilBlock;
}
public static Block registerBlock(ResourceLocation id, Block block) {
if (!Configs.BLOCK_CONFIG.getBooleanRoot(id.getPath(), true)) {
return block;

View file

@ -15,11 +15,11 @@ public class CreativeTabs {
public static final CreativeModeTab TAB_ITEMS;
static {
TAB_BLOCKS = FabricItemGroupBuilder.create(BetterEnd.makeID("end_blocks")).icon(() -> new ItemStack(EndBlocks.END_MYCELIUM)).appendItems(stacks -> {
stacks.addAll(EndBlocks.getModBlocks().stream().map(ItemStack::new).collect(Collectors.toList()));
}).build();
TAB_ITEMS = FabricItemGroupBuilder.create(BetterEnd.makeID("end_items")).icon(() -> new ItemStack(EndItems.ETERNAL_CRYSTAL)).appendItems(stacks -> {
stacks.addAll(EndItems.getModItems().stream().map(ItemStack::new).collect(Collectors.toList()));
}).build();
TAB_BLOCKS = FabricItemGroupBuilder.create(BetterEnd.makeID("end_blocks")).icon(() -> new ItemStack(EndBlocks.END_MYCELIUM))
.appendItems(stacks -> stacks.addAll(EndBlocks.getModBlocks().stream().map(ItemStack::new).collect(Collectors.toList())))
.build();
TAB_ITEMS = FabricItemGroupBuilder.create(BetterEnd.makeID("end_items")).icon(() -> new ItemStack(EndItems.ETERNAL_CRYSTAL))
.appendItems(stacks -> stacks.addAll(EndItems.getModItems().stream().map(ItemStack::new).collect(Collectors.toList())))
.build();
}
}