Compare commits

...
14 Commits
324 changed files with 1385 additions and 1179 deletions

No files matched your search

+1 -1
View File
@@ -2,7 +2,7 @@
#Fri Jul 29 18:40:22 CDT 2016
version=r1.8
dir_output=../Build Output/Botania/
forge_version=12.18.1.2041
forge_version=12.18.1.2044
mc_version=1.10.2
dir_repo=./
build_number=315
@@ -15,11 +15,7 @@ import java.lang.reflect.Method;
public final class ClientMethodHandles {
public static final MethodHandle
renderPosX_getter, renderPosY_getter, renderPosZ_getter, // RenderManager
farPlaneDistance_getter,
hurtCameraEffect, setupViewBobbing, getFOVModifier,
enableLightmap, disableLightmap; // EntityRenderer
//prevEquippedProgress_getter, equippedProgress_getter; // ItemRenderer
renderPosX_getter, renderPosY_getter, renderPosZ_getter; // RenderManager
static {
try {
@@ -34,38 +30,6 @@ public final class ClientMethodHandles {
f = ReflectionHelper.findField(RenderManager.class, LibObfuscation.RENDERPOSZ);
f.setAccessible(true);
renderPosZ_getter = MethodHandles.publicLookup().unreflectGetter(f);
f = ReflectionHelper.findField(EntityRenderer.class, LibObfuscation.FAR_PLANE_DISTANCE);
f.setAccessible(true);
farPlaneDistance_getter = MethodHandles.publicLookup().unreflectGetter(f);
Method m = ReflectionHelper.findMethod(EntityRenderer.class, null, LibObfuscation.HURT_CAMERA_EFFECT, float.class);
m.setAccessible(true);
hurtCameraEffect = MethodHandles.publicLookup().unreflect(m);
m = ReflectionHelper.findMethod(EntityRenderer.class, null, LibObfuscation.SETUP_VIEW_BOBBING, float.class);
m.setAccessible(true);
setupViewBobbing = MethodHandles.publicLookup().unreflect(m);
m = ReflectionHelper.findMethod(EntityRenderer.class, null, LibObfuscation.ENABLE_LIGHTMAP);
m.setAccessible(true);
enableLightmap = MethodHandles.publicLookup().unreflect(m);
m = ReflectionHelper.findMethod(EntityRenderer.class, null, LibObfuscation.DISABLE_LIGHTMAP);
m.setAccessible(true);
disableLightmap = MethodHandles.publicLookup().unreflect(m);
m = ReflectionHelper.findMethod(EntityRenderer.class, null, LibObfuscation.GET_FOV_MODIFIER, float.class, boolean.class);
m.setAccessible(true);
getFOVModifier = MethodHandles.publicLookup().unreflect(m);
// f = ReflectionHelper.findField(ItemRenderer.class, LibObfuscation.PREV_EQUIPPED_PROGRESS);
// f.setAccessible(true);
// prevEquippedProgress_getter = MethodHandles.publicLookup().unreflectGetter(f);
//
// f = ReflectionHelper.findField(ItemRenderer.class, LibObfuscation.EQUIPPED_PROGRESS);
// f.setAccessible(true);
// equippedProgress_getter = MethodHandles.publicLookup().unreflectGetter(f);
} catch (IllegalAccessException e) {
Botania.LOGGER.fatal("Couldn't initialize client methodhandles! Things will be broken!");
e.printStackTrace();
@@ -10,12 +10,17 @@
*/
package vazkii.botania.client.core.handler;
import com.google.common.base.Optional;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.Entity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.common.property.IUnlistedProperty;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import org.lwjgl.opengl.ARBFragmentShader;
import org.lwjgl.opengl.ContextCapabilities;
@@ -27,6 +32,7 @@ import vazkii.botania.common.core.handler.ConfigHandler;
import vazkii.botania.common.core.handler.ManaNetworkHandler;
import vazkii.botania.common.lib.LibMisc;
import java.util.Map;
import java.util.UUID;
public final class DebugHandler {
@@ -39,7 +45,7 @@ public final class DebugHandler {
public static void onDrawDebugText(RenderGameOverlayEvent.Text event) {
World world = Minecraft.getMinecraft().theWorld;
if(Minecraft.getMinecraft().gameSettings.showDebugInfo) {
event.getLeft().add(null);
event.getLeft().add("");
String version = LibMisc.VERSION;
if(version.contains("GRADLE"))
version = "N/A";
@@ -70,6 +76,19 @@ public final class DebugHandler {
event.getLeft().add(" GL_ARB_multitexture: " + caps.GL_ARB_multitexture);
event.getLeft().add(" GL_ARB_texture_non_power_of_two: " + caps.GL_ARB_texture_non_power_of_two);
event.getLeft().add(" OpenGL13: " + caps.OpenGL13);
if (Minecraft.getMinecraft().objectMouseOver != null
&& Minecraft.getMinecraft().objectMouseOver.getBlockPos() != null) {
BlockPos pos = Minecraft.getMinecraft().objectMouseOver.getBlockPos();
IBlockState state = world.getBlockState(pos);
state = state.getActualState(world, pos);
state = state.getBlock().getExtendedState(state, world, pos);
if (state instanceof IExtendedBlockState) {
for (Map.Entry<IUnlistedProperty<?>, Optional<?>> e : ((IExtendedBlockState) state).getUnlistedProperties().entrySet()) {
event.getRight().add(e.getKey().getName() + ": " + e.getValue().orNull());
}
}
}
} else if(Minecraft.IS_RUNNING_ON_MAC)
event.getLeft().add(PREFIX + "SHIFT+CMD for context");
else event.getLeft().add(PREFIX + "SHIFT+CTRL for context");
@@ -9,36 +9,20 @@
package vazkii.botania.client.core.handler;
import net.minecraft.block.Block;
import net.minecraft.block.BlockDoublePlant;
import net.minecraft.block.BlockFlower;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.renderer.block.statemap.StateMap;
import net.minecraft.client.renderer.block.statemap.DefaultStateMapper;
import net.minecraft.client.renderer.block.statemap.IStateMapper;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.Item;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.client.model.ModelLoaderRegistry;
import net.minecraftforge.client.model.obj.OBJLoader;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import net.minecraftforge.fml.common.registry.RegistryDelegate;
import net.minecraftforge.fml.relauncher.ReflectionHelper;
import vazkii.botania.api.BotaniaAPIClient;
import vazkii.botania.api.item.IFloatingFlower;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.AltGrassVariant;
import vazkii.botania.api.state.enums.AltarVariant;
import vazkii.botania.api.state.enums.BiomeBrickVariant;
import vazkii.botania.api.state.enums.BiomeStoneVariant;
import vazkii.botania.api.state.enums.CrateVariant;
import vazkii.botania.api.state.enums.CustomBrickVariant;
import vazkii.botania.api.state.enums.DrumVariant;
import vazkii.botania.api.state.enums.LivingRockVariant;
import vazkii.botania.api.state.enums.LivingWoodVariant;
import vazkii.botania.api.state.enums.LuminizerVariant;
import vazkii.botania.api.state.enums.PlatformVariant;
import vazkii.botania.api.state.enums.PoolVariant;
import vazkii.botania.api.state.enums.PylonVariant;
import vazkii.botania.api.state.enums.SpreaderVariant;
import vazkii.botania.api.state.enums.StorageVariant;
import vazkii.botania.client.model.SpecialFlowerModel;
import vazkii.botania.client.render.IModelRegister;
import vazkii.botania.common.block.ModBlocks;
@@ -90,6 +74,7 @@ import vazkii.botania.common.lib.LibBlockNames;
import vazkii.botania.common.lib.LibMisc;
import java.util.Locale;
import java.util.Map;
import java.util.function.IntFunction;
public final class ModelHandler {
@@ -100,19 +85,13 @@ public final class ModelHandler {
registerSubtiles();
registerStateMappers();
registerStandardBlocks();
for (Block block : Block.REGISTRY) {
if (block.getRegistryName().getResourceDomain().equalsIgnoreCase(LibMisc.MOD_ID)
&& block instanceof IModelRegister)
for(Block block : Block.REGISTRY) {
if(block instanceof IModelRegister)
((IModelRegister) block).registerModels();
}
for (Item item : Item.REGISTRY) {
if (item.getRegistryName().getResourceDomain().equalsIgnoreCase(LibMisc.MOD_ID)
&& item instanceof IModelRegister)
for(Item item : Item.REGISTRY) {
if(item instanceof IModelRegister)
((IModelRegister) item).registerModels();
}
}
@@ -188,158 +167,10 @@ public final class ModelHandler {
BotaniaAPIClient.registerSubtileModel(SubTileBergamute.class, new ModelResourceLocation("botania:" + LibBlockNames.SUBTILE_BERGAMUTE));
}
private static void registerStandardBlocks() {
registerBlockCustomPath(ModBlocks.avatar, "avatar");
registerBlockCustomPath(ModBlocks.bellows, "bellows");
registerBlockCustomPath(ModBlocks.brewery, "brewery");
registerBlockVariantInventory(ModBlocks.corporeaCrystalCube);
registerBlockCustomPath(ModBlocks.corporeaIndex, "corporea_index");
registerBlockCustomPath(ModBlocks.hourglass, "hovering_hourglass");
registerBlockCustomPath(ModBlocks.teruTeruBozu, "teru_teru_bozu");
registerBlockVariantNormal(ModBlocks.alchemyCatalyst);
registerBlockVariant(ModBlocks.alfPortal, "state=off");
registerBlockCustomPath(ModFluffBlocks.alfglassPane, "alfglass_pane");
registerBlockVariantNormal(ModBlocks.bifrost);
registerBlockCustomPath(ModFluffBlocks.bifrostPane, "bifrost_pane");
registerBlockVariantNormal(ModBlocks.bifrostPerm);
registerBlockCustomPathMetas(ModFluffBlocks.biomeStoneWall, 8, i -> BiomeStoneVariant.values()[i + 8].getName() + "_wall");
registerBlockVariantNormal(ModBlocks.blazeBlock);
registerBlockVariant(ModBlocks.cacophonium, "powered=false");
registerBlockVariantNormal(ModBlocks.cellBlock);
registerBlockVariantNormal(ModBlocks.conjurationCatalyst);
registerBlockVariantNormal(ModBlocks.cocoon);
registerBlockVariant(ModBlocks.corporeaFunnel, "powered=false");
registerBlockVariant(ModBlocks.corporeaInterceptor, "powered=false");
registerBlockVariant(ModBlocks.corporeaRetainer, "powered=false");
registerBlockVariantNormal(ModBlocks.dirtPath);
registerBlockCustomPathMetas(ModBlocks.doubleFlower1, 8, i -> "double_flower_" + EnumDyeColor.byMetadata(i).getName());
registerBlockCustomPathMetas(ModBlocks.doubleFlower2, 8, i -> "double_flower_" + EnumDyeColor.byMetadata(i + 8).getName());
registerBlockVariantNormal(ModBlocks.distributor);
registerBlockCustomPath(ModFluffBlocks.dreamwoodWall, "dreamwood_wall");
registerBlockVariantNormal(ModBlocks.elfGlass);
registerBlockVariantNormal(ModBlocks.enchantedSoil);
registerBlockVariant(ModBlocks.enchanter, "facing=x");
registerBlockVariant(ModBlocks.enderEye, "powered=false");
registerBlockVariant(ModBlocks.felPumpkin, "facing=north");
registerBlockVariantInventory(ModBlocks.floatingSpecialFlower);
registerBlockCustomPathMetas(ModBlocks.flower, EnumDyeColor.values().length, i -> "flower_" + EnumDyeColor.byMetadata(i).getName());
registerBlockVariantNormal(ModBlocks.forestEye);
registerBlockCustomPath(ModBlocks.ghostRail, "ghost_rail");
registerBlockVariant(ModBlocks.incensePlate, "facing=south");
registerBlockVariant(ModBlocks.lightLauncher, "powered=false");
registerBlockCustomPath(ModFluffBlocks.livingrockWall, "livingrock_wall");
registerBlockCustomPath(ModFluffBlocks.livingwoodWall, "livingwood_wall");
registerBlockVariantNormal(ModBlocks.manaBomb);
registerBlockVariant(ModBlocks.manaDetector, "powered=false");
registerBlockVariantNormal(ModBlocks.manaGlass);
registerBlockCustomPath(ModFluffBlocks.managlassPane, "managlass_pane");
registerBlockVariantNormal(ModBlocks.manaVoid);
registerBlockCustomPathMetas(ModBlocks.mushroom, EnumDyeColor.values().length, i -> "mushroom_" + EnumDyeColor.byMetadata(i).getName());
// Explicit mapping needed because saved meta does not match EnumDyeColor
EnumDyeColor[] manualMapping = { EnumDyeColor.WHITE, EnumDyeColor.BLACK, EnumDyeColor.BLUE, EnumDyeColor.RED, EnumDyeColor.YELLOW, EnumDyeColor.GREEN };
registerBlockVariantMetas(ModFluffBlocks.pavement, 6, i -> "color=" + manualMapping[i].getName());
registerBlockVariant(ModBlocks.prism, "has_lens=false,powered=false");
registerBlockVariantNormal(ModBlocks.pistonRelay);
registerBlockVariantInventory(ModBlocks.pump);
registerBlockVariant(ModBlocks.redStringComparator, "facing=north");
registerBlockVariant(ModBlocks.redStringContainer, "facing=north");
registerBlockVariant(ModBlocks.redStringDispenser, "facing=north");
registerBlockVariant(ModBlocks.redStringFertilizer, "facing=north");
registerBlockVariant(ModBlocks.redStringInterceptor, "facing=north");
registerBlockVariant(ModBlocks.redStringRelay, "facing=north");
registerBlockVariantNormal(ModBlocks.rfGenerator);
registerBlockVariantNormal(ModBlocks.root);
registerBlockVariantNormal(ModBlocks.runeAltar);
registerBlockVariantNormal(ModBlocks.shimmerrock);
registerBlockVariantNormal(ModBlocks.shimmerwoodPlanks);
registerBlockCustomPathMetas(ModBlocks.shinyFlower, EnumDyeColor.values().length, i -> "glimmering_flower_" + EnumDyeColor.byMetadata(i).getName());
registerBlockVariant(ModBlocks.sparkChanger, "powered=false");
registerBlockVariantNormal(ModBlocks.spawnerClaw);
registerBlockVariantInventory(ModBlocks.specialFlower);
registerBlockVariant(ModBlocks.starfield, "powered=false");
registerBlockVariantNormal(ModBlocks.terraPlate);
registerBlockVariantNormal(ModBlocks.tinyPlanet);
registerBlockVariant(ModBlocks.tinyPotato, "facing=north");
registerBlockVariantNormal(ModBlocks.turntable);
// Register all metas to variant inventory, so the smartmodel can take over from there. See MiscellaneousIcons
registerItemAllMeta(Item.getItemFromBlock(ModBlocks.floatingFlower), EnumDyeColor.values().length);
// Item models which all use the same base model and recolored by render layer
registerBlockVariantMetas(ModBlocks.manaBeacon, EnumDyeColor.values().length, "normal");
registerBlockVariantMetas(ModBlocks.petalBlock, EnumDyeColor.values().length, "normal");
registerBlockVariantMetas(ModBlocks.unstableBlock, EnumDyeColor.values().length, "normal");
// Blocks which share models with their item, and have only one variant to switch over
registerVariantsDefaulted(ModBlocks.pylon, PylonVariant.class, "variant");
registerVariantsDefaulted(ModBlocks.altar, AltarVariant.class, "variant");
registerVariantsDefaulted(ModBlocks.altGrass, AltGrassVariant.class, "variant");
registerVariantsDefaulted(ModFluffBlocks.biomeStoneA, BiomeStoneVariant.class, "variant");
registerVariantsDefaulted(ModFluffBlocks.biomeStoneB, BiomeBrickVariant.class, "variant");
registerVariantsDefaulted(ModBlocks.customBrick, CustomBrickVariant.class, "variant");
registerVariantsDefaulted(ModBlocks.dreamwood, LivingWoodVariant.class, "variant");
registerVariantsDefaulted(ModBlocks.forestDrum, DrumVariant.class, "variant");
registerVariantsDefaulted(ModBlocks.lightRelay, LuminizerVariant.class, "powered=false,variant");
registerVariantsDefaulted(ModBlocks.livingrock, LivingRockVariant.class, "variant");
registerVariantsDefaulted(ModBlocks.livingwood, LivingWoodVariant.class, "variant");
registerVariantsDefaulted(ModBlocks.openCrate, CrateVariant.class, "pattern=none,variant");
registerVariantsDefaulted(ModBlocks.platform, PlatformVariant.class, "variant");
registerVariantsDefaulted(ModBlocks.pool, PoolVariant.class, "variant");
registerVariantsDefaulted(ModBlocks.spreader, SpreaderVariant.class, "variant");
// todo 1.8 this is temporary until animation API is done, currnetly item model textures will not match true spreader texture
registerVariantsDefaulted(ModBlocks.storage, StorageVariant.class, "variant");
}
private static void registerStateMappers() {
// Override to let custom model loader work, see SpecialFlowerModel
ModelLoader.setCustomStateMapper(ModBlocks.specialFlower, new StateMap.Builder().ignore(BotaniaStateProps.COLOR).ignore(((BlockFlower) ModBlocks.specialFlower).getTypeProperty()).build());
// Override to let smart models work, see MiscellaneousIcons
ModelLoader.setCustomStateMapper(ModBlocks.floatingSpecialFlower, new StateMap.Builder().ignore(BotaniaStateProps.COLOR).build());
ModelLoader.setCustomStateMapper(ModBlocks.floatingFlower, new StateMap.Builder().ignore(BotaniaStateProps.COLOR).build());
ModelLoader.setCustomStateMapper(ModBlocks.platform, new StateMap.Builder().ignore(BotaniaStateProps.PLATFORM_VARIANT).build());
// Ignore vanilla facing, variant in double flower
ModelLoader.setCustomStateMapper(ModBlocks.doubleFlower1, (new StateMap.Builder()).ignore(BlockDoublePlant.VARIANT, BlockDoublePlant.FACING).build());
ModelLoader.setCustomStateMapper(ModBlocks.doubleFlower2, (new StateMap.Builder()).ignore(BlockDoublePlant.VARIANT, BlockDoublePlant.FACING).build());
// Ignore color in pool, unstable cube, mana beacon, special flower, and petals (handled by Block.colorMultiplier)
ModelLoader.setCustomStateMapper(ModBlocks.pool, (new StateMap.Builder()).ignore(BotaniaStateProps.COLOR).build());
ModelLoader.setCustomStateMapper(ModBlocks.unstableBlock, (new StateMap.Builder()).ignore(BotaniaStateProps.COLOR).build());
ModelLoader.setCustomStateMapper(ModBlocks.manaBeacon, (new StateMap.Builder()).ignore(BotaniaStateProps.COLOR).build());
ModelLoader.setCustomStateMapper(ModBlocks.petalBlock, (new StateMap.Builder()).ignore(BotaniaStateProps.COLOR).build());
ModelLoader.setCustomStateMapper(ModBlocks.specialFlower, (new StateMap.Builder()).ignore(BotaniaStateProps.COLOR, ((BlockFlower) ModBlocks.specialFlower).getTypeProperty()).build());
// Ignore vanilla variant in flowers
ModelLoader.setCustomStateMapper(ModBlocks.flower, (new StateMap.Builder()).ignore(((BlockFlower) ModBlocks.flower).getTypeProperty()).build());
ModelLoader.setCustomStateMapper(ModBlocks.shinyFlower, (new StateMap.Builder()).ignore(((BlockFlower) ModBlocks.shinyFlower).getTypeProperty()).build());
ModelLoader.setCustomStateMapper(ModBlocks.buriedPetals, (new StateMap.Builder()).ignore(((BlockFlower) ModBlocks.buriedPetals).getTypeProperty()).build());
ModelLoader.setCustomStateMapper(ModBlocks.redStringDispenser, new StateMap.Builder().ignore(BotaniaStateProps.POWERED).build());
ModelLoader.setCustomStateMapper(ModBlocks.redStringInterceptor, new StateMap.Builder().ignore(BotaniaStateProps.POWERED).build());
}
private static <T extends Enum<T> & IStringSerializable> void registerVariantsDefaulted(Block b, Class<T> enumclazz, String variantHeader) {
Item item = Item.getItemFromBlock(b);
for (T e : enumclazz.getEnumConstants()) {
String baseName = ForgeRegistries.BLOCKS.getKey(b).toString();
String variantName = variantHeader + "=" + e.getName();
ModelLoader.setCustomModelResourceLocation(item, e.ordinal(), new ModelResourceLocation(baseName, variantName));
}
}
/**
* Registers all metas of the given item to models/item/registryname.json
*/
public static void registerItemAllMeta(Item item, int range) {
registerItemMetas(item, range, i -> item.getRegistryName().getResourcePath());
}
/**
* Registers each meta of an item to models/item/registryname<meta>.json
* Range is exclusive upper bound
*/
public static void registerItemAppendMeta(Item item, int maxExclusive, String loc) {
registerItemMetas(item, maxExclusive, i -> loc + i);
}
@@ -353,44 +184,42 @@ public final class ModelHandler {
}
}
// -- Registers the ItemBlock model to be the Block's model, of the specified variant -- //
private static void registerBlockVariantNormal(Block b) {
registerBlockVariant(b, "normal");
private static final Map<RegistryDelegate<Block>, IStateMapper> customStateMappers = ReflectionHelper.getPrivateValue(ModelLoader.class, null, "customStateMappers");
private static final DefaultStateMapper fallbackMapper = new DefaultStateMapper();
private static ModelResourceLocation getMrlForState(IBlockState state) {
return customStateMappers
.getOrDefault(state.getBlock().delegate, fallbackMapper)
.putStateModelLocations(state.getBlock())
.get(state);
}
public static void registerBlockToState(Block b, int meta, IBlockState state) {
ModelLoader.setCustomModelResourceLocation(
Item.getItemFromBlock(b),
meta,
getMrlForState(state)
);
}
public static void registerBlockToState(Block b, int maxExclusive) {
for(int i = 0; i < maxExclusive; i++)
registerBlockToState(b, i, b.getStateFromMeta(i));
}
// Registers the ItemBlock to models/item/<registryname>#inventory
private static void registerBlockVariantInventory(Block b) {
registerBlockVariant(b, "inventory");
}
public static void registerBlockVariant(Block b, String variant) {
registerBlockVariantMetas(b, 1, variant);
}
private static void registerBlockVariantMetas(Block b, int maxExclusive, String variant) {
registerBlockVariantMetas(b, maxExclusive, i -> variant);
}
public static void registerBlockVariantMetas(Block b, int maxExclusive, IntFunction<String> metaToVariant) {
Item item = Item.getItemFromBlock(b);
for (int i = 0; i < maxExclusive; i++) {
ModelLoader.setCustomModelResourceLocation(
item, i,
new ModelResourceLocation(item.getRegistryName(), metaToVariant.apply(i))
);
}
public static void registerInventoryVariant(Block b) {
ModelLoader.setCustomModelResourceLocation(
Item.getItemFromBlock(b), 0,
new ModelResourceLocation(b.getRegistryName(), "inventory"));
}
// Registers the ItemBlock to a custom path in models/item/itemblock/
private static void registerBlockCustomPath(Block b, String path) {
registerBlockCustomPathMetas(b, 1, path);
public static void registerCustomItemblock(Block b, String path) {
registerCustomItemblock(b, 1, i -> path);
}
private static void registerBlockCustomPathMetas(Block b, int maxExclusive, String path) {
registerBlockCustomPathMetas(b, maxExclusive, i -> path);
}
private static void registerBlockCustomPathMetas(Block b, int maxExclusive, IntFunction<String> metaToPath) {
public static void registerCustomItemblock(Block b, int maxExclusive, IntFunction<String> metaToPath) {
Item item = Item.getItemFromBlock(b);
for (int i = 0; i < maxExclusive; i++) {
ModelLoader.setCustomModelResourceLocation(
@@ -400,10 +229,5 @@ public final class ModelHandler {
}
}
public static void registerItemModel(Item i,int meta) {
ResourceLocation loc = i.getRegistryName();
ModelLoader.setCustomModelResourceLocation(i, meta, new ModelResourceLocation(loc, "inventory"));
}
private ModelHandler() {}
}
@@ -12,11 +12,14 @@ import net.minecraft.client.resources.I18n;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumHand;
import net.minecraft.util.EnumHandSide;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.client.event.RenderHandEvent;
import net.minecraftforge.client.event.RenderSpecificHandEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import org.lwjgl.util.glu.Project;
import vazkii.botania.client.gui.lexicon.GuiLexicon;
@@ -30,114 +33,59 @@ import vazkii.botania.common.item.ModItems;
// Hacky way to render 3D lexicon, will be reevaluated in the future.
public class RenderLexicon {
final ModelBook model = new ModelBook();
final ResourceLocation texture = new ResourceLocation(LibResources.MODEL_LEXICA);
private final ModelBook model = new ModelBook();
private final ResourceLocation texture = new ResourceLocation(LibResources.MODEL_LEXICA);
@SubscribeEvent
public void renderItem(RenderHandEvent evt) {
Minecraft mc;
if(true || !ConfigHandler.lexicon3dModel || mc.gameSettings.thirdPersonView != 0 || !PlayerHelper.hasHeldItem(mc.thePlayer, ModItems.lexicon))
public void renderItem(RenderSpecificHandEvent evt) {
Minecraft mc = Minecraft.getMinecraft();
if(!ConfigHandler.lexicon3dModel
|| mc.gameSettings.thirdPersonView != 0
|| mc.thePlayer.getHeldItem(evt.getHand()) == null
|| mc.thePlayer.getHeldItem(evt.getHand()).getItem() != ModItems.lexicon)
return;
evt.setCanceled(true);
try {
// Called immediately before EntityRenderer.renderHand
GlStateManager.clear(256);
// Begin copy EntityRenderer.renderHand
GlStateManager.matrixMode(5889);
GlStateManager.loadIdentity();
float f = 0.07F;
if (mc.gameSettings.anaglyph)
{
GlStateManager.translate((float)(-(/*xOffset*/0 * 2 - 1)) * f, 0.0F, 0.0F);
}
float fovModifier = ((float) ClientMethodHandles.getFOVModifier.invokeExact(mc.entityRenderer, ClientTickHandler.partialTicks, false));
float farPlane = ((float) ClientMethodHandles.farPlaneDistance_getter.invokeExact(mc.entityRenderer));
Project.gluPerspective(fovModifier, (float)mc.displayWidth / (float)mc.displayHeight, 0.05F, farPlane * 2.0F);
GlStateManager.matrixMode(5888);
GlStateManager.loadIdentity();
if (mc.gameSettings.anaglyph)
{
GlStateManager.translate((float)(/*xOffset*/0 * 2 - 1) * 0.1F, 0.0F, 0.0F);
}
GlStateManager.pushMatrix();
ClientMethodHandles.hurtCameraEffect.invokeExact(mc.entityRenderer, ClientTickHandler.partialTicks);
if (mc.gameSettings.viewBobbing)
{
ClientMethodHandles.setupViewBobbing.invokeExact(mc.entityRenderer, ClientTickHandler.partialTicks);
}
boolean flag = mc.getRenderViewEntity() instanceof EntityLivingBase && ((EntityLivingBase)mc.getRenderViewEntity()).isPlayerSleeping();
if (mc.gameSettings.thirdPersonView == 0 && !flag && !mc.gameSettings.hideGUI && !mc.playerController.isSpectator())
{
ClientMethodHandles.enableLightmap.invokeExact(mc.entityRenderer);
renderItemInFirstPerson();
ClientMethodHandles.disableLightmap.invokeExact(mc.entityRenderer);
}
GlStateManager.popMatrix();
if (mc.gameSettings.thirdPersonView == 0 && !flag)
{
mc.getItemRenderer().renderOverlays(ClientTickHandler.partialTicks);
ClientMethodHandles.hurtCameraEffect.invokeExact(mc.entityRenderer, ClientTickHandler.partialTicks);
}
if (mc.gameSettings.viewBobbing)
{
ClientMethodHandles.setupViewBobbing.invokeExact(mc.entityRenderer, ClientTickHandler.partialTicks);
}
// End EntityRenderer.renderHand copy
renderItemInFirstPerson(mc.thePlayer, evt.getPartialTicks(), evt.getInterpolatedPitch(), evt.getHand(), evt.getSwingProgress(), evt.getItemStack(), evt.getEquipProgress());
} catch (Throwable throwable) {
Botania.LOGGER.warn("Failed to render lexicon");
}
}
private void renderItemInFirstPerson() throws Throwable {
private void renderItemInFirstPerson(AbstractClientPlayer player, float partialTicks, float interpPitch, EnumHand hand, float swingProgress, ItemStack stack, float equipProgress) throws Throwable {
// Cherry picked from ItemRenderer.renderItemInFirstPerson
float prevEquippedProgress = 0;//((float) ClientMethodHandles.prevEquippedProgress_getter.invokeExact(Minecraft.getMinecraft().getItemRenderer()));
float equippedProgress = 0;//((float) ClientMethodHandles.equippedProgress_getter.invokeExact(Minecraft.getMinecraft().getItemRenderer()));
float f = 1.0F - (prevEquippedProgress + (equippedProgress - prevEquippedProgress) * ClientTickHandler.partialTicks);
EntityPlayerSP player = Minecraft.getMinecraft().thePlayer;
float f1 = player.getSwingProgress(ClientTickHandler.partialTicks);
float f2 = player.prevRotationPitch + (player.rotationPitch - player.prevRotationPitch) * ClientTickHandler.partialTicks;
float f3 = player.prevRotationYaw + (player.rotationYaw - player.prevRotationYaw) * ClientTickHandler.partialTicks;
this.func_178101_a(f2, f3);
this.func_178109_a(player);
this.func_178110_a(player, ClientTickHandler.partialTicks);
GlStateManager.enableRescaleNormal();
boolean flag = hand == EnumHand.MAIN_HAND;
EnumHandSide enumhandside = flag ? player.getPrimaryHand() : player.getPrimaryHand().opposite();
GlStateManager.pushMatrix();
this.func_178105_d(f1);
this.transformFirstPersonItem(f, f1);
doRender();
boolean flag1 = enumhandside == EnumHandSide.RIGHT;
float f = -0.4F * MathHelper.sin(MathHelper.sqrt_float(swingProgress) * (float)Math.PI);
float f1 = 0.2F * MathHelper.sin(MathHelper.sqrt_float(swingProgress) * ((float)Math.PI * 2F));
float f2 = -0.2F * MathHelper.sin(swingProgress * (float)Math.PI);
int i = flag1 ? 1 : -1;
GlStateManager.translate((float)i * f, f1, f2);
this.transformSideFirstPerson(enumhandside, equipProgress);
this.transformFirstPerson(enumhandside, swingProgress);
doRender(enumhandside, partialTicks, stack);
GlStateManager.popMatrix();
GlStateManager.disableRescaleNormal();
RenderHelper.disableStandardItemLighting();
}
private void doRender() {
private void doRender(EnumHandSide side, float partialTicks, ItemStack stack) {
Minecraft mc = Minecraft.getMinecraft();
GlStateManager.pushMatrix();
Minecraft.getMinecraft().renderEngine.bindTexture(texture);
mc.renderEngine.bindTexture(texture);
float opening;
float pageFlip;
float ticks = ClientTickHandler.ticksWithLexicaOpen;
if(ticks > 0 && ticks < 10) {
if(Minecraft.getMinecraft().currentScreen instanceof GuiLexicon)
ticks += ClientTickHandler.partialTicks;
else ticks -= ClientTickHandler.partialTicks;
ticks += partialTicks;
else ticks -= partialTicks;
}
GlStateManager.translate(0.3F + 0.02F * ticks, 0.475F + 0.01F * ticks, -0.2F - 0.01F * ticks);
GlStateManager.rotate(87.5F + ticks * 5, 0F, 1F, 0F);
GlStateManager.rotate(87.5F + ticks * (side == EnumHandSide.RIGHT ? 5 : 10), 0F, 1F, 0F);
GlStateManager.rotate(ticks * 2.85F, 0F, 0F, 1F);
opening = ticks / 12F;
@@ -153,13 +101,12 @@ public class RenderLexicon {
GlStateManager.rotate(180F, 0F, 0F, 1F);
GlStateManager.translate(-0.3F, -0.21F, -0.07F);
GlStateManager.scale(0.0035F, 0.0035F, -0.0035F);
boolean bevo = Minecraft.getMinecraft().thePlayer.getName().equalsIgnoreCase("BevoLJ");
boolean saice = Minecraft.getMinecraft().thePlayer.getName().equalsIgnoreCase("saice");
boolean bevo = mc.thePlayer.getName().equalsIgnoreCase("BevoLJ");
boolean saice = mc.thePlayer.getName().equalsIgnoreCase("saice");
String title = ModItems.lexicon.getItemStackDisplayName(null);
String origTitle = title;
ItemStack stack = PlayerHelper.getFirstHeldItemClass(Minecraft.getMinecraft().thePlayer, Item.class);
if(stack != null)
title = stack.getDisplayName();
if(title.equals(origTitle) && bevo)
@@ -188,56 +135,37 @@ public class RenderLexicon {
GlStateManager.translate(0F, 10F, 0F);
font.drawString(I18n.format("botaniamisc.lexiconcover" + (bevo ? 4 : 5)), 0, 0, 0x79ff92);
}
GlStateManager.color(1F, 1F, 1F);
}
GlStateManager.popMatrix();
}
// Copy - ItemRenderer.func_178101_a
private void func_178101_a(float angle, float p_178101_2_) {
GlStateManager.pushMatrix();
GlStateManager.rotate(angle, 1.0F, 0.0F, 0.0F);
GlStateManager.rotate(p_178101_2_, 0.0F, 1.0F, 0.0F);
RenderHelper.enableStandardItemLighting();
GlStateManager.popMatrix();
// Copy - ItemRenderer.transformSideFirstPerson
// Arg - Side, EquipProgress
private void transformSideFirstPerson(EnumHandSide p_187459_1_, float p_187459_2_)
{
int i = p_187459_1_ == EnumHandSide.RIGHT ? 1 : -1;
GlStateManager.translate((float)i * 0.56F, -0.52F + p_187459_2_ * -0.6F, -0.72F);
}
// Copy - ItemRenderer.func_178109_a
private void func_178109_a(AbstractClientPlayer clientPlayer) {
int i = Minecraft.getMinecraft().theWorld.getCombinedLight(new BlockPos(clientPlayer.posX, clientPlayer.posY + (double)clientPlayer.getEyeHeight(), clientPlayer.posZ), 0);
float f = (float)(i & 65535);
float f1 = (float)(i >> 16);
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, f, f1);
}
// Copy - ItemRenderer.func_178110_a
private void func_178110_a(EntityPlayerSP entityplayerspIn, float partialTicks) {
float f = entityplayerspIn.prevRenderArmPitch + (entityplayerspIn.renderArmPitch - entityplayerspIn.prevRenderArmPitch) * partialTicks;
float f1 = entityplayerspIn.prevRenderArmYaw + (entityplayerspIn.renderArmYaw - entityplayerspIn.prevRenderArmYaw) * partialTicks;
GlStateManager.rotate((entityplayerspIn.rotationPitch - f) * 0.1F, 1.0F, 0.0F, 0.0F);
GlStateManager.rotate((entityplayerspIn.rotationYaw - f1) * 0.1F, 0.0F, 1.0F, 0.0F);
}
// Copy - ItemRenderer.func_178105_d
private void func_178105_d(float p_178105_1_) {
float f = -0.4F * MathHelper.sin(MathHelper.sqrt_float(p_178105_1_) * (float)Math.PI);
float f1 = 0.2F * MathHelper.sin(MathHelper.sqrt_float(p_178105_1_) * (float)Math.PI * 2.0F);
float f2 = -0.2F * MathHelper.sin(p_178105_1_ * (float)Math.PI);
GlStateManager.translate(f, f1, f2);
}
// Copy with modification - ItemRenderer.transformFirstPersonItem
private void transformFirstPersonItem(float equipProgress, float swingProgress) {
GlStateManager.translate(1.2F, -1F, -0.71999997F); // Botania - x(0.56) -> 1; y(-0.52) -> -1
GlStateManager.translate(0.0F, equipProgress * -0.6F, 0.0F);
GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F); // Botania - 45 -> 90
GlStateManager.rotate(-20, 0, 0, 1); // Botania - added
float f = MathHelper.sin(swingProgress * swingProgress * (float)Math.PI);
float f1 = MathHelper.sin(MathHelper.sqrt_float(swingProgress) * (float)Math.PI);
GlStateManager.rotate(f * -20.0F, 0.0F, 1.0F, 0.0F);
GlStateManager.rotate(f1 * -20.0F, 0.0F, 0.0F, 1.0F);
// Copy with modification - ItemRenderer.transformFirstPerson
// Arg - Side, SwingProgress
private void transformFirstPerson(EnumHandSide p_187453_1_, float p_187453_2_)
{
int i = p_187453_1_ == EnumHandSide.RIGHT ? 1 : -1;
// Botania - added
GlStateManager.translate(p_187453_1_ == EnumHandSide.RIGHT ? 0.5F : 0.3F, -0.25F, 0.2F);
GlStateManager.rotate(90F, 0F, 1F, 0F);
GlStateManager.rotate(12F, 0F, 0F, -1F);
// End add
float f = MathHelper.sin(p_187453_2_ * p_187453_2_ * (float)Math.PI);
GlStateManager.rotate((float)i * (45.0F + f * -20.0F), 0.0F, 1.0F, 0.0F);
float f1 = MathHelper.sin(MathHelper.sqrt_float(p_187453_2_) * (float)Math.PI);
GlStateManager.rotate((float)i * f1 * -20.0F, 0.0F, 0.0F, 1.0F);
GlStateManager.rotate(f1 * -80.0F, 1.0F, 0.0F, 0.0F);
// GlStateManager.scale(0.4F, 0.4F, 0.4F); Botania - removed
GlStateManager.rotate((float)i * -45.0F, 0.0F, 1.0F, 0.0F);
}
}
@@ -47,7 +47,10 @@ import javax.annotation.Nonnull;
import javax.vecmath.Matrix4f;
import javax.vecmath.Vector3f;
import javax.vecmath.Vector4f;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class FloatingFlowerModel implements IBakedModel {
@@ -151,6 +154,7 @@ public class FloatingFlowerModel implements IBakedModel {
private final IBakedModel flower;
private final IBakedModel island;
private final List<BakedQuad> genQuads;
private final Map<EnumFacing, List<BakedQuad>> faceQuads = new EnumMap<>(EnumFacing.class);
public CompositeBakedModel(IBakedModel flower, IBakedModel island) {
this.flower = flower;
@@ -159,6 +163,8 @@ public class FloatingFlowerModel implements IBakedModel {
ImmutableList.Builder<BakedQuad> genBuilder = ImmutableList.builder();
final TRSRTransformation transform = TRSRTransformation.blockCenterToCorner(new TRSRTransformation(new Vector3f(0F, 0.2F, 0F), null, new Vector3f(0.5F, 0.5F, 0.5F), null));
for(EnumFacing e : EnumFacing.VALUES)
faceQuads.put(e, new ArrayList<>());
// Add flower quads, scaled and translated
for(BakedQuad quad : flower.getQuads(null, null, 0)) {
@@ -166,13 +172,13 @@ public class FloatingFlowerModel implements IBakedModel {
}
for(EnumFacing e : EnumFacing.VALUES) {
genBuilder.addAll(flower.getQuads(null, e, 0).stream().map(input -> transform(input, transform)).collect(Collectors.toList()));
faceQuads.get(e).addAll(flower.getQuads(null, e, 0).stream().map(input -> transform(input, transform)).collect(Collectors.toList()));
}
// Add island quads
genBuilder.addAll(island.getQuads(null, null, 0));
for(EnumFacing e : EnumFacing.VALUES) {
genBuilder.addAll(island.getQuads(null, e, 0));
faceQuads.get(e).addAll(island.getQuads(null, e, 0));
}
genQuads = genBuilder.build();
@@ -180,7 +186,7 @@ public class FloatingFlowerModel implements IBakedModel {
// Forward all to flower model
@Nonnull @Override public List<BakedQuad> getQuads(IBlockState state, EnumFacing face, long rand) {
return genQuads;
return face == null ? genQuads : faceQuads.get(face);
}
@Override public boolean isAmbientOcclusion() {
return flower.isAmbientOcclusion();
@@ -12,6 +12,7 @@ import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.client.model.IPerspectiveAwareModel;
import org.apache.commons.lang3.tuple.Pair;
import vazkii.botania.common.core.handler.ConfigHandler;
import javax.annotation.Nonnull;
import javax.vecmath.Matrix4f;
@@ -25,20 +26,18 @@ public class LexiconModel implements IPerspectiveAwareModel {
@Override
public Pair<? extends IBakedModel, Matrix4f> handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) {
IBakedModel original = Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelManager().getModel(path);
/*if(cameraTransformType == ItemCameraTransforms.TransformType.FIRST_PERSON_RIGHT_HAND && ConfigHandler.lexicon3dModel)
return Pair.of(this, null); todo 1.9 */
if((cameraTransformType == ItemCameraTransforms.TransformType.FIRST_PERSON_RIGHT_HAND
|| cameraTransformType == ItemCameraTransforms.TransformType.FIRST_PERSON_LEFT_HAND)
&& ConfigHandler.lexicon3dModel)
return Pair.of(this, null);
return ((IPerspectiveAwareModel) original).handlePerspective(cameraTransformType);
}
@Nonnull
@Override public List<BakedQuad> getQuads(IBlockState state, EnumFacing side, long rand) { return ImmutableList.of(); }
@Nonnull @Override public List<BakedQuad> getQuads(IBlockState state, EnumFacing side, long rand) { return ImmutableList.of(); }
@Override public boolean isAmbientOcclusion() { return false; }
@Override public boolean isGui3d() { return false; }
@Override public boolean isBuiltInRenderer() { return false; }
@Nonnull
@Override public TextureAtlasSprite getParticleTexture() { return Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite("botania:items/lexicon"); }
@Nonnull
@Override public ItemCameraTransforms getItemCameraTransforms() { return ItemCameraTransforms.DEFAULT; }
@Nonnull
@Override public ItemOverrideList getOverrides() { return ItemOverrideList.NONE; }
@Nonnull @Override public TextureAtlasSprite getParticleTexture() { return Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite("botania:items/lexicon"); }
@Nonnull @Override public ItemCameraTransforms getItemCameraTransforms() { return ItemCameraTransforms.DEFAULT; }
@Nonnull @Override public ItemOverrideList getOverrides() { return ItemOverrideList.NONE; }
}
@@ -210,7 +210,7 @@ public class SpecialFlowerModel implements IModelCustomData {
public List<BakedQuad> getQuads(IBlockState state, EnumFacing face, long rand) {
if(state.getBlock() != ModBlocks.specialFlower)
return Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getModelManager().getMissingModel().getQuads(state, face, rand);
Botania.LOGGER.info("Getting " + (face == null ? "gen" : face.getName()) + " quads");
IExtendedBlockState extendedState = ((IExtendedBlockState) state);
String subtileId = extendedState.getValue(BotaniaStateProps.SUBTILE_ID);
@@ -6,6 +6,8 @@ import net.minecraftforge.fml.relauncher.SideOnly;
public interface IModelRegister {
/**
* Do whatever needs to be done to register models
* For Blocks, statemapper registration needs to be done BEFORE itemblock registration
* Exceptions to that rule are noted
*/
@SideOnly(Side.CLIENT)
void registerModels();
@@ -29,10 +29,13 @@ import net.minecraft.world.World;
import net.minecraftforge.common.EnumPlantType;
import net.minecraftforge.common.IPlantable;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.AltGrassVariant;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.Botania;
import vazkii.botania.common.item.block.ItemBlockWithMetadataAndName;
import vazkii.botania.common.lexicon.LexiconData;
@@ -151,4 +154,10 @@ public class BlockAltGrass extends BlockMod implements ILexiconable {
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.grassSeeds;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerBlockToState(this, AltGrassVariant.values().length);
}
}
@@ -30,19 +30,20 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidContainerItem;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.internal.VanillaPacketDispatcher;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.mana.ManaItemHandler;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.AltarVariant;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.Botania;
import vazkii.botania.common.block.tile.TileAltar;
import vazkii.botania.common.block.tile.TileSimpleInventory;
@@ -281,4 +282,10 @@ public class BlockAltar extends BlockMod implements ILexiconable {
return LexiconData.apothecary;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerBlockToState(this, AltarVariant.values().length - 1);
}
}
@@ -37,6 +37,7 @@ import vazkii.botania.api.item.IAvatarWieldable;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.tile.TileAvatar;
import vazkii.botania.common.block.tile.TileSimpleInventory;
import vazkii.botania.common.core.helper.InventoryHelper;
@@ -155,9 +156,10 @@ public class BlockAvatar extends BlockMod implements ILexiconable {
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
super.registerModels();
ModelLoader.setCustomStateMapper(this, new StateMap.Builder().ignore(BotaniaStateProps.CARDINALS).build());
ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(this), 0, TileAvatar.class);
ModelHandler.registerCustomItemblock(this, "avatar");
super.registerModels();
}
}
@@ -27,9 +27,12 @@ import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.living.LivingDropsEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.lexicon.LexiconData;
import vazkii.botania.common.lib.LibBlockNames;
@@ -104,4 +107,10 @@ public class BlockFelPumpkin extends BlockMod implements ILexiconable {
return LexiconData.gardenOfGlass;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerBlockToState(this, 0, getDefaultState().withProperty(BotaniaStateProps.CARDINALS, EnumFacing.NORTH));
}
}
@@ -25,9 +25,13 @@ import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.minecart.MinecartUpdateEvent;
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 vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.client.render.IModelRegister;
import vazkii.botania.common.core.BotaniaCreativeTab;
import vazkii.botania.common.item.block.ItemBlockMod;
import vazkii.botania.common.lexicon.LexiconData;
@@ -36,7 +40,7 @@ import vazkii.botania.common.lib.LibMisc;
import javax.annotation.Nonnull;
public class BlockGhostRail extends BlockRailBase implements ILexiconable, IRegisterCallback {
public class BlockGhostRail extends BlockRailBase implements ILexiconable, IRegisterCallback, IModelRegister {
private static final String TAG_FLOAT_TICKS = "Botania_FloatTicks";
@@ -114,4 +118,10 @@ public class BlockGhostRail extends BlockRailBase implements ILexiconable, IRegi
GameRegistry.register(this);
GameRegistry.register(new ItemBlockMod(this), getRegistryName());
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerCustomItemblock(this, "ghost_rail");
}
}
@@ -43,6 +43,7 @@ import vazkii.botania.api.mana.IManaTrigger;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.wand.IWandHUD;
import vazkii.botania.api.wand.IWandable;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.tile.TileHourglass;
import vazkii.botania.common.block.tile.TileSimpleInventory;
import vazkii.botania.common.core.helper.InventoryHelper;
@@ -204,9 +205,9 @@ public class BlockHourglass extends BlockMod implements IManaTrigger, IWandable,
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
super.registerModels();
ModelLoader.setCustomStateMapper(this, new StateMap.Builder().ignore(BotaniaStateProps.POWERED).build());
ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(this), 0, TileHourglass.class);
ModelHandler.registerCustomItemblock(this, "hovering_hourglass");
}
}
@@ -26,11 +26,14 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.LuminizerVariant;
import vazkii.botania.api.wand.IWandable;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.tile.TileLightRelay;
import vazkii.botania.common.item.block.ItemBlockWithMetadataAndName;
import vazkii.botania.common.lexicon.LexiconData;
@@ -170,4 +173,12 @@ public class BlockLightRelay extends BlockMod implements IWandable, ILexiconable
return LexiconData.luminizerTransport;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
int i = 0;
for(LuminizerVariant v : LuminizerVariant.values())
ModelHandler.registerBlockToState(this, i++, getDefaultState().withProperty(BotaniaStateProps.LUMINIZER_VARIANT, v));
}
}
@@ -22,10 +22,13 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.LivingRockVariant;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.item.block.ItemBlockWithMetadataAndName;
import vazkii.botania.common.lexicon.LexiconData;
import vazkii.botania.common.lib.LibBlockNames;
@@ -91,4 +94,10 @@ public class BlockLivingrock extends BlockMod implements ILexiconable {
return isDefaultVariant ? LexiconData.pureDaisy : LexiconData.decorativeBlocks;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerBlockToState(this, LivingRockVariant.values().length);
}
}
@@ -23,10 +23,13 @@ import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.LivingWoodVariant;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.item.block.ItemBlockWithMetadataAndName;
import vazkii.botania.common.lexicon.LexiconData;
import vazkii.botania.common.lib.LibBlockNames;
@@ -107,4 +110,10 @@ public class BlockLivingwood extends BlockMod implements ILexiconable {
return state.getValue(BotaniaStateProps.LIVINGWOOD_VARIANT) == LivingWoodVariant.DEFAULT;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerBlockToState(this, LivingWoodVariant.values().length);
}
}
@@ -12,11 +12,13 @@ package vazkii.botania.common.block;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.item.Item;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.recipe.IElvenItem;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.client.render.IModelRegister;
import vazkii.botania.common.core.BotaniaCreativeTab;
import vazkii.botania.common.item.block.ItemBlockElven;
@@ -47,7 +49,8 @@ public class BlockMod extends Block implements IModelRegister, IRegisterCallback
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
if(Item.getItemFromBlock(this) != null)
ModelHandler.registerBlockToState(this, 0, getDefaultState());
}
@Override
@@ -17,6 +17,7 @@ import net.minecraft.block.SoundType;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.statemap.StateMap;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
@@ -30,12 +31,14 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.client.render.IModelRegister;
import vazkii.botania.common.Botania;
import vazkii.botania.common.core.BotaniaCreativeTab;
import vazkii.botania.common.core.handler.ConfigHandler;
@@ -49,7 +52,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public abstract class BlockModDoubleFlower extends BlockDoublePlant implements ILexiconable, IRegisterCallback {
public abstract class BlockModDoubleFlower extends BlockDoublePlant implements ILexiconable, IRegisterCallback, IModelRegister {
private static final int COUNT = 8;
private final boolean second;
@@ -224,4 +227,10 @@ public abstract class BlockModDoubleFlower extends BlockDoublePlant implements I
GameRegistry.register(new ItemBlockWithMetadataAndName(this), getRegistryName());
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelLoader.setCustomStateMapper(this, (new StateMap.Builder()).ignore(BlockDoublePlant.VARIANT, BlockDoublePlant.FACING).build());
}
}
@@ -5,7 +5,10 @@ import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.client.core.handler.ModelHandler;
import javax.annotation.Nonnull;
@@ -42,4 +45,11 @@ public class BlockModDoubleFlower1 extends BlockModDoubleFlower {
meta &= -9;
return getDefaultState().withProperty(HALF, half).withProperty(BotaniaStateProps.DOUBLEFLOWER_VARIANT_1, EnumDyeColor.byMetadata(meta));
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
super.registerModels();
ModelHandler.registerCustomItemblock(this, 8, i -> "double_flower_" + EnumDyeColor.byMetadata(i).getName());
}
}
@@ -5,7 +5,10 @@ import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.client.core.handler.ModelHandler;
import javax.annotation.Nonnull;
@@ -43,4 +46,11 @@ public class BlockModDoubleFlower2 extends BlockModDoubleFlower {
meta &= -9;
return getDefaultState().withProperty(HALF, half).withProperty(BotaniaStateProps.DOUBLEFLOWER_VARIANT_2, EnumDyeColor.byMetadata(meta + 8));
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
super.registerModels();
ModelHandler.registerCustomItemblock(this, 8, i -> "double_flower_" + EnumDyeColor.byMetadata(i + 8).getName());
}
}
@@ -17,6 +17,7 @@ import net.minecraft.block.IGrowable;
import net.minecraft.block.SoundType;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.statemap.StateMap;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
@@ -29,10 +30,15 @@ import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.client.render.IModelRegister;
import vazkii.botania.common.Botania;
import vazkii.botania.common.achievement.IPickupAchievement;
import vazkii.botania.common.achievement.ModAchievements;
@@ -47,7 +53,7 @@ import javax.annotation.Nonnull;
import java.util.List;
import java.util.Random;
public class BlockModFlower extends BlockFlower implements ILexiconable, IPickupAchievement, IGrowable, IRegisterCallback {
public class BlockModFlower extends BlockFlower implements ILexiconable, IPickupAchievement, IGrowable, IRegisterCallback, IModelRegister {
private static final AxisAlignedBB AABB = new AxisAlignedBB(0.3, 0, 0.3, 0.8, 1, 0.8);
@@ -170,4 +176,11 @@ public class BlockModFlower extends BlockFlower implements ILexiconable, IPickup
GameRegistry.register(this);
registerItemForm();
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelLoader.setCustomStateMapper(this, (new StateMap.Builder()).ignore(getTypeProperty()).build());
ModelHandler.registerCustomItemblock(this, EnumDyeColor.values().length, i -> "flower_" + EnumDyeColor.byMetadata(i).getName());
}
}
@@ -30,6 +30,8 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
@@ -37,6 +39,7 @@ import vazkii.botania.api.state.enums.CratePattern;
import vazkii.botania.api.state.enums.CrateVariant;
import vazkii.botania.api.wand.IWandHUD;
import vazkii.botania.api.wand.IWandable;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.tile.TileCraftCrate;
import vazkii.botania.common.block.tile.TileOpenCrate;
import vazkii.botania.common.block.tile.TileSimpleInventory;
@@ -188,4 +191,11 @@ public class BlockOpenCrate extends BlockMod implements ILexiconable, IWandable,
}
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerBlockToState(this, 0, getDefaultState());
ModelHandler.registerBlockToState(this, 1, getDefaultState().withProperty(BotaniaStateProps.CRATE_VARIANT, CrateVariant.CRAFTY));
}
}
@@ -15,6 +15,7 @@ import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.statemap.StateMap;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
@@ -27,16 +28,20 @@ import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.common.property.ExtendedBlockState;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.common.property.IUnlistedProperty;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.mana.IManaCollisionGhost;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.PlatformVariant;
import vazkii.botania.api.wand.IWandable;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.tile.TileCamo;
import vazkii.botania.common.block.tile.TilePlatform;
import vazkii.botania.common.item.block.ItemBlockWithMetadataAndName;
@@ -152,4 +157,13 @@ public class BlockPlatform extends BlockCamo implements ILexiconable, IWandable,
public boolean isGhost(IBlockState state, World world, BlockPos pos) {
return true;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerBlockToState(this, 3);
// Statemapper after item registration, because the items should be registered to the actual variant names
ModelLoader.setCustomStateMapper(this, new StateMap.Builder().ignore(BotaniaStateProps.PLATFORM_VARIANT).build());
}
}
@@ -26,11 +26,14 @@ import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.Optional;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import thaumcraft.api.crafting.IInfusionStabiliser;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.PylonVariant;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.tile.TilePylon;
import vazkii.botania.common.core.handler.ConfigHandler;
import vazkii.botania.common.item.block.ItemBlockWithMetadataAndName;
@@ -143,4 +146,10 @@ public class BlockPylon extends BlockMod implements ILexiconable, IInfusionStabi
public boolean canStabaliseInfusion(World world, BlockPos pos) {
return ConfigHandler.enableThaumcraftStablizers;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerBlockToState(this, PylonVariant.values().length);
}
}
@@ -20,6 +20,7 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.particle.ParticleManager;
import net.minecraft.client.particle.ParticleDigging;
import net.minecraft.client.renderer.block.statemap.StateMap;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
@@ -39,6 +40,7 @@ import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.common.property.ExtendedBlockState;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.common.property.IUnlistedProperty;
@@ -53,6 +55,8 @@ import vazkii.botania.api.subtile.ISpecialFlower;
import vazkii.botania.api.subtile.SubTileEntity;
import vazkii.botania.api.wand.IWandHUD;
import vazkii.botania.api.wand.IWandable;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.client.render.IModelRegister;
import vazkii.botania.common.block.tile.TileSpecialFlower;
import vazkii.botania.common.core.BotaniaCreativeTab;
import vazkii.botania.common.item.ModItems;
@@ -65,7 +69,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class BlockSpecialFlower extends BlockFlower implements ISpecialFlower, IWandable, ILexiconable, IWandHUD, IRegisterCallback {
public class BlockSpecialFlower extends BlockFlower implements ISpecialFlower, IWandable, ILexiconable, IWandHUD, IRegisterCallback, IModelRegister {
static {
BotaniaAPI.subtilesForCreativeMenu.addAll(Arrays.asList(
@@ -170,7 +174,7 @@ public class BlockSpecialFlower extends BlockFlower implements ISpecialFlower, I
if (meta > 15) {
meta = 0;
}
return getDefaultState().withProperty(BotaniaStateProps.COLOR, EnumDyeColor.byMetadata(meta)).withProperty(type, EnumFlowerType.POPPY);
return getDefaultState().withProperty(BotaniaStateProps.COLOR, EnumDyeColor.byMetadata(meta));
}
@Override
@@ -382,4 +386,12 @@ public class BlockSpecialFlower extends BlockFlower implements ISpecialFlower, I
GameRegistry.register(this);
GameRegistry.register(new ItemBlockSpecialFlower(this), getRegistryName());
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
// Let custom loader work
ModelLoader.setCustomStateMapper(this, new StateMap.Builder().ignore(BotaniaStateProps.COLOR).ignore(getTypeProperty()).build());
ModelHandler.registerInventoryVariant(this);
}
}
@@ -22,10 +22,13 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.StorageVariant;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.item.block.ItemBlockStorage;
import vazkii.botania.common.lexicon.LexiconData;
import vazkii.botania.common.lib.LibBlockNames;
@@ -90,4 +93,10 @@ public class BlockStorage extends BlockMod implements ILexiconable {
return variant == StorageVariant.MANASTEEL ? LexiconData.pool : LexiconData.terrasteel;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerBlockToState(this, StorageVariant.values().length);
}
}
@@ -31,6 +31,7 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.tile.TileTeruTeruBozu;
import vazkii.botania.common.lexicon.LexiconData;
import vazkii.botania.common.lib.LibBlockNames;
@@ -144,7 +145,7 @@ public class BlockTeruTeruBozu extends BlockMod implements ILexiconable {
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
super.registerModels();
ModelHandler.registerCustomItemblock(this, "teru_teru_bozu");
ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(this), 0, TileTeruTeruBozu.class);
}
@@ -33,6 +33,7 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.tile.corporea.TileCorporeaBase;
import vazkii.botania.common.block.tile.corporea.TileCorporeaCrystalCube;
import vazkii.botania.common.lexicon.LexiconData;
@@ -132,7 +133,7 @@ public class BlockCorporeaCrystalCube extends BlockCorporeaBase implements ILexi
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
super.registerModels();
ModelHandler.registerInventoryVariant(this);
ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(this), 0, TileCorporeaCrystalCube.class);
}
@@ -31,6 +31,7 @@ import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.StorageVariant;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.block.tile.corporea.TileCorporeaBase;
import vazkii.botania.common.block.tile.corporea.TileCorporeaIndex;
@@ -113,7 +114,7 @@ public class BlockCorporeaIndex extends BlockCorporeaBase implements ILexiconabl
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
super.registerModels();
ModelHandler.registerCustomItemblock(this, "corporea_index");
ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(this), 0, TileCorporeaIndex.class);
}
@@ -11,6 +11,7 @@
package vazkii.botania.common.block.decor;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.statemap.StateMap;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.Item;
import net.minecraft.util.EnumBlockRenderType;
@@ -18,6 +19,9 @@ import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.common.Botania;
import vazkii.botania.common.block.BlockModFlower;
@@ -74,4 +78,11 @@ public class BlockBuriedPetals extends BlockModFlower {
public EnumBlockRenderType getRenderType(IBlockState state) {
return EnumBlockRenderType.INVISIBLE;
}
@SideOnly(Side.CLIENT)
@Override
public final void registerModels() {
ModelLoader.setCustomStateMapper(this, (new StateMap.Builder()).ignore(getTypeProperty()).build());
}
}
@@ -22,10 +22,13 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.CustomBrickVariant;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.item.block.ItemBlockWithMetadataAndName;
import vazkii.botania.common.lexicon.LexiconData;
@@ -92,4 +95,10 @@ public class BlockCustomBrick extends BlockMod implements ILexiconable {
return variant.getName().contains("azulejo") ? LexiconData.azulejo : LexiconData.decorativeBlocks;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerBlockToState(this, CustomBrickVariant.values().length);
}
}
@@ -18,6 +18,7 @@ import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.particle.ParticleManager;
import net.minecraft.client.particle.ParticleDigging;
import net.minecraft.client.renderer.block.statemap.StateMap;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
@@ -36,6 +37,7 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.common.property.ExtendedBlockState;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.common.property.IUnlistedProperty;
@@ -50,6 +52,7 @@ import vazkii.botania.api.item.IFloatingFlower.IslandType;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.Botania;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.block.tile.TileFloatingFlower;
@@ -249,4 +252,12 @@ public class BlockFloatingFlower extends BlockMod implements ILexiconable, IInfu
public boolean canStabaliseInfusion(World world, BlockPos pos) {
return ConfigHandler.enableThaumcraftStablizers;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelLoader.setCustomStateMapper(this, new StateMap.Builder().ignore(BotaniaStateProps.COLOR).build());
// All to variant inventory so smartmodel can work
ModelHandler.registerItemAllMeta(Item.getItemFromBlock(this), EnumDyeColor.values().length);
}
}
@@ -14,6 +14,7 @@ import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.statemap.StateMap;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumDyeColor;
@@ -24,10 +25,14 @@ import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.block.tile.TileManaBeacon;
import vazkii.botania.common.item.block.ItemBlockWithMetaNameAndColor;
@@ -116,4 +121,11 @@ public class BlockManaBeacon extends BlockMod implements ILexiconable {
public TileEntity createTileEntity(@Nonnull World world, @Nonnull IBlockState state) {
return new TileManaBeacon();
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelLoader.setCustomStateMapper(this, (new StateMap.Builder()).ignore(BotaniaStateProps.COLOR).build());
ModelHandler.registerBlockToState(this, EnumDyeColor.values().length);
}
}
@@ -37,6 +37,8 @@ import vazkii.botania.api.item.IHornHarvestable;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.client.render.IModelRegister;
import vazkii.botania.common.Botania;
import vazkii.botania.common.block.IRegisterCallback;
import vazkii.botania.common.block.ModBlocks;
@@ -52,7 +54,7 @@ import java.util.List;
import java.util.Random;
@Optional.Interface(modid = "Thaumcraft", iface = "thaumcraft.api.crafting.IInfusionStabiliser", striprefs = true)
public class BlockModMushroom extends BlockMushroom implements IInfusionStabiliser, IHornHarvestable, ILexiconable, IRegisterCallback {
public class BlockModMushroom extends BlockMushroom implements IInfusionStabiliser, IHornHarvestable, ILexiconable, IRegisterCallback, IModelRegister {
private static final AxisAlignedBB AABB = new AxisAlignedBB(0.3, 0, 0.3, 0.8, 1, 0.8);
@@ -160,4 +162,10 @@ public class BlockModMushroom extends BlockMushroom implements IInfusionStabilis
GameRegistry.register(this);
GameRegistry.register(new ItemBlockWithMetadataAndName(this), getRegistryName());
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerCustomItemblock(this, EnumDyeColor.values().length, i -> "mushroom_" + EnumDyeColor.byMetadata(i).getName());
}
}
@@ -23,7 +23,10 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.item.block.ItemBlockWithMetadataAndName;
import vazkii.botania.common.lib.LibBlockNames;
@@ -104,4 +107,10 @@ public class BlockPavement extends BlockMod {
return new ItemStack(this, 1, getMetaFromState(world.getBlockState(pos)));
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerBlockToState(this, BotaniaStateProps.PAVEMENT_COLOR.getAllowedValues().size());
}
}
@@ -14,6 +14,7 @@ import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.statemap.StateMap;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumDyeColor;
@@ -21,10 +22,14 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.item.block.ItemBlockWithMetaNameAndColor;
import vazkii.botania.common.lexicon.LexiconData;
@@ -83,4 +88,11 @@ public class BlockPetalBlock extends BlockMod implements ILexiconable {
return LexiconData.flowers;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelLoader.setCustomStateMapper(this, (new StateMap.Builder()).ignore(BotaniaStateProps.COLOR).build());
ModelHandler.registerBlockToState(this, EnumDyeColor.values().length);
}
}
@@ -11,15 +11,21 @@
package vazkii.botania.common.block.decor;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.statemap.StateMap;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.Optional;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import thaumcraft.api.crafting.IInfusionStabiliser;
import vazkii.botania.api.item.IHornHarvestable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.BlockModFlower;
import vazkii.botania.common.core.handler.ConfigHandler;
import vazkii.botania.common.lexicon.LexiconData;
@@ -63,4 +69,11 @@ public class BlockShinyFlower extends BlockModFlower implements IInfusionStabili
@Override
public void harvestByHorn(World world, BlockPos pos, ItemStack stack, EnumHornType hornType) {}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelLoader.setCustomStateMapper(this, (new StateMap.Builder()).ignore(getTypeProperty()).build());
ModelHandler.registerCustomItemblock(this, EnumDyeColor.values().length, i -> "glimmering_flower_" + EnumDyeColor.byMetadata(i).getName());
}
}
@@ -15,6 +15,7 @@ import net.minecraft.block.material.Material;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.statemap.StateMap;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumDyeColor;
@@ -24,12 +25,14 @@ import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.Botania;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.core.helper.Vector3;
@@ -123,4 +126,11 @@ public class BlockUnstable extends BlockMod implements ILexiconable {
return LexiconData.unstableBlocks;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelLoader.setCustomStateMapper(this, (new StateMap.Builder()).ignore(BotaniaStateProps.COLOR).build());
ModelHandler.registerBlockToState(this, EnumDyeColor.values().length);
}
}
@@ -12,8 +12,11 @@ package vazkii.botania.common.block.decor.biomestone;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.BiomeStoneVariant;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.lib.LibBlockNames;
import javax.annotation.Nonnull;
@@ -54,4 +57,10 @@ public class BlockBiomeStoneA extends BlockBiomeStone {
return meta;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerBlockToState(this, BiomeStoneVariant.values().length);
}
}
@@ -12,8 +12,11 @@ package vazkii.botania.common.block.decor.biomestone;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.BiomeBrickVariant;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.lib.LibBlockNames;
import javax.annotation.Nonnull;
@@ -44,4 +47,10 @@ public class BlockBiomeStoneB extends BlockBiomeStone {
}
return getDefaultState().withProperty(BotaniaStateProps.BIOMEBRICK_VARIANT, BiomeBrickVariant.values()[meta]);
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerBlockToState(this, BiomeBrickVariant.values().length);
}
}
@@ -11,6 +11,9 @@
package vazkii.botania.common.block.decor.panes;
import net.minecraft.util.BlockRenderLayer;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.ModBlocks;
import javax.annotation.Nonnull;
@@ -26,4 +29,11 @@ public class BlockAlfglassPane extends BlockModPane {
public BlockRenderLayer getBlockLayer() {
return BlockRenderLayer.TRANSLUCENT;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerCustomItemblock(this, "alfglass_pane");
}
}
@@ -11,6 +11,9 @@
package vazkii.botania.common.block.decor.panes;
import net.minecraft.util.BlockRenderLayer;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.ModBlocks;
import javax.annotation.Nonnull;
@@ -26,4 +29,11 @@ public class BlockBifrostPane extends BlockModPane {
public BlockRenderLayer getBlockLayer() {
return BlockRenderLayer.TRANSLUCENT;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerCustomItemblock(this, "bifrost_pane");
}
}
@@ -11,6 +11,9 @@
package vazkii.botania.common.block.decor.panes;
import net.minecraft.util.BlockRenderLayer;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.ModBlocks;
import javax.annotation.Nonnull;
@@ -27,4 +30,11 @@ public class BlockManaglassPane extends BlockModPane {
return BlockRenderLayer.TRANSLUCENT;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerCustomItemblock(this, "managlass_pane");
}
}
@@ -19,6 +19,7 @@ import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.fml.common.registry.GameRegistry;
import vazkii.botania.client.render.IModelRegister;
import vazkii.botania.common.block.IRegisterCallback;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.core.BotaniaCreativeTab;
@@ -27,7 +28,7 @@ import vazkii.botania.common.lib.LibMisc;
import javax.annotation.Nonnull;
public class BlockModPane extends BlockPane implements IRegisterCallback {
public class BlockModPane extends BlockPane implements IRegisterCallback, IModelRegister {
public BlockModPane(Block source) {
super(Material.GLASS, false);
@@ -59,4 +60,7 @@ public class BlockModPane extends BlockPane implements IRegisterCallback {
GameRegistry.register(this);
GameRegistry.register(new ItemBlockMod(this), getRegistryName());
}
@Override
public void registerModels() {}
}
@@ -129,8 +129,9 @@ public class BlockSpecialQuartz extends BlockMod implements ILexiconable {
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
String[] variantNames = { "variant=normal", "variant=chiseled", "variant=pillar_y" };
ModelHandler.registerBlockVariantMetas(this, 3, i -> variantNames[i]);
ModelHandler.registerBlockToState(this, 0, getDefaultState());
ModelHandler.registerBlockToState(this, 1, getDefaultState().withProperty(BotaniaStateProps.QUARTZ_VARIANT, QuartzVariant.CHISELED));
ModelHandler.registerBlockToState(this, 2, getDefaultState().withProperty(BotaniaStateProps.QUARTZ_VARIANT, QuartzVariant.PILLAR_Y));
}
}
@@ -140,7 +140,7 @@ public abstract class BlockModSlab extends BlockSlab implements ILexiconable, IM
public void registerModels() {
if(!doubleSlab) {
ModelLoader.setCustomStateMapper(this, (new StateMap.Builder()).ignore(BlockModSlab.DUMMY).build());
ModelHandler.registerBlockVariant(this, "half=bottom");
ModelHandler.registerBlockToState(this, 0, getDefaultState());
} else {
ModelLoader.setCustomStateMapper(this, (new StateMap.Builder()).ignore(BlockModSlab.DUMMY, BlockSlab.HALF).build());
}
@@ -28,6 +28,7 @@ import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.BiomeStoneVariant;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.ModFluffBlocks;
import vazkii.botania.common.item.block.ItemBlockWithMetadataAndName;
import vazkii.botania.common.lexicon.LexiconData;
@@ -88,6 +89,7 @@ public class BlockBiomeStoneWall extends BlockModWall {
ModelLoader.setCustomStateMapper(this,
(new StateMap.Builder()).withName(BotaniaStateProps.BIOMESTONEWALL_VARIANT)
.ignore(BlockWall.VARIANT).withSuffix("_wall").build());
ModelHandler.registerCustomItemblock(this, 8, i -> BiomeStoneVariant.values()[i + 8].getName() + "_wall");
}
}
@@ -11,6 +11,9 @@
package vazkii.botania.common.block.decor.walls.living;
import net.minecraft.block.SoundType;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.block.decor.walls.BlockModWall;
@@ -22,4 +25,10 @@ public class BlockDreamwoodWall extends BlockModWall {
setSoundType(SoundType.WOOD);
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerCustomItemblock(this, "dreamwood_wall");
}
}
@@ -11,6 +11,9 @@
package vazkii.botania.common.block.decor.walls.living;
import net.minecraft.block.SoundType;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.block.decor.walls.BlockModWall;
@@ -23,4 +26,10 @@ public class BlockLivingrockWall extends BlockModWall {
setSoundType(SoundType.STONE);
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerCustomItemblock(this, "livingrock_wall");
}
}
@@ -11,6 +11,9 @@
package vazkii.botania.common.block.decor.walls.living;
import net.minecraft.block.SoundType;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.block.decor.walls.BlockModWall;
@@ -22,4 +25,10 @@ public class BlockLivingwoodWall extends BlockModWall {
setSoundType(SoundType.WOOD);
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerCustomItemblock(this, "livingwood_wall");
}
}
@@ -34,6 +34,7 @@ import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.block.tile.mana.TileBellows;
import vazkii.botania.common.entity.EntityDoppleganger;
@@ -126,9 +127,9 @@ public class BlockBellows extends BlockMod implements ILexiconable {
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
super.registerModels();
ModelLoader.setCustomStateMapper(this, new StateMap.Builder().ignore(BotaniaStateProps.CARDINALS).build());
ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(this), 0, TileBellows.class);
ModelHandler.registerCustomItemblock(this, "bellows");
}
}
@@ -38,6 +38,7 @@ import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.wand.IWandHUD;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.block.tile.TileBrewery;
import vazkii.botania.common.block.tile.TileSimpleInventory;
@@ -157,9 +158,9 @@ public class BlockBrewery extends BlockMod implements ILexiconable, IWandHUD {
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
super.registerModels();
ModelLoader.setCustomStateMapper(this, new StateMap.Builder().ignore(BotaniaStateProps.POWERED).build());
ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(this), 0, TileBrewery.class);
ModelHandler.registerCustomItemblock(this, "brewery");
}
}
@@ -29,11 +29,14 @@ import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.wand.IWandHUD;
import vazkii.botania.api.wand.IWandable;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.block.tile.TileEnchanter;
import vazkii.botania.common.item.ModItems;
@@ -177,4 +180,10 @@ public class BlockEnchanter extends BlockMod implements IWandable, ILexiconable,
((TileEnchanter) world.getTileEntity(pos)).renderHUD(res);
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerBlockToState(this, 0, getDefaultState().withProperty(BotaniaStateProps.ENCHANTER_DIRECTION, EnumFacing.Axis.X));
}
}
@@ -31,12 +31,15 @@ import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.IShearable;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.internal.IManaBurst;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.mana.IManaTrigger;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.DrumVariant;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.item.ItemGrassHorn;
import vazkii.botania.common.item.block.ItemBlockWithMetadataAndName;
@@ -189,4 +192,10 @@ public class BlockForestDrum extends BlockMod implements IManaTrigger, ILexicona
}
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerBlockToState(this, DrumVariant.values().length);
}
}
@@ -16,6 +16,7 @@ import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.block.statemap.StateMap;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
@@ -32,7 +33,10 @@ import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.BotaniaAPI;
import vazkii.botania.api.internal.VanillaPacketDispatcher;
import vazkii.botania.api.lexicon.ILexiconable;
@@ -41,6 +45,7 @@ import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.PoolVariant;
import vazkii.botania.api.wand.IWandHUD;
import vazkii.botania.api.wand.IWandable;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.achievement.ICraftAchievement;
import vazkii.botania.common.achievement.ModAchievements;
import vazkii.botania.common.block.BlockMod;
@@ -237,4 +242,11 @@ public class BlockPool extends BlockMod implements IWandHUD, IWandable, ILexicon
public Achievement getAchievementOnCraft(ItemStack stack, EntityPlayer player, IInventory matrix) {
return ModAchievements.manaPoolPickup;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelLoader.setCustomStateMapper(this, (new StateMap.Builder()).ignore(BotaniaStateProps.COLOR).build());
ModelHandler.registerBlockToState(this, PoolVariant.values().length);
}
}
@@ -27,9 +27,12 @@ import net.minecraft.world.World;
import net.minecraftforge.common.property.ExtendedBlockState;
import net.minecraftforge.common.property.IUnlistedProperty;
import net.minecraftforge.common.property.Properties;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.block.tile.mana.TilePump;
import vazkii.botania.common.lexicon.LexiconData;
@@ -127,4 +130,10 @@ public class BlockPump extends BlockMod implements ILexiconable {
public TileEntity createTileEntity(@Nonnull World world, @Nonnull IBlockState state) {
return new TilePump();
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerInventoryVariant(this);
}
}
@@ -31,6 +31,8 @@ import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.mana.ILens;
@@ -39,6 +41,7 @@ import vazkii.botania.api.state.enums.SpreaderVariant;
import vazkii.botania.api.wand.IWandHUD;
import vazkii.botania.api.wand.IWandable;
import vazkii.botania.api.wand.IWireframeAABBProvider;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.block.tile.mana.TileSpreader;
import vazkii.botania.common.core.helper.InventoryHelper;
@@ -49,7 +52,6 @@ import vazkii.botania.common.lib.LibBlockNames;
import javax.annotation.Nonnull;
import java.util.List;
import java.util.Random;
public class BlockSpreader extends BlockMod implements IWandable, IWandHUD, ILexiconable, IWireframeAABBProvider {
@@ -236,4 +238,10 @@ public class BlockSpreader extends BlockMod implements IWandable, IWandHUD, ILex
pos.getX() + 1 - f, pos.getY() + 1 - f, pos.getZ() + 1 - f);
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerBlockToState(this, SpreaderVariant.values().length);
}
}
@@ -21,9 +21,12 @@ import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.lexicon.LexiconData;
@@ -71,4 +74,10 @@ public abstract class BlockRedString extends BlockMod implements ILexiconable {
return LexiconData.redString;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerBlockToState(this, 0, getDefaultState().withProperty(BotaniaStateProps.FACING, EnumFacing.NORTH));
}
}
@@ -13,9 +13,13 @@ package vazkii.botania.common.block.string;
import net.minecraft.block.Block;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.statemap.StateMap;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.common.block.tile.string.TileRedString;
import vazkii.botania.common.block.tile.string.TileRedStringDispenser;
@@ -74,4 +78,11 @@ public class BlockRedStringDispenser extends BlockRedString {
return new TileRedStringDispenser();
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelLoader.setCustomStateMapper(this, new StateMap.Builder().ignore(BotaniaStateProps.POWERED).build());
super.registerModels();
}
}
@@ -12,13 +12,17 @@ package vazkii.botania.common.block.string;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.statemap.StateMap;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.common.block.tile.string.TileRedString;
import vazkii.botania.common.block.tile.string.TileRedStringInterceptor;
@@ -92,4 +96,11 @@ public class BlockRedStringInterceptor extends BlockRedString {
return new TileRedStringInterceptor();
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelLoader.setCustomStateMapper(this, new StateMap.Builder().ignore(BotaniaStateProps.POWERED).build());
super.registerModels();
}
}
@@ -80,7 +80,6 @@ public final class ConfigHandler {
public static boolean enchanterEnabled = true;
public static boolean fluxfieldEnabled = true;
public static boolean relicsEnabled = true;
public static boolean stones18Enabled = true;
public static boolean ringOfOdinFireResist = true;
public static boolean invertMagnetRing = false;
public static boolean enableThaumcraftStablizers = true;
@@ -219,9 +218,6 @@ public final class ConfigHandler {
desc = "Set this to false to disable the Relic System. This only disables the entries, drops and achievements. Old ones that are already in the world will stay.";
relicsEnabled = loadPropBool("relics.enabled", desc, relicsEnabled);
desc = "Set this to false to disable the 1.8 Stones available as mana alchemy recipes. This only disables the recipes and entries. Old ones that are already in the world will stay.";
stones18Enabled = loadPropBool("18stones.enabled", desc, stones18Enabled);
desc = "Set this to false to make the Ring of Odin not apply fire resistance. Mostly for people who use Witchery transformations.";
ringOfOdinFireResist = loadPropBool("ringOfOdin.fireResist", desc, ringOfOdinFireResist);
@@ -23,8 +23,8 @@ public final class MethodHandles {
spawnRange_getter, spawnCount_getter, maxNearbyEntities_getter,
maxSpawnDelay_getter, minSpawnDelay_getter,
spawnDelay_getter, spawnDelay_setter, prevMobRotation_setter, mobRotation_setter, potentialSpawns_getter,
randomEntity_getter, isActivated, // MobSpawnerBaseLogic
breakSound_getter; // SoundType
randomEntity_getter, isActivated; // MobSpawnerBaseLogic
static {
try {
@@ -81,10 +81,6 @@ public final class MethodHandles {
f.setAccessible(true);
randomEntity_getter = publicLookup().unreflectGetter(f);
f = ReflectionHelper.findField(SoundType.class, LibObfuscation.BREAK_SOUND);
f.setAccessible(true);
breakSound_getter = publicLookup().unreflectGetter(f);
Method m = ReflectionHelper.findMethod(MobSpawnerBaseLogic.class, null, LibObfuscation.IS_ACTIVATED);
m.setAccessible(true);
isActivated = publicLookup().unreflect(m);
@@ -43,17 +43,8 @@ import java.util.Spliterators;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
// Some methods from OpenBlocksLib: https://github.com/OpenMods/OpenModsLib
public class InventoryHelper {
public static int[] buildSlotsForLinearInventory(IInventory inv) {
int[] slots = new int[inv.getSizeInventory()];
for (int i = 0; i < slots.length; i++)
slots[i] = i;
return slots;
}
public static InvWithLocation getInventoryWithLocation(World world, BlockPos pos, EnumFacing side) {
IItemHandler ret = getInventory(world, pos, side);
if(ret == null)
@@ -1,39 +0,0 @@
/**
* This class was created by <Vazkii>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
*
* Botania is Open Source and distributed under the
* Botania License: http://botaniamod.net/license.php
*
* File Created @ [May 31, 2014, 10:31:46 PM (GMT)]
*/
package vazkii.botania.common.core.version;
import net.minecraftforge.common.MinecraftForge;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
public class ThreadVersionChecker extends Thread {
private static final String LINK = "https://raw.githubusercontent.com/williewillus/Botania/MC19/version/" + MinecraftForge.MC_VERSION + ".txt";
public ThreadVersionChecker() {
setName("Botania Version Checker Thread");
setDaemon(true);
start();
}
@Override
public void run() {
try(BufferedReader r = new BufferedReader(new InputStreamReader(new URL(LINK).openStream()))) {
VersionChecker.onlineVersion = r.readLine();
} catch(IOException e) {
e.printStackTrace();
}
VersionChecker.doneChecking = true;
}
}
@@ -17,7 +17,10 @@ import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.Style;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.common.ForgeVersion;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.common.ModContainer;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent.Phase;
@@ -30,34 +33,32 @@ public final class VersionChecker {
private static final int FLAVOUR_MESSAGES = 65;
public static boolean doneChecking = false;
public static String onlineVersion = "";
public static boolean triedToWarnPlayer = false;
private static boolean triedToWarnPlayer = false;
public static boolean startedDownload = false;
public static boolean downloadedFile = false;
public static void init() {
new ThreadVersionChecker();
MinecraftForge.EVENT_BUS.register(VersionChecker.class);
}
@SubscribeEvent
public static void onTick(ClientTickEvent event) {
if(doneChecking && event.phase == Phase.END && Minecraft.getMinecraft().thePlayer != null && !triedToWarnPlayer) {
if(!onlineVersion.isEmpty()) {
if(!triedToWarnPlayer && event.phase == Phase.END && Minecraft.getMinecraft().thePlayer != null) {
ModContainer botaniaContainer = Loader.instance().getIndexedModList().get(LibMisc.MOD_ID);
ForgeVersion.CheckResult result = ForgeVersion.getResult(botaniaContainer);
if(result.status != ForgeVersion.Status.PENDING)
triedToWarnPlayer = true;
if(result.status == ForgeVersion.Status.OUTDATED) {
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
int onlineBuild = Integer.parseInt(onlineVersion.split("-")[1]);
int clientBuild = LibMisc.BUILD.contains("GRADLE") ? Integer.MIN_VALUE : Integer.parseInt(LibMisc.BUILD);
if(onlineBuild > clientBuild) {
player.addChatComponentMessage(new TextComponentTranslation("botania.versioning.flavour" + player.worldObj.rand.nextInt(FLAVOUR_MESSAGES)).setStyle(new Style().setColor(TextFormatting.LIGHT_PURPLE)));
player.addChatComponentMessage(new TextComponentTranslation("botania.versioning.outdated", clientBuild, onlineBuild));
player.addChatComponentMessage(new TextComponentTranslation("botania.versioning.flavour" + player.worldObj.rand.nextInt(FLAVOUR_MESSAGES)).setStyle(new Style().setColor(TextFormatting.LIGHT_PURPLE)));
player.addChatComponentMessage(new TextComponentTranslation("botania.versioning.outdated", botaniaContainer.getVersion(), result.target));
ITextComponent component = ITextComponent.Serializer.jsonToComponent(I18n.format("botania.versioning.updateMessage", onlineVersion));
player.addChatComponentMessage(component);
}
ITextComponent component = ITextComponent.Serializer.jsonToComponent(I18n.format("botania.versioning.updateMessage", result.target));
player.addChatComponentMessage(component);
}
triedToWarnPlayer = true;
}
}
@@ -131,13 +131,11 @@ public final class ModManaAlchemyRecipes {
prismarineRecipe = BotaniaAPI.registerManaAlchemyRecipe(new ItemStack(Items.PRISMARINE_SHARD), new ItemStack(Items.QUARTZ), 200);
if(ConfigHandler.stones18Enabled) {
stoneRecipes = new ArrayList<>();
stoneRecipes.add(BotaniaAPI.registerManaAlchemyRecipe(new ItemStack(Blocks.STONE, 1, 5), "stone", 200)); // Stone->Andesite
stoneRecipes.add(BotaniaAPI.registerManaAlchemyRecipe(new ItemStack(Blocks.STONE, 1, 3), new ItemStack(Blocks.STONE, 1, 5), 200)); // Andesite->Diorite
stoneRecipes.add(BotaniaAPI.registerManaAlchemyRecipe(new ItemStack(Blocks.STONE, 1, 1), new ItemStack(Blocks.STONE, 1, 3), 200)); // Diorite->Granite
stoneRecipes.add(BotaniaAPI.registerManaAlchemyRecipe(new ItemStack(Blocks.STONE, 1, 5), new ItemStack(Blocks.STONE, 1, 1), 200)); // Granite->Andesite
}
stoneRecipes = new ArrayList<>();
stoneRecipes.add(BotaniaAPI.registerManaAlchemyRecipe(new ItemStack(Blocks.STONE, 1, 5), new ItemStack(Blocks.STONE), 200)); // Stone->Andesite
stoneRecipes.add(BotaniaAPI.registerManaAlchemyRecipe(new ItemStack(Blocks.STONE, 1, 3), new ItemStack(Blocks.STONE, 1, 5), 200)); // Andesite->Diorite
stoneRecipes.add(BotaniaAPI.registerManaAlchemyRecipe(new ItemStack(Blocks.STONE, 1, 1), new ItemStack(Blocks.STONE, 1, 3), 200)); // Diorite->Granite
stoneRecipes.add(BotaniaAPI.registerManaAlchemyRecipe(new ItemStack(Blocks.STONE, 1, 5), new ItemStack(Blocks.STONE, 1, 1), 200)); // Granite->Andesite
tallgrassRecipes = new ArrayList<>();
tallgrassRecipes.add(BotaniaAPI.registerManaAlchemyRecipe(new ItemStack(Blocks.DEADBUSH), new ItemStack(Blocks.TALLGRASS, 1, 2), 500));
@@ -35,6 +35,9 @@ import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.oredict.RecipeSorter;
import net.minecraftforge.oredict.RecipeSorter.Category;
import vazkii.botania.api.item.IBlockProvider;
@@ -79,59 +82,41 @@ public class ItemBlackHoleTalisman extends ItemMod implements IBlockProvider {
@Nonnull
@Override
public EnumActionResult onItemUse(ItemStack par1ItemStack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float par8, float par9, float par10) {
public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
IBlockState state = world.getBlockState(pos);
boolean set = setBlock(par1ItemStack, state.getBlock(), state.getBlock().getMetaFromState(state));
boolean set = setBlock(stack, state.getBlock(), state.getBlock().getMetaFromState(state));
if(!set) {
Block bBlock = getBlock(par1ItemStack);
int bmeta = getBlockMeta(par1ItemStack);
Block bBlock = getBlock(stack);
int bmeta = getBlockMeta(stack);
TileEntity tile = world.getTileEntity(pos);
if(tile != null && tile instanceof IInventory) {
IInventory inv = (IInventory) tile;
int[] slots = inv instanceof ISidedInventory ? ((ISidedInventory) inv).getSlotsForFace(side) : InventoryHelper.buildSlotsForLinearInventory(inv);
for(int slot : slots) {
ItemStack stackInSlot = inv.getStackInSlot(slot);
if(stackInSlot == null) {
ItemStack stack = new ItemStack(bBlock, 1, bmeta);
int maxSize = stack.getMaxStackSize();
stack.stackSize = remove(par1ItemStack, maxSize);
if(stack.stackSize != 0) {
if(inv.isItemValidForSlot(slot, stack) && (!(inv instanceof ISidedInventory) || ((ISidedInventory) inv).canInsertItem(slot, stack, side))) {
inv.setInventorySlotContents(slot, stack);
inv.markDirty();
set = true;
}
}
} else if(stackInSlot.getItem() == Item.getItemFromBlock(bBlock) && stackInSlot.getItemDamage() == bmeta) {
int maxSize = stackInSlot.getMaxStackSize();
int missing = maxSize - stackInSlot.stackSize;
if(inv.isItemValidForSlot(slot, stackInSlot) && (!(inv instanceof ISidedInventory) || ((ISidedInventory) inv).canInsertItem(slot, stackInSlot, side))) {
stackInSlot.stackSize += remove(par1ItemStack, missing);
inv.markDirty();
set = true;
}
}
}
if(tile != null && tile.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side)) {
IItemHandler inv = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side);
ItemStack toAdd = new ItemStack(bBlock, 1, bmeta);
int maxSize = toAdd.getMaxStackSize();
toAdd.stackSize = remove(stack, maxSize);
ItemStack remainder = ItemHandlerHelper.insertItemStacked(inv, toAdd, false);
if(remainder != null)
add(stack, remainder.stackSize);
} else {
int entities = world.getEntitiesWithinAABB(EntityLivingBase.class, new AxisAlignedBB(pos.offset(side), pos.offset(side).add(1, 1, 1))).size();
BlockPos correctedPos = bBlock.isReplaceable(world, pos) ? pos : pos.offset(side);
if(entities == 0 && !(correctedPos.getY() < 0) && !(correctedPos.getY() >= 256)) {
int remove = player.capabilities.isCreativeMode ? 1 : remove(par1ItemStack, 1);
int remove = player.capabilities.isCreativeMode ? 1 : remove(stack, 1);
if(remove > 0) {
ItemStack stack = new ItemStack(bBlock, 1, bmeta);
ItemsRemainingRenderHandler.set(stack, getBlockCount(par1ItemStack));
ItemStack toUse = new ItemStack(bBlock, 1, bmeta);
ItemsRemainingRenderHandler.set(toUse, getBlockCount(stack));
Item.getItemFromBlock(bBlock).onItemUse(stack, player, world, pos, hand, side, par8, par9, par10);
Item.getItemFromBlock(bBlock).onItemUse(toUse, player, world, pos, hand, side, hitX, hitY, hitZ);
set = true;
}
}
}
}
player.setItemStackToSlot(hand == EnumHand.MAIN_HAND ? EntityEquipmentSlot.MAINHAND : EntityEquipmentSlot.OFFHAND, par1ItemStack);
player.setItemStackToSlot(hand == EnumHand.MAIN_HAND ? EntityEquipmentSlot.MAINHAND : EntityEquipmentSlot.OFFHAND, stack);
return set ? EnumActionResult.SUCCESS : EnumActionResult.PASS;
}
@@ -144,7 +129,6 @@ public class ItemBlackHoleTalisman extends ItemMod implements IBlockProvider {
int highest = -1;
int[] counts = new int[player.inventory.getSizeInventory() - player.inventory.armorInventory.length];
Arrays.fill(counts, 0);
for(int i = 0; i < counts.length; i++) {
ItemStack stack = player.inventory.getStackInSlot(i);
@@ -85,8 +85,7 @@ public class ItemBlackLotus extends ItemMod implements IManaDissolvable {
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerItemModel(this, 0);
ModelHandler.registerItemModel(this, 1);
ModelHandler.registerItemAppendMeta(this, 2, LibItemNames.BLACK_LOTUS);
}
}
@@ -1408,11 +1408,9 @@ public final class LexiconData {
phantomInk = new BasicLexiconEntry(LibLexicon.MISC_PHANTOM_INK, categoryMisc);
phantomInk.setLexiconPages(new PageText("0"), new PageCraftingRecipe("1", ModCraftingRecipes.recipePhantomInk));
if (ConfigHandler.stones18Enabled) {
stoneAlchemy = new BasicLexiconEntry(LibLexicon.MISC_STONE_ALCHEMY, categoryMisc);
stoneAlchemy.setLexiconPages(new PageText("0"),
new PageManaInfusionRecipe("1", ModManaAlchemyRecipes.stoneRecipes));
}
stoneAlchemy = new BasicLexiconEntry(LibLexicon.MISC_STONE_ALCHEMY, categoryMisc);
stoneAlchemy.setLexiconPages(new PageText("0"),
new PageManaInfusionRecipe("1", ModManaAlchemyRecipes.stoneRecipes));
blazeBlock = new BasicLexiconEntry(LibLexicon.MISC_BLAZE_BLOCK, categoryMisc);
blazeBlock.setLexiconPages(new PageText("0"), new PageCraftingRecipe("1", ModCraftingRecipes.recipeBlazeBlock));
@@ -17,7 +17,7 @@ public final class LibMisc {
public static final String MOD_NAME = MOD_ID;
public static final String BUILD = "GRADLE:BUILD";
public static final String VERSION = "GRADLE:VERSION-" + BUILD;
public static final String DEPENDENCIES = "required-after:Forge@[12.18.1.2014,];required-after:Baubles;after:Thaumcraft";
public static final String DEPENDENCIES = "required-after:Forge@[12.18.1.2042,];required-after:Baubles;after:Thaumcraft";
public static final String MC_VERSIONS = "[1.10.2]";
public static final String UPDATE_JSON = "https://raw.githubusercontent.com/williewillus/Botania/HEAD/version/update.json";
@@ -54,7 +54,6 @@ public final class LibObfuscation {
// PlayerControllerMP
public static final String[] NET_CLIENT_HANDLER = new String[] { "netClientHandler", "field_78774_b", "b" };
public static final String[] CURRENT_GAME_TYPE = new String[] { "currentGameType", "field_78779_k", "i" };
// MobSpawnerBaseLogic
public static final String[] IS_ACTIVATED = new String[] { "isActivated" ,"func_98279_f", "h" };
@@ -90,19 +89,4 @@ public final class LibObfuscation {
public static final String[] GL_SKY_LIST = new String[] { "glSkyList", "field_72771_w", "q" };
public static final String[] GL_SKY_LIST2 = new String[] { "glSkyList2", "field_72781_x", "r" };
// EntityRenderer
public static final String[] FAR_PLANE_DISTANCE = { "farPlaneDistance", "field_78530_s", "k" };
public static final String[] HURT_CAMERA_EFFECT = { "hurtCameraEffect", "func_78482_e", "d" };
public static final String[] SETUP_VIEW_BOBBING = { "setupViewBobbing", "func_78475_f", "e" };
public static final String[] ENABLE_LIGHTMAP = { "enableLightmap", "func_180436_i", "i" };
public static final String[] DISABLE_LIGHTMAP = { "disableLightmap", "func_175072_h", "h" };
public static final String[] GET_FOV_MODIFIER = { "getFOVModifier", "func_78481_a", "a" };
// ItemRenderer todo 1.9 dual wielding
public static final String[] PREV_EQUIPPED_PROGRESS = { "prevEquippedProgress", "field_78451_d", "f" };
public static final String[] EQUIPPED_PROGRESS = { "equippedProgress", "field_78454_c", "e" };
// SoundType
public static final String[] BREAK_SOUND = { "breakSound", "field_185862_o", "o" };
}
@@ -78,10 +78,7 @@ public final class SkyblockWorldEvents {
if(event.getWorld().isRemote)
event.getEntityPlayer().swingArm(event.getHand());
else {
try {
SoundEvent breakSound = (SoundEvent) MethodHandles.breakSound_getter.invokeExact(block.getSoundType());
event.getWorld().playSound(null, event.getPos(), breakSound, SoundCategory.BLOCKS, block.getSoundType().getVolume() * 0.4F, block.getSoundType().getPitch() + (float) (Math.random() * 0.2 - 0.1));
} catch (Throwable ignore) {}
event.getWorld().playSound(null, event.getPos(), block.getSoundType().getBreakSound(), SoundCategory.BLOCKS, block.getSoundType().getVolume() * 0.4F, block.getSoundType().getPitch() + (float) (Math.random() * 0.2 - 0.1));
if(Math.random() < 0.8)
event.getEntityPlayer().dropItem(new ItemStack(ModItems.manaResource, 1, 21), false);
@@ -0,0 +1,8 @@
Thanks for improving Botania with your artwork!
Some things to keep in mind:
1. Keep your textures in powers of two dimensions
2. Edit the jsons in models/block, not the ones in blockstates/
3. Clean up after yourself - no texture errors on startup!
Thanks and have at it!
@@ -1,14 +1,14 @@
{
"variants": {
"variant=default": { "model": "botania:default_apothecary" },
"variant=forest": { "model": "botania:forest_apothecary" },
"variant=plains": { "model": "botania:plains_apothecary" },
"variant=mountain": { "model": "botania:mountain_apothecary" },
"variant=fungal": { "model": "botania:fungal_apothecary" },
"variant=swamp": { "model": "botania:swamp_apothecary" },
"variant=desert": { "model": "botania:desert_apothecary" },
"variant=taiga": { "model": "botania:taiga_apothecary" },
"variant=mesa": { "model": "botania:mesa_apothecary" },
"variant=mossy": { "model": "botania:mossy_apothecary" }
"variant=default": { "model": "botania:apothecaries/default_apothecary" },
"variant=forest": { "model": "botania:apothecaries/forest_apothecary" },
"variant=plains": { "model": "botania:apothecaries/plains_apothecary" },
"variant=mountain": { "model": "botania:apothecaries/mountain_apothecary" },
"variant=fungal": { "model": "botania:apothecaries/fungal_apothecary" },
"variant=swamp": { "model": "botania:apothecaries/swamp_apothecary" },
"variant=desert": { "model": "botania:apothecaries/desert_apothecary" },
"variant=taiga": { "model": "botania:apothecaries/taiga_apothecary" },
"variant=mesa": { "model": "botania:apothecaries/mesa_apothecary" },
"variant=mossy": { "model": "botania:apothecaries/mossy_apothecary" }
}
}
@@ -1,9 +0,0 @@
{
"forge_marker": 1,
"variants": {
"normal": [{
"model": "minecraft:cube_all",
"textures": { "all": "botania:blocks/biomeStome11" }
}]
}
}
@@ -1,20 +1,20 @@
{
"variants": {
"variant=forest": { "model": "botania:forest_stone" },
"variant=plains": { "model": "botania:plains_stone" },
"variant=mountain": { "model": "botania:mountain_stone" },
"variant=fungal": { "model": "botania:fungal_stone" },
"variant=swamp": { "model": "botania:swamp_stone" },
"variant=desert": { "model": "botania:desert_stone" },
"variant=taiga": { "model": "botania:taiga_stone" },
"variant=mesa": { "model": "botania:mesa_stone" },
"variant=forest_cobble": { "model": "botania:forest_cobble_stone" },
"variant=plains_cobble": { "model": "botania:plains_cobble_stone" },
"variant=mountain_cobble": { "model": "botania:mountain_cobble_stone" },
"variant=fungal_cobble": { "model": "botania:fungal_cobble_stone" },
"variant=swamp_cobble": { "model": "botania:swamp_cobble_stone" },
"variant=desert_cobble": { "model": "botania:desert_cobble_stone" },
"variant=taiga_cobble": { "model": "botania:taiga_cobble_stone" },
"variant=mesa_cobble": { "model": "botania:mesa_cobble_stone" }
"variant=forest": { "model": "botania:metamorphic/forest_stone" },
"variant=plains": { "model": "botania:metamorphic/plains_stone" },
"variant=mountain": { "model": "botania:metamorphic/mountain_stone" },
"variant=fungal": { "model": "botania:metamorphic/fungal_stone" },
"variant=swamp": { "model": "botania:metamorphic/swamp_stone" },
"variant=desert": { "model": "botania:metamorphic/desert_stone" },
"variant=taiga": { "model": "botania:metamorphic/taiga_stone" },
"variant=mesa": { "model": "botania:metamorphic/mesa_stone" },
"variant=forest_cobble": { "model": "botania:metamorphic/forest_cobble_stone" },
"variant=plains_cobble": { "model": "botania:metamorphic/plains_cobble_stone" },
"variant=mountain_cobble": { "model": "botania:metamorphic/mountain_cobble_stone" },
"variant=fungal_cobble": { "model": "botania:metamorphic/fungal_cobble_stone" },
"variant=swamp_cobble": { "model": "botania:metamorphic/swamp_cobble_stone" },
"variant=desert_cobble": { "model": "botania:metamorphic/desert_cobble_stone" },
"variant=taiga_cobble": { "model": "botania:metamorphic/taiga_cobble_stone" },
"variant=mesa_cobble": { "model": "botania:metamorphic/mesa_cobble_stone" }
}
}
@@ -1,5 +1,5 @@
{
"variants": {
"normal": { "model": "botania:forest_stone" }
"normal": { "model": "botania:metamorphic/forest_stone" }
}
}
@@ -1,75 +0,0 @@
{
"forge_marker": 1,
"defaults": {
"model": "botania:dummy",
"textures": {
"particle": "#wall"
},
"uvlock": true,
"transform": "forge:default-block"
},
"variants": {
"north": {
"true": { "submodel": "minecraft:wall_side" },
"false": {}
},
"south": {
"true": { "submodel": "minecraft:wall_side", "y": 180 },
"false": {}
},
"west": {
"true": { "submodel": "minecraft:wall_side", "y": 270 },
"false": {}
},
"east": {
"true": { "submodel": "minecraft:wall_side", "y": 90 },
"false": {}
},
"up": {
"true": { "submodel": "minecraft:wall_post" },
"false": {}
},
"bswall_variant": {
"forest_cobble": { "textures": { "wall": "botania:blocks/biomeStone8" } },
"plains_cobble": { "textures": { "wall": "botania:blocks/biomeStone9" } },
"mountain_cobble": { "textures": { "wall": "botania:blocks/biomeStone10" } },
"fungal_cobble": { "textures": { "wall": "botania:blocks/biomeStone11" } },
"swamp_cobble": { "textures": { "wall": "botania:blocks/biomeStone12" } },
"desert_cobble": { "textures": { "wall": "botania:blocks/biomeStone13" } },
"taiga_cobble": { "textures": { "wall": "botania:blocks/biomeStone14" } },
"mesa_cobble": { "textures": { "wall": "botania:blocks/biomeStone15" } }
},
"inventory_forest_cobble": [{
"textures": { "wall": "botania:blocks/biomeStone8" },
"model": "minecraft:wall_inventory"
}],
"inventory_plains_cobble": [{
"textures": { "wall": "botania:blocks/biomeStone9" },
"model": "minecraft:wall_inventory"
}],
"inventory_mountain_cobble": [{
"textures": { "wall": "botania:blocks/biomeStone10" },
"model": "minecraft:wall_inventory"
}],
"inventory_fungal_cobble": [{
"textures": { "wall": "botania:blocks/biomeStone11" },
"model": "minecraft:wall_inventory"
}],
"inventory_swamp_cobble": [{
"textures": { "wall": "botania:blocks/biomeStone12" },
"model": "minecraft:wall_inventory"
}],
"inventory_desert_cobble": [{
"textures": { "wall": "botania:blocks/biomeStone13" },
"model": "minecraft:wall_inventory"
}],
"inventory_taiga_cobble": [{
"textures": { "wall": "botania:blocks/biomeStone14" },
"model": "minecraft:wall_inventory"
}],
"inventory_mesa_cobble": [{
"textures": { "wall": "botania:blocks/biomeStone15" },
"model": "minecraft:wall_inventory"
}]
}
}
@@ -1,5 +1,5 @@
{
"variants": {
"normal": { "model": "botania:mountain_cobble_stone" }
"normal": { "model": "botania:metamorphic/mountain_cobble_stone" }
}
}
@@ -1,5 +1,5 @@
{
"variants": {
"normal": { "model": "botania:fungal_cobble_stone" }
"normal": { "model": "botania:metamorphic/fungal_cobble_stone" }
}
}
@@ -1,5 +1,5 @@
{
"variants": {
"normal": { "model": "botania:swamp_cobble_stone" }
"normal": { "model": "botania:metamorphic/swamp_cobble_stone" }
}
}
@@ -1,5 +1,5 @@
{
"variants": {
"normal": { "model": "botania:desert_cobble_stone" }
"normal": { "model": "botania:metamorphic/desert_cobble_stone" }
}
}
@@ -1,5 +1,5 @@
{
"variants": {
"normal": { "model": "botania:taiga_cobble_stone" }
"normal": { "model": "botania:metamorphic/taiga_cobble_stone" }
}
}
@@ -1,5 +1,5 @@
{
"variants": {
"normal": { "model": "botania:mesa_cobble_stone" }
"normal": { "model": "botania:metamorphic/mesa_cobble_stone" }
}
}
@@ -1,5 +1,5 @@
{
"variants": {
"normal": { "model": "botania:plains_stone" }
"normal": { "model": "botania:metamorphic/plains_stone" }
}
}
@@ -1,5 +1,5 @@
{
"variants": {
"normal": { "model": "botania:mountain_stone" }
"normal": { "model": "botania:metamorphic/mountain_stone" }
}
}
@@ -1,5 +1,5 @@
{
"variants": {
"normal": { "model": "botania:fungal_stone" }
"normal": { "model": "botania:metamorphic/fungal_stone" }
}
}
@@ -1,5 +1,5 @@
{
"variants": {
"normal": { "model": "botania:swamp_stone" }
"normal": { "model": "botania:metamorphic/swamp_stone" }
}
}
@@ -1,5 +1,5 @@
{
"variants": {
"normal": { "model": "botania:desert_stone" }
"normal": { "model": "botania:metamorphic/desert_stone" }
}
}
@@ -1,5 +1,5 @@
{
"variants": {
"normal": { "model": "botania:taiga_stone" }
"normal": { "model": "botania:metamorphic/taiga_stone" }
}
}
@@ -1,5 +1,5 @@
{
"variants": {
"normal": { "model": "botania:mesa_stone" }
"normal": { "model": "botania:metamorphic/mesa_stone" }
}
}
@@ -1,5 +1,5 @@
{
"variants": {
"normal": { "model": "botania:forest_cobble_stone" }
"normal": { "model": "botania:metamorphic/forest_cobble_stone" }
}
}
@@ -1,5 +1,5 @@
{
"variants": {
"normal": { "model": "botania:plains_cobble_stone" }
"normal": { "model": "botania:metamorphic/plains_cobble_stone" }
}
}
@@ -1,25 +1,20 @@
{
"forge_marker": 1,
"defaults": {
"model": "minecraft:cube_all",
"transform": "forge:default-block"
},
"variants": {
"variant=forest": [{ "textures": { "all": "botania:blocks/biomeStone16" } }],
"variant=plains": [{ "textures": { "all": "botania:blocks/biomeStone17" } }],
"variant=mountain": [{ "textures": { "all": "botania:blocks/biomeStone18" } }],
"variant=fungal": [{ "textures": { "all": "botania:blocks/biomeStone19" } }],
"variant=swamp": [{ "textures": { "all": "botania:blocks/biomeStone20" } }],
"variant=desert": [{ "textures": { "all": "botania:blocks/biomeStone21" } }],
"variant=taiga": [{ "textures": { "all": "botania:blocks/biomeStone22" } }],
"variant=mesa": [{ "textures": { "all": "botania:blocks/biomeStone23" } }],
"variant=chiseled_forest": [{ "textures": { "all": "botania:blocks/biomeStone24" } }],
"variant=chiseled_plains": [{ "textures": { "all": "botania:blocks/biomeStone25" } }],
"variant=chiseled_mountain": [{ "textures": { "all": "botania:blocks/biomeStone26" } }],
"variant=chiseled_fungal": [{ "textures": { "all": "botania:blocks/biomeStone27" } }],
"variant=chiseled_swamp": [{ "textures": { "all": "botania:blocks/biomeStone28" } }],
"variant=chiseled_desert": [{ "textures": { "all": "botania:blocks/biomeStone29" } }],
"variant=chiseled_taiga": [{ "textures": { "all": "botania:blocks/biomeStone30" } }],
"variant=chiseled_mesa": [{ "textures": { "all": "botania:blocks/biomeStone31" } }]
"variant=forest": { "model": "botania:metamorphic/forest_brick" },
"variant=plains": { "model": "botania:metamorphic/plains_brick" },
"variant=mountain": { "model": "botania:metamorphic/mountain_brick" },
"variant=fungal": { "model": "botania:metamorphic/fungal_brick" },
"variant=swamp": { "model": "botania:metamorphic/swamp_brick" },
"variant=desert": { "model": "botania:metamorphic/desert_brick" },
"variant=taiga": { "model": "botania:metamorphic/taiga_brick" },
"variant=mesa": { "model": "botania:metamorphic/mesa_brick" },
"variant=chiseled_forest": { "model": "botania:metamorphic/forest_brick_chiseled" },
"variant=chiseled_plains": { "model": "botania:metamorphic/plains_brick_chiseled" },
"variant=chiseled_mountain": { "model": "botania:metamorphic/mountain_brick_chiseled" },
"variant=chiseled_fungal": { "model": "botania:metamorphic/fungal_brick_chiseled" },
"variant=chiseled_swamp": { "model": "botania:metamorphic/swamp_brick_chiseled" },
"variant=chiseled_desert": { "model": "botania:metamorphic/desert_brick_chiseled" },
"variant=chiseled_taiga": { "model": "botania:metamorphic/taiga_brick_chiseled" },
"variant=chiseled_mesa": { "model": "botania:metamorphic/mesa_brick_chiseled" }
}
}
@@ -1,9 +1,5 @@
{
"forge_marker": 1,
"variants": {
"normal": [{
"model": "minecraft:cube_all",
"textures": { "all": "botania:blocks/biomeStone16" }
}]
"normal": { "model": "botania:metamorphic/forest_brick" }
}
}
@@ -1,9 +1,5 @@
{
"forge_marker": 1,
"variants": {
"normal": [{
"model": "minecraft:cube_all",
"textures": { "all": "botania:blocks/biomeStone17" }
}]
"normal": { "model": "botania:metamorphic/plains_brick" }
}
}
@@ -1,9 +1,5 @@
{
"forge_marker": 1,
"variants": {
"normal": [{
"model": "minecraft:cube_all",
"textures": { "all": "botania:blocks/biomeStone18" }
}]
"normal": { "model": "botania:metamorphic/mountain_brick" }
}
}
@@ -1,9 +1,5 @@
{
"forge_marker": 1,
"variants": {
"normal": [{
"model": "minecraft:cube_all",
"textures": { "all": "botania:blocks/biomeStone19" }
}]
"normal": { "model": "botania:metamorphic/fungal_brick" }
}
}
Loaded 100 of 324 files, more files were not shown because too many files have changed in this diff. Show more