Files
Postea/src/main/java/com/gtnewhorizons/postea/api/BlockReplacementManager.java
T

49 lines
2.1 KiB
Java
Raw Normal View History

2024-01-15 15:10:18 +00:00
package com.gtnewhorizons.postea.api;
2026-01-20 11:00:33 -05:00
import java.util.HashMap;
2023-12-20 02:00:48 +00:00
import java.util.function.BiFunction;
import net.minecraft.world.World;
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
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
public class BlockReplacementManager {
2026-01-20 11:00:33 -05:00
private static final HashMap<String, String> dummyMap = new HashMap<>();
public static final LinkedListMultimap<String, BiFunction<BlockConversionInfo, World, BlockConversionInfo>> blockReplacementMap = LinkedListMultimap
.create();
public static final IntOpenHashSet posteaMarkedIDs = new IntOpenHashSet();
@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 11:00:33 -05:00
String newName = PosteaMissingMappingHandler.createDummyBlockIfNeeded(blockNameIn);
if (!newName.equals(blockNameIn)) {
dummyMap.put(newName, blockNameIn);
}
blockReplacementMap.put(newName, transformer);
}
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
String originalName = blockConversionInfo.blockName;
blockConversionInfo.blockName = dummyMap
.getOrDefault(blockConversionInfo.blockName, blockConversionInfo.blockName);
for (BiFunction<BlockConversionInfo, World, BlockConversionInfo> transformer : blockReplacementMap
2026-01-20 11:00:33 -05:00
.get(originalName)) {
BlockConversionInfo result = transformer.apply(blockConversionInfo, world);
if (result != null) return result;
2023-10-30 01:28:47 +00:00
}
return null;
}
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);
}
}