Compare commits

...
54 Commits
Author SHA1 Message Date
Vincent Lee 67ef25de09 Prep for debug helper build 2016-07-31 20:07:49 -05:00
Vincent Lee 072e3a693b Fix extended state blocks shitting themselves 2016-07-31 15:05:27 -05:00
Vincent Lee b29c810a80 Use face quads in floating models. Partially alleviates #414 2016-07-31 12:55:53 -05:00
Vincent Lee 3f8e3f72d9 Version checker just piggybacks off forge one now 2016-07-30 16:37:50 -05:00
Vincent Lee 5041e23ede Cleanup, black hole talisman uses caps, debug handler shows extended state 2016-07-30 16:24:42 -05:00
Vincent Lee 21a35c9c92 1.8 recipes now permanently on, fix initial loop recipe being oredicted. Closes #413 2016-07-30 14:38:46 -05:00
Vincent Lee 6d542dec5a Clean up methodhandles 2016-07-30 14:06:07 -05:00
Vincent Lee 4552a451ae Fix lexicon 3d model 2016-07-30 14:02:25 -05:00
Vincent Lee 5c33e95a54 Remove unused overload 2016-07-30 12:12:33 -05:00
Vincent Lee 1e2bd1d4cd Blocks now own their itemblock model registration 2016-07-30 12:11:28 -05:00
Vincent Lee 1cc995c986 Split black lotus metas 2016-07-30 10:56:14 -05:00
Vincent Lee 1799380064 Blocks own their statemappers 2016-07-30 10:52:48 -05:00
Vincent Lee 0d3ffa2598 Final model splitting, on to code cleanup 2016-07-30 10:38:57 -05:00
Vincent Lee 3dc65c80d8 More model cleanup, and add a readme for artists 2016-07-29 20:55:59 -05:00
Vincent Lee bc0da61058 Build 314 2016-07-29 18:41:07 -05:00
Vincent Lee c9e1647070 Fix crash 2016-07-29 18:24:16 -05:00
Vincent Lee d622f0cd58 Move block registration out of constructors 2016-07-29 18:04:17 -05:00
Vincent Lee 32a505a575 More model reorganization 2016-07-27 22:04:23 -05:00
Vincent Lee 7ce589c6db Made treasure enchants more expensive to apply, remove some log spam 2016-07-27 19:02:31 -05:00
Vincent Lee f0aa44999f Some biomestone jsons 2016-07-27 18:59:27 -05:00
Vincent Lee 88f99a636c Merge branch 'master' of github.com:williewillus/Botania 2016-07-26 20:31:08 -05:00
Vincent Lee 568139fd17 Merge pull request #406 from Flaxbeard/master
Added ManaDiscountEvent
2016-07-26 20:30:49 -05:00
Flaxbeard cf0189c3ee Added ManaDiscountEvent 2016-07-25 16:07:35 -05:00
Vincent Lee 2ee0d7f0ed More borign model cleaning 2016-07-24 21:36:49 -05:00
Vincent Lee 6997a96460 Slabs/walls/stairs own their own model registration 2016-07-24 15:45:43 -05:00
Vincent Lee 179ca23f6c Items now 'own' their own model registration! 2016-07-24 15:09:05 -05:00
Vincent Lee e7e5b1b484 Migrate other meshers 2016-07-24 14:01:14 -05:00
Vincent Lee fbd9917fd4 FOld more methods in 2016-07-24 13:18:46 -05:00
Vincent Lee 881e271a0b Lambdafy everything as they now work 2016-07-24 10:36:58 -05:00
Vincent Lee 3b5c500bc9 Clean up meshers 2016-07-24 10:12:12 -05:00
Vincent Lee 4751da9e7b Panes 2016-07-23 21:18:48 -05:00
Vincent Lee 1c4ae58377 Clean up the pools 2016-07-23 21:08:01 -05:00
Vincent Lee 9f0c710479 More 2016-07-23 20:51:45 -05:00
Vincent Lee 8a13a03016 Optimize number of slab models 2016-07-23 19:41:19 -05:00
Vincent Lee 7ef27df0bc Cleanup the cleanup 2016-07-23 19:29:36 -05:00
Vincent Lee 01a913c96c More model cleanup 2016-07-23 17:49:00 -05:00
Vincent Lee 110396f39e More model cleanup 2016-07-23 17:29:22 -05:00
Vincent Lee 233bc705b0 More model cleanup 2016-07-23 16:39:05 -05:00
Vincent Lee 6264ebddbc Move itemblock jsons to their own subfolder 2016-07-23 16:04:03 -05:00
Vincent Lee bedbf55b33 Separate out biome wall models. Don't worry it'll get organized. Closes #401 2016-07-23 15:58:03 -05:00
Vincent Lee a5d688883e Fix some walls being flipped, separate the models out 2016-07-23 15:31:18 -05:00
Vincent Lee 83d0b8dc12 Remvoe the nag (you're welcome) 2016-07-23 15:09:20 -05:00
Vincent Lee c05c1ef8bf Clean out lang files 2016-07-23 15:08:26 -05:00
Vincent Lee c5d5e59b96 Byebye Future (hah) stones! 2016-07-23 14:50:03 -05:00
Vincent Lee 1fd48994d7 Byebye ender stuff! 2016-07-23 14:17:27 -05:00
Vincent Lee cf56634a91 Byebye thatch and reeds! 2016-07-23 14:04:49 -05:00
Vincent Lee 1344bb8c08 Exorcism begins: remove (almost) all prismarine 2016-07-23 13:51:19 -05:00
Vincent Lee 2bf69eaa56 Useless constant change 2016-07-23 13:32:31 -05:00
Vincent Lee b242d43861 Update forge 2016-07-23 10:48:57 -05:00
Vincent Lee 404c39c8f8 Fix slingshot not firing properly, fixes #402 2016-07-22 18:33:36 -05:00
Vincent Lee d8bdb6a31d Fix cacophonium. Closes #400 2016-07-21 19:02:23 -05:00
Vincent Lee c5208175d7 Made a bunch of evthandlers static 2016-07-20 21:22:33 -05:00
Vincent Lee a0d0fefe8d Move to 1.10 2016-07-20 20:55:20 -05:00
Vincent Lee 87172ea3f2 Build 314 2016-07-20 20:29:16 -05:00
935 changed files with 4743 additions and 7673 deletions

No files matched your search

+3 -10
View File
@@ -46,7 +46,7 @@ minecraft {
version = "${config.mc_version}-${config.forge_version}"
runDir = "eclipse/assets"
mappings = "snapshot_20160518"
mappings = "snapshot_20160718"
//This, does the token replacement.
//Though, I reccomend this to be replaced with a token such as @VERSION@
replace 'GRADLE:BUILD', config.build_number
@@ -67,7 +67,7 @@ dependencies {
compile files(
'Baubles-deobf.jar'
)
deobfCompile "mezz.jei:jei_1.9.4:3.6.7.216"
deobfCompile "mezz.jei:jei_1.10.2:3.7.8.234"
//and a bit more for SCP
sshAntTask "org.apache.ant:ant-jsch:1.7.1", "jsch:jsch:0.1.29"
@@ -119,9 +119,7 @@ task incrementBuildNumber(dependsOn: 'reobfJar') << {
// todo make this flexibile - collection of supported mc versions
file('web/versions.ini').append("\n${version}=${minecraft.version}")
file('web/versions.ini').append("\n${version}=1.10.2")
file("${config.dir_repo}/version/${minecraft.version}.txt").write("${version}")
file("${config.dir_repo}/version/1.10.2.txt").write("${version}")
def updateJsonFile = file('version/update.json')
def updateJson = new JsonSlurper().parse(updateJsonFile) as Map
@@ -130,14 +128,10 @@ task incrementBuildNumber(dependsOn: 'reobfJar') << {
// Add to version section
updateJson."${minecraft.version}"."${version}" = "See https://github.com/williewillus/Botania/releases/${version}"
updateJson."1.10.2"."${version}" = "See https://github.com/williewillus/Botania/releases/${version}"
// Update promos
updateJson.promos."${minecraft.version}-latest" = "${version}"
updateJson.promos."${minecraft.version}-recommended" = "${version}"
updateJson.promos."1.10.2-latest" = "${version}"
updateJson.promos."1.10.2-recommended" = "${version}"
updateJsonFile.write(JsonOutput.prettyPrint(JsonOutput.toJson(updateJson)))
}
@@ -247,8 +241,7 @@ curseforge {
See https://github.com/williewillus/Botania/releases/tag/${version}
"""
releaseType = "release"
addGameVersion '1.9.4'
addGameVersion '1.10.2'
addGameVersion "${minecraft.version}"
relations {
requiredLibrary 'baubles'
}
+4 -4
View File
@@ -1,9 +1,9 @@
#
#Wed Jun 29 20:26:39 CDT 2016
#Fri Jul 29 18:40:22 CDT 2016
version=r1.8
dir_output=../Build Output/Botania/
forge_version=12.17.0.1965
mc_version=1.9.4
forge_version=12.18.1.2044
mc_version=1.10.2
dir_repo=./
build_number=313
build_number=315
mod_name=Botania
@@ -6,7 +6,7 @@ import java.util.Map;
import com.google.common.collect.Maps;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTBase.NBTPrimitive;
import net.minecraft.nbt.NBTPrimitive;
import net.minecraft.nbt.NBTTagString;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.IStringSerializable;
@@ -0,0 +1,39 @@
/**
* This class was created by <Flaxbeard>. 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 @ [Jul 25, 2016, 9:02:12 PM (GMT)]
*/
package vazkii.botania.api.mana;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.eventhandler.Event;
public class ManaDiscountEvent extends Event {
private final EntityPlayer entityPlayer;
private float discount;
public ManaDiscountEvent(EntityPlayer entityPlayer, float discount) {
this.entityPlayer = entityPlayer;
this.discount = discount;
}
public EntityPlayer getEntityPlayer() {
return entityPlayer;
}
public float getDiscount() {
return discount;
}
public void setDiscount(float discount) {
this.discount = discount;
}
}
@@ -13,6 +13,7 @@ package vazkii.botania.api.mana;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.MinecraftForge;
import vazkii.botania.api.BotaniaAPI;
public final class ManaItemHandler {
@@ -249,6 +250,10 @@ public final class ManaItemHandler {
if(armor != null && armor.getItem() instanceof IManaDiscountArmor)
discount += ((IManaDiscountArmor) armor.getItem()).getDiscount(armor, i, player);
}
ManaDiscountEvent event = new ManaDiscountEvent(player, discount);
MinecraftForge.EVENT_BUS.post(event);
discount = event.getDiscount();
return discount;
}
@@ -30,14 +30,11 @@ import vazkii.botania.api.state.enums.CratePattern;
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.EndBrickVariant;
import vazkii.botania.api.state.enums.FutureStoneVariant;
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.PrismarineVariant;
import vazkii.botania.api.state.enums.PylonVariant;
import vazkii.botania.api.state.enums.QuartzVariant;
import vazkii.botania.api.state.enums.SpreaderVariant;
@@ -90,18 +87,6 @@ public final class BotaniaStateProps {
/** Properties for individual blocks **/
// Block18Stone
public static final PropertyEnum<FutureStoneVariant> FUTURESTONE_VARIANT = PropertyEnum.create("variant", FutureStoneVariant.class);
// Block18StoneWall
public static final PropertyEnum<FutureStoneVariant> FUTURESTONEWALL_VARIANT = PropertyEnum.create("fswall_variant", FutureStoneVariant.class, new Predicate<FutureStoneVariant>() {
@Override
public boolean apply(FutureStoneVariant variant) {
// Just the four kinds (no polished, chiseled, etc.)
return variant.ordinal() >= 0 && variant.ordinal() <= 3;
}
});
// BlockAlfPortal
public static final PropertyEnum<AlfPortalState> ALFPORTAL_STATE = PropertyEnum.create("state", AlfPortalState.class);
@@ -134,9 +119,6 @@ public final class BotaniaStateProps {
// BlockEnchanter
public static final PropertyEnum<EnumFacing.Axis> ENCHANTER_DIRECTION = PropertyEnum.create("facing", EnumFacing.Axis.class, Predicates.not(Predicates.equalTo(EnumFacing.Axis.Y)));
// BlockEndStoneBrick
public static final PropertyEnum<EndBrickVariant> ENDBRICK_VARIANT = PropertyEnum.create("variant", EndBrickVariant.class);
// BlockForestDrum
public static final PropertyEnum<DrumVariant> DRUM_VARIANT = PropertyEnum.create("variant", DrumVariant.class);
@@ -188,9 +170,6 @@ public final class BotaniaStateProps {
// BlockPrism
public static final PropertyBool HAS_LENS = PropertyBool.create("has_lens");
// BlockPrismarine
public static final PropertyEnum<PrismarineVariant> PRISMARINE_VARIANT = PropertyEnum.create("variant", PrismarineVariant.class);
// BlockPylon
public static final PropertyEnum<PylonVariant> PYLON_VARIANT = PropertyEnum.create("variant", PylonVariant.class);
@@ -1,26 +0,0 @@
/**
* This class was created by <williewillus>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
* <p>
* Botania is Open Source and distributed under the
* Botania License: http://botaniamod.net/license.php
*/
package vazkii.botania.api.state.enums;
import net.minecraft.util.IStringSerializable;
import java.util.Locale;
public enum EndBrickVariant implements IStringSerializable {
END_STONE_BRICKS,
CHISELED_END_STONE_BRICKS,
ENDER_BRICKS,
PILLAR_ENDER_BRICKS;
@Override
public String getName() {
return name().toLowerCase(Locale.ROOT);
}
}
@@ -1,38 +0,0 @@
/**
* This class was created by <williewillus>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
* <p>
* Botania is Open Source and distributed under the
* Botania License: http://botaniamod.net/license.php
*/
package vazkii.botania.api.state.enums;
import net.minecraft.util.IStringSerializable;
import java.util.Locale;
public enum FutureStoneVariant implements IStringSerializable {
ANDESITE,
BASALT,
DIORITE,
GRANITE,
POLISHED_ANDESITE,
POLISHED_BASALT,
POLISHED_DIORITE,
POLISHED_GRANITE,
ANDESITE_BRICK,
BASALT_BRICK,
DIORITE_BRICK,
GRANITE_BRICK,
CHISELED_ANDESITE,
CHISELED_BASALT,
CHISELED_DIORITE,
CHISELED_GRANITE;
@Override
public String getName() {
return name().toLowerCase(Locale.ROOT);
}
}
@@ -1,25 +0,0 @@
/**
* This class was created by <williewillus>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
* <p>
* Botania is Open Source and distributed under the
* Botania License: http://botaniamod.net/license.php
*/
package vazkii.botania.api.state.enums;
import net.minecraft.util.IStringSerializable;
import java.util.Locale;
public enum PrismarineVariant implements IStringSerializable {
PRISMARINE,
PRISMARINE_BRICKS,
DARK_PRISMARINE;
@Override
public String getName() {
return name().toLowerCase(Locale.ROOT);
}
}
@@ -31,13 +31,15 @@ import java.util.WeakHashMap;
public final class BossBarHandler {
private BossBarHandler() {}
// Only access on the client thread!
public static final Set<IBotaniaBoss> bosses = Collections.newSetFromMap(new WeakHashMap<>());
public static final ResourceLocation defaultBossBar = new ResourceLocation(LibResources.GUI_BOSS_BAR);
private static final BarCallback barUniformCallback = new BarCallback();
@SubscribeEvent
public void onBarRender(RenderGameOverlayEvent.BossInfo evt) {
public static void onBarRender(RenderGameOverlayEvent.BossInfo evt) {
UUID infoUuid = evt.getBossInfo().getUniqueId();
for(IBotaniaBoss currentBoss : bosses) {
if(currentBoss.getBossInfoUuid().equals(infoUuid)) {
@@ -39,8 +39,10 @@ import java.util.List;
public final class BoundTileRenderer {
private BoundTileRenderer() {}
@SubscribeEvent
public void onWorldRenderLast(RenderWorldLastEvent event) {
public static void onWorldRenderLast(RenderWorldLastEvent event) {
GlStateManager.pushMatrix();
GL11.glPushAttrib(GL11.GL_LIGHTING_BIT);
GlStateManager.disableDepth();
@@ -89,11 +91,11 @@ public final class BoundTileRenderer {
GlStateManager.popMatrix();
}
private void renderBlockOutlineAt(BlockPos pos, int color) {
private static void renderBlockOutlineAt(BlockPos pos, int color) {
renderBlockOutlineAt(pos, color, 1F);
}
private void renderBlockOutlineAt(BlockPos pos, int color, float thickness) {
private static void renderBlockOutlineAt(BlockPos pos, int color, float thickness) {
double renderPosX, renderPosY, renderPosZ;
try {
@@ -140,7 +142,7 @@ public final class BoundTileRenderer {
GlStateManager.popMatrix();
}
private void renderBlockOutline(AxisAlignedBB aabb) {
private static void renderBlockOutline(AxisAlignedBB aabb) {
Tessellator tessellator = Tessellator.getInstance();
double ix = aabb.minX;
@@ -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();
@@ -28,7 +28,9 @@ import vazkii.botania.common.core.handler.ManaNetworkHandler;
import vazkii.botania.common.core.helper.PlayerHelper;
import vazkii.botania.common.item.ModItems;
public class ClientTickHandler {
public final class ClientTickHandler {
private ClientTickHandler() {}
public static int ticksWithLexicaOpen = 0;
public static int pageFlipTicks = 0;
@@ -37,14 +39,14 @@ public class ClientTickHandler {
public static float delta = 0;
public static float total = 0;
private void calcDelta() {
private static void calcDelta() {
float oldTotal = total;
total = ticksInGame + partialTicks;
delta = total - oldTotal;
}
@SubscribeEvent
public void renderTick(RenderTickEvent event) {
public static void renderTick(RenderTickEvent event) {
if(event.phase == Phase.START)
partialTicks = event.renderTickTime;
else {
@@ -54,7 +56,7 @@ public class ClientTickHandler {
}
@SubscribeEvent
public void clientTickEnd(ClientTickEvent event) {
public static void clientTickEnd(ClientTickEvent event) {
if(event.phase == Phase.END) {
RedStringRenderer.tick();
ItemsRemainingRenderHandler.tick();
@@ -41,25 +41,17 @@ public final class ColorHandler {
// 16 colors
blocks.registerBlockColorHandler(
new IBlockColor() {
@Override
public int colorMultiplier(@Nonnull IBlockState state, IBlockAccess world, BlockPos pos, int tintIndex) {
return state.getValue(BotaniaStateProps.COLOR).getMapColor().colorValue;
}
},
(state, world, pos, tintIndex) -> state.getValue(BotaniaStateProps.COLOR).getMapColor().colorValue,
ModBlocks.specialFlower, ModBlocks.manaBeacon, ModBlocks.petalBlock, ModBlocks.unstableBlock);
// Pool
blocks.registerBlockColorHandler(
new IBlockColor() {
@Override
public int colorMultiplier(@Nonnull IBlockState state, IBlockAccess world, BlockPos pos, int tintIndex) {
if (state.getValue(BotaniaStateProps.POOL_VARIANT) == PoolVariant.FABULOUS) {
float time = ClientTickHandler.ticksInGame + ClientTickHandler.partialTicks;
return Color.HSBtoRGB(time * 0.005F, 0.6F, 1F);
} else {
return state.getValue(BotaniaStateProps.COLOR).getMapColor().colorValue;
}
(state, world, pos, tintIndex) -> {
if (state.getValue(BotaniaStateProps.POOL_VARIANT) == PoolVariant.FABULOUS) {
float time = ClientTickHandler.ticksInGame + ClientTickHandler.partialTicks;
return Color.HSBtoRGB(time * 0.005F, 0.6F, 1F);
} else {
return state.getValue(BotaniaStateProps.COLOR).getMapColor().colorValue;
}
},
ModBlocks.pool
@@ -67,47 +59,40 @@ public final class ColorHandler {
// Spreader
blocks.registerBlockColorHandler(
new IBlockColor() {
@Override
public int colorMultiplier(@Nonnull IBlockState state, IBlockAccess world, BlockPos pos, int tintIndex) {
if(state.getValue(BotaniaStateProps.SPREADER_VARIANT) != SpreaderVariant.GAIA)
return 0xFFFFFF;
float time = ClientTickHandler.ticksInGame + ClientTickHandler.partialTicks;
return Color.HSBtoRGB((time * 5) % 360 / 360F, 0.4F, 0.9F);
}
(state, world, pos, tintIndex) -> {
if(state.getValue(BotaniaStateProps.SPREADER_VARIANT) != SpreaderVariant.GAIA)
return 0xFFFFFF;
float time = ClientTickHandler.ticksInGame + ClientTickHandler.partialTicks;
return Color.HSBtoRGB((time * 5) % 360 / 360F, 0.4F, 0.9F);
},
ModBlocks.spreader
);
// Platforms
blocks.registerBlockColorHandler(
new IBlockColor() {
@Override
public int colorMultiplier(@Nonnull IBlockState state, @Nullable IBlockAccess world, @Nullable BlockPos pos, int tintIndex) {
if (world != null && pos != null) {
TileEntity tile = world.getTileEntity(pos);
if(tile instanceof TileCamo) {
TileCamo camo = (TileCamo) tile;
IBlockState camoState = camo.camoState;
if(camoState != null)
return camoState.getBlock() instanceof BlockCamo ? 0xFFFFFF : Minecraft.getMinecraft().getBlockColors().colorMultiplier(camoState, world, pos, tintIndex);
}
(state, world, pos, tintIndex) -> {
if (world != null && pos != null) {
TileEntity tile = world.getTileEntity(pos);
if(tile instanceof TileCamo) {
TileCamo camo = (TileCamo) tile;
IBlockState camoState = camo.camoState;
if(camoState != null)
return camoState.getBlock() instanceof BlockCamo
? 0xFFFFFF
: Minecraft.getMinecraft().getBlockColors().colorMultiplier(camoState, world, pos, tintIndex);
}
return 0xFFFFFF;
}
return 0xFFFFFF;
}, ModBlocks.platform);
ItemColors items = Minecraft.getMinecraft().getItemColors();
items.registerItemColorHandler(new IItemColor() {
@Override
public int getColorFromItemstack(@Nonnull ItemStack stack, int tintIndex) {
Item item = stack.getItem();
if (item instanceof IColorable) {
return ((IColorable) item).getColorFromItemStack(stack, tintIndex);
} else {
return 0xFFFFFF;
}
items.registerItemColorHandler((stack, tintIndex) -> {
Item item = stack.getItem();
if (item instanceof IColorable) {
return ((IColorable) item).getColorFromItemStack(stack, tintIndex);
} else {
return 0xFFFFFF;
}
}, ModItems.manaResource, ModItems.twigWand, ModItems.dye, ModItems.petal, ModItems.manaGun, ModItems.manaMirror, ModItems.manaTablet, ModItems.signalFlare,
ModItems.spellCloth, ModItems.brewFlask, ModItems.brewVial, ModItems.incenseStick, ModItems.bloodPendant, ModItems.enderDagger,
@@ -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,17 +32,20 @@ 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 {
private DebugHandler() {}
private static final String PREFIX = TextFormatting.GREEN + "[Botania] " + TextFormatting.RESET;
@SubscribeEvent
public void onDrawDebugText(RenderGameOverlayEvent.Text event) {
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";
@@ -68,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");
@@ -70,10 +70,12 @@ import java.awt.*;
public final class HUDHandler {
private HUDHandler() {}
public static final ResourceLocation manaBar = new ResourceLocation(LibResources.GUI_MANA_HUD);
@SubscribeEvent(priority = EventPriority.HIGHEST)
public void onDrawScreenPre(RenderGameOverlayEvent.Pre event) {
public static void onDrawScreenPre(RenderGameOverlayEvent.Pre event) {
Minecraft mc = Minecraft.getMinecraft();
Profiler profiler = mc.mcProfiler;
@@ -90,7 +92,7 @@ public final class HUDHandler {
}
@SubscribeEvent
public void onDrawScreenPost(RenderGameOverlayEvent.Post event) {
public static void onDrawScreenPost(RenderGameOverlayEvent.Post event) {
Minecraft mc = Minecraft.getMinecraft();
Profiler profiler = mc.mcProfiler;
ItemStack main = mc.thePlayer.getHeldItemMainhand();
@@ -221,7 +223,7 @@ public final class HUDHandler {
}
}
private void renderWandModeDisplay(ItemStack stack, ScaledResolution res) {
private static void renderWandModeDisplay(ItemStack stack, ScaledResolution res) {
Minecraft mc = Minecraft.getMinecraft();
Profiler profiler = mc.mcProfiler;
@@ -244,7 +246,7 @@ public final class HUDHandler {
profiler.endSection();
}
private void renderManaInvBar(ScaledResolution res, boolean hasCreative, int totalMana, int totalMaxMana) {
private static void renderManaInvBar(ScaledResolution res, boolean hasCreative, int totalMana, int totalMaxMana) {
Minecraft mc = Minecraft.getMinecraft();
int width = 182;
int x = res.getScaledWidth() / 2 - width / 2;
@@ -273,7 +275,7 @@ public final class HUDHandler {
GL11.glColor4ub(((byte) 255), ((byte) 255), ((byte) 255), ((byte) 255));
}
private void renderPoolRecipeHUD(ScaledResolution res, TilePool tile, ItemStack stack) {
private static void renderPoolRecipeHUD(ScaledResolution res, TilePool tile, ItemStack stack) {
Minecraft mc = Minecraft.getMinecraft();
Profiler profiler = mc.mcProfiler;
@@ -305,7 +307,7 @@ public final class HUDHandler {
profiler.endSection();
}
private void renderCrystalCubeHUD(ScaledResolution res, TileCorporeaCrystalCube tile) {
private static void renderCrystalCubeHUD(ScaledResolution res, TileCorporeaCrystalCube tile) {
Minecraft mc = Minecraft.getMinecraft();
Profiler profiler = mc.mcProfiler;
@@ -331,7 +333,7 @@ public final class HUDHandler {
profiler.endSection();
}
private void drawLexiconHUD(ItemStack stack, IBlockState state, RayTraceResult pos, ScaledResolution res) {
private static void drawLexiconHUD(ItemStack stack, IBlockState state, RayTraceResult pos, ScaledResolution res) {
Minecraft mc = Minecraft.getMinecraft();
Block block = state.getBlock();
Profiler profiler = mc.mcProfiler;
@@ -398,7 +400,7 @@ public final class HUDHandler {
profiler.endSection();
}
private void renderNearIndexDisplay(ScaledResolution res) {
private static void renderNearIndexDisplay(ScaledResolution res) {
Minecraft mc = Minecraft.getMinecraft();
String txt0 = I18n.format("botaniamisc.nearIndex0");
String txt1 = TextFormatting.GRAY + I18n.format("botaniamisc.nearIndex1");
@@ -30,13 +30,15 @@ import java.util.Deque;
public class LightningHandler {
private LightningHandler() {}
private static final int BATCH_THRESHOLD = 200;
private static final ResourceLocation outsideResource = new ResourceLocation(LibResources.MISC_WISP_LARGE);
private static final ResourceLocation insideResource = new ResourceLocation(LibResources.MISC_WISP_SMALL);
public static final Deque<FXLightning> queuedLightningBolts = new ArrayDeque<>();
@SubscribeEvent
public void onRenderWorldLast(RenderWorldLastEvent event) {
public static void onRenderWorldLast(RenderWorldLastEvent event) {
Profiler profiler = Minecraft.getMinecraft().mcProfiler;
profiler.startSection("botania-particles");
@@ -8,52 +8,25 @@
*/
package vazkii.botania.client.core.handler;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import net.minecraft.block.Block;
import net.minecraft.block.BlockDoublePlant;
import net.minecraft.block.BlockFlower;
import net.minecraft.block.BlockSkull;
import net.minecraft.block.BlockSlab;
import net.minecraft.block.BlockWall;
import net.minecraft.client.renderer.ItemMeshDefinition;
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.item.ItemStack;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.ForgeHooksClient;
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.EndBrickVariant;
import vazkii.botania.api.state.enums.FutureStoneVariant;
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.PrismarineVariant;
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;
import vazkii.botania.common.block.ModFluffBlocks;
import vazkii.botania.common.block.decor.slabs.BlockModSlab;
import vazkii.botania.common.block.subtile.SubTileDecor;
import vazkii.botania.common.block.subtile.SubTileManastar;
import vazkii.botania.common.block.subtile.SubTilePureDaisy;
@@ -97,28 +70,12 @@ import vazkii.botania.common.block.subtile.generating.SubTileNightshade;
import vazkii.botania.common.block.subtile.generating.SubTileRafflowsia;
import vazkii.botania.common.block.subtile.generating.SubTileSpectrolus;
import vazkii.botania.common.block.subtile.generating.SubTileThermalily;
import vazkii.botania.common.block.tile.TileAvatar;
import vazkii.botania.common.block.tile.TileBrewery;
import vazkii.botania.common.block.tile.TileGaiaHead;
import vazkii.botania.common.block.tile.TileHourglass;
import vazkii.botania.common.block.tile.TileTeruTeruBozu;
import vazkii.botania.common.block.tile.corporea.TileCorporeaCrystalCube;
import vazkii.botania.common.block.tile.corporea.TileCorporeaIndex;
import vazkii.botania.common.block.tile.mana.TileBellows;
import vazkii.botania.common.core.handler.ConfigHandler;
import vazkii.botania.common.item.ModItems;
import vazkii.botania.common.item.brew.ItemBrewBase;
import vazkii.botania.common.item.equipment.bauble.ItemFlightTiara;
import vazkii.botania.common.item.relic.ItemInfiniteFruit;
import vazkii.botania.common.lib.LibBlockNames;
import vazkii.botania.common.lib.LibItemNames;
import vazkii.botania.common.lib.LibMisc;
import javax.annotation.Nonnull;
import java.util.List;
import java.util.Locale;
import static vazkii.botania.common.item.ModItems.*;
import java.util.Map;
import java.util.function.IntFunction;
public final class ModelHandler {
@@ -126,88 +83,17 @@ public final class ModelHandler {
ModelLoaderRegistry.registerLoader(SpecialFlowerModel.Loader.INSTANCE);
OBJLoader.INSTANCE.addDomain(LibMisc.MOD_ID.toLowerCase(Locale.ROOT));
/** Subtile block models **/
registerSubtiles();
/** Custom statemappers **/
registerStateMappers();
for(Block block : Block.REGISTRY) {
if(block instanceof IModelRegister)
((IModelRegister) block).registerModels();
}
/** ItemBlocks **/
registerStandardBlocks();
registerMushrooms();
registerFlowers();
registerPavement();
registerStairs();
registerSlabs();
registerWalls();
registerPanes();
registerAltars();
registerQuartzBlocks();
registerLuminizers();
/** Normal Items **/
registerStandardItems();
registerTESRItems();
registerManaResources();
registerRunes();
registerLens();
registerBrews();
/** Special Item Meshers **/
// Cannot use lambdas directly yet because FG/SS can't reobfuscate them, need a dummy wrapper
// See https://github.com/MinecraftForge/ForgeGradle/issues/314.
ModelLoader.registerItemVariants(Item.getItemFromBlock(ModBlocks.pool),
new ModelResourceLocation("botania:pool", "variant=default"),
new ModelResourceLocation("botania:pool", "variant=diluted"),
new ModelResourceLocation("botania:pool", "variant=creative"),
new ModelResourceLocation("botania:pool", "variant=fabulous"),
new ModelResourceLocation("botania:pool", "default_full"),
new ModelResourceLocation("botania:pool", "diluted_full"),
new ModelResourceLocation("botania:pool", "creative_full"),
new ModelResourceLocation("botania:pool", "fabulous_full"));
ModelLoader.setCustomMeshDefinition(Item.getItemFromBlock(ModBlocks.pool), MesherWrapper.of(stack -> {
int meta = stack.getMetadata();
if (meta < 0 || meta > 3)
meta = 0;
PoolVariant v = PoolVariant.values()[meta];
boolean renderFull = v == PoolVariant.CREATIVE || (stack.hasTagCompound() && stack.getTagCompound().getBoolean("RenderFull"));
return new ModelResourceLocation("botania:pool", renderFull ? v.getName() + "_full" : "variant=" + v.getName());
}));
ModelLoader.registerItemVariants(elementiumShears,
new ModelResourceLocation("botania:elementiumShears", "inventory"),
new ModelResourceLocation("botania:dammitReddit", "inventory"));
ModelLoader.setCustomMeshDefinition(elementiumShears, MesherWrapper.of(stack ->
stack.getDisplayName().equalsIgnoreCase("dammit reddit")
? new ModelResourceLocation("botania:dammitReddit", "inventory")
: new ModelResourceLocation("botania:elementiumShears", "inventory")));
ModelLoader.registerItemVariants(grassHorn,
new ModelResourceLocation("botania:grassHorn0", "inventory"),
new ModelResourceLocation("botania:grassHorn1", "inventory"),
new ModelResourceLocation("botania:grassHorn2", "inventory"),
new ModelResourceLocation("botania:vuvuzela", "inventory"));
ModelLoader.setCustomMeshDefinition(grassHorn, MesherWrapper.of(stack ->
stack.getDisplayName().toLowerCase().contains("vuvuzela")
? new ModelResourceLocation("botania:vuvuzela", "inventory")
: new ModelResourceLocation("botania:grassHorn" + stack.getMetadata(), "inventory")));
ModelLoader.registerItemVariants(infiniteFruit,
new ModelResourceLocation("botania:infiniteFruit", "inventory"),
new ModelResourceLocation("botania:infiniteFruitBoot", "inventory"));
ModelLoader.setCustomMeshDefinition(infiniteFruit, MesherWrapper.of(stack ->
ItemInfiniteFruit.isBoot(stack)
? new ModelResourceLocation("botania:infiniteFruitBoot", "inventory")
: new ModelResourceLocation("botania:infiniteFruit", "inventory")));
ModelLoader.registerItemVariants(manaCookie,
new ModelResourceLocation("botania:manaCookie", "inventory"),
new ModelResourceLocation("botania:totalBiscuit", "inventory"));
ModelLoader.setCustomMeshDefinition(manaCookie, MesherWrapper.of(stack ->
stack.getDisplayName().toLowerCase().equals("totalbiscuit")
? new ModelResourceLocation("botania:totalBiscuit", "inventory")
: new ModelResourceLocation("botania:manaCookie", "inventory")));
for(Item item : Item.REGISTRY) {
if(item instanceof IModelRegister)
((IModelRegister) item).registerModels();
}
}
private static void registerSubtiles() {
@@ -281,688 +167,67 @@ public final class ModelHandler {
BotaniaAPIClient.registerSubtileModel(SubTileBergamute.class, new ModelResourceLocation("botania:" + LibBlockNames.SUBTILE_BERGAMUTE));
}
private static void registerStandardBlocks() {
registerItemModel(ModBlocks.alchemyCatalyst);
registerItemModel(ModBlocks.alfPortal);
registerItemModel(ModBlocks.bifrost);
registerItemModel(ModBlocks.bifrostPerm);
registerItemModel(ModBlocks.blazeBlock);
registerItemModel(ModBlocks.cacophonium);
registerItemModel(ModBlocks.cellBlock);
registerItemModel(ModBlocks.conjurationCatalyst);
registerItemModel(ModBlocks.cocoon);
registerItemModel(ModBlocks.corporeaFunnel);
registerItemModel(ModBlocks.corporeaInterceptor);
registerItemModel(ModBlocks.corporeaRetainer);
registerItemModel(ModBlocks.dirtPath);
registerItemModel(ModBlocks.distributor);
registerItemModel(ModBlocks.elfGlass);
registerItemModel(ModBlocks.enchantedSoil);
registerItemModel(ModBlocks.enchanter);
registerItemModel(ModBlocks.enderEye);
registerItemModel(ModBlocks.felPumpkin);
registerItemModel(ModBlocks.floatingSpecialFlower);
registerItemModel(ModBlocks.forestEye);
registerItemModel(ModBlocks.ghostRail);
registerItemModel(ModBlocks.incensePlate);
registerItemModel(ModBlocks.lightLauncher);
registerItemModel(ModBlocks.manaBomb);
registerItemModel(ModBlocks.manaDetector);
registerItemModel(ModBlocks.manaGlass);
registerItemModel(ModBlocks.manaVoid);
registerItemModel(ModBlocks.prism);
registerItemModel(ModBlocks.pistonRelay);
registerItemModel(ModBlocks.pump);
registerItemModel(ModBlocks.redStringComparator);
registerItemModel(ModBlocks.redStringContainer);
registerItemModel(ModBlocks.redStringDispenser);
registerItemModel(ModBlocks.redStringFertilizer);
registerItemModel(ModBlocks.redStringInterceptor);
registerItemModel(ModBlocks.redStringRelay);
registerItemModel(ModBlocks.reedBlock);
registerItemModel(ModBlocks.rfGenerator);
registerItemModel(ModBlocks.root);
registerItemModel(ModBlocks.runeAltar);
registerItemModel(ModBlocks.seaLamp);
registerItemModel(ModBlocks.shimmerrock);
registerItemModel(ModBlocks.shimmerwoodPlanks);
registerItemModel(ModBlocks.sparkChanger);
registerItemModel(ModBlocks.spawnerClaw);
registerItemModel(ModBlocks.specialFlower);
registerItemModel(ModBlocks.starfield);
registerItemModel(ModBlocks.thatch);
registerItemModel(ModBlocks.terraPlate);
registerItemModel(ModBlocks.tinyPlanet);
registerItemModel(ModBlocks.tinyPotato);
registerItemModel(ModBlocks.turntable);
// Register all metas to variant inventory, so the smartmodel can take over from there. See MiscellaneousIcons
registerItemModelAllMeta(Item.getItemFromBlock(ModBlocks.floatingFlower), EnumDyeColor.values().length);
// Item models which all use the same base model and recolored by render layer
registerItemModelAllMeta(Item.getItemFromBlock(ModBlocks.manaBeacon), EnumDyeColor.values().length);
registerItemModelAllMeta(Item.getItemFromBlock(ModBlocks.petalBlock), EnumDyeColor.values().length);
registerItemModelAllMeta(Item.getItemFromBlock(ModBlocks.unstableBlock), EnumDyeColor.values().length);
// Blocks which share models with their item, and have only one variant to switch over
registerVariantsDefaulted(ModBlocks.pylon, PylonVariant.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.endStoneBrick, EndBrickVariant.class, "variant");
registerVariantsDefaulted(ModBlocks.dreamwood, LivingWoodVariant.class, "variant");
registerVariantsDefaulted(ModBlocks.forestDrum, DrumVariant.class, "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.prismarine, PrismarineVariant.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(ModFluffBlocks.stone, FutureStoneVariant.class, "variant");
registerVariantsDefaulted(ModBlocks.storage, StorageVariant.class, "variant");
public static void registerItemAllMeta(Item item, int range) {
registerItemMetas(item, range, i -> item.getRegistryName().getResourcePath());
}
private static void registerStandardItems() {
registerItemModel(manasteelSword);
registerItemModel(spawnerMover);
registerItemModel(terraPick);
registerItemModel(magnetRing);
registerItemModel(magnetRingGreater);
registerItemModel(manaGun);
registerItemModel(tornadoRod);
registerItemModel(twigWand);
registerItemModel(pestleAndMortar);
registerItemModel(blackLotus);
registerItemModel(blackLotus, 1);
ModelLoader.registerItemVariants(lexicon, new ModelResourceLocation("botania:lexicon_default", "inventory"));
registerItemModel(lexicon);
registerItemModel(manasteelHelm);
registerItemModel(manasteelHelmRevealing);
registerItemModel(manasteelChest);
registerItemModel(manasteelLegs);
registerItemModel(manasteelBoots);
registerItemModel(manasteelPick);
registerItemModel(manasteelShovel);
registerItemModel(manasteelAxe);
registerItemModel(manasteelShears);
registerItemModel(manaweaveHelm);
registerItemModel(manaweaveChest);
registerItemModel(manaweaveLegs);
registerItemModel(manaweaveBoots);
registerItemModel(elementiumHelm);
registerItemModel(elementiumHelmRevealing);
registerItemModel(elementiumChest);
registerItemModel(elementiumLegs);
registerItemModel(elementiumBoots);
registerItemModel(elementiumPick);
registerItemModel(elementiumShovel);
registerItemModel(elementiumAxe);
registerItemModel(elementiumSword);
registerItemModel(terrasteelHelm);
registerItemModel(terrasteelHelmRevealing);
registerItemModel(terrasteelChest);
registerItemModel(terrasteelLegs);
registerItemModel(terrasteelBoots);
registerItemModel(terraSword);
registerItemModel(terraAxe);
registerItemModel(starSword);
registerItemModel(thunderSword);
registerItemModel(crystalBow);
registerItemModel(livingwoodBow);
registerItemModel(glassPick);
registerItemModel(flowerBag);
registerItemModel(fertilizer);
registerItemModel(obedienceStick);
registerItemModel(dirtRod);
registerItemModel(waterRod);
registerItemModel(cobbleRod);
registerItemModel(fireRod);
registerItemModel(rainbowRod);
registerItemModel(skyDirtRod);
registerItemModel(terraformRod);
registerItemModel(diviningRod);
registerItemModel(gravityRod);
registerItemModel(missileRod);
registerItemModel(smeltRod);
registerItemModel(exchangeRod);
registerItemModel(openBucket);
registerItemModel(bloodPendant);
registerItemModel(manaTablet);
registerItemModel(enderDagger);
registerItemModel(slingshot);
registerItemModel(vineBall);
registerItemModel(regenIvy);
registerItemModel(keepIvy);
registerItemModel(recordGaia1);
registerItemModel(recordGaia2);
registerItemModel(overgrowthSeed);
registerItemModel(worldSeed);
registerItemModel(incenseStick);
registerItemModel(enderHand);
registerItemModel(craftingHalo);
registerItemModel(spellCloth);
registerItemModel(autocraftingHalo);
registerItemModel(sextant);
registerItemModel(cacophonium);
registerItemModel(clip);
registerItemModel(phantomInk);
registerItemModel(poolMinecart);
registerItemModel(pinkinator);
registerItemModel(dice);
registerItemModel(kingKey);
registerItemModel(flugelEye);
registerItemModel(thorRing);
registerItemModel(lokiRing);
registerItemModel(odinRing);
registerItemModel(aesirRing);
registerItemModel(baubleBox);
registerItemModel(tinyPlanet);
registerItemModel(manaRing);
registerItemModel(manaRingGreater);
registerItemModel(auraRing);
registerItemModel(auraRingGreater);
registerItemModel(spark);
registerItemModel(waterRing);
registerItemModel(miningRing);
registerItemModel(reachRing);
registerItemModel(swapRing);
registerItemModel(pixieRing);
registerItemModel(travelBelt);
registerItemModel(superTravelBelt);
registerItemModel(speedUpBelt);
registerItemModel(knockbackBelt);
registerItemModel(itemFinder);
registerItemModel(monocle);
registerItemModel(icePendant);
registerItemModel(lavaPendant);
registerItemModel(superLavaPendant);
registerItemModel(holyCloak);
registerItemModel(unholyCloak);
registerItemModel(goldLaurel);
registerItemModel(flightTiara);
registerItemModel(divaCharm);
registerItemModel(manaMirror);
registerItemModel(manaInkwell);
registerItemModel(waterBowl);
registerItemModelAllMeta(flightTiara, ItemFlightTiara.WING_TYPES);
registerItemModelAllMeta(laputaShard, 20);
registerItemModelAllMeta(signalFlare, EnumDyeColor.values().length);
registerItemModelAllMeta(dye, EnumDyeColor.values().length);
registerItemModelAllMeta(petal, EnumDyeColor.values().length);
registerItemModelMetas(sparkUpgrade, LibItemNames.SPARK_UPGRADE, 4);
registerItemModelMetas(corporeaSpark, LibItemNames.CORPOREA_SPARK, 2);
registerItemModelMetas(manaBottle, LibItemNames.MANA_BOTTLE, 6);
registerItemModelMetas(ancientWill, LibItemNames.ANCIENT_WILL, 6);
registerItemModelMetas(temperanceStone, LibItemNames.TEMPERANCE_STONE, 2);
registerItemModelMetas(thornChakram, LibItemNames.THORN_CHAKRAM, 2);
registerItemModelMetas(blackHoleTalisman, LibItemNames.BLACK_HOLE_TALISMAN, 2);
registerItemModelMetas(slimeBottle, LibItemNames.SLIME_BOTTLE, 2);
registerItemModelMetas(grassSeeds, LibItemNames.GRASS_SEEDS, 9);
registerItemModelMetas(quartz, LibItemNames.QUARTZ, 7);
registerItemModelMetas(cosmetic, LibItemNames.COSMETIC, 32);
registerItemModelMetas(craftPattern, LibItemNames.CRAFT_PATTERN, 9);
registerItemModelMetas(virus, LibItemNames.VIRUS, 2);
public static void registerItemAppendMeta(Item item, int maxExclusive, String loc) {
registerItemMetas(item, maxExclusive, i -> loc + i);
}
// Only for models that absolutely can't be converted to JSON. Use VERY sparingly
@SuppressWarnings("deprecation")
private static void registerTESRItems() {
registerItemModel(ModBlocks.avatar);
ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(ModBlocks.avatar), 0, TileAvatar.class);
registerItemModel(ModBlocks.bellows);
ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(ModBlocks.bellows), 0, TileBellows.class);
registerItemModel(ModBlocks.brewery);
ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(ModBlocks.brewery), 0, TileBrewery.class);
registerItemModel(ModBlocks.corporeaCrystalCube);
ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(ModBlocks.corporeaCrystalCube), 0, TileCorporeaCrystalCube.class);
registerItemModel(ModBlocks.corporeaIndex);
ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(ModBlocks.corporeaIndex), 0, TileCorporeaIndex.class);
registerItemModel(ModItems.gaiaHead);
ForgeHooksClient.registerTESRItemStack(ModItems.gaiaHead, 0, TileGaiaHead.class);
registerItemModel(ModBlocks.hourglass);
ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(ModBlocks.hourglass), 0, TileHourglass.class);
registerItemModel(ModBlocks.teruTeruBozu);
ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(ModBlocks.teruTeruBozu), 0, TileTeruTeruBozu.class);
}
private static void registerManaResources() {
Item item = manaResource;
for (int i = 0; i < LibItemNames.MANA_RESOURCE_NAMES.length; i++) {
String name = "botania:" + LibItemNames.MANA_RESOURCE_NAMES[i];
ModelLoader.setCustomModelResourceLocation(item, i, new ModelResourceLocation(name, "inventory"));
public static void registerItemMetas(Item item, int maxExclusive, IntFunction<String> metaToName) {
for (int i = 0; i < maxExclusive; i++) {
ModelLoader.setCustomModelResourceLocation(
item, i,
new ModelResourceLocation(LibMisc.MOD_ID + ":" + metaToName.apply(i), "inventory")
);
}
}
private static void registerRunes() {
List<String> variantNames = ImmutableList.of("water", "fire", "earth", "air", "spring", "summer", "autumn", "winter", "mana", "lust", "gluttony", "greed", "sloth", "wrath", "envy", "pride");
for (int i = 0; i < variantNames.size(); i++) {
ModelLoader.setCustomModelResourceLocation(rune, i, new ModelResourceLocation("botania:rune_" + variantNames.get(i), "inventory"));
}
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);
}
private static void registerLens() {
int counter = 0;
for (String s : LibItemNames.LENS_NAMES) {
ModelLoader.setCustomModelResourceLocation(lens, counter++, new ModelResourceLocation("botania:" + s, "inventory"));
}
public static void registerBlockToState(Block b, int meta, IBlockState state) {
ModelLoader.setCustomModelResourceLocation(
Item.getItemFromBlock(b),
meta,
getMrlForState(state)
);
}
private static void registerBrews() {
ModelLoader.setCustomModelResourceLocation(vial, 0, new ModelResourceLocation("botania:vial", "inventory"));
ModelLoader.setCustomModelResourceLocation(vial, 1, new ModelResourceLocation("botania:flask", "inventory"));
for (int i = 0; i < 6; i++) {
ModelLoader.registerItemVariants(brewFlask, new ModelResourceLocation("botania:flask1_" + i, "inventory"));
}
ModelLoader.setCustomMeshDefinition(brewFlask, MesherWrapper.of(stack -> {
int swigsTaken = 6 - ((ItemBrewBase) brewFlask).getSwigsLeft(stack);
return new ModelResourceLocation("botania:flask1_" + swigsTaken, "inventory");
}));
for (int i = 0; i < 4; i++) {
ModelLoader.registerItemVariants(brewVial, new ModelResourceLocation("botania:vial1_" + i, "inventory"));
}
ModelLoader.setCustomMeshDefinition(brewVial, MesherWrapper.of(stack -> {
int swigsTaken = 4 - ((ItemBrewBase) brewVial).getSwigsLeft(stack);
return new ModelResourceLocation("botania:vial1_" + swigsTaken, "inventory");
}));
public static void registerBlockToState(Block b, int maxExclusive) {
for(int i = 0; i < maxExclusive; i++)
registerBlockToState(b, i, b.getStateFromMeta(i));
}
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());
// Ignore vanilla variant in walls
ModelLoader.setCustomStateMapper(ModFluffBlocks.biomeStoneWall, (new StateMap.Builder()).ignore(BlockWall.VARIANT).build());
ModelLoader.setCustomStateMapper(ModFluffBlocks.dreamwoodWall, (new StateMap.Builder()).ignore(BlockWall.VARIANT).build());
ModelLoader.setCustomStateMapper(ModFluffBlocks.livingrockWall, (new StateMap.Builder()).ignore(BlockWall.VARIANT).build());
ModelLoader.setCustomStateMapper(ModFluffBlocks.livingwoodWall, (new StateMap.Builder()).ignore(BlockWall.VARIANT).build());
ModelLoader.setCustomStateMapper(ModFluffBlocks.prismarineWall, (new StateMap.Builder()).ignore(BlockWall.VARIANT).build());
ModelLoader.setCustomStateMapper(ModFluffBlocks.reedWall, (new StateMap.Builder()).ignore(BlockWall.VARIANT).build());
ModelLoader.setCustomStateMapper(ModFluffBlocks.stoneWall, (new StateMap.Builder()).ignore(BlockWall.VARIANT).build());
// Ignore dummy variant in slabs
for (Block b : ModFluffBlocks.biomeStoneSlabs) {
ModelLoader.setCustomStateMapper(b, (new StateMap.Builder()).ignore(BlockModSlab.DUMMY).build());
}
for (Block b : ModFluffBlocks.pavementSlabs) {
ModelLoader.setCustomStateMapper(b, (new StateMap.Builder()).ignore(BlockModSlab.DUMMY).build());
}
for (Block b : ModFluffBlocks.stoneSlabs) {
ModelLoader.setCustomStateMapper(b, (new StateMap.Builder()).ignore(BlockModSlab.DUMMY).build());
}
List<Block> otherSlabs = Lists.newArrayList(ModFluffBlocks.livingwoodSlab, ModFluffBlocks.livingwoodPlankSlab, ModFluffBlocks.livingrockSlab, ModFluffBlocks.dreamwoodSlab, ModFluffBlocks.livingrockBrickSlab,
ModFluffBlocks.dreamwoodPlankSlab, ModFluffBlocks.prismarineSlab, ModFluffBlocks.prismarineBrickSlab, ModFluffBlocks.darkPrismarineSlab,
ModFluffBlocks.reedSlab, ModFluffBlocks.thatchSlab, ModFluffBlocks.netherBrickSlab, ModFluffBlocks.soulBrickSlab, ModFluffBlocks.snowBrickSlab,
ModFluffBlocks.tileSlab, ModFluffBlocks.manaQuartzSlab, ModFluffBlocks.blazeQuartzSlab, ModFluffBlocks.darkQuartzSlab,
ModFluffBlocks.lavenderQuartzSlab, ModFluffBlocks.redQuartzSlab, ModFluffBlocks.elfQuartzSlab, ModFluffBlocks.sunnyQuartzSlab, ModFluffBlocks.dirtPathSlab,
ModFluffBlocks.shimmerrockSlab, ModFluffBlocks.shimmerwoodPlankSlab, ModFluffBlocks.endStoneSlab, ModFluffBlocks.enderBrickSlab);
for (Block b : otherSlabs) {
if (b == null) // Dark quartz disabled
continue;
ModelLoader.setCustomStateMapper(b, (new StateMap.Builder()).ignore(BlockModSlab.DUMMY).build());
}
// Ignore both dummy variant and half prop in full slabs
for (Block b : ModFluffBlocks.biomeStoneFullSlabs) {
ModelLoader.setCustomStateMapper(b, (new StateMap.Builder()).ignore(BlockModSlab.DUMMY, BlockSlab.HALF).build());
}
for (Block b : ModFluffBlocks.pavementFullSlabs) {
ModelLoader.setCustomStateMapper(b, (new StateMap.Builder()).ignore(BlockModSlab.DUMMY, BlockSlab.HALF).build());
}
for (Block b : ModFluffBlocks.stoneFullSlabs) {
ModelLoader.setCustomStateMapper(b, (new StateMap.Builder()).ignore(BlockModSlab.DUMMY, BlockSlab.HALF).build());
}
List<Block> otherFullSlabs = Lists.newArrayList(ModFluffBlocks.livingwoodSlabFull, ModFluffBlocks.livingwoodPlankSlabFull, ModFluffBlocks.livingrockSlabFull, ModFluffBlocks.dreamwoodSlabFull, ModFluffBlocks.livingrockBrickSlabFull,
ModFluffBlocks.dreamwoodPlankSlabFull, ModFluffBlocks.prismarineSlabFull, ModFluffBlocks.prismarineBrickSlabFull, ModFluffBlocks.darkPrismarineSlabFull,
ModFluffBlocks.reedSlabFull, ModFluffBlocks.thatchSlabFull, ModFluffBlocks.netherBrickSlabFull, ModFluffBlocks.soulBrickSlabFull, ModFluffBlocks.snowBrickSlabFull,
ModFluffBlocks.tileSlabFull, ModFluffBlocks.darkQuartzSlabFull, ModFluffBlocks.manaQuartzSlabFull, ModFluffBlocks.blazeQuartzSlabFull,
ModFluffBlocks.lavenderQuartzSlabFull, ModFluffBlocks.redQuartzSlabFull, ModFluffBlocks.elfQuartzSlabFull, ModFluffBlocks.sunnyQuartzSlabFull, ModFluffBlocks.dirtPathSlabFull,
ModFluffBlocks.shimmerrockSlabFull, ModFluffBlocks.shimmerwoodPlankSlabFull, ModFluffBlocks.endStoneSlabFull, ModFluffBlocks.enderBrickSlabFull);
for (Block b : otherFullSlabs) {
if (b == null) // Dark quartz disabled
continue;
ModelLoader.setCustomStateMapper(b, (new StateMap.Builder()).ignore(BlockModSlab.DUMMY, BlockSlab.HALF).build());
}
// Ignore everything in TESR items to suppress missing model errors
ModelLoader.setCustomStateMapper(ModBlocks.avatar, new StateMap.Builder().ignore(BotaniaStateProps.CARDINALS).build());
ModelLoader.setCustomStateMapper(ModBlocks.bellows, new StateMap.Builder().ignore(BotaniaStateProps.CARDINALS).build());
ModelLoader.setCustomStateMapper(ModBlocks.brewery, new StateMap.Builder().ignore(BotaniaStateProps.POWERED).build());
ModelLoader.setCustomStateMapper(ModBlocks.gaiaHead, new StateMap.Builder().ignore(BlockSkull.FACING, BlockSkull.NODROP).build());
ModelLoader.setCustomStateMapper(ModBlocks.hourglass, new StateMap.Builder().ignore(BotaniaStateProps.POWERED).build());
// Registers the ItemBlock to models/item/<registryname>#inventory
public static void registerInventoryVariant(Block b) {
ModelLoader.setCustomModelResourceLocation(
Item.getItemFromBlock(b), 0,
new ModelResourceLocation(b.getRegistryName(), "inventory"));
}
private static void registerMushrooms() {
Item item = Item.getItemFromBlock(ModBlocks.mushroom);
for (EnumDyeColor color : EnumDyeColor.values()) {
String name = ForgeRegistries.BLOCKS.getKey(ModBlocks.mushroom).toString();
ModelLoader.setCustomModelResourceLocation(item, color.getMetadata(), new ModelResourceLocation(name, "inventory_" + color.getName()));
}
// Registers the ItemBlock to a custom path in models/item/itemblock/
public static void registerCustomItemblock(Block b, String path) {
registerCustomItemblock(b, 1, i -> path);
}
private static void registerFlowers() {
Item item = Item.getItemFromBlock(ModBlocks.flower);
for (EnumDyeColor color : EnumDyeColor.values()) {
String name = ForgeRegistries.BLOCKS.getKey(ModBlocks.flower).toString();
ModelLoader.setCustomModelResourceLocation(item, color.getMetadata(), new ModelResourceLocation(name, "inventory_" + color.getName()));
}
item = Item.getItemFromBlock(ModBlocks.shinyFlower);
for (EnumDyeColor color : EnumDyeColor.values()) {
String name = ForgeRegistries.BLOCKS.getKey(ModBlocks.shinyFlower).toString();
ModelLoader.setCustomModelResourceLocation(item, color.getMetadata(), new ModelResourceLocation(name, "inventory_" + color.getName()));
}
item = Item.getItemFromBlock(ModBlocks.doubleFlower1);
for (EnumDyeColor color : BotaniaStateProps.DOUBLEFLOWER_VARIANT_1.getAllowedValues()) {
String name = ForgeRegistries.BLOCKS.getKey(ModBlocks.doubleFlower1).toString();
String variant = "inventory_" + color.getName();
ModelLoader.setCustomModelResourceLocation(item, color.getMetadata(), new ModelResourceLocation(name, variant));
}
item = Item.getItemFromBlock(ModBlocks.doubleFlower2);
for (EnumDyeColor color : BotaniaStateProps.DOUBLEFLOWER_VARIANT_2.getAllowedValues()) {
String name = ForgeRegistries.BLOCKS.getKey(ModBlocks.doubleFlower2).toString();
String variant = "inventory_" + color.getName();
ModelLoader.setCustomModelResourceLocation(item, color.getMetadata() - 8, new ModelResourceLocation(name, variant));
}
}
private static void registerPavement() {
Item item = Item.getItemFromBlock(ModFluffBlocks.pavement);
String name = ForgeRegistries.BLOCKS.getKey(ModFluffBlocks.pavement).toString();
for (EnumDyeColor e : BotaniaStateProps.PAVEMENT_COLOR.getAllowedValues()) {
String variant = "color=" + e.getName();
switch (e) { // Explicit switch needed because saved meta does not match EnumDyeColor
case BLACK: {
ModelLoader.setCustomModelResourceLocation(item, 1, new ModelResourceLocation(name, variant));
break;
}
case BLUE: {
ModelLoader.setCustomModelResourceLocation(item, 2, new ModelResourceLocation(name, variant));
break;
}
case RED: {
ModelLoader.setCustomModelResourceLocation(item, 3, new ModelResourceLocation(name, variant));
break;
}
case YELLOW: {
ModelLoader.setCustomModelResourceLocation(item, 4, new ModelResourceLocation(name, variant));
break;
}
case GREEN: {
ModelLoader.setCustomModelResourceLocation(item, 5, new ModelResourceLocation(name, variant));
break;
}
case WHITE:
default: {
ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(name, variant));
break;
}
}
}
}
private static void registerStairs() {
for (Block b : ModFluffBlocks.stoneStairs) {
registerItemModel(b);
}
for (Block b : ModFluffBlocks.pavementStairs) {
registerItemModel(b);
}
for (Block b : ModFluffBlocks.biomeStoneStairs) {
registerItemModel(b);
}
registerItemModel(ModFluffBlocks.blazeQuartzStairs);
registerItemModel(ModFluffBlocks.darkPrismarineStairs);
if (ConfigHandler.darkQuartzEnabled)
registerItemModel(ModFluffBlocks.darkQuartzStairs);
registerItemModel(ModFluffBlocks.dreamwoodStairs);
registerItemModel(ModFluffBlocks.dreamwoodPlankStairs);
registerItemModel(ModFluffBlocks.elfQuartzStairs);
registerItemModel(ModFluffBlocks.enderBrickStairs);
registerItemModel(ModFluffBlocks.endStoneStairs);
registerItemModel(ModFluffBlocks.lavenderQuartzStairs);
registerItemModel(ModFluffBlocks.livingrockStairs);
registerItemModel(ModFluffBlocks.livingrockBrickStairs);
registerItemModel(ModFluffBlocks.livingwoodStairs);
registerItemModel(ModFluffBlocks.livingwoodPlankStairs);
registerItemModel(ModFluffBlocks.manaQuartzStairs);
registerItemModel(ModFluffBlocks.netherBrickStairs);
registerItemModel(ModFluffBlocks.prismarineStairs);
registerItemModel(ModFluffBlocks.prismarineBrickStairs);
registerItemModel(ModFluffBlocks.redQuartzStairs);
registerItemModel(ModFluffBlocks.reedStairs);
registerItemModel(ModFluffBlocks.shimmerrockStairs);
registerItemModel(ModFluffBlocks.shimmerwoodPlankStairs);
registerItemModel(ModFluffBlocks.snowBrickStairs);
registerItemModel(ModFluffBlocks.soulBrickStairs);
registerItemModel(ModFluffBlocks.sunnyQuartzStairs);
registerItemModel(ModFluffBlocks.thatchStairs);
registerItemModel(ModFluffBlocks.tileStairs);
}
private static void registerSlabs() {
for (Block b : ModFluffBlocks.biomeStoneSlabs) {
registerItemModel(b);
}
for (Block b : ModFluffBlocks.pavementSlabs) {
registerItemModel(b);
}
for (Block b : ModFluffBlocks.stoneSlabs) {
registerItemModel(b);
}
registerItemModel(ModFluffBlocks.livingwoodSlab);
registerItemModel(ModFluffBlocks.livingwoodPlankSlab);
registerItemModel(ModFluffBlocks.livingrockSlab);
registerItemModel(ModFluffBlocks.livingrockBrickSlab);
registerItemModel(ModFluffBlocks.blazeQuartzSlab);
if (ConfigHandler.darkQuartzEnabled)
registerItemModel(ModFluffBlocks.darkQuartzSlab);
registerItemModel(ModFluffBlocks.elfQuartzSlab);
registerItemModel(ModFluffBlocks.lavenderQuartzSlab);
registerItemModel(ModFluffBlocks.manaQuartzSlab);
registerItemModel(ModFluffBlocks.redQuartzSlab);
registerItemModel(ModFluffBlocks.sunnyQuartzSlab);
registerItemModel(ModFluffBlocks.dreamwoodSlab);
registerItemModel(ModFluffBlocks.dreamwoodPlankSlab);
registerItemModel(ModFluffBlocks.prismarineSlab);
registerItemModel(ModFluffBlocks.prismarineBrickSlab);
registerItemModel(ModFluffBlocks.darkPrismarineSlab);
registerItemModel(ModFluffBlocks.dirtPathSlab);
registerItemModel(ModFluffBlocks.shimmerrockSlab);
registerItemModel(ModFluffBlocks.shimmerwoodPlankSlab);
registerItemModel(ModFluffBlocks.endStoneSlab);
registerItemModel(ModFluffBlocks.enderBrickSlab);
registerItemModel(ModFluffBlocks.netherBrickSlab);
registerItemModel(ModFluffBlocks.soulBrickSlab);
registerItemModel(ModFluffBlocks.snowBrickSlab);
registerItemModel(ModFluffBlocks.tileSlab);
registerItemModel(ModFluffBlocks.reedSlab);
registerItemModel(ModFluffBlocks.thatchSlab);
}
private static void registerWalls() {
Item item = Item.getItemFromBlock(ModFluffBlocks.biomeStoneWall);
for (BiomeStoneVariant variant : BotaniaStateProps.BIOMESTONEWALL_VARIANT.getAllowedValues()) {
String variantName = "inventory_" + variant.getName();
ModelLoader.setCustomModelResourceLocation(item, variant.ordinal() - 8, new ModelResourceLocation("botania:biomeStoneA0Wall", variantName));
}
item = Item.getItemFromBlock(ModFluffBlocks.stoneWall);
for (FutureStoneVariant variant : BotaniaStateProps.FUTURESTONEWALL_VARIANT.getAllowedValues()) {
String variantName = "inventory_" + variant.getName();
ModelLoader.setCustomModelResourceLocation(item, variant.ordinal(), new ModelResourceLocation("botania:stone0Wall", variantName));
}
registerItemModel(ModFluffBlocks.livingrockWall);
registerItemModel(ModFluffBlocks.livingwoodWall);
registerItemModel(ModFluffBlocks.dreamwoodWall);
registerItemModel(ModFluffBlocks.prismarineWall);
registerItemModel(ModFluffBlocks.reedWall);
}
private static void registerPanes() {
registerItemModel(ModFluffBlocks.alfglassPane);
registerItemModel(ModFluffBlocks.bifrostPane);
registerItemModel(ModFluffBlocks.managlassPane);
}
private static void registerAltars() {
Item item = Item.getItemFromBlock(ModBlocks.altar);
String name = ForgeRegistries.BLOCKS.getKey(ModBlocks.altar).toString();
for (int i = 0; i < AltarVariant.values().length - 1; i++) { // Off by one on purpose to exclude MOSSY
String variantName = "variant=" + AltarVariant.values()[i].getName();
ModelLoader.setCustomModelResourceLocation(item, i, new ModelResourceLocation(name, variantName));
}
}
private static void registerQuartzBlocks() {
for (Block b : Lists.newArrayList(ModFluffBlocks.blazeQuartz, ModFluffBlocks.darkQuartz, ModFluffBlocks.elfQuartz, ModFluffBlocks.lavenderQuartz, ModFluffBlocks.manaQuartz, ModFluffBlocks.redQuartz, ModFluffBlocks.sunnyQuartz)) {
if (b == null) // Dark quartz disabled
continue;
Item item = Item.getItemFromBlock(b);
String name = ForgeRegistries.BLOCKS.getKey(b).toString();
ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(name, "variant=normal"));
ModelLoader.setCustomModelResourceLocation(item, 1, new ModelResourceLocation(name, "variant=chiseled"));
ModelLoader.setCustomModelResourceLocation(item, 2, new ModelResourceLocation(name, "variant=pillar_y"));
}
}
private static void registerLuminizers() {
Item item = Item.getItemFromBlock(ModBlocks.lightRelay);
String name = ForgeRegistries.BLOCKS.getKey(ModBlocks.lightRelay).toString();
for (LuminizerVariant v : LuminizerVariant.values()) {
ModelLoader.setCustomModelResourceLocation(item, v.ordinal(), new ModelResourceLocation(name, "powered=false,variant=" + v.getName()));
}
}
private static <T extends Enum<T> & IStringSerializable> void registerVariantsDefaulted(Block b, Class<T> enumclazz, String variantHeader) {
public static void registerCustomItemblock(Block b, int maxExclusive, IntFunction<String> metaToPath) {
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));
for (int i = 0; i < maxExclusive; i++) {
ModelLoader.setCustomModelResourceLocation(
item, i,
new ModelResourceLocation(LibMisc.MOD_ID + ":itemblock/" + metaToPath.apply(i), "inventory")
);
}
}
/**
* Registers all metas of the given item to models/item/registryname.json
*/
private static void registerItemModelAllMeta(Item item, int range) {
String loc = ForgeRegistries.ITEMS.getKey(item).toString();
for(int i = 0; i < range; i++) {
ModelLoader.registerItemVariants(item, new ModelResourceLocation(loc, "inventory"));
ModelLoader.setCustomModelResourceLocation(item, i, new ModelResourceLocation(loc, "inventory"));
}
}
/**
* Registers each meta of an item to models/item/registryname<meta>.json
* Range is exclusive upper bound
*/
private static void registerItemModelMetas(Item item, String loc, int range) {
for(int i = 0; i < range; i++) {
String name = "botania:" + loc + i;
ModelLoader.registerItemVariants(item, new ModelResourceLocation(name, "inventory"));
ModelLoader.setCustomModelResourceLocation(item, i, new ModelResourceLocation(name, "inventory"));
}
}
private static void registerItemModel(Block b) {
registerItemModel(Item.getItemFromBlock(b));
}
private static void registerItemModel(Item i,int meta) {
ResourceLocation loc = i.getRegistryName();
ModelLoader.setCustomModelResourceLocation(i, meta, new ModelResourceLocation(loc, "inventory"));
}
private static void registerItemModel(Item i) {
registerItemModel(i, 0);
}
private ModelHandler() {}
private interface MesherWrapper extends ItemMeshDefinition {
static MesherWrapper of(MesherWrapper w) {
return w;
}
ModelResourceLocation getLocation(ItemStack stack);
@Nonnull
@Override
default ModelResourceLocation getModelLocation(@Nonnull ItemStack stack) {
return getLocation(stack);
}
}
}
@@ -85,17 +85,12 @@ public class MultiblockBlockAccess implements IBlockAccess {
@Nonnull
@Override
public Biome getBiomeGenForCoords(@Nonnull BlockPos pos) {
public Biome getBiome(@Nonnull BlockPos pos) {
if(hasBlockAccess)
return originalBlockAccess.getBiomeGenForCoords(pos);
return originalBlockAccess.getBiome(pos);
return null;
}
@Override
public boolean extendedLevelsInChunkCache() {
return hasBlockAccess && originalBlockAccess.extendedLevelsInChunkCache();
}
@Override
public boolean isSideSolid(@Nonnull BlockPos pos, @Nonnull EnumFacing side, boolean _default) {
if(hasBlockAccess)
@@ -40,6 +40,8 @@ import vazkii.botania.common.block.ModBlocks;
public final class MultiblockRenderHandler {
private MultiblockRenderHandler() {}
private static final MultiblockBlockAccess blockAccess = new MultiblockBlockAccess();
private static int dimension;
@@ -79,7 +81,7 @@ public final class MultiblockRenderHandler {
}
@SubscribeEvent
public void onWorldRenderLast(RenderWorldLastEvent event) {
public static void onWorldRenderLast(RenderWorldLastEvent event) {
Minecraft mc = Minecraft.getMinecraft();
if(mc.thePlayer != null && mc.objectMouseOver != null && mc.objectMouseOver.getBlockPos() != null && (!mc.thePlayer.isSneaking() || anchor != null)) {
renderPlayerLook(mc.thePlayer, mc.objectMouseOver);
@@ -87,7 +89,7 @@ public final class MultiblockRenderHandler {
}
@SubscribeEvent
public void onPlayerInteract(PlayerInteractEvent.RightClickBlock event) {
public static void onPlayerInteract(PlayerInteractEvent.RightClickBlock event) {
if(currentMultiblock != null && anchor == null && event.getEntityPlayer() == Minecraft.getMinecraft().thePlayer) {
anchor = event.getPos();
angle = event.getEntityPlayer().getHorizontalFacing();
@@ -95,7 +97,7 @@ public final class MultiblockRenderHandler {
}
}
private void renderPlayerLook(EntityPlayer player, RayTraceResult src) {
private static void renderPlayerLook(EntityPlayer player, RayTraceResult src) {
if(currentMultiblock != null && dimension == player.worldObj.provider.getDimension()) {
BlockPos anchorPos = anchor != null ? anchor : src.getBlockPos();
@@ -133,7 +135,7 @@ public final class MultiblockRenderHandler {
}
}
private boolean renderComponentInWorld(World world, Multiblock mb, MultiblockComponent comp, BlockPos anchorPos) {
private static boolean renderComponentInWorld(World world, Multiblock mb, MultiblockComponent comp, BlockPos anchorPos) {
double renderPosX, renderPosY, renderPosZ;
try {
@@ -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);
}
}
@@ -34,8 +34,10 @@ import java.awt.*;
public final class SubTileRadiusRenderHandler {
private SubTileRadiusRenderHandler() {}
@SubscribeEvent
public void onWorldRenderLast(RenderWorldLastEvent event) {
public static void onWorldRenderLast(RenderWorldLastEvent event) {
Minecraft mc = Minecraft.getMinecraft();
RayTraceResult pos = mc.objectMouseOver;
@@ -79,7 +81,7 @@ public final class SubTileRadiusRenderHandler {
GlStateManager.popMatrix();
}
private void renderRectangle(AxisAlignedBB aabb) {
private static void renderRectangle(AxisAlignedBB aabb) {
double renderPosX, renderPosY, renderPosZ;
try {
@@ -124,7 +126,7 @@ public final class SubTileRadiusRenderHandler {
GlStateManager.popMatrix();
}
private void renderCircle(BlockPos center, double radius) {
private static void renderCircle(BlockPos center, double radius) {
double renderPosX, renderPosY, renderPosZ;
try {
@@ -23,7 +23,7 @@ import vazkii.botania.common.item.ItemRegenIvy;
public final class TooltipHandler {
@SubscribeEvent(priority = EventPriority.HIGHEST)
public void onTooltipEvent(ItemTooltipEvent event) {
public static void onTooltipEvent(ItemTooltipEvent event) {
if(event.getItemStack().getItem() == Item.getItemFromBlock(Blocks.DIRT) && event.getItemStack().getItemDamage() == 1) {
event.getToolTip().add(I18n.format("botaniamisc.coarseDirt0"));
event.getToolTip().add(I18n.format("botaniamisc.coarseDirt1"));
@@ -26,7 +26,6 @@ import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.World;
import net.minecraft.world.WorldSettings.GameType;
import net.minecraftforge.client.model.animation.AnimationTESR;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.client.registry.ClientRegistry;
@@ -200,24 +199,24 @@ public class ClientProxy extends CommonProxy {
ModChallenges.init();
MinecraftForge.EVENT_BUS.register(new ClientTickHandler());
MinecraftForge.EVENT_BUS.register(new HUDHandler());
MinecraftForge.EVENT_BUS.register(new LightningHandler());
MinecraftForge.EVENT_BUS.register(ClientTickHandler.class);
MinecraftForge.EVENT_BUS.register(HUDHandler.class);
MinecraftForge.EVENT_BUS.register(LightningHandler.class);
if(ConfigHandler.boundBlockWireframe)
MinecraftForge.EVENT_BUS.register(new BoundTileRenderer());
MinecraftForge.EVENT_BUS.register(new TooltipHandler());
MinecraftForge.EVENT_BUS.register(new DebugHandler());
MinecraftForge.EVENT_BUS.register(new SubTileRadiusRenderHandler());
MinecraftForge.EVENT_BUS.register(new MultiblockRenderHandler());
MinecraftForge.EVENT_BUS.register(new SkyblockRenderEvents());
MinecraftForge.EVENT_BUS.register(BoundTileRenderer.class);
MinecraftForge.EVENT_BUS.register(TooltipHandler.class);
MinecraftForge.EVENT_BUS.register(DebugHandler.class);
MinecraftForge.EVENT_BUS.register(SubTileRadiusRenderHandler.class);
MinecraftForge.EVENT_BUS.register(MultiblockRenderHandler.class);
MinecraftForge.EVENT_BUS.register(SkyblockRenderEvents.class);
MinecraftForge.EVENT_BUS.register(new RenderLexicon());
MinecraftForge.EVENT_BUS.register(new BossBarHandler());
MinecraftForge.EVENT_BUS.register(new BergamuteEventHandler());
MinecraftForge.EVENT_BUS.register(BossBarHandler.class);
MinecraftForge.EVENT_BUS.register(BergamuteEventHandler.class);
if(ConfigHandler.useAdaptativeConfig)
MinecraftForge.EVENT_BUS.register(new AdaptorNotifier());
MinecraftForge.EVENT_BUS.register(AdaptorNotifier.class);
if(ConfigHandler.versionCheckEnabled)
new VersionChecker().init();
VersionChecker.init();
if(ConfigHandler.enableSeasonalFeatures) {
LocalDateTime now = LocalDateTime.now();
@@ -337,7 +336,7 @@ public class ClientProxy extends CommonProxy {
BotaniaPlayerController controller = new BotaniaPlayerController(mc, net);
boolean isFlying = player.capabilities.isFlying;
boolean allowFlying = player.capabilities.allowFlying;
Botania.crossVersionProxy.copyGameType(mc.playerController, controller);
controller.setGameType(mc.playerController.getCurrentGameType());
player.capabilities.isFlying = isFlying;
player.capabilities.allowFlying = allowFlying;
mc.playerController = controller;
@@ -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; }
}
@@ -146,13 +146,8 @@ public class PlatformModel implements IBakedModel {
@Nonnull
@Override
public Biome getBiomeGenForCoords(@Nonnull BlockPos pos) {
return compose.getBiomeGenForCoords(pos);
}
@Override
public boolean extendedLevelsInChunkCache() {
return compose.extendedLevelsInChunkCache();
public Biome getBiome(@Nonnull BlockPos pos) {
return compose.getBiome(pos);
}
@Override
@@ -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);
@@ -0,0 +1,14 @@
package vazkii.botania.client.render;
import net.minecraftforge.fml.relauncher.Side;
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();
}
@@ -20,6 +20,7 @@ import net.minecraft.entity.boss.EntityWither;
import net.minecraft.entity.monster.EntityCreeper;
import net.minecraft.entity.monster.EntitySkeleton;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.monster.SkeletonType;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntitySkull;
import net.minecraft.util.EnumFacing;
@@ -62,7 +63,7 @@ public class RenderTileGaiaHead extends TileEntitySkullRenderer {
profile = ((EntityPlayer) mc.getRenderViewEntity()).getGameProfile();
} else if (view instanceof EntitySkeleton) {
skullType = 0;
if(Botania.crossVersionProxy.getSkeletonTypeInt((EntitySkeleton) view) == 1)
if (((EntitySkeleton) view).getSkeletonType() == SkeletonType.WITHER)
skullType = 1;
} else if(view instanceof EntityWither)
skullType = 1;
@@ -20,7 +20,7 @@ import vazkii.botania.common.world.WorldTypeSkyblock;
public final class SkyblockRenderEvents {
@SubscribeEvent
public void onRender(RenderWorldLastEvent event) {
public static void onRender(RenderWorldLastEvent event) {
World world = Minecraft.getMinecraft().theWorld;
if(ConfigHandler.enableFancySkybox && world.provider.getDimension() == 0 && (ConfigHandler.enableFancySkyboxInNormalWorlds || WorldTypeSkyblock.isWorldSkyblock(Minecraft.getMinecraft().theWorld))) {
if(!(world.provider.getSkyRenderer() instanceof SkyblockSkyRenderer))
@@ -10,16 +10,6 @@
*/
package vazkii.botania.common;
import com.google.common.collect.ImmutableMap;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.Style;
import net.minecraft.util.text.TextComponentString;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.event.ClickEvent;
import net.minecraft.util.text.event.HoverEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
@@ -33,18 +23,13 @@ import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLServerAboutToStartEvent;
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
import net.minecraftforge.fml.common.event.FMLServerStoppingEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.PlayerEvent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import vazkii.botania.common.core.handler.IMCHandler;
import vazkii.botania.common.core.handler.ManaNetworkHandler;
import vazkii.botania.common.core.proxy.CommonProxy;
import vazkii.botania.common.core.proxy.ICrossVersionProxy;
import vazkii.botania.common.lib.LibMisc;
import java.util.Map;
@Mod(modid = LibMisc.MOD_ID, name = LibMisc.MOD_NAME, version = LibMisc.VERSION, dependencies = LibMisc.DEPENDENCIES,
guiFactory = LibMisc.GUI_FACTORY, acceptedMinecraftVersions = LibMisc.MC_VERSIONS, updateJSON = LibMisc.UPDATE_JSON)
public class Botania {
@@ -66,33 +51,10 @@ public class Botania {
@SidedProxy(serverSide = LibMisc.PROXY_COMMON, clientSide = LibMisc.PROXY_CLIENT)
public static CommonProxy proxy;
public static ICrossVersionProxy crossVersionProxy;
public static final Logger LOGGER = LogManager.getLogger(LibMisc.MOD_ID);
private static final Map<String, String> PROXY_MAP = ImmutableMap.of(
"1.9.4", "vazkii.botania.common.core.proxy.CrossVersionProxy_19",
"1.10", "vazkii.botania.common.core.proxy.CrossVersionProxy_110",
"1.10.2", "vazkii.botania.common.core.proxy.CrossVersionProxy_110"
);
@EventHandler
public void preInit(FMLPreInitializationEvent event) {
try {
// The constant is inlined at compile time, we want the real value.
String mcVersion = (String) Loader.class.getDeclaredField("MC_VERSION").get(null);
if(!PROXY_MAP.containsKey(mcVersion))
throw new IllegalStateException("Botania couldn't find a cross version proxy!");
Class clazz = Class.forName(PROXY_MAP.get(mcVersion));
crossVersionProxy = (ICrossVersionProxy) clazz.newInstance();
Botania.LOGGER.info("Enabling proxy for Minecraft {}", mcVersion);
} catch (NoSuchFieldException | ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
throw new IllegalStateException("Botania couldn't find a cross version proxy!", ex);
}
gardenOfGlassLoaded = Loader.isModLoaded("GardenOfGlass");
thaumcraftLoaded = Loader.isModLoaded("Thaumcraft");
@@ -106,15 +68,6 @@ public class Botania {
storageDrawersLoaded = Loader.isModLoaded("StorageDrawers");
proxy.preInit(event);
MinecraftForge.EVENT_BUS.register(this);
}
@SubscribeEvent
public void nagRemoval(PlayerEvent.PlayerLoggedInEvent evt) {
EntityPlayer player = evt.player;
ITextComponent message = new TextComponentTranslation("botaniamisc.unofficial.warnRemove");
message.setStyle(new Style().setColor(TextFormatting.RED));
player.addChatComponentMessage(message);
}
@EventHandler
@@ -18,8 +18,10 @@ import net.minecraftforge.fml.common.gameevent.PlayerEvent.ItemPickupEvent;
public final class AchievementTriggerer {
private AchievementTriggerer() {}
@SubscribeEvent
public void onItemPickedUp(ItemPickupEvent event) {
public static void onItemPickedUp(ItemPickupEvent event) {
ItemStack stack = event.pickedUp.getEntityItem();
if(stack != null && stack.getItem() instanceof IPickupAchievement) {
Achievement achievement = ((IPickupAchievement) stack.getItem()).getAchievementOnPickup(stack, event.player, event.pickedUp);
@@ -29,7 +31,7 @@ public final class AchievementTriggerer {
}
@SubscribeEvent
public void onItemCrafted(ItemCraftedEvent event) {
public static void onItemCrafted(ItemCraftedEvent event) {
if(event.crafting != null && event.crafting.getItem() instanceof ICraftAchievement) {
Achievement achievement = ((ICraftAchievement) event.crafting.getItem()).getAchievementOnCraft(event.crafting, event.player, event.craftMatrix);
if(achievement != null)
@@ -157,7 +157,7 @@ public final class ModAchievements {
botaniaPage = new AchievementPage(LibMisc.MOD_NAME, AchievementMod.achievements.toArray(new Achievement[AchievementMod.achievements.size()]));
AchievementPage.registerAchievementPage(botaniaPage);
MinecraftForge.EVENT_BUS.register(new AchievementTriggerer());
MinecraftForge.EVENT_BUS.register(AchievementTriggerer.class);
}
}
@@ -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);
}
}
@@ -14,9 +14,11 @@ 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.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
@@ -27,10 +29,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.ForgeHooksClient;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
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;
@@ -146,4 +153,13 @@ public class BlockAvatar extends BlockMod implements ILexiconable {
return LexiconData.avatar;
}
@SideOnly(Side.CLIENT)
@Override
public void 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();
}
}
@@ -42,7 +42,6 @@ public class BlockBifrost extends BlockMod implements ILexiconable {
setLightLevel(1F);
setBlockUnbreakable();
setSoundType(SoundType.GLASS);
MinecraftForge.EVENT_BUS.register(this);
}
@Override
@@ -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;
@@ -43,7 +46,7 @@ public class BlockFelPumpkin extends BlockMod implements ILexiconable {
super(Material.GOURD, LibBlockNames.FEL_PUMPKIN);
setHardness(1F);
setSoundType(SoundType.WOOD);
MinecraftForge.EVENT_BUS.register(this);
MinecraftForge.EVENT_BUS.register(BlockFelPumpkin.class);
setDefaultState(blockState.getBaseState().withProperty(BotaniaStateProps.CARDINALS, EnumFacing.SOUTH));
}
@@ -88,7 +91,7 @@ public class BlockFelPumpkin extends BlockMod implements ILexiconable {
}
@SubscribeEvent
public void onDrops(LivingDropsEvent event) {
public static void onDrops(LivingDropsEvent event) {
if(event.getEntityLiving() instanceof EntityBlaze && event.getEntityLiving().getEntityData().getBoolean(TAG_FEL_SPAWNED))
if(event.getDrops().isEmpty())
event.getDrops().add(new EntityItem(event.getEntityLiving().worldObj, event.getEntityLiving().posX, event.getEntityLiving().posY, event.getEntityLiving().posZ, new ItemStack(Items.BLAZE_POWDER, 6)));
@@ -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));
}
}
@@ -12,6 +12,7 @@ package vazkii.botania.common.block;
import net.minecraft.block.BlockSkull;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.statemap.StateMap;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@@ -22,7 +23,11 @@ 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.client.render.IModelRegister;
import vazkii.botania.common.block.tile.TileGaiaHead;
import vazkii.botania.common.item.ModItems;
import vazkii.botania.common.lib.LibBlockNames;
@@ -33,10 +38,11 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class BlockGaiaHead extends BlockSkull {
public class BlockGaiaHead extends BlockSkull implements IModelRegister, IRegisterCallback {
public BlockGaiaHead() {
GameRegistry.register(this, new ResourceLocation(LibMisc.MOD_ID, LibBlockNames.GAIA_HEAD));
ModBlocks.ALL_BLOCKS.add(this);
setRegistryName(new ResourceLocation(LibMisc.MOD_ID, LibBlockNames.GAIA_HEAD));
setUnlocalizedName(LibBlockNames.GAIA_HEAD);
setHardness(1.0F);
}
@@ -79,4 +85,15 @@ public class BlockGaiaHead extends BlockSkull {
public TileEntity createNewTileEntity(World world, int meta) {
return new TileGaiaHead();
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelLoader.setCustomStateMapper(this, new StateMap.Builder().ignore(FACING, NODROP).build());
}
@Override
public void register() {
GameRegistry.register(this);
}
}
@@ -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,17 +40,17 @@ import vazkii.botania.common.lib.LibMisc;
import javax.annotation.Nonnull;
public class BlockGhostRail extends BlockRailBase implements ILexiconable {
public class BlockGhostRail extends BlockRailBase implements ILexiconable, IRegisterCallback, IModelRegister {
private static final String TAG_FLOAT_TICKS = "Botania_FloatTicks";
public BlockGhostRail() {
super(true);
setCreativeTab(BotaniaCreativeTab.INSTANCE);
GameRegistry.register(this, new ResourceLocation(LibMisc.MOD_ID, LibBlockNames.GHOST_RAIL));
GameRegistry.register(new ItemBlockMod(this), getRegistryName());
ModBlocks.ALL_BLOCKS.add(this);
setRegistryName(new ResourceLocation(LibMisc.MOD_ID, LibBlockNames.GHOST_RAIL));
setUnlocalizedName(LibBlockNames.GHOST_RAIL);
MinecraftForge.EVENT_BUS.register(this);
MinecraftForge.EVENT_BUS.register(BlockGhostRail.class);
setDefaultState(blockState.getBaseState().withProperty(BotaniaStateProps.RAIL_DIRECTION, EnumRailDirection.NORTH_SOUTH));
}
@@ -68,14 +72,14 @@ public class BlockGhostRail extends BlockRailBase implements ILexiconable {
}
@SubscribeEvent
public void onMinecartUpdate(MinecartUpdateEvent event) {
public static void onMinecartUpdate(MinecartUpdateEvent event) {
BlockPos entPos = new BlockPos(event.getEntity());
IBlockState state = event.getEntity().worldObj.getBlockState(entPos);
Block block = state.getBlock();
boolean air = block.isAir(state, event.getEntity().worldObj, entPos);
int floatTicks = event.getEntity().getEntityData().getInteger(TAG_FLOAT_TICKS);
if(block == this)
if(block == ModBlocks.ghostRail)
event.getEntity().getEntityData().setInteger(TAG_FLOAT_TICKS, 20);
else if(block instanceof BlockRailBase || block == ModBlocks.dreamwood) {
event.getEntity().getEntityData().setInteger(TAG_FLOAT_TICKS, 0);
@@ -108,4 +112,16 @@ public class BlockGhostRail extends BlockRailBase implements ILexiconable {
public IProperty<EnumRailDirection> getShapeProperty() {
return BlockRailPowered.SHAPE;
}
@Override
public void register() {
GameRegistry.register(this);
GameRegistry.register(new ItemBlockMod(this), getRegistryName());
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerCustomItemblock(this, "ghost_rail");
}
}
@@ -16,8 +16,10 @@ 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.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
@@ -29,6 +31,10 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.ForgeHooksClient;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.internal.IManaBurst;
import vazkii.botania.api.internal.VanillaPacketDispatcher;
import vazkii.botania.api.lexicon.ILexiconable;
@@ -37,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;
@@ -195,4 +202,12 @@ public class BlockHourglass extends BlockMod implements IManaTrigger, IWandable,
return LexiconData.hourglass;
}
@SideOnly(Side.CLIENT)
@Override
public void 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,9 +12,14 @@ 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;
import vazkii.botania.common.item.block.ItemBlockMod;
@@ -22,13 +27,13 @@ import vazkii.botania.common.lib.LibMisc;
import javax.annotation.Nonnull;
public class BlockMod extends Block {
public class BlockMod extends Block implements IModelRegister, IRegisterCallback {
public BlockMod(Material par2Material, String name) {
super(par2Material);
setUnlocalizedName(name);
GameRegistry.register(this, new ResourceLocation(LibMisc.MOD_ID, name));
registerItemForm();
ModBlocks.ALL_BLOCKS.add(this);
setRegistryName(new ResourceLocation(LibMisc.MOD_ID, name));
if(registerInCreative())
setCreativeTab(BotaniaCreativeTab.INSTANCE);
}
@@ -41,4 +46,16 @@ public class BlockMod extends Block {
return true;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
if(Item.getItemFromBlock(this) != null)
ModelHandler.registerBlockToState(this, 0, getDefaultState());
}
@Override
public void register() {
GameRegistry.register(this);
registerItemForm();
}
}
@@ -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 {
public abstract class BlockModDoubleFlower extends BlockDoublePlant implements ILexiconable, IRegisterCallback, IModelRegister {
private static final int COUNT = 8;
private final boolean second;
@@ -59,8 +62,8 @@ public abstract class BlockModDoubleFlower extends BlockDoublePlant implements I
this.setHardness(0.0F);
this.setSoundType(SoundType.PLANT);
String name = LibBlockNames.DOUBLE_FLOWER + (second ? 2 : 1);
GameRegistry.register(this, new ResourceLocation(LibMisc.MOD_ID, name));
GameRegistry.register(new ItemBlockWithMetadataAndName(this), getRegistryName());
ModBlocks.ALL_BLOCKS.add(this);
setRegistryName(new ResourceLocation(LibMisc.MOD_ID, name));
setUnlocalizedName(name);
setHardness(0F);
setTickRandomly(false);
@@ -218,4 +221,16 @@ public abstract class BlockModDoubleFlower extends BlockDoublePlant implements I
return new ItemStack(Item.getItemFromBlock(state.getBlock()), 1, state.getValue(prop).ordinal() - (second ? 8 : 0));
}
@Override
public final void register() {
GameRegistry.register(this);
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 {
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);
@@ -57,8 +63,8 @@ public class BlockModFlower extends BlockFlower implements ILexiconable, IPickup
protected BlockModFlower(String name) {
setUnlocalizedName(name);
GameRegistry.register(this, new ResourceLocation(LibMisc.MOD_ID, name));
registerItemForm();
ModBlocks.ALL_BLOCKS.add(this);
setRegistryName(new ResourceLocation(LibMisc.MOD_ID, name));
setHardness(0F);
setSoundType(SoundType.PLANT);
setTickRandomly(false);
@@ -165,4 +171,16 @@ public class BlockModFlower extends BlockFlower implements ILexiconable, IPickup
world.setBlockState(pos.up(), flower.getDefaultState().withProperty(color.getMetadata() >= 8 ? BotaniaStateProps.DOUBLEFLOWER_VARIANT_2 : BotaniaStateProps.DOUBLEFLOWER_VARIANT_1, color).withProperty(BlockDoublePlant.HALF, BlockDoublePlant.EnumBlockHalf.UPPER), flags);
}
@Override
public void register() {
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);
}
}
@@ -32,10 +32,11 @@ import vazkii.botania.common.lib.LibMisc;
import javax.annotation.Nonnull;
import java.util.Random;
public class BlockSolidVines extends BlockVine implements ILexiconable {
public class BlockSolidVines extends BlockVine implements ILexiconable, IRegisterCallback {
public BlockSolidVines() {
GameRegistry.register(this, new ResourceLocation(LibMisc.MOD_ID, LibBlockNames.SOLID_VINE));
ModBlocks.ALL_BLOCKS.add(this);
setRegistryName(new ResourceLocation(LibMisc.MOD_ID, LibBlockNames.SOLID_VINE));
setUnlocalizedName(LibBlockNames.SOLID_VINE);
setHardness(0.5F);
setSoundType(SoundType.PLANT);
@@ -66,4 +67,8 @@ public class BlockSolidVines extends BlockVine implements ILexiconable {
return LexiconData.vineBall;
}
@Override
public void register() {
GameRegistry.register(this);
}
}
@@ -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 {
public class BlockSpecialFlower extends BlockFlower implements ISpecialFlower, IWandable, ILexiconable, IWandHUD, IRegisterCallback, IModelRegister {
static {
BotaniaAPI.subtilesForCreativeMenu.addAll(Arrays.asList(
@@ -121,8 +125,8 @@ public class BlockSpecialFlower extends BlockFlower implements ISpecialFlower, I
private static final AxisAlignedBB AABB = new AxisAlignedBB(0.3, 0, 0.3, 0.8, 1, 0.8);
protected BlockSpecialFlower() {
GameRegistry.register(this, new ResourceLocation(LibMisc.MOD_ID, LibBlockNames.SPECIAL_FLOWER));
GameRegistry.register(new ItemBlockSpecialFlower(this), getRegistryName());
ModBlocks.ALL_BLOCKS.add(this);
setRegistryName(new ResourceLocation(LibMisc.MOD_ID, LibBlockNames.SPECIAL_FLOWER));
setUnlocalizedName(LibBlockNames.SPECIAL_FLOWER);
setHardness(0.1F);
setSoundType(SoundType.PLANT);
@@ -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
@@ -377,4 +381,17 @@ public class BlockSpecialFlower extends BlockFlower implements ISpecialFlower, I
}
}
@Override
public void register() {
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);
}
}
@@ -26,8 +26,12 @@ 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.ForgeHooksClient;
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;
@@ -138,4 +142,11 @@ public class BlockTeruTeruBozu extends BlockMod implements ILexiconable {
return LexiconData.teruTeruBozu;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerCustomItemblock(this, "teru_teru_bozu");
ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(this), 0, TileTeruTeruBozu.class);
}
}
@@ -0,0 +1,8 @@
package vazkii.botania.common.block;
public interface IRegisterCallback {
/**
* Register block and any itemblocks
*/
void register();
}
@@ -34,21 +34,16 @@ import vazkii.botania.common.block.decor.BlockBuriedPetals;
import vazkii.botania.common.block.decor.BlockCustomBrick;
import vazkii.botania.common.block.decor.BlockDirtPath;
import vazkii.botania.common.block.decor.BlockElfGlass;
import vazkii.botania.common.block.decor.BlockEndStoneBrick;
import vazkii.botania.common.block.decor.BlockFloatingFlower;
import vazkii.botania.common.block.decor.BlockManaBeacon;
import vazkii.botania.common.block.decor.BlockManaFlame;
import vazkii.botania.common.block.decor.BlockManaGlass;
import vazkii.botania.common.block.decor.BlockModMushroom;
import vazkii.botania.common.block.decor.BlockPetalBlock;
import vazkii.botania.common.block.decor.BlockPrismarine;
import vazkii.botania.common.block.decor.BlockReeds;
import vazkii.botania.common.block.decor.BlockSeaLamp;
import vazkii.botania.common.block.decor.BlockShimmerrock;
import vazkii.botania.common.block.decor.BlockShimmerwoodPlanks;
import vazkii.botania.common.block.decor.BlockShinyFlower;
import vazkii.botania.common.block.decor.BlockStarfield;
import vazkii.botania.common.block.decor.BlockThatch;
import vazkii.botania.common.block.decor.BlockTinyPotato;
import vazkii.botania.common.block.decor.BlockUnstable;
import vazkii.botania.common.block.dispenser.BehaviourFelPumpkin;
@@ -180,8 +175,12 @@ import vazkii.botania.common.item.ModItems;
import vazkii.botania.common.lib.LibBlockNames;
import vazkii.botania.common.lib.LibOreDict;
import java.util.HashSet;
import java.util.Set;
public final class ModBlocks {
public static final Set<Block> ALL_BLOCKS = new HashSet<>();
public static Block flower;
public static Block altar;
public static Block livingrock;
@@ -213,13 +212,9 @@ public final class ModBlocks {
public static Block bifrost;
public static Block solidVines;
public static Block buriedPetals;
public static Block prismarine;
public static Block seaLamp;
public static Block floatingFlower;
public static Block tinyPotato;
public static Block spawnerClaw;
public static Block reedBlock;
public static Block thatch;
public static Block customBrick;
public static Block enderEye;
public static Block starfield;
@@ -241,7 +236,6 @@ public final class ModBlocks {
public static Block petalBlock;
public static Block corporeaIndex;
public static Block corporeaFunnel;
public static Block endStoneBrick;
public static Block mushroom;
public static Block pump;
public static Block doubleFlower1;
@@ -305,13 +299,9 @@ public final class ModBlocks {
bifrost = new BlockBifrost();
solidVines = new BlockSolidVines();
buriedPetals = new BlockBuriedPetals();
prismarine = new BlockPrismarine();
seaLamp = new BlockSeaLamp();
floatingFlower = new BlockFloatingFlower();
tinyPotato = new BlockTinyPotato();
spawnerClaw = new BlockSpawnerClaw();
reedBlock = new BlockReeds();
thatch = new BlockThatch();
customBrick = new BlockCustomBrick();
enderEye = new BlockEnderEye();
starfield = new BlockStarfield();
@@ -333,7 +323,6 @@ public final class ModBlocks {
petalBlock = new BlockPetalBlock();
corporeaIndex = new BlockCorporeaIndex();
corporeaFunnel = new BlockCorporeaFunnel();
endStoneBrick = new BlockEndStoneBrick();
mushroom = new BlockModMushroom();
pump = new BlockPump();
doubleFlower1 = new BlockModDoubleFlower1();
@@ -367,6 +356,14 @@ public final class ModBlocks {
ModFluffBlocks.init();
for (Block b : ALL_BLOCKS) {
if (b instanceof IRegisterCallback) {
((IRegisterCallback) b).register();
} else {
throw new RuntimeException(b.getRegistryName() + " doesn't have register callbacks!");
}
}
for(int i = 0; i < 16; i++)
OreDictionary.registerOre(LibOreDict.FLOWER[i], new ItemStack(flower, 1, i));
@@ -11,14 +11,11 @@
package vazkii.botania.common.block;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import net.minecraft.block.Block;
import net.minecraft.item.EnumDyeColor;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.BiomeBrickVariant;
import vazkii.botania.api.state.enums.BiomeStoneVariant;
import vazkii.botania.api.state.enums.FutureStoneVariant;
import vazkii.botania.common.block.decor.Block18Stone;
import vazkii.botania.common.block.decor.BlockPavement;
import vazkii.botania.common.block.decor.biomestone.BlockBiomeStoneA;
import vazkii.botania.common.block.decor.biomestone.BlockBiomeStoneB;
@@ -28,15 +25,10 @@ import vazkii.botania.common.block.decor.panes.BlockManaglassPane;
import vazkii.botania.common.block.decor.quartz.BlockSpecialQuartz;
import vazkii.botania.common.block.decor.quartz.BlockSpecialQuartzSlab;
import vazkii.botania.common.block.decor.quartz.BlockSpecialQuartzStairs;
import vazkii.botania.common.block.decor.slabs.Block18StoneSlab;
import vazkii.botania.common.block.decor.slabs.BlockBiomeStoneSlab;
import vazkii.botania.common.block.decor.slabs.BlockDirtPathSlab;
import vazkii.botania.common.block.decor.slabs.BlockEndStoneSlab;
import vazkii.botania.common.block.decor.slabs.BlockEnderBrickSlab;
import vazkii.botania.common.block.decor.slabs.BlockModSlab;
import vazkii.botania.common.block.decor.slabs.BlockPavementSlab;
import vazkii.botania.common.block.decor.slabs.BlockReedSlab;
import vazkii.botania.common.block.decor.slabs.BlockThatchSlab;
import vazkii.botania.common.block.decor.slabs.bricks.BlockCustomBrickSlab;
import vazkii.botania.common.block.decor.slabs.bricks.BlockSnowBrickSlab;
import vazkii.botania.common.block.decor.slabs.bricks.BlockSoulBrickSlab;
@@ -49,16 +41,8 @@ import vazkii.botania.common.block.decor.slabs.living.BlockLivingwoodPlankSlab;
import vazkii.botania.common.block.decor.slabs.living.BlockLivingwoodSlab;
import vazkii.botania.common.block.decor.slabs.living.BlockShimmerrockSlab;
import vazkii.botania.common.block.decor.slabs.living.BlockShimmerwoodPlankSlab;
import vazkii.botania.common.block.decor.slabs.prismarine.BlockDarkPrismarineSlab;
import vazkii.botania.common.block.decor.slabs.prismarine.BlockPrismarineBrickSlab;
import vazkii.botania.common.block.decor.slabs.prismarine.BlockPrismarineSlab;
import vazkii.botania.common.block.decor.stairs.Block18StoneStairs;
import vazkii.botania.common.block.decor.stairs.BlockBiomeStoneStairs;
import vazkii.botania.common.block.decor.stairs.BlockEndStoneStairs;
import vazkii.botania.common.block.decor.stairs.BlockEnderBrickStairs;
import vazkii.botania.common.block.decor.stairs.BlockPavementStairs;
import vazkii.botania.common.block.decor.stairs.BlockReedStairs;
import vazkii.botania.common.block.decor.stairs.BlockThatchStairs;
import vazkii.botania.common.block.decor.stairs.bricks.BlockCustomBrickStairs;
import vazkii.botania.common.block.decor.stairs.bricks.BlockSnowBrickStairs;
import vazkii.botania.common.block.decor.stairs.bricks.BlockSoulBrickStairs;
@@ -71,13 +55,7 @@ import vazkii.botania.common.block.decor.stairs.living.BlockLivingwoodPlankStair
import vazkii.botania.common.block.decor.stairs.living.BlockLivingwoodStairs;
import vazkii.botania.common.block.decor.stairs.living.BlockShimmerrockStairs;
import vazkii.botania.common.block.decor.stairs.living.BlockShimmerwoodPlankStairs;
import vazkii.botania.common.block.decor.stairs.prismarine.BlockDarkPrismarineStairs;
import vazkii.botania.common.block.decor.stairs.prismarine.BlockPrismarineBrickStairs;
import vazkii.botania.common.block.decor.stairs.prismarine.BlockPrismarineStairs;
import vazkii.botania.common.block.decor.walls.Block18StoneWall;
import vazkii.botania.common.block.decor.walls.BlockBiomeStoneWall;
import vazkii.botania.common.block.decor.walls.BlockPrismarineWall;
import vazkii.botania.common.block.decor.walls.BlockReedWall;
import vazkii.botania.common.block.decor.walls.living.BlockDreamwoodWall;
import vazkii.botania.common.block.decor.walls.living.BlockLivingrockWall;
import vazkii.botania.common.block.decor.walls.living.BlockLivingwoodWall;
@@ -85,7 +63,6 @@ import vazkii.botania.common.core.handler.ConfigHandler;
import vazkii.botania.common.lib.LibBlockNames;
import java.util.Locale;
import java.util.Set;
public final class ModFluffBlocks {
@@ -111,25 +88,6 @@ public final class ModFluffBlocks {
public static Block dreamwoodPlankSlab;
public static Block dreamwoodPlankSlabFull;
public static Block prismarineStairs;
public static Block prismarineSlab;
public static Block prismarineSlabFull;
public static Block prismarineWall;
public static Block prismarineBrickStairs;
public static Block prismarineBrickSlab;
public static Block prismarineBrickSlabFull;
public static Block darkPrismarineStairs;
public static Block darkPrismarineSlab;
public static Block darkPrismarineSlabFull;
public static Block reedStairs;
public static Block reedSlab;
public static Block reedSlabFull;
public static Block reedWall;
public static Block thatchStairs;
public static Block thatchSlab;
public static Block thatchSlabFull;
public static Block netherBrickStairs;
public static Block netherBrickSlab;
public static Block netherBrickSlabFull;
@@ -177,7 +135,6 @@ public final class ModFluffBlocks {
public static Block biomeStoneA;
public static Block biomeStoneB;
public static Block stone;
public static Block pavement;
public static final Block[] biomeStoneStairs = new Block[24];
@@ -185,22 +142,10 @@ public final class ModFluffBlocks {
public static final Block[] biomeStoneFullSlabs = new Block[24];
public static Block biomeStoneWall;
public static final Block[] stoneStairs = new Block[8];
public static final Block[] stoneSlabs = new Block[8];
public static final Block[] stoneFullSlabs = new Block[8];
public static Block stoneWall;
public static final Block[] pavementStairs = new Block[BlockPavement.TYPES];
public static final Block[] pavementSlabs = new Block[BlockPavement.TYPES];
public static final Block[] pavementFullSlabs = new Block[BlockPavement.TYPES];
public static Block endStoneSlab;
public static Block endStoneSlabFull;
public static Block endStoneStairs;
public static Block enderBrickSlab;
public static Block enderBrickSlabFull;
public static Block enderBrickStairs;
public static Block shimmerrockSlab;
public static Block shimmerrockSlabFull;
public static Block shimmerrockStairs;
@@ -235,25 +180,6 @@ public final class ModFluffBlocks {
dreamwoodPlankSlab = new BlockDreamwoodPlankSlab(false);
dreamwoodPlankSlabFull = new BlockDreamwoodPlankSlab(true);
prismarineStairs = new BlockPrismarineStairs();
prismarineSlab = new BlockPrismarineSlab(false);
prismarineSlabFull = new BlockPrismarineSlab(true);
prismarineWall = new BlockPrismarineWall();
prismarineBrickStairs = new BlockPrismarineBrickStairs();
prismarineBrickSlab = new BlockPrismarineBrickSlab(false);
prismarineBrickSlabFull = new BlockPrismarineBrickSlab(true);
darkPrismarineStairs = new BlockDarkPrismarineStairs();
darkPrismarineSlab = new BlockDarkPrismarineSlab(false);
darkPrismarineSlabFull = new BlockDarkPrismarineSlab(true);
reedStairs = new BlockReedStairs();
reedSlab = new BlockReedSlab(false);
reedSlabFull = new BlockReedSlab(true);
reedWall = new BlockReedWall();
thatchStairs = new BlockThatchStairs();
thatchSlab = new BlockThatchSlab(false);
thatchSlabFull = new BlockThatchSlab(true);
netherBrickStairs = new BlockCustomBrickStairs();
netherBrickSlab = new BlockCustomBrickSlab(false);
netherBrickSlabFull = new BlockCustomBrickSlab(true);
@@ -269,7 +195,6 @@ public final class ModFluffBlocks {
biomeStoneA = new BlockBiomeStoneA();
biomeStoneB = new BlockBiomeStoneB();
stone = new Block18Stone();
pavement = new BlockPavement();
if(ConfigHandler.darkQuartzEnabled) {
@@ -327,24 +252,6 @@ public final class ModFluffBlocks {
}
biomeStoneWall = new BlockBiomeStoneWall();
Set<FutureStoneVariant> allowed = ImmutableSet.of(FutureStoneVariant.ANDESITE, FutureStoneVariant.ANDESITE_BRICK,
FutureStoneVariant.BASALT, FutureStoneVariant.BASALT_BRICK, FutureStoneVariant.DIORITE, FutureStoneVariant.DIORITE_BRICK,
FutureStoneVariant.GRANITE, FutureStoneVariant.GRANITE_BRICK);
count = 0;
for(FutureStoneVariant variant : FutureStoneVariant.values()) {
if (!allowed.contains(variant)) {
// Filter - only get the base blocks, and the brick versions
continue;
}
stoneStairs[count] = new Block18StoneStairs(variant);
stoneSlabs[count] = new Block18StoneSlab(false, variant, count);
stoneFullSlabs[count] = new Block18StoneSlab(true, variant, count);
count++;
}
stoneWall = new Block18StoneWall();
count = 0;
for (EnumDyeColor color : ImmutableList.of(EnumDyeColor.WHITE, EnumDyeColor.BLACK, EnumDyeColor.BLUE,
EnumDyeColor.RED, EnumDyeColor.YELLOW, EnumDyeColor.GREEN)) {
@@ -354,13 +261,6 @@ public final class ModFluffBlocks {
count++;
}
endStoneSlab = new BlockEndStoneSlab(false);
endStoneSlabFull = new BlockEndStoneSlab(true);
endStoneStairs = new BlockEndStoneStairs();
enderBrickSlab = new BlockEnderBrickSlab(false);
enderBrickSlabFull = new BlockEnderBrickSlab(true);
enderBrickStairs = new BlockEnderBrickStairs();
shimmerrockSlab = new BlockShimmerrockSlab(false);
shimmerrockSlabFull = new BlockShimmerrockSlab(true);
shimmerrockStairs = new BlockShimmerrockStairs();
@@ -371,85 +271,6 @@ public final class ModFluffBlocks {
managlassPane = new BlockManaglassPane();
alfglassPane = new BlockAlfglassPane();
bifrostPane = new BlockBifrostPane();
if(ConfigHandler.darkQuartzEnabled) {
((BlockModSlab) darkQuartzSlab).register();
((BlockModSlab) darkQuartzSlabFull).register();
}
((BlockModSlab) manaQuartzSlab).register();
((BlockModSlab) manaQuartzSlabFull).register();
((BlockModSlab) blazeQuartzSlab).register();
((BlockModSlab) blazeQuartzSlabFull).register();
((BlockModSlab) lavenderQuartzSlab).register();
((BlockModSlab) lavenderQuartzSlabFull).register();
((BlockModSlab) redQuartzSlab).register();
((BlockModSlab) redQuartzSlabFull).register();
((BlockModSlab) elfQuartzSlab).register();
((BlockModSlab) elfQuartzSlabFull).register();
((BlockModSlab) sunnyQuartzSlab).register();
((BlockModSlab) sunnyQuartzSlabFull).register();
((BlockModSlab) livingwoodSlab).register();
((BlockModSlab) livingwoodSlabFull).register();
((BlockModSlab) livingwoodPlankSlab).register();
((BlockModSlab) livingwoodPlankSlabFull).register();
((BlockModSlab) livingrockSlab).register();
((BlockModSlab) livingrockSlabFull).register();
((BlockModSlab) livingrockBrickSlab).register();
((BlockModSlab) livingrockBrickSlabFull).register();
((BlockModSlab) dreamwoodSlab).register();
((BlockModSlab) dreamwoodSlabFull).register();
((BlockModSlab) dreamwoodPlankSlab).register();
((BlockModSlab) dreamwoodPlankSlabFull).register();
((BlockModSlab) reedSlab).register();
((BlockModSlab) reedSlabFull).register();
((BlockModSlab) thatchSlab).register();
((BlockModSlab) thatchSlabFull).register();
((BlockModSlab) prismarineSlab).register();
((BlockModSlab) prismarineSlabFull).register();
((BlockModSlab) prismarineBrickSlab).register();
((BlockModSlab) prismarineBrickSlabFull).register();
((BlockModSlab) darkPrismarineSlab).register();
((BlockModSlab) darkPrismarineSlabFull).register();
((BlockModSlab) netherBrickSlab).register();
((BlockModSlab) netherBrickSlabFull).register();
((BlockModSlab) soulBrickSlab).register();
((BlockModSlab) soulBrickSlabFull).register();
((BlockModSlab) snowBrickSlab).register();
((BlockModSlab) snowBrickSlabFull).register();
((BlockModSlab) tileSlab).register();
((BlockModSlab) tileSlabFull).register();
((BlockModSlab) dirtPathSlab).register();
((BlockModSlab) dirtPathSlabFull).register();
((BlockModSlab) endStoneSlab).register();
((BlockModSlab) endStoneSlabFull).register();
((BlockModSlab) enderBrickSlab).register();
((BlockModSlab) enderBrickSlabFull).register();
((BlockModSlab) shimmerrockSlab).register();
((BlockModSlab) shimmerrockSlabFull).register();
((BlockModSlab) shimmerwoodPlankSlab).register();
((BlockModSlab) shimmerwoodPlankSlabFull).register();
for(int i = 0; i < 24; i++) {
((BlockModSlab) biomeStoneSlabs[i]).register();
((BlockModSlab) biomeStoneFullSlabs[i]).register();
}
for(int i = 0; i < 8; i++) {
((BlockModSlab) stoneSlabs[i]).register();
((BlockModSlab) stoneFullSlabs[i]).register();
}
for(int i = 0; i < pavementSlabs.length; i++) {
((BlockModSlab) pavementSlabs[i]).register();
((BlockModSlab) pavementFullSlabs[i]).register();
}
}
}
@@ -16,6 +16,7 @@ import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
@@ -23,12 +24,16 @@ 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.ForgeHooksClient;
import net.minecraftforge.common.property.ExtendedBlockState;
import net.minecraftforge.common.property.IExtendedBlockState;
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.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;
@@ -125,4 +130,11 @@ public class BlockCorporeaCrystalCube extends BlockCorporeaBase implements ILexi
return ((TileCorporeaCrystalCube) world.getTileEntity(pos)).compValue;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerInventoryVariant(this);
ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(this), 0, TileCorporeaCrystalCube.class);
}
}
@@ -17,18 +17,21 @@ import net.minecraft.block.state.IBlockState;
import net.minecraft.client.particle.ParticleDigging;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumBlockRenderType;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.client.ForgeHooksClient;
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.block.ModBlocks;
import vazkii.botania.common.block.tile.corporea.TileCorporeaBase;
import vazkii.botania.common.block.tile.corporea.TileCorporeaIndex;
@@ -108,4 +111,11 @@ public class BlockCorporeaIndex extends BlockCorporeaBase implements ILexiconabl
}
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelHandler.registerCustomItemblock(this, "corporea_index");
ForgeHooksClient.registerTESRItemStack(Item.getItemFromBlock(this), 0, TileCorporeaIndex.class);
}
}
@@ -1,94 +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 @ [Apr 10, 2015, 7:34:31 PM (GMT)]
*/
package vazkii.botania.common.block.decor;
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.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
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 vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.FutureStoneVariant;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.item.block.ItemBlockWithMetadataAndName;
import vazkii.botania.common.lexicon.LexiconData;
import vazkii.botania.common.lib.LibBlockNames;
import javax.annotation.Nonnull;
import java.util.List;
public class Block18Stone extends BlockMod implements ILexiconable {
public Block18Stone() {
super(Material.ROCK, LibBlockNames.STONE);
setHardness(1.5F);
setResistance(10F);
setSoundType(SoundType.STONE);
setDefaultState(blockState.getBaseState().withProperty(BotaniaStateProps.FUTURESTONE_VARIANT, FutureStoneVariant.ANDESITE));
}
@Nonnull
@Override
public BlockStateContainer createBlockState() {
return new BlockStateContainer(this, BotaniaStateProps.FUTURESTONE_VARIANT);
}
@Override
public int getMetaFromState(IBlockState state) {
return state.getValue(BotaniaStateProps.FUTURESTONE_VARIANT).ordinal();
}
@Nonnull
@Override
public IBlockState getStateFromMeta(int meta) {
if (meta >= FutureStoneVariant.values().length) {
meta = 0;
}
return getDefaultState().withProperty(BotaniaStateProps.FUTURESTONE_VARIANT, FutureStoneVariant.values()[meta]);
}
@Override
public void getSubBlocks(@Nonnull Item item, CreativeTabs tab, List<ItemStack> list) {
for(int i = 0; i < 16; i++)
list.add(new ItemStack(item, 1, i));
}
@Override
public int damageDropped(IBlockState state) {
return getMetaFromState(state);
}
@Override
public void registerItemForm() {
GameRegistry.register(new ItemBlockWithMetadataAndName(this), getRegistryName());
}
@Nonnull
@Override
public ItemStack getPickBlock(@Nonnull IBlockState state, RayTraceResult target, @Nonnull World world, @Nonnull BlockPos pos, EntityPlayer player) {
return new ItemStack(this, 1, getMetaFromState(world.getBlockState(pos)));
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.stoneAlchemy;
}
}
@@ -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);
}
}
@@ -35,6 +35,7 @@ import net.minecraftforge.fml.common.gameevent.TickEvent;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.lexicon.LexiconData;
import vazkii.botania.common.lib.LibBlockNames;
@@ -53,7 +54,7 @@ public class BlockDirtPath extends BlockMod implements ILexiconable {
setHardness(0.6F);
setSoundType(SoundType.GROUND);
useNeighborBrightness = true;
MinecraftForge.EVENT_BUS.register(this);
MinecraftForge.EVENT_BUS.register(BlockDirtPath.class);
}
@Override
@@ -113,11 +114,11 @@ public class BlockDirtPath extends BlockMod implements ILexiconable {
}
@SubscribeEvent
public void onTickEnd(TickEvent.WorldTickEvent event) {
public static void onTickEnd(TickEvent.WorldTickEvent event) {
if(event.world.isRemote || event.phase != TickEvent.Phase.END)
return;
for(EntityPlayerMP player : event.world.getPlayers(EntityPlayerMP.class, p -> p.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).hasModifier(speedBoost))) {
if (event.world.getBlockState(new BlockPos(player).down()).getBlock() != this) {
if (event.world.getBlockState(new BlockPos(player).down()).getBlock() != ModBlocks.dirtPath) {
player.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).removeModifier(speedBoost);
}
} // todo 1.8 there's probably a better way to do this.
@@ -1,94 +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 @ [Feb 16, 2015, 8:17:12 PM (GMT)]
*/
package vazkii.botania.common.block.decor;
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.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
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 vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.EndBrickVariant;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.item.block.ItemBlockWithMetadataAndName;
import vazkii.botania.common.lexicon.LexiconData;
import vazkii.botania.common.lib.LibBlockNames;
import javax.annotation.Nonnull;
import java.util.List;
public class BlockEndStoneBrick extends BlockMod implements ILexiconable {
public BlockEndStoneBrick() {
super(Material.ROCK, LibBlockNames.END_STONE_BRICK);
setHardness(1.5F);
setResistance(10F);
setSoundType(SoundType.STONE);
setDefaultState(blockState.getBaseState().withProperty(BotaniaStateProps.ENDBRICK_VARIANT, EndBrickVariant.END_STONE_BRICKS));
}
@Nonnull
@Override
public BlockStateContainer createBlockState() {
return new BlockStateContainer(this, BotaniaStateProps.ENDBRICK_VARIANT);
}
@Override
public int getMetaFromState(IBlockState state) {
return state.getValue(BotaniaStateProps.ENDBRICK_VARIANT).ordinal();
}
@Nonnull
@Override
public IBlockState getStateFromMeta(int meta) {
if (meta >= EndBrickVariant.values().length) {
meta = 0;
}
return getDefaultState().withProperty(BotaniaStateProps.ENDBRICK_VARIANT, EndBrickVariant.values()[meta]);
}
@Override
public void getSubBlocks(@Nonnull Item item, CreativeTabs tab, List<ItemStack> list) {
for(int i = 0; i < EndBrickVariant.values().length; i++)
list.add(new ItemStack(item, 1, i));
}
@Override
public int damageDropped(IBlockState state) {
return getMetaFromState(state);
}
@Override
public void registerItemForm() {
GameRegistry.register(new ItemBlockWithMetadataAndName(this), getRegistryName());
}
@Nonnull
@Override
public ItemStack getPickBlock(@Nonnull IBlockState state, RayTraceResult target, @Nonnull World world, @Nonnull BlockPos pos, EntityPlayer player) {
return new ItemStack(this, 1, getMetaFromState(world.getBlockState(pos)));
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.endStoneDecor;
}
}
@@ -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,7 +37,11 @@ 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;
import vazkii.botania.common.core.BotaniaCreativeTab;
import vazkii.botania.common.core.handler.ConfigHandler;
import vazkii.botania.common.item.block.ItemBlockWithMetadataAndName;
@@ -50,13 +54,13 @@ 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 {
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);
public BlockModMushroom() {
GameRegistry.register(this, new ResourceLocation(LibMisc.MOD_ID, LibBlockNames.MUSHROOM));
GameRegistry.register(new ItemBlockWithMetadataAndName(this), getRegistryName());
ModBlocks.ALL_BLOCKS.add(this);
setRegistryName(new ResourceLocation(LibMisc.MOD_ID, LibBlockNames.MUSHROOM));
setUnlocalizedName(LibBlockNames.MUSHROOM);
setLightLevel(0.2F);
setHardness(0F);
@@ -153,4 +157,15 @@ public class BlockModMushroom extends BlockMushroom implements IInfusionStabilis
@Override
public void harvestByHorn(World world, BlockPos pos, ItemStack stack, EnumHornType hornType) {}
@Override
public void register() {
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);
}
}
@@ -1,95 +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 @ [Jun 28, 2014, 8:25:39 PM (GMT)]
*/
package vazkii.botania.common.block.decor;
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.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
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 vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.PrismarineVariant;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.item.block.ItemBlockWithMetadataAndName;
import vazkii.botania.common.lexicon.LexiconData;
import vazkii.botania.common.lib.LibBlockNames;
import javax.annotation.Nonnull;
import java.util.List;
public class BlockPrismarine extends BlockMod implements ILexiconable {
private static final int TYPES = 3;
public BlockPrismarine() {
super(Material.ROCK, LibBlockNames.PRISMARINE);
setHardness(2.0F);
setResistance(10.0F);
setSoundType(SoundType.STONE);
setDefaultState(blockState.getBaseState().withProperty(BotaniaStateProps.PRISMARINE_VARIANT, PrismarineVariant.PRISMARINE));
}
@Nonnull
@Override
public BlockStateContainer createBlockState() {
return new BlockStateContainer(this, BotaniaStateProps.PRISMARINE_VARIANT);
}
@Override
public int getMetaFromState(IBlockState state) {
return state.getValue(BotaniaStateProps.PRISMARINE_VARIANT).ordinal();
}
@Nonnull
@Override
public IBlockState getStateFromMeta(int meta) {
if (meta >= PrismarineVariant.values().length) {
meta = 0;
}
return getDefaultState().withProperty(BotaniaStateProps.PRISMARINE_VARIANT, PrismarineVariant.values()[meta]);
}
@Override
public int damageDropped(IBlockState state) {
return getMetaFromState(state);
}
@Override
public void registerItemForm() {
GameRegistry.register(new ItemBlockWithMetadataAndName(this), getRegistryName());
}
@Override
public void getSubBlocks(@Nonnull Item item, CreativeTabs tab, List<ItemStack> stacks) {
for(int i = 0; i < TYPES; i++)
stacks.add(new ItemStack(item, 1, i));
}
@Nonnull
@Override
public ItemStack getPickBlock(@Nonnull IBlockState state, RayTraceResult target, @Nonnull World world, @Nonnull BlockPos pos, EntityPlayer player) {
return new ItemStack(this, 1, getMetaFromState(world.getBlockState(pos)));
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.prismarine;
}
}
@@ -1,89 +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 @ [Jul 28, 2014, 8:02:49 PM (GMT)]
*/
package vazkii.botania.common.block.decor;
import net.minecraft.block.BlockRotatedPillar;
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.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.GameRegistry;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.common.core.BotaniaCreativeTab;
import vazkii.botania.common.item.block.ItemBlockMod;
import vazkii.botania.common.lexicon.LexiconData;
import vazkii.botania.common.lib.LibBlockNames;
import vazkii.botania.common.lib.LibMisc;
import javax.annotation.Nonnull;
public class BlockReeds extends BlockRotatedPillar implements ILexiconable {
public BlockReeds() {
super(Material.WOOD);
setHardness(1.0F);
setSoundType(SoundType.WOOD);
GameRegistry.register(this, new ResourceLocation(LibMisc.MOD_ID, LibBlockNames.REED_BLOCK));
GameRegistry.register(new ItemBlockMod(this), getRegistryName());
setUnlocalizedName(LibBlockNames.REED_BLOCK);
setCreativeTab(BotaniaCreativeTab.INSTANCE);
setDefaultState(blockState.getBaseState().withProperty(BotaniaStateProps.AXIS_FACING, EnumFacing.Axis.Y));
}
@Nonnull
@Override
public BlockStateContainer createBlockState() {
return new BlockStateContainer(this, BotaniaStateProps.AXIS_FACING);
}
@Override
public int getMetaFromState(IBlockState state) {
switch (state.getValue(BotaniaStateProps.AXIS_FACING)) {
case Z: return 8;
case X: return 4;
case Y:
default: return 0;
}
}
@Nonnull
@Override
public IBlockState getStateFromMeta(int meta) {
EnumFacing.Axis axis;
switch (meta) {
case 8: axis = EnumFacing.Axis.Z; break;
case 4: axis = EnumFacing.Axis.X; break;
case 0:
default: axis = EnumFacing.Axis.Y; break;
}
return getDefaultState().withProperty(BotaniaStateProps.AXIS_FACING, axis);
}
@Nonnull
@Override
public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) {
return getStateFromMeta(meta).withProperty(BotaniaStateProps.AXIS_FACING, facing.getAxis());
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.decorativeBlocks;
}
}
@@ -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 @ [Jun 28, 2014, 9:24:43 PM (GMT)]
*/
package vazkii.botania.common.block.decor;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.lexicon.LexiconData;
import vazkii.botania.common.lib.LibBlockNames;
public class BlockSeaLamp extends BlockMod implements ILexiconable {
public BlockSeaLamp() {
super(Material.GLASS, LibBlockNames.SEA_LAMP);
setHardness(0.3F);
setSoundType(SoundType.GLASS);
setLightLevel(1.0F);
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.prismarine;
}
}
@@ -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());
}
}
@@ -1,38 +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 @ [Jul 28, 2014, 9:07:00 PM (GMT)]
*/
package vazkii.botania.common.block.decor;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import vazkii.botania.api.lexicon.ILexiconable;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.lexicon.LexiconData;
import vazkii.botania.common.lib.LibBlockNames;
public class BlockThatch extends BlockMod implements ILexiconable {
public BlockThatch() {
super(Material.GRASS, LibBlockNames.THATCH);
setHardness(1.0F);
setSoundType(SoundType.PLANT);
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.decorativeBlocks;
}
}
@@ -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,8 @@ 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;
import vazkii.botania.common.item.block.ItemBlockMod;
@@ -26,14 +28,14 @@ import vazkii.botania.common.lib.LibMisc;
import javax.annotation.Nonnull;
public class BlockModPane extends BlockPane {
public class BlockModPane extends BlockPane implements IRegisterCallback, IModelRegister {
public BlockModPane(Block source) {
super(Material.GLASS, false);
// Backward compat don't kill me
String name = source.getUnlocalizedName().replaceAll("tile.", "") + "Pane";
GameRegistry.register(this, new ResourceLocation(LibMisc.MOD_ID, name));
GameRegistry.register(new ItemBlockMod(this), getRegistryName());
setRegistryName(new ResourceLocation(LibMisc.MOD_ID, name));
ModBlocks.ALL_BLOCKS.add(this);
setUnlocalizedName(name);
setCreativeTab(BotaniaCreativeTab.INSTANCE);
setHardness(0.3F);
@@ -53,4 +55,12 @@ public class BlockModPane extends BlockPane {
return block == ModBlocks.elfGlass || block == ModBlocks.manaGlass || block == ModBlocks.bifrostPerm || super.canPaneConnectTo(world, pos, dir);
}
@Override
public void register() {
GameRegistry.register(this);
GameRegistry.register(new ItemBlockMod(this), getRegistryName());
}
@Override
public void registerModels() {}
}
@@ -28,6 +28,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.QuartzVariant;
import vazkii.botania.client.core.handler.ModelHandler;
import vazkii.botania.common.block.BlockMod;
import vazkii.botania.common.block.ModFluffBlocks;
import vazkii.botania.common.item.block.ItemBlockSpecialQuartz;
@@ -124,4 +125,13 @@ public class BlockSpecialQuartz extends BlockMod implements ILexiconable {
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return this == ModFluffBlocks.elfQuartz ? LexiconData.elvenResources : LexiconData.decorativeBlocks;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
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));
}
}
@@ -1,50 +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 @ [Apr 10, 2015, 7:52:06 PM (GMT)]
*/
package vazkii.botania.common.block.decor.slabs;
import net.minecraft.block.BlockSlab;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.FutureStoneVariant;
import vazkii.botania.common.block.ModFluffBlocks;
import vazkii.botania.common.lexicon.LexiconData;
public class Block18StoneSlab extends BlockLivingSlab {
final int index;
public Block18StoneSlab(boolean full, FutureStoneVariant variant, int index) {
super(full, ModFluffBlocks.stone.getDefaultState().withProperty(BotaniaStateProps.FUTURESTONE_VARIANT, variant));
this.index = index;
setHardness(1.5F);
setResistance(10F);
}
@Override
public BlockSlab getFullBlock() {
return (BlockSlab) ModFluffBlocks.stoneFullSlabs[index];
}
@Override
public BlockSlab getSingleBlock() {
return (BlockSlab) ModFluffBlocks.stoneSlabs[index];
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.stoneAlchemy;
}
}
@@ -1,48 +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 @ [Feb 16, 2015, 8:45:00 PM (GMT)]
*/
package vazkii.botania.common.block.decor.slabs;
import net.minecraft.block.BlockSlab;
import net.minecraft.block.SoundType;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.block.ModFluffBlocks;
import vazkii.botania.common.lexicon.LexiconData;
public class BlockEndStoneSlab extends BlockLivingSlab {
public BlockEndStoneSlab(boolean full) {
super(full, ModBlocks.endStoneBrick.getDefaultState());
setHardness(1.5F);
setResistance(10F);
setSoundType(SoundType.STONE);
}
@Override
public BlockSlab getFullBlock() {
return (BlockSlab) ModFluffBlocks.endStoneSlabFull;
}
@Override
public BlockSlab getSingleBlock() {
return (BlockSlab) ModFluffBlocks.endStoneSlab;
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.endStoneDecor;
}
}
@@ -1,50 +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 @ [Jul 7, 2015, 10:37:15 PM (GMT)]
*/
package vazkii.botania.common.block.decor.slabs;
import net.minecraft.block.BlockSlab;
import net.minecraft.block.SoundType;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.EndBrickVariant;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.block.ModFluffBlocks;
import vazkii.botania.common.lexicon.LexiconData;
public class BlockEnderBrickSlab extends BlockLivingSlab {
public BlockEnderBrickSlab(boolean full) {
super(full, ModBlocks.endStoneBrick.getDefaultState().withProperty(BotaniaStateProps.ENDBRICK_VARIANT, EndBrickVariant.ENDER_BRICKS));
setHardness(1.5F);
setResistance(10F);
setSoundType(SoundType.STONE);
}
@Override
public BlockSlab getFullBlock() {
return (BlockSlab) ModFluffBlocks.enderBrickSlabFull;
}
@Override
public BlockSlab getSingleBlock() {
return (BlockSlab) ModFluffBlocks.enderBrickSlab;
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.endStoneDecor;
}
}
@@ -6,6 +6,7 @@ import net.minecraft.block.properties.IProperty;
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.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@@ -14,9 +15,17 @@ import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
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.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;
import vazkii.botania.common.core.BotaniaCreativeTab;
import vazkii.botania.common.item.block.ItemBlockModSlab;
import vazkii.botania.common.lexicon.LexiconData;
@@ -26,16 +35,18 @@ import javax.annotation.Nonnull;
import java.util.Locale;
import java.util.Random;
public abstract class BlockModSlab extends BlockSlab implements ILexiconable {
public abstract class BlockModSlab extends BlockSlab implements ILexiconable, IModelRegister, IRegisterCallback {
final String name;
protected final boolean doubleSlab;
public static final PropertyEnum<DummyEnum> DUMMY = PropertyEnum.create("dummy", DummyEnum.class);
private final String name;
private final boolean doubleSlab;
private static final PropertyEnum<DummyEnum> DUMMY = PropertyEnum.create("dummy", DummyEnum.class);
public BlockModSlab(boolean full, Material mat, String name) {
super(mat);
this.name = name;
setUnlocalizedName(name);
setRegistryName(new ResourceLocation(LibMisc.MOD_ID, name));
ModBlocks.ALL_BLOCKS.add(this);
doubleSlab = full;
if(!full) {
setCreativeTab(BotaniaCreativeTab.INSTANCE);
@@ -89,10 +100,11 @@ public abstract class BlockModSlab extends BlockSlab implements ILexiconable {
return new ItemStack(getSingleBlock());
}
@Override
public void register() {
GameRegistry.register(this, new ResourceLocation(LibMisc.MOD_ID, name));
GameRegistry.register(this);
if (!isDouble())
GameRegistry.register(new ItemBlockModSlab(this), new ResourceLocation(LibMisc.MOD_ID, name));
GameRegistry.register(new ItemBlockModSlab(this), getRegistryName());
}
@Nonnull
@@ -123,7 +135,18 @@ public abstract class BlockModSlab extends BlockSlab implements ILexiconable {
return LexiconData.decorativeBlocks;
}
public enum DummyEnum implements IStringSerializable {
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
if(!doubleSlab) {
ModelLoader.setCustomStateMapper(this, (new StateMap.Builder()).ignore(BlockModSlab.DUMMY).build());
ModelHandler.registerBlockToState(this, 0, getDefaultState());
} else {
ModelLoader.setCustomStateMapper(this, (new StateMap.Builder()).ignore(BlockModSlab.DUMMY, BlockSlab.HALF).build());
}
}
private enum DummyEnum implements IStringSerializable {
SINGLETON {
@Nonnull
@Override
@@ -1,48 +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 @ [Jul 28, 2014, 8:49:59 PM (GMT)]
*/
package vazkii.botania.common.block.decor.slabs;
import net.minecraft.block.BlockSlab;
import net.minecraft.block.SoundType;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.block.ModFluffBlocks;
import vazkii.botania.common.lexicon.LexiconData;
public class BlockReedSlab extends BlockLivingSlab {
public BlockReedSlab(boolean full) {
super(full, ModBlocks.reedBlock.getDefaultState());
setHardness(1.0F);
setSoundType(SoundType.WOOD);
}
@Override
public BlockSlab getFullBlock() {
return (BlockSlab) ModFluffBlocks.reedSlabFull;
}
@Override
public BlockSlab getSingleBlock() {
return (BlockSlab) ModFluffBlocks.reedSlab;
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.decorativeBlocks;
}
}
@@ -1,48 +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 @ [Jul 28, 2014, 8:49:59 PM (GMT)]
*/
package vazkii.botania.common.block.decor.slabs;
import net.minecraft.block.BlockSlab;
import net.minecraft.block.SoundType;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.block.ModFluffBlocks;
import vazkii.botania.common.lexicon.LexiconData;
public class BlockThatchSlab extends BlockLivingSlab {
public BlockThatchSlab(boolean full) {
super(full, ModBlocks.thatch.getDefaultState());
setHardness(1.0F);
setSoundType(SoundType.PLANT);
}
@Override
public BlockSlab getFullBlock() {
return (BlockSlab) ModFluffBlocks.thatchSlabFull;
}
@Override
public BlockSlab getSingleBlock() {
return (BlockSlab) ModFluffBlocks.thatchSlab;
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.decorativeBlocks;
}
}
@@ -1,23 +0,0 @@
package vazkii.botania.common.block.decor.slabs.prismarine;
import net.minecraft.block.BlockSlab;
import vazkii.botania.api.state.enums.PrismarineVariant;
import vazkii.botania.common.block.ModFluffBlocks;
public class BlockDarkPrismarineSlab extends BlockPrismarineSlab {
public BlockDarkPrismarineSlab(boolean full) {
super(full, PrismarineVariant.DARK_PRISMARINE);
}
@Override
public BlockSlab getFullBlock() {
return (BlockSlab) ModFluffBlocks.darkPrismarineSlabFull;
}
@Override
public BlockSlab getSingleBlock() {
return (BlockSlab) ModFluffBlocks.darkPrismarineSlab;
}
}
@@ -1,23 +0,0 @@
package vazkii.botania.common.block.decor.slabs.prismarine;
import net.minecraft.block.BlockSlab;
import vazkii.botania.api.state.enums.PrismarineVariant;
import vazkii.botania.common.block.ModFluffBlocks;
public class BlockPrismarineBrickSlab extends BlockPrismarineSlab {
public BlockPrismarineBrickSlab(boolean full) {
super(full, PrismarineVariant.PRISMARINE_BRICKS);
}
@Override
public BlockSlab getFullBlock() {
return (BlockSlab) ModFluffBlocks.prismarineBrickSlabFull;
}
@Override
public BlockSlab getSingleBlock() {
return (BlockSlab) ModFluffBlocks.prismarineBrickSlab;
}
}
@@ -1,45 +0,0 @@
package vazkii.botania.common.block.decor.slabs.prismarine;
import net.minecraft.block.BlockSlab;
import net.minecraft.block.SoundType;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.PrismarineVariant;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.block.ModFluffBlocks;
import vazkii.botania.common.block.decor.slabs.BlockLivingSlab;
import vazkii.botania.common.lexicon.LexiconData;
public class BlockPrismarineSlab extends BlockLivingSlab {
public BlockPrismarineSlab(boolean full) {
this(full, PrismarineVariant.PRISMARINE);
}
public BlockPrismarineSlab(boolean full, PrismarineVariant variant) {
super(full, ModBlocks.prismarine.getDefaultState().withProperty(BotaniaStateProps.PRISMARINE_VARIANT, variant));
setHardness(2.0F);
setResistance(10.0F);
setSoundType(SoundType.STONE);
}
@Override
public BlockSlab getFullBlock() {
return (BlockSlab) ModFluffBlocks.prismarineSlabFull;
}
@Override
public BlockSlab getSingleBlock() {
return (BlockSlab) ModFluffBlocks.prismarineSlab;
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.prismarine;
}
}
@@ -1,34 +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 @ [Apr 10, 2015, 7:51:29 PM (GMT)]
*/
package vazkii.botania.common.block.decor.stairs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.FutureStoneVariant;
import vazkii.botania.common.block.ModFluffBlocks;
import vazkii.botania.common.lexicon.LexiconData;
public class Block18StoneStairs extends BlockLivingStairs {
public Block18StoneStairs(FutureStoneVariant variant) {
super(ModFluffBlocks.stone.getDefaultState().withProperty(BotaniaStateProps.FUTURESTONE_VARIANT, variant));
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.stoneAlchemy;
}
}
@@ -1,32 +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 @ [Feb 16, 2015, 8:44:03 PM (GMT)]
*/
package vazkii.botania.common.block.decor.stairs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.lexicon.LexiconData;
public class BlockEndStoneStairs extends BlockLivingStairs {
public BlockEndStoneStairs() {
super(ModBlocks.endStoneBrick.getDefaultState());
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.endStoneDecor;
}
}
@@ -1,34 +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 @ [Jul 7, 2015, 10:38:15 PM (GMT)]
*/
package vazkii.botania.common.block.decor.stairs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.state.BotaniaStateProps;
import vazkii.botania.api.state.enums.EndBrickVariant;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.lexicon.LexiconData;
public class BlockEnderBrickStairs extends BlockLivingStairs {
public BlockEnderBrickStairs() {
super(ModBlocks.endStoneBrick.getDefaultState().withProperty(BotaniaStateProps.ENDBRICK_VARIANT, EndBrickVariant.ENDER_BRICKS));
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.endStoneDecor;
}
}
@@ -2,25 +2,33 @@ package vazkii.botania.common.block.decor.stairs;
import net.minecraft.block.BlockStairs;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
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.client.render.IModelRegister;
import vazkii.botania.common.block.IRegisterCallback;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.core.BotaniaCreativeTab;
import vazkii.botania.common.item.block.ItemBlockMod;
import vazkii.botania.common.lexicon.LexiconData;
import vazkii.botania.common.lib.LibMisc;
public class BlockModStairs extends BlockStairs implements ILexiconable {
public class BlockModStairs extends BlockStairs implements ILexiconable, IModelRegister, IRegisterCallback {
public BlockModStairs(IBlockState state, String name) {
super(state);
GameRegistry.register(this, new ResourceLocation(LibMisc.MOD_ID, name));
GameRegistry.register(new ItemBlockMod(this), getRegistryName());
ModBlocks.ALL_BLOCKS.add(this);
setRegistryName(new ResourceLocation(LibMisc.MOD_ID, name));
setUnlocalizedName(name);
setCreativeTab(BotaniaCreativeTab.INSTANCE);
useNeighborBrightness = true;
@@ -31,4 +39,15 @@ public class BlockModStairs extends BlockStairs implements ILexiconable {
return LexiconData.decorativeBlocks;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels() {
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(this), 0, new ModelResourceLocation(getRegistryName(), "inventory"));
}
@Override
public void register() {
GameRegistry.register(this);
GameRegistry.register(new ItemBlockMod(this), getRegistryName());
}
}
@@ -1,33 +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 @ [Jul 28, 2014, 8:47:52 PM (GMT)]
*/
package vazkii.botania.common.block.decor.stairs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.lexicon.LexiconData;
public class BlockReedStairs extends BlockLivingStairs {
public BlockReedStairs() {
super(ModBlocks.reedBlock.getDefaultState());
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.decorativeBlocks;
}
}
@@ -1,33 +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 @ [Jul 28, 2014, 8:47:52 PM (GMT)]
*/
package vazkii.botania.common.block.decor.stairs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.lexicon.LexiconData;
public class BlockThatchStairs extends BlockLivingStairs {
public BlockThatchStairs() {
super(ModBlocks.thatch.getDefaultState());
}
@Override
public LexiconEntry getEntry(World world, BlockPos pos, EntityPlayer player, ItemStack lexicon) {
return LexiconData.decorativeBlocks;
}
}
Loaded 100 of 935 files, more files were not shown because too many files have changed in this diff. Show more