mirror of
https://github.com/GTNewHorizons/Postea.git
synced 2026-11-12 16:37:38 +00:00
move internal stuff to a non-api endpoint and clean-up added structures
This commit is contained in:
1 parent
5d4b657868
commit
6d58c41dd8
7 files changed
+104
-71
No files matched your search
@@ -1,9 +1,7 @@
|
||||
package com.gtnewhorizons.postea;
|
||||
|
||||
import static com.gtnewhorizons.postea.api.BlockReplacementManager.blockReplacementMap;
|
||||
import static com.gtnewhorizons.postea.api.BlockReplacementManager.posteaMarkedIDs;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import com.gtnewhorizons.postea.utility.MissingMappingHandler;
|
||||
import com.gtnewhorizons.postea.utility.TransformerRegistry;
|
||||
|
||||
import cpw.mods.fml.common.Mod;
|
||||
import cpw.mods.fml.common.event.FMLLoadCompleteEvent;
|
||||
@@ -29,29 +27,22 @@ public class Postea {
|
||||
|
||||
@Mod.EventHandler
|
||||
public void onIdMappingsChanged(FMLModIdMappingEvent event) {
|
||||
posteaMarkedIDs.clear();
|
||||
for (String name : blockReplacementMap.keySet()) {
|
||||
Block block = Block.getBlockFromName(name);
|
||||
if (block != null) {
|
||||
int id = Block.getIdFromBlock(block);
|
||||
posteaMarkedIDs.add(id);
|
||||
}
|
||||
}
|
||||
TransformerRegistry.onIdMappingsChanged();
|
||||
}
|
||||
|
||||
@Mod.EventHandler
|
||||
public void onMissingMapping(FMLMissingMappingsEvent event) {
|
||||
PosteaMissingMappingHandler.onMissingMapping(event);
|
||||
MissingMappingHandler.onMissingMapping(event);
|
||||
}
|
||||
|
||||
@Mod.EventHandler
|
||||
public void onLoadCompleted(FMLLoadCompleteEvent event) {
|
||||
PosteaMissingMappingHandler.onLoadCompleted();
|
||||
MissingMappingHandler.onLoadCompleted();
|
||||
}
|
||||
|
||||
@Mod.EventHandler
|
||||
public void onServerStopping(FMLServerStoppingEvent event) {
|
||||
posteaMarkedIDs.clear();
|
||||
TransformerRegistry.onServerStopping();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,40 +4,20 @@ import java.util.function.BiFunction;
|
||||
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import com.google.common.collect.LinkedListMultimap;
|
||||
import com.gtnewhorizons.postea.PosteaMissingMappingHandler;
|
||||
import com.gtnewhorizons.postea.utility.BlockConversionInfo;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
|
||||
import com.gtnewhorizons.postea.utility.TransformerRegistry;
|
||||
|
||||
public class BlockReplacementManager {
|
||||
|
||||
public static final LinkedListMultimap<String, BiFunction<BlockConversionInfo, World, BlockConversionInfo>> blockReplacementMap = LinkedListMultimap
|
||||
.create();
|
||||
public static final IntOpenHashSet posteaMarkedIDs = new IntOpenHashSet();
|
||||
|
||||
/**
|
||||
* Adds a custom transformer for a given id.
|
||||
*
|
||||
* @param blockNameIn The id of the block to transform.
|
||||
* @param transformer The transformer to apply.
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
public static void addBlockReplacement(String blockNameIn,
|
||||
BiFunction<BlockConversionInfo, World, BlockConversionInfo> transformer) {
|
||||
PosteaMissingMappingHandler.createDummyBlockIfNeeded(blockNameIn);
|
||||
blockReplacementMap.put(blockNameIn, transformer);
|
||||
}
|
||||
|
||||
public static BlockConversionInfo getBlockReplacement(BlockConversionInfo blockConversionInfo, World world) {
|
||||
// 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 = PosteaMissingMappingHandler.getOriginalIDIfIDIsDummyID(blockConversionInfo.blockName);
|
||||
blockConversionInfo.blockName = originalName;
|
||||
for (BiFunction<BlockConversionInfo, World, BlockConversionInfo> transformer : blockReplacementMap
|
||||
.get(originalName)) {
|
||||
BlockConversionInfo result = transformer.apply(blockConversionInfo, world);
|
||||
if (result != null) return result;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// We need this to save reprocessing blocks.
|
||||
public static boolean blockNotConvertible(int blockID) {
|
||||
return !posteaMarkedIDs.contains(blockID);
|
||||
TransformerRegistry.addBlockReplacement(blockNameIn, transformer);
|
||||
}
|
||||
}
|
||||
@@ -1,28 +1,25 @@
|
||||
package com.gtnewhorizons.postea.api;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.function.Function;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
import com.google.common.collect.LinkedListMultimap;
|
||||
import com.gtnewhorizons.postea.PosteaMissingMappingHandler;
|
||||
import com.gtnewhorizons.postea.utility.MissingMappingHandler;
|
||||
import com.gtnewhorizons.postea.utility.TransformerRegistry;
|
||||
|
||||
public class ItemStackReplacementManager {
|
||||
|
||||
private static final LinkedListMultimap<String, Function<NBTTagCompound, NBTTagCompound>> replacementMap = LinkedListMultimap
|
||||
.create();
|
||||
|
||||
// Public API for converting ItemStacks.
|
||||
|
||||
/**
|
||||
* Adds a custom transformer for a given id.
|
||||
*
|
||||
* @param itemName The id of the block to transform.
|
||||
* @param transformer The transformer to apply.
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
public static void addItemReplacement(String itemName, Function<NBTTagCompound, NBTTagCompound> transformer) {
|
||||
PosteaMissingMappingHandler.createDummyItemIfNeeded(itemName);
|
||||
replacementMap.put(itemName, transformer);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public static Collection<Function<NBTTagCompound, NBTTagCompound>> getItemReplacement(String itemNameInternal) {
|
||||
return replacementMap.get(PosteaMissingMappingHandler.getOriginalIDIfIDIsDummyID(itemNameInternal));
|
||||
MissingMappingHandler.createDummyItemIfNeeded(itemName);
|
||||
TransformerRegistry.addItemReplacement(itemName, transformer);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.gtnewhorizons.postea.utility;
|
||||
|
||||
import static com.gtnewhorizons.postea.api.BlockReplacementManager.blockNotConvertible;
|
||||
import static com.gtnewhorizons.postea.utility.PosteaUtilities.getModListHash;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -15,8 +14,6 @@ import net.minecraft.world.World;
|
||||
import net.minecraft.world.chunk.Chunk;
|
||||
import net.minecraft.world.chunk.storage.ExtendedBlockStorage;
|
||||
|
||||
import com.gtnewhorizons.postea.PosteaMissingMappingHandler;
|
||||
import com.gtnewhorizons.postea.api.BlockReplacementManager;
|
||||
import com.gtnewhorizons.postea.api.TileEntityReplacementManager;
|
||||
import com.gtnewhorizons.postea.api.TriFunction;
|
||||
import com.gtnewhorizons.postea.compat.Compat;
|
||||
@@ -51,7 +48,7 @@ public class ChunkFixerUtility {
|
||||
// Skip air.
|
||||
if (blockId == AIR_ID) continue;
|
||||
// If this block has no registered Postea conversion, skip it.
|
||||
if (blockNotConvertible(blockId)) continue;
|
||||
if (TransformerRegistry.blockNotConvertible(blockId)) continue;
|
||||
|
||||
// Cache block names to improve performance, as findUniqueIdentifierFor is expensive.
|
||||
Block block = Block.getBlockById(blockId);
|
||||
@@ -71,13 +68,12 @@ public class ChunkFixerUtility {
|
||||
blockConversionInfo.y = y + sectionY;
|
||||
blockConversionInfo.z = z + chunkZPos + 1;
|
||||
|
||||
BlockConversionInfo output = BlockReplacementManager
|
||||
.getBlockReplacement(blockConversionInfo, world);
|
||||
BlockConversionInfo output = TransformerRegistry.getBlockReplacement(blockConversionInfo, world);
|
||||
|
||||
if (output != null) {
|
||||
access.setBlockId(x, y, z, output.blockID);
|
||||
access.setMeta(x, y, z, output.metadata);
|
||||
} else if (PosteaMissingMappingHandler.isDummyBlock(block)) {
|
||||
} else if (MissingMappingHandler.isDummyBlock(block)) {
|
||||
// clear out the slot if this is an unhandled dummy item.
|
||||
access.setBlockId(x, y, z, 0);
|
||||
access.setMeta(x, y, z, 0);
|
||||
|
||||
@@ -6,9 +6,7 @@ import java.util.function.Function;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
import com.gtnewhorizons.postea.PosteaMissingMappingHandler;
|
||||
import com.gtnewhorizons.postea.api.IDExtenderCompat;
|
||||
import com.gtnewhorizons.postea.api.ItemStackReplacementManager;
|
||||
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
|
||||
@@ -26,7 +24,7 @@ public abstract class ItemFixerUtility {
|
||||
String itemNameInternal = uuid.modId + ":" + uuid.name;
|
||||
|
||||
// abort early if no handlers
|
||||
Collection<Function<NBTTagCompound, NBTTagCompound>> handlers = ItemStackReplacementManager
|
||||
Collection<Function<NBTTagCompound, NBTTagCompound>> handlers = TransformerRegistry
|
||||
.getItemReplacement(itemNameInternal);
|
||||
if (handlers.isEmpty()) return;
|
||||
|
||||
@@ -38,7 +36,7 @@ public abstract class ItemFixerUtility {
|
||||
}
|
||||
|
||||
// if no handler overwrote anything on this stack, and it's a dummy, delete the stack.
|
||||
if (PosteaMissingMappingHandler.isDummyItem(item)) {
|
||||
if (MissingMappingHandler.isDummyItem(item)) {
|
||||
tag.removeTag("id");
|
||||
tag.removeTag("idExt");
|
||||
}
|
||||
|
||||
+5
-4
@@ -1,4 +1,4 @@
|
||||
package com.gtnewhorizons.postea;
|
||||
package com.gtnewhorizons.postea.utility;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@@ -10,12 +10,13 @@ import net.minecraft.block.material.Material;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
|
||||
import com.gtnewhorizons.postea.Postea;
|
||||
import com.gtnewhorizons.postea.compat.Compat;
|
||||
|
||||
import cpw.mods.fml.common.event.FMLMissingMappingsEvent;
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
|
||||
public abstract class PosteaMissingMappingHandler {
|
||||
public abstract class MissingMappingHandler {
|
||||
|
||||
enum MappingType {
|
||||
/** Tells the mapping logic to register an Item. */
|
||||
@@ -67,7 +68,7 @@ public abstract class PosteaMissingMappingHandler {
|
||||
private static final String DUMMY_ID_PREFIX_END = "d.";
|
||||
private static final String DUMMY_ID_PREFIX = DUMMY_ID_PREFIX_START + DUMMY_ID_PREFIX_END;
|
||||
|
||||
static void onLoadCompleted() {
|
||||
public static void onLoadCompleted() {
|
||||
for (Map.Entry<String, DummyMapping> kv : DUMMY_TARGET_TYPES.entrySet()) {
|
||||
DummyMapping mapping = kv.getValue();
|
||||
String originalId = kv.getKey();
|
||||
@@ -98,7 +99,7 @@ public abstract class PosteaMissingMappingHandler {
|
||||
DUMMY_TARGET_TYPES.clear();
|
||||
}
|
||||
|
||||
static void onMissingMapping(FMLMissingMappingsEvent event) {
|
||||
public static void onMissingMapping(FMLMissingMappingsEvent event) {
|
||||
for (FMLMissingMappingsEvent.MissingMapping mapping : event.getAll()) {
|
||||
if (mapping.name.startsWith(DUMMY_ID_PREFIX)) {
|
||||
// for when a migrator ceases being registered, likely due to a removal.
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.gtnewhorizons.postea.utility;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.function.Function;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import com.google.common.collect.LinkedListMultimap;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
|
||||
|
||||
public class TransformerRegistry {
|
||||
|
||||
private static final LinkedListMultimap<String, Function<NBTTagCompound, NBTTagCompound>> ITEM_REPLACEMENT_MAP = LinkedListMultimap
|
||||
.create();
|
||||
public static final LinkedListMultimap<String, BiFunction<BlockConversionInfo, World, BlockConversionInfo>> BLOCK_REPLACEMENT_MAP = LinkedListMultimap
|
||||
.create();
|
||||
public static final IntOpenHashSet POSTEA_MARKED_IDS = new IntOpenHashSet();
|
||||
|
||||
public static void addBlockReplacement(String blockNameIn,
|
||||
BiFunction<BlockConversionInfo, World, BlockConversionInfo> transformer) {
|
||||
MissingMappingHandler.createDummyBlockIfNeeded(blockNameIn);
|
||||
BLOCK_REPLACEMENT_MAP.put(blockNameIn, transformer);
|
||||
}
|
||||
|
||||
public static void addItemReplacement(String itemName, Function<NBTTagCompound, NBTTagCompound> transformer) {
|
||||
MissingMappingHandler.createDummyItemIfNeeded(itemName);
|
||||
ITEM_REPLACEMENT_MAP.put(itemName, transformer);
|
||||
}
|
||||
|
||||
public static void onIdMappingsChanged() {
|
||||
POSTEA_MARKED_IDS.clear();
|
||||
for (String name : BLOCK_REPLACEMENT_MAP.keySet()) {
|
||||
Block block = Block.getBlockFromName(name);
|
||||
if (block != null) {
|
||||
int id = Block.getIdFromBlock(block);
|
||||
POSTEA_MARKED_IDS.add(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void onServerStopping() {
|
||||
POSTEA_MARKED_IDS.clear();
|
||||
}
|
||||
|
||||
public static Collection<Function<NBTTagCompound, NBTTagCompound>> getItemReplacement(String itemNameInternal) {
|
||||
return ITEM_REPLACEMENT_MAP.get(MissingMappingHandler.getOriginalIDIfIDIsDummyID(itemNameInternal));
|
||||
}
|
||||
|
||||
public static BlockConversionInfo getBlockReplacement(BlockConversionInfo blockConversionInfo, World world) {
|
||||
// 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 = MissingMappingHandler.getOriginalIDIfIDIsDummyID(blockConversionInfo.blockName);
|
||||
blockConversionInfo.blockName = originalName;
|
||||
for (BiFunction<BlockConversionInfo, World, BlockConversionInfo> transformer : BLOCK_REPLACEMENT_MAP
|
||||
.get(originalName)) {
|
||||
BlockConversionInfo result = transformer.apply(blockConversionInfo, world);
|
||||
if (result != null) return result;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// We need this to save reprocessing blocks.
|
||||
public static boolean blockNotConvertible(int blockID) {
|
||||
return !POSTEA_MARKED_IDS.contains(blockID);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user