2024-01-15 15:10:18 +00:00
|
|
|
package com.gtnewhorizons.postea.api;
|
2023-10-23 14:02:09 +01:00
|
|
|
|
2023-12-20 02:00:48 +00:00
|
|
|
import java.util.function.BiFunction;
|
|
|
|
|
|
|
|
|
|
import net.minecraft.world.World;
|
2023-10-23 14:02:09 +01:00
|
|
|
|
2026-01-19 11:52:40 -05:00
|
|
|
import com.google.common.collect.LinkedListMultimap;
|
2026-01-20 11:00:33 -05:00
|
|
|
import com.gtnewhorizons.postea.PosteaMissingMappingHandler;
|
2024-01-15 15:10:18 +00:00
|
|
|
import com.gtnewhorizons.postea.utility.BlockConversionInfo;
|
2023-10-31 17:14:09 +00:00
|
|
|
|
2025-04-26 16:07:47 -07:00
|
|
|
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
|
|
|
|
|
|
2023-10-23 14:02:09 +01:00
|
|
|
public class BlockReplacementManager {
|
|
|
|
|
|
2026-01-19 11:52:40 -05:00
|
|
|
public static final LinkedListMultimap<String, BiFunction<BlockConversionInfo, World, BlockConversionInfo>> blockReplacementMap = LinkedListMultimap
|
|
|
|
|
.create();
|
2025-04-26 16:07:47 -07:00
|
|
|
public static final IntOpenHashSet posteaMarkedIDs = new IntOpenHashSet();
|
2023-10-23 14:02:09 +01:00
|
|
|
|
|
|
|
|
@SuppressWarnings("unused")
|
2023-10-31 17:14:09 +00:00
|
|
|
public static void addBlockReplacement(String blockNameIn,
|
2023-12-20 02:00:48 +00:00
|
|
|
BiFunction<BlockConversionInfo, World, BlockConversionInfo> transformer) {
|
2026-01-20 13:07:23 -05:00
|
|
|
PosteaMissingMappingHandler.createDummyBlockIfNeeded(blockNameIn);
|
|
|
|
|
blockReplacementMap.put(blockNameIn, transformer);
|
2023-10-23 14:02:09 +01:00
|
|
|
}
|
|
|
|
|
|
2023-12-20 02:00:48 +00:00
|
|
|
public static BlockConversionInfo getBlockReplacement(BlockConversionInfo blockConversionInfo, World world) {
|
2026-01-20 11:00:33 -05:00
|
|
|
// auto change the value in case a handler check it, we can't do anything about the block id
|
|
|
|
|
// but hopefully that's never going to be an issue
|
2026-01-20 13:07:23 -05:00
|
|
|
String originalName = PosteaMissingMappingHandler.getOriginalIDIfIDIsDummyID(blockConversionInfo.blockName);
|
|
|
|
|
blockConversionInfo.blockName = originalName;
|
2026-01-19 11:52:40 -05:00
|
|
|
for (BiFunction<BlockConversionInfo, World, BlockConversionInfo> transformer : blockReplacementMap
|
2026-01-20 11:00:33 -05:00
|
|
|
.get(originalName)) {
|
2026-01-19 11:52:40 -05:00
|
|
|
BlockConversionInfo result = transformer.apply(blockConversionInfo, world);
|
|
|
|
|
if (result != null) return result;
|
2023-10-30 01:28:47 +00:00
|
|
|
}
|
2026-01-19 11:52:40 -05:00
|
|
|
return null;
|
2023-10-23 14:02:09 +01:00
|
|
|
}
|
2023-10-30 01:28:47 +00:00
|
|
|
|
2024-01-12 20:43:34 +00:00
|
|
|
// We need this to save reprocessing blocks.
|
|
|
|
|
public static boolean blockNotConvertible(int blockID) {
|
|
|
|
|
return !posteaMarkedIDs.contains(blockID);
|
|
|
|
|
}
|
2023-10-23 14:02:09 +01:00
|
|
|
}
|