Name change
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# Mechanical Lemon Lib
|
||||
# Mechanicals Lib
|
||||
|
||||
## License
|
||||
- Certain sections of the code are from the Create mod, which is licensed under the MIT license. See Create's license for more information.
|
||||
@@ -11,13 +11,13 @@ parchment_minecraft_version = 1.21.1
|
||||
parchment_version = 2024.11.17
|
||||
|
||||
# Dependency Versions
|
||||
mod_id=mechanical_lemon_lib
|
||||
mod_name=MechanicalLemonLib
|
||||
mod_id=mechanicals
|
||||
mod_name=Mechanicals Lib
|
||||
mod_license=LGPL3
|
||||
mod_version=0.1.56
|
||||
mod_version=0.1.0
|
||||
mod_group_id=com.oierbravo
|
||||
mod_author=oierbravo
|
||||
mod_description=Mod Utility Library
|
||||
mod_description=Utility Library for Create Addons.
|
||||
|
||||
# dependency versions
|
||||
create_version = 6.0.2-32
|
||||
|
||||
@@ -12,4 +12,4 @@ plugins {
|
||||
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.7.0'
|
||||
}
|
||||
|
||||
rootProject.name = 'MechanicalLemonLib'
|
||||
rootProject.name = 'Mechanicals'
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
package com.oierbravo.mechanical_lemon_lib;
|
||||
|
||||
import com.mojang.logging.LogUtils;
|
||||
import com.oierbravo.mechanical_lemon_lib.register.LemonCreativeModeTabs;
|
||||
import com.oierbravo.mechanical_lemon_lib.register.MechanicalLemonRecipeRequirementTypes;
|
||||
import com.oierbravo.mechanical_lemon_lib.register.MechanicalLemonRegistries;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.neoforged.bus.api.IEventBus;
|
||||
import net.neoforged.fml.ModContainer;
|
||||
import net.neoforged.fml.common.Mod;
|
||||
import net.neoforged.neoforge.registries.*;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
@Mod(MechanicalLemonLib.MODID)
|
||||
public class MechanicalLemonLib {
|
||||
|
||||
public static final String MODID = "mechanical_lemon_lib";
|
||||
private static final Logger LOGGER = LogUtils.getLogger();
|
||||
|
||||
public MechanicalLemonLib(IEventBus modEventBus, ModContainer modContainer) {
|
||||
|
||||
LemonCreativeModeTabs.register(modEventBus);
|
||||
|
||||
modEventBus.addListener(this::newRegistries);
|
||||
MechanicalLemonRecipeRequirementTypes.init(modEventBus);
|
||||
}
|
||||
|
||||
private void newRegistries(NewRegistryEvent event) {
|
||||
MechanicalLemonRegistries.register(event);
|
||||
}
|
||||
|
||||
public static ResourceLocation asResource(String path) {
|
||||
return ResourceLocation.fromNamespaceAndPath(MODID, path);
|
||||
}
|
||||
public static Logger getLogger(){
|
||||
return LOGGER;
|
||||
}
|
||||
}
|
||||
@@ -1,159 +0,0 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.recipe;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
import net.minecraft.advancements.Advancement;
|
||||
import net.minecraft.advancements.AdvancementRequirements;
|
||||
import net.minecraft.advancements.AdvancementRewards;
|
||||
import net.minecraft.advancements.Criterion;
|
||||
import net.minecraft.advancements.critereon.RecipeUnlockedTrigger;
|
||||
import net.minecraft.data.recipes.RecipeBuilder;
|
||||
import net.minecraft.data.recipes.RecipeOutput;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.crafting.RecipeSerializer;
|
||||
import net.neoforged.neoforge.common.conditions.ICondition;
|
||||
import net.neoforged.neoforge.common.conditions.ModLoadedCondition;
|
||||
import net.neoforged.neoforge.common.conditions.NotCondition;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public abstract class BaseRecipeBuilder<R extends BaseRecipe<?,P>, P extends BaseRecipeParams> {
|
||||
protected final Map<String, Criterion<?>> criteria = new LinkedHashMap<>();
|
||||
|
||||
protected P params;
|
||||
protected ArrayList<IRecipeRequirement> recipeRequirements;
|
||||
protected ArrayList<ICondition> recipeConditions;
|
||||
|
||||
public BaseRecipeBuilder( ResourceLocation id){
|
||||
recipeRequirements = new ArrayList<>();
|
||||
recipeConditions = new ArrayList<>();
|
||||
}
|
||||
|
||||
public abstract R build();
|
||||
|
||||
public void build(Consumer<RecipeBuilder> consumer) {
|
||||
consumer.accept(new DataGenResult<>(build(), recipeConditions));
|
||||
}
|
||||
|
||||
public <BRP extends BaseRecipeBuilder<?,?>> BRP withRequirement(IRecipeRequirement requirement){
|
||||
//public <BRP extends BaseRecipeSerializer<?,?> BaseRecipeBuilder<R,P> withRequirement(IRecipeRequirement requirement){
|
||||
params.recipeRequirements.add(requirement);
|
||||
return ((BRP) this);
|
||||
}
|
||||
public <BRP extends BaseRecipeBuilder<?,?>> BRP withRequirements(List<IRecipeRequirement> pRecipeRequirements) {
|
||||
//public BaseRecipeBuilder<R,P> withRequirements(List<IRecipeRequirement> pRecipeRequirements) {
|
||||
params.recipeRequirements.addAll(pRecipeRequirements);
|
||||
return ((BRP) this);
|
||||
}
|
||||
|
||||
public BaseRecipeBuilder<R,P> whenModLoaded(String modid) {
|
||||
return withCondition(new ModLoadedCondition(modid));
|
||||
}
|
||||
|
||||
public BaseRecipeBuilder<R,P> whenModMissing(String modid) {
|
||||
return withCondition(new NotCondition(new ModLoadedCondition(modid)));
|
||||
}
|
||||
|
||||
public BaseRecipeBuilder<R,P> withCondition(ICondition condition) {
|
||||
recipeConditions.add(condition);
|
||||
return this;
|
||||
}
|
||||
public void save(RecipeOutput recipeOutput, ResourceLocation resourceLocation) {
|
||||
Advancement.Builder advancement = recipeOutput.advancement()
|
||||
.addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(resourceLocation))
|
||||
.rewards(AdvancementRewards.Builder.recipe(resourceLocation))
|
||||
.requirements(AdvancementRequirements.Strategy.OR);
|
||||
this.criteria.forEach(advancement::addCriterion);
|
||||
|
||||
recipeOutput.accept(resourceLocation, build(), advancement.build(params.id.withPrefix("recipes/")));
|
||||
}
|
||||
|
||||
public void save(RecipeOutput recipeOutput) {
|
||||
save(recipeOutput, params.id);
|
||||
}
|
||||
|
||||
public static class DataGenResult<S extends BaseRecipe<?,?>> implements RecipeBuilder {
|
||||
|
||||
private List<ICondition> recipeConditions;
|
||||
private BaseRecipeSerializer<S,?> serializer;
|
||||
private ResourceLocation id;
|
||||
protected final Map<String, Criterion<?>> criteria = new LinkedHashMap<>();
|
||||
@Nullable
|
||||
protected String group;
|
||||
|
||||
private S recipe;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public DataGenResult(S recipe, List<ICondition> recipeConditions) {
|
||||
this.recipe = recipe;
|
||||
this.recipeConditions = recipeConditions;
|
||||
ResourceLocation typeId = recipe.id;
|
||||
|
||||
if (!(recipe.getSerializer() instanceof BaseRecipeSerializer))
|
||||
throw new IllegalStateException("Cannot datagen Recipe of type: " + typeId);
|
||||
|
||||
this.id = ResourceLocation.fromNamespaceAndPath(recipe.id.getNamespace(),
|
||||
typeId.getPath() + "/" + recipe.id.getPath());
|
||||
this.serializer = (BaseRecipeSerializer<S, ?>) recipe.getSerializer();
|
||||
}
|
||||
|
||||
@Override
|
||||
public RecipeBuilder unlockedBy(String name, Criterion<?> criterion) {
|
||||
this.criteria.put(name, criterion);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RecipeBuilder group(@Nullable String s) {
|
||||
this.group = group;
|
||||
return this; }
|
||||
|
||||
@Override
|
||||
public Item getResult() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(RecipeOutput recipeOutput, ResourceLocation resourceLocation) {
|
||||
|
||||
}
|
||||
|
||||
/*@Override
|
||||
public void serializeRecipeData(JsonObject json) {
|
||||
serializer.write(json, recipe);
|
||||
if (recipeConditions.isEmpty())
|
||||
return;
|
||||
|
||||
JsonArray conds = new JsonArray();
|
||||
recipeConditions.forEach(c -> conds.add(CraftingHelper.serialize(c)));
|
||||
json.add("conditions", conds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RecipeSerializer<?> getType() {
|
||||
return serializer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonObject serializeAdvancement() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getAdvancementId() {
|
||||
return null;
|
||||
}*/
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.recipe;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.mojang.serialization.MapCodec;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
import net.minecraft.network.codec.StreamCodec;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.crafting.RecipeSerializer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public abstract class BaseRecipeSerializer<R extends BaseRecipe<?,?>, B extends BaseRecipeBuilder<R,?>> implements RecipeSerializer<R> {
|
||||
protected final List<String> enabledRecipeRequirements;
|
||||
|
||||
public BaseRecipeSerializer(List<String> pEnabledRecipeRequirements) {
|
||||
this.enabledRecipeRequirements = pEnabledRecipeRequirements;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.recipe;
|
||||
|
||||
public interface IBaseRecipeParams {
|
||||
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.recipe;
|
||||
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
|
||||
public interface IProcessBlockingRequirement {
|
||||
boolean test(Level pLevel, BlockEntity pBlockEntity);
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.recipe;
|
||||
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface IRecipeWithRequirements {
|
||||
|
||||
|
||||
ArrayList<IRecipeRequirement> getRecipeRequirements();
|
||||
//List<String> getEnabledRequirements();
|
||||
|
||||
|
||||
default Optional<IRecipeRequirement> getRequirement(RecipeRequirementType<?> type) {
|
||||
return getRecipeRequirements().stream().filter(iRecipeRequirement -> iRecipeRequirement.getType() == type).findFirst();
|
||||
}
|
||||
|
||||
boolean checkRequirements(Level pLevel, BlockEntity pBlockEntity);
|
||||
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.recipe;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.util.GsonHelper;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class RecipeRequirementsUtils {
|
||||
/*public static ArrayList<RecipeRequirementType<?>> checkRequirements(Map<String, IRecipeRequirement> pRecipeRequirements, BlockEntity pBlockEntity){
|
||||
ArrayList<RecipeRequirementType<?>> missingRequirements = new ArrayList<>();
|
||||
pRecipeRequirements.forEach((recipeRequirementType, recipeRequirement) -> {
|
||||
if(!recipeRequirement.test(pBlockEntity.getLevel(),pBlockEntity))
|
||||
missingRequirements.add(recipeRequirement.getType());
|
||||
});
|
||||
return missingRequirements;
|
||||
}*/
|
||||
|
||||
public static <BR extends IRecipeWithRequirements> List<Component> getRequirementsTooltips(BR recipe){
|
||||
if(recipe.getRecipeRequirements().isEmpty())
|
||||
return List.of();
|
||||
return recipe.getRecipeRequirements().stream().map(IRecipeRequirement::toTooltipComponent).toList();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.oierbravo.mechanicals;
|
||||
|
||||
import dev.engine_room.flywheel.lib.model.baked.PartialModel;
|
||||
|
||||
public class MechanicalPartials {
|
||||
public static final PartialModel SHAFT_QUARTER = block("shaft_quarter");
|
||||
private static PartialModel block(String path) {
|
||||
return PartialModel.of(Mechanicals.asResource("block/" + path));
|
||||
}
|
||||
public static void init() {
|
||||
// init static fields
|
||||
}
|
||||
}
|
||||
44
src/main/java/com/oierbravo/mechanicals/Mechanicals.java
Normal file
44
src/main/java/com/oierbravo/mechanicals/Mechanicals.java
Normal file
@@ -0,0 +1,44 @@
|
||||
package com.oierbravo.mechanicals;
|
||||
|
||||
import com.mojang.logging.LogUtils;
|
||||
import com.oierbravo.mechanicals.register.MechanicalCreativeModeTabs;
|
||||
import com.oierbravo.mechanicals.register.MechanicalRecipeRequirementTypes;
|
||||
import com.oierbravo.mechanicals.register.MechanicalRegistries;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.neoforged.bus.api.IEventBus;
|
||||
import net.neoforged.fml.ModContainer;
|
||||
import net.neoforged.fml.common.Mod;
|
||||
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
|
||||
import net.neoforged.neoforge.registries.*;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
@Mod(Mechanicals.MODID)
|
||||
public class Mechanicals {
|
||||
|
||||
public static final String MODID = "mechanicals";
|
||||
private static final Logger LOGGER = LogUtils.getLogger();
|
||||
|
||||
public Mechanicals(IEventBus modEventBus, ModContainer modContainer) {
|
||||
|
||||
MechanicalCreativeModeTabs.register(modEventBus);
|
||||
|
||||
modEventBus.addListener(this::newRegistries);
|
||||
MechanicalRecipeRequirementTypes.init(modEventBus);
|
||||
modEventBus.addListener(this::doClientStuff);
|
||||
|
||||
}
|
||||
private void doClientStuff(final FMLClientSetupEvent event) {
|
||||
MechanicalPartials.init();
|
||||
}
|
||||
|
||||
private void newRegistries(NewRegistryEvent event) {
|
||||
MechanicalRegistries.register(event);
|
||||
}
|
||||
|
||||
public static ResourceLocation asResource(String path) {
|
||||
return ResourceLocation.fromNamespaceAndPath(MODID, path);
|
||||
}
|
||||
public static Logger getLogger(){
|
||||
return LOGGER;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.blockEntity.behaviour;
|
||||
package com.oierbravo.mechanicals.foundation.blockEntity.behaviour;
|
||||
|
||||
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.BehaviourType;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.blockEntity.behaviour;
|
||||
package com.oierbravo.mechanicals.foundation.blockEntity.behaviour;
|
||||
|
||||
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.BehaviourType;
|
||||
@@ -1,9 +1,7 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.blockEntity.behaviour;
|
||||
package com.oierbravo.mechanicals.foundation.blockEntity.behaviour;
|
||||
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.IRecipeRequirement;
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.IRecipeWithRequirements;
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.RecipeRequirementType;
|
||||
import com.oierbravo.mechanical_lemon_lib.utility.LibLang;
|
||||
import com.oierbravo.mechanicals.foundation.recipe.IRecipeWithRequirements;
|
||||
import com.oierbravo.mechanicals.utility.LibLang;
|
||||
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.BehaviourType;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
|
||||
@@ -13,28 +11,21 @@ import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.nbt.ListTag;
|
||||
import net.minecraft.nbt.Tag;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
public class RecipeRequirementsBehaviour<R extends IRecipeWithRequirements> extends BlockEntityBehaviour {
|
||||
public static final BehaviourType<RecipeRequirementsBehaviour<?>> TYPE = new BehaviourType<>();
|
||||
|
||||
public RecipeRequirementsSpecifics<R> specifics;
|
||||
|
||||
private boolean meetsRequirements;
|
||||
private boolean meetsIngredients;
|
||||
private boolean hasEnoughOutput;
|
||||
private ArrayList<String> missingRequirements;
|
||||
|
||||
public <T extends SmartBlockEntity & RecipeRequirementsSpecifics<R>> RecipeRequirementsBehaviour(T te) {
|
||||
super(te);
|
||||
this.specifics = te;
|
||||
this.meetsIngredients = false;
|
||||
this.missingRequirements = new ArrayList<>();
|
||||
}
|
||||
|
||||
@@ -44,50 +35,38 @@ public class RecipeRequirementsBehaviour<R extends IRecipeWithRequirements> exte
|
||||
}
|
||||
|
||||
public boolean meetsRequirements(){
|
||||
return meetsRequirements;
|
||||
return !missingRequirements.isEmpty();
|
||||
}
|
||||
|
||||
public <T> boolean checkRequirements(Optional<R> pRecipe, Level pLevel, T pBlockEntity) {
|
||||
public <T> boolean checkRequirements(R pRecipe) {
|
||||
missingRequirements = new ArrayList<>();
|
||||
boolean result = true;
|
||||
|
||||
if(pRecipe.isEmpty() || !specifics.matchIngredients(pRecipe.get())){
|
||||
meetsIngredients = false;
|
||||
if(!specifics.matchesIngredients(pRecipe)){
|
||||
missingRequirements.add("ingredients");
|
||||
blockEntity.sendData();
|
||||
return false;
|
||||
}
|
||||
meetsIngredients = true;
|
||||
|
||||
|
||||
hasEnoughOutput = specifics.hasEnoughOutputSpace();
|
||||
if(!hasEnoughOutput){
|
||||
if(!specifics.hasEnoughOutputSpace()){
|
||||
missingRequirements.add("output");
|
||||
result = false;
|
||||
}
|
||||
|
||||
meetsRequirements = checkRequirements(pRecipe.get(), pLevel, specifics);
|
||||
if(!meetsRequirements){
|
||||
result = false;
|
||||
missingRequirements.addAll(pRecipe.getMissingRequirements((BlockEntity) specifics));
|
||||
|
||||
if(!missingRequirements.isEmpty()){
|
||||
blockEntity.sendData();
|
||||
return false;
|
||||
}
|
||||
|
||||
//meetsRequirements = meetsRequirements(pRecipe.get().getRecipeRequirements(), specifics);
|
||||
//if(!pRecipe.get().checkRequirements((BlockEntity) specifics)){
|
||||
|
||||
//}
|
||||
|
||||
blockEntity.sendData();
|
||||
return result;
|
||||
}
|
||||
private boolean checkRequirements(R pRecipe, Level pLevel, RecipeRequirementsSpecifics<R> pSpecifics){
|
||||
boolean result = true;
|
||||
for( IRecipeRequirement requirement : pRecipe.getRecipeRequirements()){
|
||||
if(!checkRequirement(requirement, pLevel, (BlockEntity) pSpecifics)){
|
||||
missingRequirements.add(requirement.getIdString());
|
||||
result = false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
private boolean checkRequirement(IRecipeRequirement value, Level pLevel, BlockEntity pSpecifics){
|
||||
return value.test(pLevel, pSpecifics);
|
||||
}
|
||||
public boolean addToGoggleTooltip(List<Component> tooltip, boolean isPlayerSneaking, boolean added) {
|
||||
if(missingRequirements.isEmpty())
|
||||
return false;
|
||||
@@ -124,6 +103,6 @@ public class RecipeRequirementsBehaviour<R extends IRecipeWithRequirements> exte
|
||||
|
||||
public interface RecipeRequirementsSpecifics<R extends IRecipeWithRequirements> {
|
||||
boolean hasEnoughOutputSpace();
|
||||
boolean matchIngredients(R recipe);
|
||||
boolean matchesIngredients(R recipe);
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,11 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.data;
|
||||
package com.oierbravo.mechanicals.foundation.data;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.mojang.serialization.Codec;
|
||||
import com.mojang.serialization.MapCodec;
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||
import com.tterrag.registrate.util.entry.FluidEntry;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.util.GsonHelper;
|
||||
import net.neoforged.neoforge.common.conditions.ICondition;
|
||||
import net.neoforged.neoforge.common.conditions.ModLoadedCondition;
|
||||
import net.neoforged.neoforge.fluids.BaseFlowingFluid;
|
||||
|
||||
public record FluidExistsCondition(String fluid) implements ICondition {
|
||||
public static MapCodec<FluidExistsCondition> CODEC = RecordCodecBuilder.mapCodec((builder) -> builder.group(Codec.STRING.fieldOf("fluid_exists").forGetter(FluidExistsCondition::fluid)).apply(builder, FluidExistsCondition::new));
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.energy;
|
||||
package com.oierbravo.mechanicals.foundation.energy;
|
||||
|
||||
|
||||
import net.neoforged.neoforge.energy.EnergyStorage;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.recipe;
|
||||
package com.oierbravo.mechanicals.foundation.recipe;
|
||||
|
||||
import net.minecraft.MethodsReturnNonnullByDefault;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
@@ -8,7 +8,6 @@ import net.neoforged.neoforge.common.conditions.ICondition;
|
||||
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
@MethodsReturnNonnullByDefault
|
||||
@@ -21,12 +20,9 @@ public abstract class BaseRecipe<T extends RecipeInput, P extends BaseRecipePara
|
||||
|
||||
protected ArrayList<ICondition> conditions;
|
||||
|
||||
//abstract public List<String> getEnabledRequirements();
|
||||
|
||||
public BaseRecipe(P params){
|
||||
this.id = params.id;
|
||||
recipeRequirements = params.recipeRequirements;
|
||||
//recipeRequirements.putAll(params.recipeRequirements);
|
||||
this.conditions = params.conditions;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
package com.oierbravo.mechanicals.foundation.recipe;
|
||||
|
||||
import net.minecraft.advancements.Advancement;
|
||||
import net.minecraft.advancements.AdvancementRequirements;
|
||||
import net.minecraft.advancements.AdvancementRewards;
|
||||
import net.minecraft.advancements.Criterion;
|
||||
import net.minecraft.advancements.critereon.RecipeUnlockedTrigger;
|
||||
import net.minecraft.data.recipes.RecipeOutput;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.neoforged.neoforge.common.conditions.ICondition;
|
||||
import net.neoforged.neoforge.common.conditions.ModLoadedCondition;
|
||||
import net.neoforged.neoforge.common.conditions.NotCondition;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public abstract class BaseRecipeBuilder<R extends BaseRecipe<?,P>, P extends BaseRecipeParams, BRB extends BaseRecipeBuilder<R,P,?>> {
|
||||
protected final Map<String, Criterion<?>> criteria = new LinkedHashMap<>();
|
||||
|
||||
protected P params;
|
||||
protected ArrayList<IRecipeRequirement> recipeRequirements;
|
||||
protected ArrayList<ICondition> recipeConditions;
|
||||
|
||||
public BaseRecipeBuilder( ResourceLocation id){
|
||||
recipeRequirements = new ArrayList<>();
|
||||
recipeConditions = new ArrayList<>();
|
||||
}
|
||||
|
||||
public abstract R build();
|
||||
|
||||
public BRB withRequirement(IRecipeRequirement requirement){
|
||||
params.recipeRequirements.add(requirement);
|
||||
return (BRB) this;
|
||||
}
|
||||
public BRB withRequirements(List<IRecipeRequirement> pRecipeRequirements) {
|
||||
params.recipeRequirements.addAll(pRecipeRequirements);
|
||||
return (BRB) this;
|
||||
}
|
||||
|
||||
public BRB whenModLoaded(String modid) {
|
||||
return withCondition(new ModLoadedCondition(modid));
|
||||
}
|
||||
|
||||
public BRB whenModMissing(String modid) {
|
||||
return withCondition(new NotCondition(new ModLoadedCondition(modid)));
|
||||
}
|
||||
|
||||
public BRB withCondition(ICondition condition) {
|
||||
recipeConditions.add(condition);
|
||||
return (BRB) this;
|
||||
}
|
||||
public void save(RecipeOutput recipeOutput, ResourceLocation resourceLocation) {
|
||||
Advancement.Builder advancement = recipeOutput.advancement()
|
||||
.addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(resourceLocation))
|
||||
.rewards(AdvancementRewards.Builder.recipe(resourceLocation))
|
||||
.requirements(AdvancementRequirements.Strategy.OR);
|
||||
this.criteria.forEach(advancement::addCriterion);
|
||||
|
||||
recipeOutput.accept(resourceLocation, build(), advancement.build(params.id.withPrefix("recipes/")));
|
||||
}
|
||||
|
||||
public void save(RecipeOutput recipeOutput) {
|
||||
save(recipeOutput, params.id);
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,9 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.recipe;
|
||||
package com.oierbravo.mechanicals.foundation.recipe;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.neoforged.neoforge.common.conditions.ICondition;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public abstract class BaseRecipeParams implements IBaseRecipeParams {
|
||||
public ResourceLocation id;
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.oierbravo.mechanicals.foundation.recipe;
|
||||
|
||||
public interface IBaseRecipeParams {
|
||||
|
||||
}
|
||||
@@ -1,10 +1,9 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.recipe;
|
||||
package com.oierbravo.mechanicals.foundation.recipe;
|
||||
|
||||
import com.mojang.serialization.Codec;
|
||||
import com.mojang.serialization.MapCodec;
|
||||
import com.oierbravo.mechanical_lemon_lib.register.MechanicalLemonRegistries;
|
||||
import com.oierbravo.mechanical_lemon_lib.utility.LibLang;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import com.oierbravo.mechanicals.register.MechanicalRegistries;
|
||||
import com.oierbravo.mechanicals.utility.LibLang;
|
||||
import net.createmod.catnip.data.Pair;
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.codec.ByteBufCodecs;
|
||||
@@ -13,15 +12,13 @@ import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
||||
public interface IRecipeRequirement {
|
||||
Codec<IRecipeRequirement> CODEC = MechanicalLemonRegistries.RECIPE_REQUIREMENT_TYPE.byNameCodec().dispatch(IRecipeRequirement::getType, RecipeRequirementType::codec);
|
||||
Codec<IRecipeRequirement> CODEC = MechanicalRegistries.RECIPE_REQUIREMENT_TYPE.byNameCodec().dispatch(IRecipeRequirement::getType, RecipeRequirementType::codec);
|
||||
Codec<List<IRecipeRequirement>> LIST_CODEC = CODEC.listOf();
|
||||
|
||||
StreamCodec<RegistryFriendlyByteBuf,IRecipeRequirement> STREAM_CODEC
|
||||
= ByteBufCodecs.registry(MechanicalLemonRegistries.Keys.RECIPE_REQUIREMENT)
|
||||
= ByteBufCodecs.registry(MechanicalRegistries.Keys.RECIPE_REQUIREMENT)
|
||||
.dispatch(IRecipeRequirement::getType, RecipeRequirementType::streamCodec);
|
||||
|
||||
StreamCodec<RegistryFriendlyByteBuf, List<IRecipeRequirement>> LIST_STREAM_CODEC =
|
||||
@@ -33,9 +30,10 @@ public interface IRecipeRequirement {
|
||||
String toString();
|
||||
RecipeRequirementType<?> getType();
|
||||
|
||||
default Component toTooltipComponent(){
|
||||
//return LibLang.translate("ui.recipe_requirement." + getIdString() + ".tooltip").newLine().component().append(toString());.component();
|
||||
return LibLang.translate("ui.recipe_requirement." + getIdString() + ".tooltip", toString()).newLine().space().add(Component.literal(toString())).component();
|
||||
default Pair<Component,Component> toTooltipComponent(){
|
||||
return Pair.of(LibLang.translate("ui.recipe_requirement." + getIdString() + ".tooltip.title").component(),
|
||||
LibLang.translate("ui.recipe_requirement." + getIdString() + ".tooltip.value", toString()).component()
|
||||
);
|
||||
};
|
||||
default Component toMissingComponent(){
|
||||
return LibLang.translate("ui.recipe_requirement." + getIdString() + ".missing").component();
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.oierbravo.mechanicals.foundation.recipe;
|
||||
|
||||
import net.createmod.catnip.data.Pair;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface IRecipeWithRequirements {
|
||||
|
||||
|
||||
ArrayList<IRecipeRequirement> getRecipeRequirements();
|
||||
|
||||
default Optional<IRecipeRequirement> getRequirement(RecipeRequirementType<?> type) {
|
||||
return getRecipeRequirements().stream().filter(iRecipeRequirement -> iRecipeRequirement.getType() == type).findFirst();
|
||||
}
|
||||
|
||||
default boolean meetsRequirements(BlockEntity pBlockEntity){
|
||||
for( IRecipeRequirement requirement : getRecipeRequirements()){
|
||||
if(!requirement.test(pBlockEntity.getLevel(), pBlockEntity)){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
};
|
||||
default List<String> getMissingRequirements(BlockEntity pBlockEntity){
|
||||
ArrayList<String> missingRequirements = new ArrayList<>();
|
||||
for( IRecipeRequirement requirement : getRecipeRequirements() ){
|
||||
if(!requirement.test(pBlockEntity.getLevel(), pBlockEntity)){
|
||||
missingRequirements.add(requirement.getIdString());
|
||||
}
|
||||
}
|
||||
return missingRequirements;
|
||||
};
|
||||
|
||||
default List<Pair<Component,Component>> getRequirementsTooltips(){
|
||||
if(getRecipeRequirements().isEmpty())
|
||||
return List.of();
|
||||
return getRecipeRequirements().stream().map(IRecipeRequirement::toTooltipComponent).toList();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.recipe;
|
||||
package com.oierbravo.mechanicals.foundation.recipe;
|
||||
|
||||
import com.mojang.serialization.MapCodec;
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.oierbravo.mechanicals.foundation.recipe;
|
||||
|
||||
public class RecipeRequirementsUtils {
|
||||
/*public static List<String> getMissingRequirements(List<IRecipeRequirement> pRecipeRequirements, BlockEntity pBlockEntity){
|
||||
ArrayList<String> missingRequirements = new ArrayList<>();
|
||||
for( IRecipeRequirement requirement : pRecipeRequirements ){
|
||||
if(!requirement.test(pBlockEntity.getLevel(), pBlockEntity)){
|
||||
missingRequirements.add(requirement.getIdString());
|
||||
}
|
||||
}
|
||||
return missingRequirements;
|
||||
}*/
|
||||
|
||||
/*public static <BR extends IRecipeWithRequirements> List<Pair<Component,Component>> getRequirementsTooltips(BR recipe){
|
||||
if(recipe.getRecipeRequirements().isEmpty())
|
||||
return List.of();
|
||||
return recipe.getRecipeRequirements().stream().map(IRecipeRequirement::toTooltipComponent).toList();
|
||||
}*/
|
||||
|
||||
}
|
||||
@@ -1,19 +1,15 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.recipe.requirements;
|
||||
package com.oierbravo.mechanicals.foundation.recipe.requirements;
|
||||
|
||||
import com.mojang.serialization.MapCodec;
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.IRecipeRequirement;
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.RecipeRequirementType;
|
||||
import com.oierbravo.mechanical_lemon_lib.register.MechanicalLemonRecipeRequirementTypes;
|
||||
import com.oierbravo.mechanicals.foundation.recipe.IRecipeRequirement;
|
||||
import com.oierbravo.mechanicals.foundation.recipe.RecipeRequirementType;
|
||||
import com.oierbravo.mechanicals.register.MechanicalRecipeRequirementTypes;
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
import net.minecraft.network.codec.ByteBufCodecs;
|
||||
import net.minecraft.network.codec.StreamCodec;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.biome.Biome;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
@@ -58,7 +54,7 @@ public record BiomeRequirement(ResourceKey<Biome> biomeResourceKey) implements I
|
||||
|
||||
@Override
|
||||
public RecipeRequirementType<?> getType() {
|
||||
return MechanicalLemonRecipeRequirementTypes.BIOME.get();
|
||||
return MechanicalRecipeRequirementTypes.BIOME.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1,26 +1,20 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.recipe.requirements;
|
||||
package com.oierbravo.mechanicals.foundation.recipe.requirements;
|
||||
|
||||
import com.mojang.serialization.Codec;
|
||||
import com.mojang.serialization.MapCodec;
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.IRecipeRequirement;
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.RecipeRequirementType;
|
||||
import com.oierbravo.mechanical_lemon_lib.register.MechanicalLemonRecipeRequirementTypes;
|
||||
import com.oierbravo.mechanicals.foundation.recipe.IRecipeRequirement;
|
||||
import com.oierbravo.mechanicals.foundation.recipe.RecipeRequirementType;
|
||||
import com.oierbravo.mechanicals.register.MechanicalRecipeRequirementTypes;
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
import net.minecraft.network.codec.ByteBufCodecs;
|
||||
import net.minecraft.network.codec.StreamCodec;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.tags.BiomeTags;
|
||||
import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.biome.Biome;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public record BiomeTagRequirement(TagKey<Biome> tag) implements IRecipeRequirement {
|
||||
public static String ID = "biome_tag";
|
||||
|
||||
@@ -66,7 +60,7 @@ public record BiomeTagRequirement(TagKey<Biome> tag) implements IRecipeRequireme
|
||||
|
||||
@Override
|
||||
public RecipeRequirementType<?> getType() {
|
||||
return MechanicalLemonRecipeRequirementTypes.BIOME_TAG.get();
|
||||
return MechanicalRecipeRequirementTypes.BIOME_TAG.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.recipe.requirements;
|
||||
package com.oierbravo.mechanicals.foundation.recipe.requirements;
|
||||
|
||||
import com.mojang.serialization.Codec;
|
||||
import com.mojang.serialization.MapCodec;
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.IRecipeRequirement;
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.RecipeRequirementType;
|
||||
import com.oierbravo.mechanical_lemon_lib.register.MechanicalLemonRecipeRequirementTypes;
|
||||
import com.oierbravo.mechanicals.foundation.recipe.IRecipeRequirement;
|
||||
import com.oierbravo.mechanicals.foundation.recipe.RecipeRequirementType;
|
||||
import com.oierbravo.mechanicals.register.MechanicalRecipeRequirementTypes;
|
||||
import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
import net.minecraft.network.codec.ByteBufCodecs;
|
||||
@@ -35,7 +35,7 @@ public record MaxSpeedRequirement(Float speed) implements IRecipeRequirement {
|
||||
|
||||
@Override
|
||||
public RecipeRequirementType<?> getType() {
|
||||
return MechanicalLemonRecipeRequirementTypes.MAX_SPEED.get();
|
||||
return MechanicalRecipeRequirementTypes.MAX_SPEED.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.recipe.requirements;
|
||||
package com.oierbravo.mechanicals.foundation.recipe.requirements;
|
||||
|
||||
import com.mojang.serialization.Codec;
|
||||
import com.mojang.serialization.MapCodec;
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.IRecipeRequirement;
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.RecipeRequirementType;
|
||||
import com.oierbravo.mechanical_lemon_lib.register.MechanicalLemonRecipeRequirementTypes;
|
||||
import com.oierbravo.mechanicals.foundation.recipe.IRecipeRequirement;
|
||||
import com.oierbravo.mechanicals.foundation.recipe.RecipeRequirementType;
|
||||
import com.oierbravo.mechanicals.register.MechanicalRecipeRequirementTypes;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
import net.minecraft.network.codec.ByteBufCodecs;
|
||||
@@ -41,7 +41,7 @@ public record MaxYRequirement(Integer maxY) implements IRecipeRequirement {
|
||||
|
||||
@Override
|
||||
public RecipeRequirementType<?> getType() {
|
||||
return MechanicalLemonRecipeRequirementTypes.MAX_Y.get();
|
||||
return MechanicalRecipeRequirementTypes.MAX_Y.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.recipe.requirements;
|
||||
package com.oierbravo.mechanicals.foundation.recipe.requirements;
|
||||
|
||||
import com.mojang.serialization.Codec;
|
||||
import com.mojang.serialization.MapCodec;
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.IRecipeRequirement;
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.RecipeRequirementType;
|
||||
import com.oierbravo.mechanical_lemon_lib.register.MechanicalLemonRecipeRequirementTypes;
|
||||
import com.oierbravo.mechanicals.foundation.recipe.IRecipeRequirement;
|
||||
import com.oierbravo.mechanicals.foundation.recipe.RecipeRequirementType;
|
||||
import com.oierbravo.mechanicals.register.MechanicalRecipeRequirementTypes;
|
||||
import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
import net.minecraft.network.codec.ByteBufCodecs;
|
||||
@@ -35,7 +35,7 @@ public record MinSpeedRequirement(Float speed) implements IRecipeRequirement {
|
||||
|
||||
@Override
|
||||
public RecipeRequirementType<?> getType() {
|
||||
return MechanicalLemonRecipeRequirementTypes.MIN_SPEED.get();
|
||||
return MechanicalRecipeRequirementTypes.MIN_SPEED.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.recipe.requirements;
|
||||
package com.oierbravo.mechanicals.foundation.recipe.requirements;
|
||||
|
||||
import com.mojang.serialization.Codec;
|
||||
import com.mojang.serialization.MapCodec;
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.IRecipeRequirement;
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.RecipeRequirementType;
|
||||
import com.oierbravo.mechanical_lemon_lib.register.MechanicalLemonRecipeRequirementTypes;
|
||||
import com.oierbravo.mechanicals.foundation.recipe.IRecipeRequirement;
|
||||
import com.oierbravo.mechanicals.foundation.recipe.RecipeRequirementType;
|
||||
import com.oierbravo.mechanicals.register.MechanicalRecipeRequirementTypes;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
import net.minecraft.network.codec.ByteBufCodecs;
|
||||
@@ -41,7 +41,7 @@ public record MinYRequirement(Integer minY) implements IRecipeRequirement {
|
||||
|
||||
@Override
|
||||
public RecipeRequirementType<?> getType() {
|
||||
return MechanicalLemonRecipeRequirementTypes.MIN_Y.get();
|
||||
return MechanicalRecipeRequirementTypes.MIN_Y.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.foundation.visual;
|
||||
package com.oierbravo.mechanicals.foundation.visual;
|
||||
|
||||
import com.simibubi.create.AllPartialModels;
|
||||
import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.oierbravo.mechanicals.foundation.visual;
|
||||
|
||||
import com.oierbravo.mechanicals.MechanicalPartials;
|
||||
import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
|
||||
import com.simibubi.create.content.kinetics.base.SingleAxisRotatingVisual;
|
||||
import dev.engine_room.flywheel.api.visualization.VisualizationContext;
|
||||
import dev.engine_room.flywheel.lib.model.Models;
|
||||
import net.minecraft.core.Direction;
|
||||
|
||||
public class QuarterShaftVisual<T extends KineticBlockEntity> extends SingleAxisRotatingVisual<T> {
|
||||
public QuarterShaftVisual(VisualizationContext context, T blockEntity, float partialTick, Direction direction) {
|
||||
super(context, blockEntity, partialTick, direction, Models.partial(MechanicalPartials.SHAFT_QUARTER));
|
||||
}
|
||||
public static <T extends KineticBlockEntity> QuarterShaftVisual<T> bottom(VisualizationContext context, T blockEntity, float partialTick) {
|
||||
return new QuarterShaftVisual<>(context, blockEntity, partialTick, Direction.NORTH);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.jade;
|
||||
package com.oierbravo.mechanicals.jade;
|
||||
|
||||
public interface IHavePercent {
|
||||
int getProgressPercent();
|
||||
@@ -1,8 +1,7 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.jade;
|
||||
package com.oierbravo.mechanicals.jade;
|
||||
|
||||
import com.oierbravo.mechanical_lemon_lib.utility.LibLang;
|
||||
import com.oierbravo.mechanicals.utility.LibLang;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import snownee.jade.api.BlockAccessor;
|
||||
import snownee.jade.api.IBlockComponentProvider;
|
||||
@@ -13,10 +12,10 @@ import snownee.jade.api.ui.BoxStyle;
|
||||
import snownee.jade.api.ui.IElementHelper;
|
||||
import snownee.jade.api.ui.ProgressStyle;
|
||||
|
||||
public class LemonProgressComponentProvider implements IBlockComponentProvider, IServerDataProvider<BlockAccessor> {
|
||||
public class MechanicalProgressComponentProvider implements IBlockComponentProvider, IServerDataProvider<BlockAccessor> {
|
||||
private final ResourceLocation UID;
|
||||
|
||||
public LemonProgressComponentProvider(ResourceLocation UID){
|
||||
public MechanicalProgressComponentProvider(ResourceLocation UID){
|
||||
this.UID = UID;
|
||||
}
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.register;
|
||||
package com.oierbravo.mechanicals.register;
|
||||
|
||||
import com.oierbravo.mechanical_lemon_lib.MechanicalLemonLib;
|
||||
import com.oierbravo.mechanicals.Mechanicals;
|
||||
import com.oierbravo.mechanicals.utility.LibLang;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.neoforged.bus.api.IEventBus;
|
||||
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.world.item.CreativeModeTab;
|
||||
import net.neoforged.neoforge.registries.DeferredHolder;
|
||||
import net.neoforged.neoforge.registries.DeferredRegister;
|
||||
|
||||
public class LemonCreativeModeTabs {
|
||||
public class MechanicalCreativeModeTabs {
|
||||
|
||||
private static final DeferredRegister<CreativeModeTab> TAB_REGISTER =
|
||||
DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MechanicalLemonLib.MODID);
|
||||
DeferredRegister.create(Registries.CREATIVE_MODE_TAB, Mechanicals.MODID);
|
||||
|
||||
public static final DeferredHolder<CreativeModeTab, CreativeModeTab> MAIN_TAB = TAB_REGISTER.register("main",
|
||||
() -> CreativeModeTab.builder()
|
||||
.title(Component.translatable("itemGroup.mechanical_lemon_lib"))
|
||||
.title(LibLang.translate("itemGroup.mechanicals").component())
|
||||
.icon(() -> Items.EGG.asItem().getDefaultInstance())
|
||||
.build());
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.register;
|
||||
package com.oierbravo.mechanicals.register;
|
||||
|
||||
import com.mojang.serialization.MapCodec;
|
||||
import com.oierbravo.mechanical_lemon_lib.MechanicalLemonLib;
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.IRecipeRequirement;
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.RecipeRequirementType;
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.requirements.*;
|
||||
import com.oierbravo.mechanicals.Mechanicals;
|
||||
import com.oierbravo.mechanicals.foundation.recipe.IRecipeRequirement;
|
||||
import com.oierbravo.mechanicals.foundation.recipe.RecipeRequirementType;
|
||||
import com.oierbravo.mechanicals.foundation.recipe.requirements.*;
|
||||
import net.minecraft.network.codec.StreamCodec;
|
||||
import net.neoforged.bus.api.IEventBus;
|
||||
import net.neoforged.neoforge.registries.DeferredRegister;
|
||||
@@ -13,9 +13,9 @@ import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class MechanicalLemonRecipeRequirementTypes {
|
||||
public class MechanicalRecipeRequirementTypes {
|
||||
public static final DeferredRegister<RecipeRequirementType<?>> RECIPE_REQUIREMENT_TYPES =
|
||||
DeferredRegister.create(MechanicalLemonRegistries.Keys.RECIPE_REQUIREMENT, MechanicalLemonLib.MODID);
|
||||
DeferredRegister.create(MechanicalRegistries.Keys.RECIPE_REQUIREMENT, Mechanicals.MODID);
|
||||
|
||||
public static final Supplier<RecipeRequirementType<MinSpeedRequirement>> MIN_SPEED =
|
||||
register(MinSpeedRequirement.ID, MinSpeedRequirement.CODEC, MinSpeedRequirement.STREAM_CODEC);
|
||||
@@ -1,23 +1,23 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.register;
|
||||
package com.oierbravo.mechanicals.register;
|
||||
|
||||
import com.oierbravo.mechanical_lemon_lib.MechanicalLemonLib;
|
||||
import com.oierbravo.mechanical_lemon_lib.foundation.recipe.RecipeRequirementType;
|
||||
import com.oierbravo.mechanicals.Mechanicals;
|
||||
import com.oierbravo.mechanicals.foundation.recipe.RecipeRequirementType;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.neoforged.neoforge.registries.NewRegistryEvent;
|
||||
import net.neoforged.neoforge.registries.RegistryBuilder;
|
||||
|
||||
public class MechanicalLemonRegistries {
|
||||
public class MechanicalRegistries {
|
||||
public static Registry<RecipeRequirementType<?>> RECIPE_REQUIREMENT_TYPE;// = (new RegistryBuilder(Keys.RECIPE_REQUIREMENT_TYPES)).create();
|
||||
|
||||
public MechanicalLemonRegistries() {
|
||||
public MechanicalRegistries() {
|
||||
}
|
||||
|
||||
static {
|
||||
RECIPE_REQUIREMENT_TYPE = new RegistryBuilder<>(MechanicalLemonRegistries.Keys.RECIPE_REQUIREMENT).sync(true).create();
|
||||
RECIPE_REQUIREMENT_TYPE = new RegistryBuilder<>(MechanicalRegistries.Keys.RECIPE_REQUIREMENT).sync(true).create();
|
||||
}
|
||||
public static final class Keys {
|
||||
public static final ResourceKey<Registry<RecipeRequirementType<?>>> RECIPE_REQUIREMENT = ResourceKey.createRegistryKey(MechanicalLemonLib.asResource("requirement"));
|
||||
public static final ResourceKey<Registry<RecipeRequirementType<?>>> RECIPE_REQUIREMENT = ResourceKey.createRegistryKey(Mechanicals.asResource("requirement"));
|
||||
|
||||
}
|
||||
public static void register(NewRegistryEvent event) {
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.utility;
|
||||
package com.oierbravo.mechanicals.utility;
|
||||
|
||||
import com.oierbravo.mechanical_lemon_lib.MechanicalLemonLib;
|
||||
import com.oierbravo.mechanicals.Mechanicals;
|
||||
import net.createmod.catnip.lang.Lang;
|
||||
import net.createmod.catnip.lang.LangBuilder;
|
||||
|
||||
@@ -9,7 +9,7 @@ public class LibLang extends Lang {
|
||||
super();
|
||||
}
|
||||
public static LangBuilder builder() {
|
||||
return new LangBuilder(MechanicalLemonLib.MODID);
|
||||
return new LangBuilder(Mechanicals.MODID);
|
||||
}
|
||||
public static LangBuilder translate(String langKey, Object... args) {
|
||||
return builder().translate(langKey, args);
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.oierbravo.mechanical_lemon_lib.utility;
|
||||
package com.oierbravo.mechanicals.utility;
|
||||
|
||||
import com.simibubi.create.api.stress.BlockStressValues;
|
||||
import com.tterrag.registrate.util.nullness.NonNullConsumer;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class LemonRegistrate {
|
||||
public class MechanicalRegistrate {
|
||||
public static <B extends Block> @NotNull NonNullConsumer<B> setImpact(double value) {
|
||||
return (block) -> {
|
||||
BlockStressValues.IMPACTS.register(block, () -> value);
|
||||
1
src/main/resources/META-INF/accesstransformer.cfg
Normal file
1
src/main/resources/META-INF/accesstransformer.cfg
Normal file
@@ -0,0 +1 @@
|
||||
public-f net.minecraft.data.recipes.RecipeProvider getName()Ljava/lang/String;
|
||||
@@ -7,7 +7,7 @@ version = "${mod_version}" #mandatory
|
||||
displayName = "${mod_name}" #mandatory
|
||||
#updateJSONURL="https://change.me.example.invalid/updates.json" #optional
|
||||
#displayURL="https://change.me.to.your.mods.homepage.example.invalid/" #optional
|
||||
#logoFile="mechanical_lemon_lib.png" #optional
|
||||
#logoFile="mechanicals_lib.png" #optional
|
||||
#credits="Thanks for this example mod goes to Java" #optional
|
||||
authors = "${mod_author}" #optional
|
||||
description = '''${mod_description}'''
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"mechanical_lemon_lib.ui.progress": "Progress: %d%%",
|
||||
"itemGroup.mechanical_lemon_lib": "Mechanicals",
|
||||
"mechanical_lemon_lib.ui.recipe.requirements.title": "Requirements:",
|
||||
"mechanical_lemon_lib.ui.recipe_requirement.none.tooltip": "No specific requirement",
|
||||
"mechanical_lemon_lib.ui.recipe_requirement.biome.tooltip": "Biome: %s",
|
||||
"mechanical_lemon_lib.ui.recipe_requirement.biome_tag.tooltip": "Biome: %s",
|
||||
"mechanical_lemon_lib.ui.recipe_requirement.min_y.tooltip": "Min Y: %s",
|
||||
"mechanical_lemon_lib.ui.recipe_requirement.max_y.tooltip": "Max Y: %s",
|
||||
"mechanical_lemon_lib.ui.recipe_requirement.min_speed.tooltip": "Min Speed: %s",
|
||||
"mechanical_lemon_lib.ui.recipe_requirement.max_speed.tooltip": "Max Speed: %s",
|
||||
"mechanical_lemon_lib.ui.recipe_requirement.biome.missing": "Incorrect biome",
|
||||
"mechanical_lemon_lib.ui.recipe_requirement.max_y.missing": "Y position Too high",
|
||||
"mechanical_lemon_lib.ui.recipe_requirement.min_y.missing": "Y position Too low",
|
||||
"mechanical_lemon_lib.ui.recipe_requirement.min_speed.missing": "Not enough speed",
|
||||
"mechanical_lemon_lib.ui.recipe_requirement.max_speed.missing": "Too fast",
|
||||
"mechanical_lemon_lib.ui.recipe_requirement.output.missing": "Output full or incompatible",
|
||||
"mechanical_lemon_lib.ui.recipe_requirement.ingredients.missing": "Missing ingredients"
|
||||
}
|
||||
25
src/main/resources/assets/mechanicals/lang/en_us.json
Normal file
25
src/main/resources/assets/mechanicals/lang/en_us.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"mechanicals.ui.progress": "Progress: %d%%",
|
||||
"itemGroup.mechanicals": "Mechanicals",
|
||||
"mechanicals.ui.recipe.requirements.title": "Requirements:",
|
||||
"mechanicals.ui.recipe_requirement.none.tooltip": "No specific requirement",
|
||||
"mechanicals.ui.recipe_requirement.biome.tooltip.title": "Biome:",
|
||||
"mechanicals.ui.recipe_requirement.biome.tooltip.value": "%s",
|
||||
"mechanicals.ui.recipe_requirement.biome_tag.tooltip.title": "Biome Tag:",
|
||||
"mechanicals.ui.recipe_requirement.biome_tag.tooltip.value": "#%s",
|
||||
"mechanicals.ui.recipe_requirement.min_y.tooltip.title": "Min Y:",
|
||||
"mechanicals.ui.recipe_requirement.min_y.tooltip.value": "%s",
|
||||
"mechanicals.ui.recipe_requirement.max_y.tooltip.title": "Max Y:",
|
||||
"mechanicals.ui.recipe_requirement.max_y.tooltip.value": "%s",
|
||||
"mechanicals.ui.recipe_requirement.min_speed.tooltip.title": "Min Speed:",
|
||||
"mechanicals.ui.recipe_requirement.min_speed.tooltip.value": "%s RPM",
|
||||
"mechanicals.ui.recipe_requirement.max_speed.tooltip.title": "Max Speed:",
|
||||
"mechanicals.ui.recipe_requirement.max_speed.tooltip.value": "%s RPM",
|
||||
"mechanicals.ui.recipe_requirement.biome.missing": "Incorrect biome",
|
||||
"mechanicals.ui.recipe_requirement.max_y.missing": "Y position Too high",
|
||||
"mechanicals.ui.recipe_requirement.min_y.missing": "Y position Too low",
|
||||
"mechanicals.ui.recipe_requirement.min_speed.missing": "Not enough speed",
|
||||
"mechanicals.ui.recipe_requirement.max_speed.missing": "Too fast",
|
||||
"mechanicals.ui.recipe_requirement.output.missing": "Output full or incompatible",
|
||||
"mechanicals.ui.recipe_requirement.ingredients.missing": "Missing ingredients"
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"parent": "block/block",
|
||||
"textures": {
|
||||
"0": "create:block/axis",
|
||||
"1": "create:block/axis_top",
|
||||
"particle": "create:block/axis"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"name": "Axis",
|
||||
"from": [6, 6, 12],
|
||||
"to": [10, 10, 16],
|
||||
"faces": {
|
||||
"north": {"uv": [6, 6, 10, 10], "rotation": 180, "texture": "#1"},
|
||||
"east": {"uv": [6, 0, 10, 4], "rotation": 270, "texture": "#0"},
|
||||
"south": {"uv": [6, 6, 10, 10], "texture": "#1"},
|
||||
"west": {"uv": [6, 0, 10, 4], "rotation": 90, "texture": "#0"},
|
||||
"up": {"uv": [6, 0, 10, 4], "rotation": 180, "texture": "#0"},
|
||||
"down": {"uv": [6, 0, 10, 4], "texture": "#0"}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"pack": {
|
||||
"description": "mechanical_lemon_lib resources",
|
||||
"pack_format": 15
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user