Skip to content

Commit

Permalink
feat: template providers
Browse files Browse the repository at this point in the history
  • Loading branch information
Snownee committed Mar 24, 2024
1 parent 5a6bb04 commit f7a2ddf
Show file tree
Hide file tree
Showing 6 changed files with 167 additions and 0 deletions.
@@ -0,0 +1,16 @@
package snownee.jade.impl.template;

import net.minecraft.resources.ResourceLocation;
import snownee.jade.api.BlockAccessor;
import snownee.jade.api.IBlockComponentProvider;
import snownee.jade.api.TooltipPosition;

public final class TemplateBlockComponentProvider extends TemplateComponentProvider<BlockAccessor> implements IBlockComponentProvider {
public TemplateBlockComponentProvider(ResourceLocation uid) {
this(uid, false, true, TooltipPosition.BODY);
}

public TemplateBlockComponentProvider(ResourceLocation uid, boolean required, boolean enabledByDefault, int defaultPriority) {
super(uid, required, enabledByDefault, defaultPriority);
}
}
@@ -0,0 +1,10 @@
package snownee.jade.impl.template;

import net.minecraft.resources.ResourceLocation;
import snownee.jade.api.BlockAccessor;

public final class TemplateBlockServerDataProvider extends TemplateServerDataProvider<BlockAccessor> {
public TemplateBlockServerDataProvider(ResourceLocation uid) {
super(uid);
}
}
@@ -0,0 +1,70 @@
package snownee.jade.impl.template;

import java.util.function.BiConsumer;
import java.util.function.BiFunction;

import org.jetbrains.annotations.Nullable;

import net.minecraft.resources.ResourceLocation;
import snownee.jade.api.Accessor;
import snownee.jade.api.IComponentProvider;
import snownee.jade.api.ITooltip;
import snownee.jade.api.config.IPluginConfig;
import snownee.jade.api.ui.IElement;

/**
* A template implementation for script languages like KubeJS
*/
public abstract class TemplateComponentProvider<T extends Accessor<?>> implements IComponentProvider<T> {
private final ResourceLocation uid;
private final boolean required;
private final boolean enabledByDefault;
private final int defaultPriority;
private BiFunction<T, IElement, IElement> iconFunction = (accessor, currentIcon) -> null;
private BiConsumer<ITooltip, T> tooltipFunction = (tooltip, accessor) -> {};

protected TemplateComponentProvider(ResourceLocation uid, boolean required, boolean enabledByDefault, int defaultPriority) {
this.uid = uid;
this.required = required;
this.enabledByDefault = enabledByDefault;
this.defaultPriority = defaultPriority;
}

@Override
public boolean isRequired() {
return required;
}

@Override
public boolean enabledByDefault() {
return enabledByDefault;
}

@Override
public int getDefaultPriority() {
return defaultPriority;
}

@Override
public ResourceLocation getUid() {
return uid;
}

@Override
public @Nullable IElement getIcon(T accessor, IPluginConfig config, IElement currentIcon) {
return iconFunction.apply(accessor, currentIcon);
}

@Override
public void appendTooltip(ITooltip tooltip, T accessor, IPluginConfig config) {
tooltipFunction.accept(tooltip, accessor);
}

public void setIconFunction(BiFunction<T, IElement, IElement> iconFunction) {
this.iconFunction = iconFunction;
}

public void setTooltipFunction(BiConsumer<ITooltip, T> tooltipFunction) {
this.tooltipFunction = tooltipFunction;
}
}
@@ -0,0 +1,16 @@
package snownee.jade.impl.template;

import net.minecraft.resources.ResourceLocation;
import snownee.jade.api.EntityAccessor;
import snownee.jade.api.IEntityComponentProvider;
import snownee.jade.api.TooltipPosition;

public final class TemplateEntityComponentProvider extends TemplateComponentProvider<EntityAccessor> implements IEntityComponentProvider {
public TemplateEntityComponentProvider(ResourceLocation uid) {
this(uid, false, true, TooltipPosition.BODY);
}

public TemplateEntityComponentProvider(ResourceLocation uid, boolean required, boolean enabledByDefault, int defaultPriority) {
super(uid, required, enabledByDefault, defaultPriority);
}
}
@@ -0,0 +1,10 @@
package snownee.jade.impl.template;

import net.minecraft.resources.ResourceLocation;
import snownee.jade.api.EntityAccessor;

public final class TemplateEntityServerDataProvider extends TemplateServerDataProvider<EntityAccessor> {
public TemplateEntityServerDataProvider(ResourceLocation uid) {
super(uid);
}
}
@@ -0,0 +1,45 @@
package snownee.jade.impl.template;

import java.util.function.BiConsumer;
import java.util.function.Predicate;

import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
import snownee.jade.api.Accessor;
import snownee.jade.api.IServerDataProvider;

/**
* A template implementation for script languages like KubeJS
*/
public class TemplateServerDataProvider<T extends Accessor<?>> implements IServerDataProvider<T> {
private final ResourceLocation uid;
private BiConsumer<CompoundTag, T> dataFunction = (data, accessor) -> {};
private Predicate<T> shouldRequestData = accessor -> true;

protected TemplateServerDataProvider(ResourceLocation uid) {
this.uid = uid;
}

@Override
public ResourceLocation getUid() {
return uid;
}

@Override
public void appendServerData(CompoundTag data, T accessor) {
dataFunction.accept(data, accessor);
}

@Override
public boolean shouldRequestData(T accessor) {
return shouldRequestData.test(accessor);
}

public void setDataFunction(BiConsumer<CompoundTag, T> dataFunction) {
this.dataFunction = dataFunction;
}

public void setShouldRequestData(Predicate<T> shouldRequestData) {
this.shouldRequestData = shouldRequestData;
}
}

0 comments on commit f7a2ddf

Please sign in to comment.