-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathSpawnerControl.java
More file actions
118 lines (106 loc) · 5.06 KB
/
SpawnerControl.java
File metadata and controls
118 lines (106 loc) · 5.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package ladysnake.spawnercontrol;
import ladysnake.spawnercontrol.config.CustomSpawnersConfig;
import ladysnake.spawnercontrol.config.MSCConfig;
import ladysnake.spawnercontrol.config.SpawnerConfigHolder;
import ladysnake.spawnercontrol.controlledspawner.CapabilityControllableSpawner;
import ladysnake.spawnercontrol.controlledspawner.IControllableSpawner;
import ladysnake.spawnercontrol.controlledspawner.TileEntityControlledSpawner;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.renderer.block.statemap.StateMapperBase;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.common.capabilities.CapabilityManager;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import org.apache.logging.log4j.Logger;
import javax.annotation.Nonnull;
@Mod(
modid = SpawnerControl.MOD_ID,
name = SpawnerControl.MOD_NAME,
version = SpawnerControl.VERSION,
acceptedMinecraftVersions = SpawnerControl.ACCEPTED_VERSIONS,
guiFactory = "ladysnake.spawnercontrol.client.MSCConfigFactory",
dependencies = "required-after:forge@[14.23.2.2596,);",
acceptableRemoteVersions = "*"
)
public class SpawnerControl {
public static final String MOD_ID = "spawnercontrol";
static final String MOD_NAME = "Mob Spawner Control";
static final String VERSION = "@VERSION@";
static final String ACCEPTED_VERSIONS = "[1.12, 1.13)";
public static Logger LOGGER;
public static CreativeTabs creativeTab;
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event) {
LOGGER = event.getModLog();
CustomSpawnersConfig.configDir = event.getModConfigurationDirectory();
MSCConfig.portConfig();
CustomSpawnersConfig.initCustomConfig();
// register the capability storing extra spawner information
CapabilityManager.INSTANCE.register(IControllableSpawner.class, new CapabilityControllableSpawner.Storage(), CapabilityControllableSpawner.DefaultControllableSpawner::new);
// No need to register a tile entity that's not used anywhere
if (MSCConfig.customSpawners.length > 0)
GameRegistry.registerTileEntity(TileEntityControlledSpawner.class,new ResourceLocation("spawnercontrol:controlled_spawner"));
if (MSCConfig.makeCreativeTab) {
creativeTab = new CreativeTabs(MOD_ID) {
@Nonnull
@Override
public ItemStack createIcon() {
return new ItemStack(Blocks.MOB_SPAWNER);
}
};
}
}
@Mod.EventBusSubscriber
public static class RegistryHandler {
@SubscribeEvent
public static void onBlockRegister(RegistryEvent.Register<Block> event) {
CustomSpawnersConfig.getCustomSpawnerConfigs().stream()
.map(SpawnerConfigHolder::createBlock)
.forEach(event.getRegistry()::register);
}
@SubscribeEvent
public static void onItemRegister(RegistryEvent.Register<Item> event) {
CustomSpawnersConfig.getCustomSpawnerConfigs().stream()
.map(SpawnerConfigHolder::createItem)
.forEach(event.getRegistry()::register);
}
@SubscribeEvent
@SideOnly(Side.CLIENT)
public static void registerRenders(ModelRegistryEvent event) {
ModelResourceLocation mrl = new ModelResourceLocation("mob_spawner", "inventory");
for (SpawnerConfigHolder spawnerConfigHolder : CustomSpawnersConfig.getCustomSpawnerConfigs()) {
ModelLoader.setCustomModelResourceLocation(spawnerConfigHolder.getItem(), 0, mrl);
mapToSpawnerModel(spawnerConfigHolder.getBlock(), mrl);
}
}
/**
* Maps all states of a block to a custom {@link net.minecraft.client.renderer.block.model.IBakedModel}
*
* @param block the block to be mapped
*/
@SideOnly(Side.CLIENT)
private static void mapToSpawnerModel(Block block, ModelResourceLocation mrl) {
StateMapperBase ignoreState = new StateMapperBase() {
@Nonnull
@Override
protected ModelResourceLocation getModelResourceLocation(@Nonnull IBlockState iBlockState) {
return mrl;
}
};
ModelLoader.setCustomStateMapper(block, ignoreState);
}
}
}