diff --git a/src/main/java/com/simibubi/create/foundation/data/BogeyStyleBuilder.java b/src/main/java/com/simibubi/create/foundation/data/BogeyStyleBuilder.java new file mode 100644 index 000000000..62d8ca496 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/data/BogeyStyleBuilder.java @@ -0,0 +1,75 @@ +package com.simibubi.create.foundation.data; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllRegistries; +import com.simibubi.create.AllSoundEvents; +import com.simibubi.create.content.logistics.trains.BogeyRenderer; +import com.simibubi.create.content.logistics.trains.IBogeyBlock; +import com.simibubi.create.content.logistics.trains.entity.BogeyStyle; + +import com.tterrag.registrate.AbstractRegistrate; + +import com.tterrag.registrate.builders.AbstractBuilder; + +import com.tterrag.registrate.builders.BuilderCallback; + +import com.tterrag.registrate.util.nullness.NonNullSupplier; + +import net.minecraft.core.particles.ParticleType; + +import net.minecraft.nbt.CompoundTag; + +import org.jetbrains.annotations.NotNull; + +import javax.annotation.ParametersAreNonnullByDefault; + +import java.util.EnumMap; +import java.util.Map; +import java.util.function.Supplier; + +@ParametersAreNonnullByDefault +public class BogeyStyleBuilder extends AbstractBuilder> { + private final T style; + + private NonNullSupplier> bogeyBlocks = () -> new EnumMap<>(BogeyRenderer.BogeySize.class); + private Supplier sounds; + private Supplier data; + private Supplier> particles; + + public static BogeyStyleBuilder create(AbstractRegistrate owner, P parent, String name, BuilderCallback callback, T style) { + return new BogeyStyleBuilder<>(owner, parent, name, callback, style); + } + + protected BogeyStyleBuilder(AbstractRegistrate owner, P parent, String name, BuilderCallback callback, T style) { + super(owner, parent, name, callback, AllRegistries.BOGEY_STYLES.get().getRegistryKey()); + this.style = style; + + bogeyBlocks.get().put(BogeyRenderer.BogeySize.SMALL, AllBlocks.SMALL_BOGEY.get()); + bogeyBlocks.get().put(BogeyRenderer.BogeySize.LARGE, AllBlocks.LARGE_BOGEY.get()); + } + + public BogeyStyleBuilder defaultData(CompoundTag data) { + this.data = () -> data; + return this; + } + + public BogeyStyleBuilder particles(ParticleType particleType) { + this.particles = () -> particleType; + return this; + } + + public BogeyStyleBuilder soundType(AllSoundEvents.SoundEntry soundEntry) { + this.sounds = () -> soundEntry; + return this; + } + + public BogeyStyleBuilder block(BogeyRenderer.BogeySize size, IBogeyBlock block) { + this.bogeyBlocks.get().put(size, block); + return this; + } + + @Override + protected @NotNull T createEntry() { + return style; + } +}