Skip to content

Commit

Permalink
Convert registration to actions
Browse files Browse the repository at this point in the history
Signed-off-by: TheSilkMiner <thesilkminer@outlook.com>
  • Loading branch information
TheSilkMiner committed May 23, 2022
1 parent 01d5838 commit 7224841
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 9 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.blamejared.contenttweaker.core.api.action;

import com.blamejared.contenttweaker.core.api.object.ObjectHolder;
import com.blamejared.contenttweaker.core.api.registry.RegistryButler;
import com.blamejared.contenttweaker.core.api.resource.ResourceManager;

import java.util.Objects;
import java.util.function.Consumer;

public final class RegisterObjectAction<T> implements ContentTweakerAction {
private final ObjectHolder<T> holder;
private final Consumer<ResourceManager> resourceProvider;

private RegisterObjectAction(final ObjectHolder<T> holder, final Consumer<ResourceManager> resourceProvider) {
this.holder = holder;
this.resourceProvider = resourceProvider;
}

public static <T> RegisterObjectAction<T> of(final ObjectHolder<T> holder, final Consumer<ResourceManager> resourceProvider) {
return new RegisterObjectAction<>(Objects.requireNonNull(holder), Objects.requireNonNull(resourceProvider));
}

@Override
public void apply() {
RegistryButler.get().register(this.holder);
this.resourceProvider.accept(ResourceManager.get());
}

@Override
public String describe() {
return "Registering object of type %s with name %s".formatted(this.holder.type(), this.holder.id());
}
}
Original file line number Diff line number Diff line change
@@ -1,38 +1,34 @@
package com.blamejared.contenttweaker.vanilla.zen.factory;

import com.blamejared.contenttweaker.core.api.ContentTweakerConstants;
import com.blamejared.contenttweaker.core.api.action.RegisterObjectAction;
import com.blamejared.contenttweaker.core.api.object.ObjectFactory;
import com.blamejared.contenttweaker.core.api.object.ObjectHolder;
import com.blamejared.contenttweaker.core.api.object.ObjectType;
import com.blamejared.contenttweaker.core.api.registry.RegistryButler;
import com.blamejared.contenttweaker.core.api.resource.ResourceManager;
import com.blamejared.contenttweaker.vanilla.api.zen.ContentTweakerVanillaConstants;
import com.blamejared.contenttweaker.vanilla.api.zen.builder.ItemBuilder;
import com.blamejared.contenttweaker.vanilla.object.VanillaObjectTypes;
import com.blamejared.contenttweaker.core.api.util.ClassArchitect;
import com.blamejared.contenttweaker.vanilla.api.zen.object.ItemReference;
import com.blamejared.crafttweaker.api.CraftTweakerAPI;
import com.blamejared.crafttweaker.api.annotation.ZenRegister;
import net.minecraft.world.item.Item;
import org.openzen.zencode.java.ZenCodeType;

import java.util.Objects;
import java.util.function.BiFunction;
import java.util.function.Consumer;

@ZenCodeType.Name(ContentTweakerVanillaConstants.VANILLA_FACTORY_PACKAGE + ".ItemFactory")
@ZenRegister(loaders = ContentTweakerConstants.CONTENT_LOADER_ID)
public final class ItemFactory implements ObjectFactory<Item> {
private static final ClassArchitect<ItemBuilder<?>> ARCHITECT = ClassArchitect.of(BiFunction.class);
private static final BiFunction<ObjectHolder<? extends Item>, Consumer<ResourceManager>, ItemReference> REFERENCE_TO_ITEM_FUNCTION = ItemFactory::convertAndRegister;
private static final BiFunction<ObjectHolder<? extends Item>, Consumer<ResourceManager>, ItemReference> CONVERT_AND_REGISTER = ItemFactory::convertAndRegister;

public ItemFactory() {}

private static <T extends Item> ItemReference convertAndRegister(final ObjectHolder<T> holder, final Consumer<ResourceManager> resourceProvider) {
// TODO("Convert to actions")
Objects.requireNonNull(holder);
Objects.requireNonNull(resourceProvider);
RegistryButler.get().register(holder);
resourceProvider.accept(ResourceManager.get());
CraftTweakerAPI.apply(RegisterObjectAction.of(holder, resourceProvider));
return ItemReference.of(holder.id());
}

Expand All @@ -43,6 +39,6 @@ public ObjectType<Item> type() {

@ZenCodeType.Method("typed")
public static <T extends ItemBuilder<T>> T typed(final Class<T> reifiedT) {
return ARCHITECT.construct(reifiedT, REFERENCE_TO_ITEM_FUNCTION);
return ARCHITECT.construct(reifiedT, CONVERT_AND_REGISTER);
}
}

0 comments on commit 7224841

Please sign in to comment.