Adding my util classes

This commit is contained in:
Flanks255 2024-03-04 13:38:11 -06:00
parent 00418d267f
commit ebaae73dad
4 changed files with 136 additions and 0 deletions

View file

@ -0,0 +1,33 @@
package de.ellpeck.actuallyadditions.mod.util;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.neoforged.neoforge.capabilities.Capabilities;
import net.neoforged.neoforge.items.IItemHandler;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Optional;
public class CapHelper {
@Nonnull
public static Optional<IItemHandler> getItemHandler(@Nonnull Level level, @Nonnull BlockPos pos, @Nullable Direction side) {
BlockState blockState = level.getBlockState(pos);
if (blockState.hasBlockEntity()) {
BlockEntity blockEntity = level.getBlockEntity(pos);
if (blockEntity != null) {
return Optional.ofNullable(level.getCapability(Capabilities.ItemHandler.BLOCK, pos, level.getBlockState(pos), blockEntity, side));
}
}
return Optional.empty();
}
@Nonnull
public static Optional<IItemHandler> getItemHandler(ItemStack stack) {
return Optional.ofNullable(stack.getCapability(Capabilities.ItemHandler.ITEM));
}
}

View file

@ -0,0 +1,29 @@
package de.ellpeck.actuallyadditions.mod.util;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementHolder;
import net.minecraft.data.recipes.RecipeOutput;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.crafting.Recipe;
import net.neoforged.neoforge.common.conditions.ICondition;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class NoAdvRecipeOutput implements RecipeOutput {
private final RecipeOutput inner;
public NoAdvRecipeOutput(RecipeOutput output) {
inner = output;
}
@Nonnull
@Override
public Advancement.Builder advancement() {
return inner.advancement();
}
@Override
public void accept(@Nonnull ResourceLocation resourceLocation, @Nonnull Recipe<?> recipe, @Nullable AdvancementHolder advancementHolder, @Nonnull ICondition... iConditions) {
inner.accept(resourceLocation, recipe, null, iConditions);
}
}

View file

@ -0,0 +1,32 @@
package de.ellpeck.actuallyadditions.mod.util;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementHolder;
import net.minecraft.data.recipes.RecipeOutput;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.crafting.Recipe;
import net.neoforged.neoforge.common.conditions.ICondition;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.function.Function;
@SuppressWarnings("unchecked")
public class RecipeInjector<T extends Recipe<?>> implements RecipeOutput {
private final RecipeOutput inner;
private final Function<T, ? extends T> constructor;
public RecipeInjector(RecipeOutput output, Function<T, ? extends T> constructorIn) {
inner = output;
this.constructor = constructorIn;
}
@Nonnull
@Override
public Advancement.Builder advancement() {
return inner.advancement();
}
@Override
public void accept(@Nonnull ResourceLocation resourceLocation, @Nonnull Recipe<?> recipe, @Nullable AdvancementHolder advancementHolder, @Nonnull ICondition... iConditions) {
inner.accept(resourceLocation, constructor.apply((T) recipe), advancementHolder, iConditions);
}
}

View file

@ -0,0 +1,42 @@
package de.ellpeck.actuallyadditions.mod.util;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Player;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.event.entity.player.PlayerEvent;
import java.util.ArrayList;
public class RecipeUnlocker {
private static String modtag;
private static int version;
private static String MODID;
public static void register(String modid, IEventBus bus, int recipeversion) {
modtag = modid + "_unlocked";
version = recipeversion;
MODID = modid;
bus.addListener(RecipeUnlocker::onPlayerLoggedIn);
}
private static void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) {
Player player = event.getEntity();
CompoundTag tag = player.getPersistentData();
if (tag.contains(modtag) && tag.getInt(modtag) >= version) {
return;
}
if (player instanceof ServerPlayer) {
MinecraftServer server = player.getServer();
if (server != null) {
var recipes = new ArrayList<>(server.getRecipeManager().getRecipes());
recipes.removeIf((recipe -> !recipe.id().getNamespace().contains(MODID)));
player.awardRecipes(recipes);
tag.putInt(modtag, version);
}
}
}
}