diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/entity/BogeyStyle.java b/src/main/java/com/simibubi/create/content/logistics/trains/entity/BogeyStyle.java index 7613168a4..61bf38b3e 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/entity/BogeyStyle.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/entity/BogeyStyle.java @@ -3,8 +3,8 @@ package com.simibubi.create.content.logistics.trains.entity; import com.jozufozu.flywheel.api.MaterialManager; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.content.logistics.trains.BogeyRenderer; -import com.simibubi.create.content.logistics.trains.AbstractBogeyBlock; +import com.simibubi.create.content.logistics.trains.BogeyRenderer.CommonRenderer; import com.simibubi.create.content.logistics.trains.BogeySizes; import net.minecraft.nbt.CompoundTag; @@ -13,47 +13,48 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.level.block.Block; import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.ForgeRegistryEntry; -import net.minecraftforge.registries.IForgeRegistryEntry; import org.jetbrains.annotations.NotNull; -import java.util.EnumMap; -import java.util.HashMap; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.stream.Stream; -public final class BogeyStyle extends ForgeRegistryEntry implements IForgeRegistryEntry { - public Map blocks = new HashMap<>(); - public Component displayName; - public ResourceLocation soundType; - public CompoundTag defaultData; - public BogeyRenderer renderer; +public class BogeyStyle { + public final ResourceLocation name; + private final Optional commonRenderer; + private final Map sizes; + public final Component displayName; + public final ResourceLocation soundType; + public final CompoundTag defaultData; - public void addBlockForSize(BogeySizes.BogeySize size, T block) { - this.addBlockForSize(size, block.getRegistryName()); - } + public BogeyStyle(ResourceLocation name, Component displayName, ResourceLocation soundType, CompoundTag defaultData, + Map sizes, Optional commonRenderer) { + this.name = name; + this.displayName = displayName; + this.soundType = soundType; + this.defaultData = defaultData; - public void addBlockForSize(BogeySizes.BogeySize size, ResourceLocation location) { - blocks.put(size, location); + this.sizes = sizes; + this.commonRenderer = commonRenderer; } public Block getNextBlock(BogeySizes.BogeySize currentSize) { return Stream.iterate(currentSize.increment(), BogeySizes.BogeySize::increment) - .filter(size -> blocks.containsKey(size)) + .filter(sizes::containsKey) .findFirst() - .map(size -> ForgeRegistries.BLOCKS.getValue(blocks.get(size))) - .orElse(ForgeRegistries.BLOCKS.getValue(blocks.get(currentSize))); + .map(size -> ForgeRegistries.BLOCKS.getValue(sizes.get(size).block())) + .orElse(ForgeRegistries.BLOCKS.getValue(sizes.get(currentSize).block())); } public Block getBlockOfSize(BogeySizes.BogeySize size) { - return ForgeRegistries.BLOCKS.getValue(blocks.get(size)); + return ForgeRegistries.BLOCKS.getValue(sizes.get(size).block()); } public Set validSizes() { - return blocks.keySet(); + return sizes.keySet(); } @NotNull @@ -63,7 +64,26 @@ public final class BogeyStyle extends ForgeRegistryEntry implements return entry.getMainEvent(); } + public BogeyRenderer createRendererInstance(BogeySizes.BogeySize size) { + return this.getInWorldRenderInstance(size).createNewInstance(); + } + + public BogeyRenderer getInWorldRenderInstance(BogeySizes.BogeySize size) { + return this.sizes.get(size).renderer(); + } + + public Optional getInWorldCommonRenderInstance() { + return this.commonRenderer; + } + + public Optional getNewCommonRenderInstance() { + return this.getInWorldCommonRenderInstance().map(CommonRenderer::createNewInstance); + } + public BogeyInstance createInstance(CarriageBogey bogey, BogeySizes.BogeySize size, MaterialManager materialManager) { - return new BogeyInstance(bogey, this.renderer.newInstance(), size, materialManager); + return new BogeyInstance(bogey, this, size, materialManager); + } + + public record SizeData(ResourceLocation block, BogeyRenderer renderer) { } }