diff --git a/build.gradle b/build.gradle index f99e139..dc4d5d6 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin' group = 'com.github.octarine-noise' version = "2.0.4" -archivesBaseName = rootProject.name + '-MC1.8.x' +archivesBaseName = rootProject.name + '-MC1.9' buildscript { ext.kotlin_version = '1.0.0' @@ -32,8 +32,8 @@ dependencies { } minecraft { - version = '1.8.8-11.15.0.1655' - mappings = 'stable_20' + version = '1.9-12.16.0.1776-1.9' + mappings = 'snapshot_20160320' runDir = 'run' } diff --git a/src/main/kotlin/mods/betterfoliage/BetterFoliageMod.kt b/src/main/kotlin/mods/betterfoliage/BetterFoliageMod.kt index 1b3fec5..9af5bc9 100644 --- a/src/main/kotlin/mods/betterfoliage/BetterFoliageMod.kt +++ b/src/main/kotlin/mods/betterfoliage/BetterFoliageMod.kt @@ -24,7 +24,7 @@ object BetterFoliageMod { const val MOD_NAME = "Better Foliage" const val DOMAIN = "betterfoliage" const val LEGACY_DOMAIN = "bettergrassandleaves" - const val MC_VERSIONS = "[1.8.8,1.8.9]" + const val MC_VERSIONS = "[1.9]" const val GUI_FACTORY = "mods.betterfoliage.client.gui.ConfigGuiFactory" lateinit var log: Logger diff --git a/src/main/kotlin/mods/betterfoliage/client/Client.kt b/src/main/kotlin/mods/betterfoliage/client/Client.kt index a206949..9b5efbd 100644 --- a/src/main/kotlin/mods/betterfoliage/client/Client.kt +++ b/src/main/kotlin/mods/betterfoliage/client/Client.kt @@ -71,6 +71,6 @@ object Client { OptifineCTM ) - fun log(level: Level, msg: String) = BetterFoliageMod.log!!.log(level, msg) + fun log(level: Level, msg: String) = BetterFoliageMod.log.log(level, msg) } diff --git a/src/main/kotlin/mods/betterfoliage/client/Hooks.kt b/src/main/kotlin/mods/betterfoliage/client/Hooks.kt index 3eb81c6..3f34d9e 100644 --- a/src/main/kotlin/mods/betterfoliage/client/Hooks.kt +++ b/src/main/kotlin/mods/betterfoliage/client/Hooks.kt @@ -13,13 +13,12 @@ import mods.octarinecore.common.plus import net.minecraft.block.Block import net.minecraft.block.state.IBlockState import net.minecraft.client.renderer.BlockRendererDispatcher -import net.minecraft.client.renderer.WorldRenderer +import net.minecraft.client.renderer.VertexBuffer import net.minecraft.init.Blocks -import net.minecraft.util.BlockPos +import net.minecraft.util.BlockRenderLayer +import net.minecraft.util.BlockRenderLayer.* import net.minecraft.util.EnumFacing -import net.minecraft.util.EnumWorldBlockLayer -import net.minecraft.util.EnumWorldBlockLayer.CUTOUT -import net.minecraft.util.EnumWorldBlockLayer.CUTOUT_MIPPED +import net.minecraft.util.math.BlockPos import net.minecraft.world.IBlockAccess import net.minecraft.world.World import net.minecraftforge.client.model.ModelLoader @@ -28,16 +27,16 @@ import net.minecraftforge.fml.relauncher.Side import net.minecraftforge.fml.relauncher.SideOnly fun shouldRenderBlockSideOverride(original: Boolean, blockAccess: IBlockAccess, pos: BlockPos, side: EnumFacing): Boolean { - return original || (Config.enabled && Config.roundLogs.enabled && Config.blocks.logs.matchesID(blockAccess.getBlockState(pos).block)); + return original && !(Config.enabled && Config.roundLogs.enabled && Config.blocks.logs.matchesID(blockAccess.getBlockState(pos).block)); } -fun getAmbientOcclusionLightValueOverride(original: Float, block: Block): Float { - if (Config.enabled && Config.roundLogs.enabled && Config.blocks.logs.matchesID(block)) return Config.roundLogs.dimming; +fun getAmbientOcclusionLightValueOverride(original: Float, state: IBlockState): Float { + if (Config.enabled && Config.roundLogs.enabled && Config.blocks.logs.matchesID(state.block)) return Config.roundLogs.dimming; return original; } -fun getUseNeighborBrightnessOverride(original: Boolean, block: Block): Boolean { - return original || (Config.enabled && Config.roundLogs.enabled && Config.blocks.logs.matchesID(block)); +fun getUseNeighborBrightnessOverride(original: Boolean, state: IBlockState): Boolean { + return original || (Config.enabled && Config.roundLogs.enabled && Config.blocks.logs.matchesID(state.block)); } fun onRandomDisplayTick(world: World, state: IBlockState, pos: BlockPos) { @@ -66,13 +65,14 @@ fun renderWorldBlock(dispatcher: BlockRendererDispatcher, state: IBlockState, pos: BlockPos, blockAccess: IBlockAccess, - worldRenderer: WorldRenderer, - layer: EnumWorldBlockLayer + worldRenderer: VertexBuffer, + layer: BlockRenderLayer ): Boolean { val isCutout = layer == CUTOUT_MIPPED || layer == CUTOUT val needsCutout = state.block.canRenderInLayer(CUTOUT_MIPPED) || state.block.canRenderInLayer(CUTOUT) val canRender = (isCutout && needsCutout) || state.block.canRenderInLayer(layer) + blockContext.let { ctx -> ctx.set(blockAccess, pos) Client.renderers.forEach { renderer -> @@ -88,7 +88,7 @@ fun renderWorldBlock(dispatcher: BlockRendererDispatcher, return if (canRender) dispatcher.renderBlock(state, pos, blockAccess, worldRenderer) else false } -fun canRenderBlockInLayer(block: Block, layer: EnumWorldBlockLayer): Boolean { +fun canRenderBlockInLayer(block: Block, layer: BlockRenderLayer): Boolean { if (layer == CUTOUT_MIPPED && !block.canRenderInLayer(CUTOUT)) { return true } diff --git a/src/main/kotlin/mods/betterfoliage/client/config/Config.kt b/src/main/kotlin/mods/betterfoliage/client/config/Config.kt index 437b722..4dff13b 100644 --- a/src/main/kotlin/mods/betterfoliage/client/config/Config.kt +++ b/src/main/kotlin/mods/betterfoliage/client/config/Config.kt @@ -3,7 +3,6 @@ package mods.betterfoliage.client.config import mods.betterfoliage.BetterFoliageMod import mods.betterfoliage.client.gui.BiomeListConfigEntry import mods.octarinecore.common.config.* -import mods.octarinecore.metaprog.reflectField import net.minecraft.client.Minecraft import net.minecraft.world.biome.BiomeGenBase import net.minecraftforge.fml.client.event.ConfigChangedEvent @@ -14,7 +13,10 @@ import net.minecraftforge.fml.relauncher.SideOnly private fun featureEnable() = boolean(true).lang("enabled") private fun distanceLimit() = int(min=1, max=1000, default=1000).lang("distance") fun biomeList(defaults: (BiomeGenBase) -> Boolean) = intList { - BiomeGenBase.getBiomeGenArray().filter { it != null && defaults(it) }.map { it.biomeID }.toTypedArray() + BiomeGenBase.biomeRegistry + .filter { it != null && defaults(it) } + .map { BiomeGenBase.biomeRegistry.getIDForObject(it) } + .toTypedArray() }.apply { guiClass = BiomeListConfigEntry::class.java } // Biome filter methods diff --git a/src/main/kotlin/mods/betterfoliage/client/gui/BiomeListConfigEntry.kt b/src/main/kotlin/mods/betterfoliage/client/gui/BiomeListConfigEntry.kt index 62a1872..e395e7a 100644 --- a/src/main/kotlin/mods/betterfoliage/client/gui/BiomeListConfigEntry.kt +++ b/src/main/kotlin/mods/betterfoliage/client/gui/BiomeListConfigEntry.kt @@ -13,7 +13,7 @@ class BiomeListConfigEntry( configElement: IConfigElement) : IdListConfigEntry(owningScreen, owningEntryList, configElement) { - override val baseSet: List get() = BiomeGenBase.getBiomeGenArray().filterNotNull() - override val BiomeGenBase.itemId: Int get() = this.biomeID + override val baseSet: List get() = BiomeGenBase.biomeRegistry.filterNotNull() + override val BiomeGenBase.itemId: Int get() = BiomeGenBase.biomeRegistry.getIDForObject(this) override val BiomeGenBase.itemName: String get() = this.biomeName } \ No newline at end of file diff --git a/src/main/kotlin/mods/betterfoliage/client/integration/OptifineCTM.kt b/src/main/kotlin/mods/betterfoliage/client/integration/OptifineCTM.kt index dca2352..c00c725 100644 --- a/src/main/kotlin/mods/betterfoliage/client/integration/OptifineCTM.kt +++ b/src/main/kotlin/mods/betterfoliage/client/integration/OptifineCTM.kt @@ -5,12 +5,11 @@ import mods.betterfoliage.loader.Refs import mods.octarinecore.ThreadLocalDelegate import mods.octarinecore.client.render.BlockContext import mods.octarinecore.metaprog.allAvailable -import net.minecraft.block.Block import net.minecraft.block.state.BlockStateBase import net.minecraft.block.state.IBlockState import net.minecraft.client.renderer.texture.TextureAtlasSprite -import net.minecraft.util.BlockPos import net.minecraft.util.EnumFacing +import net.minecraft.util.math.BlockPos import net.minecraft.world.IBlockAccess import net.minecraftforge.fml.relauncher.Side import net.minecraftforge.fml.relauncher.SideOnly diff --git a/src/main/kotlin/mods/betterfoliage/client/integration/ShadersModIntegration.kt b/src/main/kotlin/mods/betterfoliage/client/integration/ShadersModIntegration.kt index 1dda0f8..e5898a1 100644 --- a/src/main/kotlin/mods/betterfoliage/client/integration/ShadersModIntegration.kt +++ b/src/main/kotlin/mods/betterfoliage/client/integration/ShadersModIntegration.kt @@ -7,7 +7,7 @@ import mods.octarinecore.metaprog.allAvailable import net.minecraft.block.Block import net.minecraft.block.BlockTallGrass import net.minecraft.block.state.IBlockState -import net.minecraft.client.renderer.WorldRenderer +import net.minecraft.client.renderer.VertexBuffer import net.minecraft.init.Blocks import net.minecraftforge.fml.relauncher.Side import net.minecraftforge.fml.relauncher.SideOnly @@ -25,7 +25,7 @@ object ShadersModIntegration { fun entityDataFor(blockState: IBlockState) = (Block.blockRegistry.getIDForObject(blockState.block).toLong() and 65535) or - ((blockState.block.renderType.toLong() and 65535) shl 16) or + ((blockState.renderType.ordinal.toLong() and 65535) shl 16) or (blockState.block.getMetaFromState(blockState).toLong() shl 32) @@ -47,7 +47,7 @@ object ShadersModIntegration { } /** Quads rendered inside this block will behave as tallgrass blocks in shader programs. */ - inline fun grass(renderer: WorldRenderer, enabled: Boolean = true, func: ()->Unit) { + inline fun grass(renderer: VertexBuffer, enabled: Boolean = true, func: ()->Unit) { if ((isPresent && enabled)) { val vertexBuilder = Refs.sVertexBuilder.get(renderer)!! Refs.pushEntity_num.invoke(vertexBuilder, tallGrassEntityData) @@ -59,7 +59,7 @@ object ShadersModIntegration { } /** Quads rendered inside this block will behave as leaf blocks in shader programs. */ - inline fun leaves(renderer: WorldRenderer, enabled: Boolean = true, func: ()->Unit) { + inline fun leaves(renderer: VertexBuffer, enabled: Boolean = true, func: ()->Unit) { if ((isPresent && enabled)) { val vertexBuilder = Refs.sVertexBuilder.get(renderer)!! Refs.pushEntity_num.invoke(vertexBuilder, leavesEntityData.toLong()) diff --git a/src/main/kotlin/mods/betterfoliage/client/render/AbstractRenderColumn.kt b/src/main/kotlin/mods/betterfoliage/client/render/AbstractRenderColumn.kt index 77aa9fd..e524411 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/AbstractRenderColumn.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/AbstractRenderColumn.kt @@ -11,12 +11,12 @@ import mods.octarinecore.common.face import mods.octarinecore.common.rot import net.minecraft.block.state.IBlockState import net.minecraft.client.renderer.BlockRendererDispatcher -import net.minecraft.client.renderer.WorldRenderer +import net.minecraft.client.renderer.VertexBuffer import net.minecraft.client.renderer.texture.TextureAtlasSprite import net.minecraft.client.renderer.texture.TextureMap +import net.minecraft.util.BlockRenderLayer import net.minecraft.util.EnumFacing import net.minecraft.util.EnumFacing.* -import net.minecraft.util.EnumWorldBlockLayer data class ColumnInfo(val topTexture: TextureAtlasSprite, val bottomTexture: TextureAtlasSprite, @@ -125,7 +125,7 @@ abstract class AbstractRenderColumn(modId: String) : AbstractBlockRenderingHandl abstract val downTexture: (ShadingContext, Int, Quad)->TextureAtlasSprite? @Suppress("NON_EXHAUSTIVE_WHEN") - override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: WorldRenderer, layer: EnumWorldBlockLayer): Boolean { + override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: VertexBuffer, layer: BlockRenderLayer): Boolean { if (ctx.isSurroundedBy(surroundPredicate) ) return false // get AO data @@ -324,7 +324,7 @@ abstract class AbstractRenderColumn(modId: String) : AbstractBlockRenderingHandl val offsetRot = offset.rotate(rotation) val state = blockState(offsetRot) return if (!blockPredicate(state)) { - if (state.block.isOpaqueCube) SOLID else NONSOLID + if (state.isOpaqueCube) SOLID else NONSOLID } else { axisFunc(state)?.let { if (it == axis) PARALLEL else PERPENDICULAR } ?: SOLID } diff --git a/src/main/kotlin/mods/betterfoliage/client/render/EntityFallingLeavesFX.kt b/src/main/kotlin/mods/betterfoliage/client/render/EntityFallingLeavesFX.kt index 092650e..38b02f8 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/EntityFallingLeavesFX.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/EntityFallingLeavesFX.kt @@ -9,14 +9,13 @@ import mods.octarinecore.common.Double3 import mods.octarinecore.minmax import mods.octarinecore.random import net.minecraft.client.Minecraft -import net.minecraft.client.renderer.WorldRenderer -import net.minecraft.util.BlockPos -import net.minecraft.util.EnumFacing.* -import net.minecraft.util.MathHelper +import net.minecraft.client.renderer.VertexBuffer +import net.minecraft.util.EnumFacing.DOWN +import net.minecraft.util.math.BlockPos +import net.minecraft.util.math.MathHelper import net.minecraft.world.World import net.minecraftforge.common.MinecraftForge import net.minecraftforge.event.world.WorldEvent -import net.minecraftforge.fml.common.FMLCommonHandler import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import net.minecraftforge.fml.common.gameevent.TickEvent import net.minecraftforge.fml.relauncher.Side @@ -35,31 +34,31 @@ AbstractEntityFX(world, pos.x.toDouble() + 0.5, pos.y.toDouble(), pos.z.toDouble var particleRot = rand.nextInt(64) var rotPositive = true val isMirrored = (rand.nextInt() and 1) == 1 - var wasOnGround = false + var wasCollided = false init { particleMaxAge = MathHelper.floor_double(random(0.6, 1.0) * Config.fallingLeaves.lifetime * 20.0) - motionY = -Config.fallingLeaves.speed + ySpeed = -Config.fallingLeaves.speed particleScale = Config.fallingLeaves.size.toFloat() * 0.1f val state = world.getBlockState(pos) LeafRegistry[state, world, pos, DOWN]?.let { - particleIcon = it.particleTextures[rand.nextInt(1024)] - calculateParticleColor(it.averageColor, state.block.colorMultiplier(world, pos)) + particleTexture = it.particleTextures[rand.nextInt(1024)] + calculateParticleColor(it.averageColor, Minecraft.getMinecraft().blockColors.colorMultiplier(state, world, pos, 0)) } } - override val isValid: Boolean get() = (particleIcon != null) + override val isValid: Boolean get() = (particleTexture != null) override fun update() { if (rand.nextFloat() > 0.95f) rotPositive = !rotPositive if (particleAge > particleMaxAge - 20) particleAlpha = 0.05f * (particleMaxAge - particleAge) - if (onGround || wasOnGround) { + if (isCollided || wasCollided) { velocity.setTo(0.0, 0.0, 0.0) - if (!wasOnGround) { + if (!wasCollided) { particleAge = Math.max(particleAge, particleMaxAge - 20) - wasOnGround = true + wasCollided = true } } else { velocity.setTo(cos[particleRot], 0.0, sin[particleRot]).mul(Config.fallingLeaves.perturb) @@ -68,7 +67,7 @@ AbstractEntityFX(world, pos.x.toDouble() + 0.5, pos.y.toDouble(), pos.z.toDouble } } - override fun render(worldRenderer: WorldRenderer, partialTickTime: Float) { + override fun render(worldRenderer: VertexBuffer, partialTickTime: Float) { if (Config.fallingLeaves.opacityHack) GL11.glDepthMask(true) renderParticleQuad(worldRenderer, partialTickTime, rotation = particleRot, isMirrored = isMirrored) } diff --git a/src/main/kotlin/mods/betterfoliage/client/render/EntityRisingSoulFX.kt b/src/main/kotlin/mods/betterfoliage/client/render/EntityRisingSoulFX.kt index 4531826..d37f96a 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/EntityRisingSoulFX.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/EntityRisingSoulFX.kt @@ -7,9 +7,9 @@ import mods.octarinecore.client.render.AbstractEntityFX import mods.octarinecore.client.resource.ResourceHandler import mods.octarinecore.common.Double3 import mods.octarinecore.forEachPairIndexed -import net.minecraft.client.renderer.WorldRenderer -import net.minecraft.util.BlockPos -import net.minecraft.util.MathHelper +import net.minecraft.client.renderer.VertexBuffer +import net.minecraft.util.math.BlockPos +import net.minecraft.util.math.MathHelper import net.minecraft.world.World import net.minecraftforge.fml.relauncher.Side import net.minecraftforge.fml.relauncher.SideOnly @@ -23,9 +23,9 @@ AbstractEntityFX(world, pos.x.toDouble() + 0.5, pos.y.toDouble() + 1.0, pos.z.to val initialPhase = rand.nextInt(64) init { - motionY = 0.1 + ySpeed = 0.1 particleGravity = 0.0f - particleIcon = RisingSoulTextures.headIcons[rand.nextInt(256)] + particleTexture = RisingSoulTextures.headIcons[rand.nextInt(256)] particleMaxAge = MathHelper.floor_double((0.6 + 0.4 * rand.nextDouble()) * Config.risingSoul.lifetime * 20.0) } @@ -38,10 +38,10 @@ AbstractEntityFX(world, pos.x.toDouble() + 0.5, pos.y.toDouble() + 1.0, pos.z.to particleTrail.addFirst(currentPos.copy()) while (particleTrail.size > Config.risingSoul.trailLength) particleTrail.removeLast() - if (!Config.enabled) setDead() + if (!Config.enabled) setExpired() } - override fun render(worldRenderer: WorldRenderer, partialTickTime: Float) { + override fun render(worldRenderer: VertexBuffer, partialTickTime: Float) { var alpha = Config.risingSoul.opacity if (particleAge > particleMaxAge - 40) alpha *= (particleMaxAge - particleAge) / 40.0f diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderAlgae.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderAlgae.kt index 1d5506a..13f58d5 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderAlgae.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderAlgae.kt @@ -9,8 +9,8 @@ import mods.octarinecore.common.Int3 import mods.octarinecore.common.Rotation import net.minecraft.block.material.Material import net.minecraft.client.renderer.BlockRendererDispatcher -import net.minecraft.client.renderer.WorldRenderer -import net.minecraft.util.EnumWorldBlockLayer +import net.minecraft.client.renderer.VertexBuffer +import net.minecraft.util.BlockRenderLayer import org.apache.logging.log4j.Level.INFO class RenderAlgae : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { @@ -27,13 +27,13 @@ class RenderAlgae : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { override fun isEligible(ctx: BlockContext) = Config.enabled && Config.algae.enabled && ctx.cameraDistance < Config.algae.distance && - ctx.block(up2).material == Material.water && - ctx.block(up1).material == Material.water && + ctx.blockState(up2).material == Material.water && + ctx.blockState(up1).material == Material.water && Config.blocks.dirt.matchesID(ctx.block) && ctx.biomeId in Config.algae.biomes && noise[ctx.pos] < Config.algae.population - override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: WorldRenderer, layer: EnumWorldBlockLayer): Boolean { + override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: VertexBuffer, layer: BlockRenderLayer): Boolean { renderWorldBlockBase(ctx, dispatcher, renderer, null) modelRenderer.updateShading(Int3.zero, allFaces) diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderCactus.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderCactus.kt index 489ef51..75970aa 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderCactus.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderCactus.kt @@ -4,13 +4,12 @@ import mods.betterfoliage.BetterFoliageMod import mods.betterfoliage.client.Client import mods.betterfoliage.client.config.Config import mods.octarinecore.client.render.* -import mods.octarinecore.client.resource.BlockTextureInspector import mods.octarinecore.common.Int3 import mods.octarinecore.common.Rotation import net.minecraft.client.renderer.BlockRendererDispatcher -import net.minecraft.client.renderer.WorldRenderer +import net.minecraft.client.renderer.VertexBuffer +import net.minecraft.util.BlockRenderLayer import net.minecraft.util.EnumFacing.* -import net.minecraft.util.EnumWorldBlockLayer import org.apache.logging.log4j.Level class RenderCactus : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { @@ -63,7 +62,7 @@ class RenderCactus : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { ctx.cameraDistance < Config.cactus.distance && Config.blocks.cactus.matchesID(ctx.block) - override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: WorldRenderer, layer: EnumWorldBlockLayer): Boolean { + override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: VertexBuffer, layer: BlockRenderLayer): Boolean { // get AO data modelRenderer.updateShading(Int3.zero, allFaces) val icons = iconBase[ctx.blockState(Int3.zero)] ?: return renderWorldBlockBase(ctx, dispatcher, renderer, null) diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderConnectedGrass.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderConnectedGrass.kt index cf3e8b6..62eae9f 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderConnectedGrass.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderConnectedGrass.kt @@ -7,17 +7,17 @@ import mods.octarinecore.client.render.BlockContext import mods.octarinecore.client.render.withOffset import mods.octarinecore.common.Int3 import net.minecraft.client.renderer.BlockRendererDispatcher -import net.minecraft.client.renderer.WorldRenderer -import net.minecraft.util.EnumWorldBlockLayer +import net.minecraft.client.renderer.VertexBuffer +import net.minecraft.util.BlockRenderLayer class RenderConnectedGrass : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { override fun isEligible(ctx: BlockContext) = Config.enabled && Config.connectedGrass.enabled && Config.blocks.dirt.matchesID(ctx.block) && Config.blocks.grass.matchesID(ctx.block(up1)) && - (Config.connectedGrass.snowEnabled || !ctx.block(up2).isSnow) + (Config.connectedGrass.snowEnabled || !ctx.blockState(up2).isSnow) - override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: WorldRenderer, layer: EnumWorldBlockLayer): Boolean { + override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: VertexBuffer, layer: BlockRenderLayer): Boolean { return ctx.withOffset(Int3.zero, up1) { ctx.withOffset(up1, up2) { renderWorldBlockBase(ctx, dispatcher, renderer, null) diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderConnectedGrassLog.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderConnectedGrassLog.kt index 370fbfa..f7852cb 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderConnectedGrassLog.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderConnectedGrassLog.kt @@ -8,9 +8,9 @@ import mods.octarinecore.client.render.withOffset import mods.octarinecore.common.Int3 import mods.octarinecore.common.offset import net.minecraft.client.renderer.BlockRendererDispatcher -import net.minecraft.client.renderer.WorldRenderer +import net.minecraft.client.renderer.VertexBuffer +import net.minecraft.util.BlockRenderLayer import net.minecraft.util.EnumFacing.* -import net.minecraft.util.EnumWorldBlockLayer class RenderConnectedGrassLog : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { @@ -21,7 +21,7 @@ class RenderConnectedGrassLog : AbstractBlockRenderingHandler(BetterFoliageMod.M Config.blocks.dirt.matchesID(ctx.block) && Config.blocks.logs.matchesID(ctx.block(up1)) - override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: WorldRenderer, layer: EnumWorldBlockLayer): Boolean { + override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: VertexBuffer, layer: BlockRenderLayer): Boolean { val grassDir = grassCheckDirs.find { Config.blocks.grass.matchesID(ctx.block(it.offset)) } diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderCoral.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderCoral.kt index 1ed55a5..d9f45c1 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderCoral.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderCoral.kt @@ -10,10 +10,10 @@ import mods.octarinecore.common.forgeDirs import mods.octarinecore.random import net.minecraft.block.material.Material import net.minecraft.client.renderer.BlockRendererDispatcher -import net.minecraft.client.renderer.WorldRenderer +import net.minecraft.client.renderer.VertexBuffer +import net.minecraft.util.BlockRenderLayer import net.minecraft.util.EnumFacing.Axis import net.minecraft.util.EnumFacing.UP -import net.minecraft.util.EnumWorldBlockLayer import org.apache.logging.log4j.Level.INFO class RenderCoral : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { @@ -45,18 +45,18 @@ class RenderCoral : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { override fun isEligible(ctx: BlockContext) = Config.enabled && Config.coral.enabled && ctx.cameraDistance < Config.coral.distance && - ctx.block(up2).material == Material.water && - ctx.block(up1).material == Material.water && + ctx.blockState(up2).material == Material.water && + ctx.blockState(up1).material == Material.water && Config.blocks.sand.matchesID(ctx.block) && ctx.biomeId in Config.coral.biomes && noise[ctx.pos] < Config.coral.population - override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: WorldRenderer, layer: EnumWorldBlockLayer): Boolean { + override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: VertexBuffer, layer: BlockRenderLayer): Boolean { renderWorldBlockBase(ctx, dispatcher, renderer, null) modelRenderer.updateShading(Int3.zero, allFaces) forgeDirs.forEachIndexed { idx, face -> - if (!ctx.block(forgeDirOffsets[idx]).isOpaqueCube && blockContext.random(idx) < Config.coral.chance) { + if (!ctx.blockState(forgeDirOffsets[idx]).isOpaqueCube && blockContext.random(idx) < Config.coral.chance) { var variation = blockContext.random(6) modelRenderer.render( renderer, diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderGrass.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderGrass.kt index a197334..f899a28 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderGrass.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderGrass.kt @@ -11,12 +11,11 @@ import mods.octarinecore.common.Double3 import mods.octarinecore.common.Int3 import mods.octarinecore.common.Rotation import mods.octarinecore.random -import net.minecraft.block.material.Material import net.minecraft.client.renderer.BlockRendererDispatcher -import net.minecraft.client.renderer.WorldRenderer +import net.minecraft.client.renderer.VertexBuffer +import net.minecraft.util.BlockRenderLayer import net.minecraft.util.EnumFacing.Axis import net.minecraft.util.EnumFacing.UP -import net.minecraft.util.EnumWorldBlockLayer import org.apache.logging.log4j.Level.INFO class RenderGrass : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { @@ -50,15 +49,15 @@ class RenderGrass : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { (Config.shortGrass.grassEnabled || Config.connectedGrass.enabled) && Config.blocks.grass.matchesID(ctx.block) - override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: WorldRenderer, layer: EnumWorldBlockLayer): Boolean { + override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: VertexBuffer, layer: BlockRenderLayer): Boolean { val isConnected = ctx.block(down1).let { Config.blocks.dirt.matchesID(it) || Config.blocks.grass.matchesID(it) } - val isSnowed = ctx.block(up1).isSnow + val isSnowed = ctx.blockState(up1).isSnow val connectedGrass = isConnected && Config.connectedGrass.enabled && (!isSnowed || Config.connectedGrass.snowEnabled) val grassInfo = GrassRegistry[ctx.blockState(Int3.zero)] ?: return renderWorldBlockBase(ctx, dispatcher, renderer, layer) val grassTopTexture = OptifineCTM.override(grassInfo.grassTopTexture, ctx, UP) - val blockColor = ctx.blockData(Int3.zero, 0).color + val blockColor = ctx.blockData(Int3.zero).color if (connectedGrass) { // get full AO data @@ -86,7 +85,7 @@ class RenderGrass : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { if (!Config.shortGrass.grassEnabled) return true if (isSnowed && !Config.shortGrass.snowEnabled) return true - if (ctx.block(up1).isOpaqueCube) return true + if (ctx.blockState(up1).isOpaqueCube) return true // render grass quads val iconset = if (isSnowed) snowedIcons else normalIcons diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderLeaves.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderLeaves.kt index c5f6bc8..f808aae 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderLeaves.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderLeaves.kt @@ -2,7 +2,6 @@ package mods.betterfoliage.client.render import mods.betterfoliage.BetterFoliageMod import mods.betterfoliage.client.config.Config -import mods.betterfoliage.client.integration.OptifineCTM import mods.betterfoliage.client.integration.ShadersModIntegration import mods.betterfoliage.client.texture.LeafRegistry import mods.octarinecore.PI2 @@ -14,10 +13,10 @@ import mods.octarinecore.common.vec import mods.octarinecore.random import net.minecraft.block.material.Material import net.minecraft.client.renderer.BlockRendererDispatcher -import net.minecraft.client.renderer.WorldRenderer -import net.minecraft.util.EnumFacing -import net.minecraft.util.EnumFacing.* -import net.minecraft.util.EnumWorldBlockLayer +import net.minecraft.client.renderer.VertexBuffer +import net.minecraft.util.BlockRenderLayer +import net.minecraft.util.EnumFacing.DOWN +import net.minecraft.util.EnumFacing.UP import java.lang.Math.cos import java.lang.Math.sin @@ -44,13 +43,13 @@ class RenderLeaves : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { ctx.cameraDistance < Config.leaves.distance && Config.blocks.leaves.matchesID(ctx.block) - override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: WorldRenderer, layer: EnumWorldBlockLayer): Boolean { - val isSnowed = ctx.block(up1).material.let { + override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: VertexBuffer, layer: BlockRenderLayer): Boolean { + val isSnowed = ctx.blockState(up1).material.let { it == Material.snow || it == Material.craftedSnow } renderWorldBlockBase(ctx, dispatcher, renderer, null) val leafInfo = LeafRegistry[ctx, DOWN] ?: return false - val blockColor = ctx.blockData(Int3.zero, 0).color + val blockColor = ctx.blockData(Int3.zero).color modelRenderer.updateShading(Int3.zero, allFaces) ShadersModIntegration.leaves(renderer) { diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderLilypad.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderLilypad.kt index 2f57122..76c29ca 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderLilypad.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderLilypad.kt @@ -8,10 +8,10 @@ import mods.octarinecore.client.render.* import mods.octarinecore.common.Int3 import mods.octarinecore.common.Rotation import net.minecraft.client.renderer.BlockRendererDispatcher -import net.minecraft.client.renderer.WorldRenderer +import net.minecraft.client.renderer.VertexBuffer +import net.minecraft.util.BlockRenderLayer import net.minecraft.util.EnumFacing.DOWN import net.minecraft.util.EnumFacing.UP -import net.minecraft.util.EnumWorldBlockLayer import org.apache.logging.log4j.Level class RenderLilypad : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { @@ -41,7 +41,7 @@ class RenderLilypad : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { ctx.cameraDistance < Config.lilypad.distance && Config.blocks.lilypad.matchesID(ctx.block) - override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: WorldRenderer, layer: EnumWorldBlockLayer): Boolean { + override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: VertexBuffer, layer: BlockRenderLayer): Boolean { renderWorldBlockBase(ctx, dispatcher, renderer, null) modelRenderer.updateShading(Int3.zero, allFaces) diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderLog.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderLog.kt index f585d57..367fa1b 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderLog.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderLog.kt @@ -41,7 +41,7 @@ class RenderLog : AbstractRenderColumn(BetterFoliageMod.MOD_ID) { } override val blockPredicate = { state: IBlockState -> Config.blocks.logs.matchesID(state.block) } - override val surroundPredicate = { state: IBlockState -> state.block.isOpaqueCube && !Config.blocks.logs.matchesID(state.block) } + override val surroundPredicate = { state: IBlockState -> state.isOpaqueCube && !Config.blocks.logs.matchesID(state.block) } override val connectPerpendicular: Boolean get() = Config.roundLogs.connectPerpendicular override val connectSolids: Boolean get() = Config.roundLogs.connectSolids diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderMycelium.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderMycelium.kt index 34ed242..3520c9d 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderMycelium.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderMycelium.kt @@ -9,11 +9,10 @@ import mods.octarinecore.client.render.modelRenderer import mods.octarinecore.client.render.noPost import mods.octarinecore.common.Double3 import mods.octarinecore.common.Rotation -import net.minecraft.block.material.Material import net.minecraft.client.renderer.BlockRendererDispatcher -import net.minecraft.client.renderer.WorldRenderer +import net.minecraft.client.renderer.VertexBuffer import net.minecraft.init.Blocks -import net.minecraft.util.EnumWorldBlockLayer +import net.minecraft.util.BlockRenderLayer import org.apache.logging.log4j.Level.INFO class RenderMycelium : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { @@ -31,13 +30,13 @@ class RenderMycelium : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { ctx.cameraDistance < Config.shortGrass.distance } - override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: WorldRenderer, layer: EnumWorldBlockLayer): Boolean { - val isSnowed = ctx.block(up1).isSnow + override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: VertexBuffer, layer: BlockRenderLayer): Boolean { + val isSnowed = ctx.blockState(up1).isSnow renderWorldBlockBase(ctx, dispatcher, renderer, null) if (isSnowed && !Config.shortGrass.snowEnabled) return true - if (ctx.block(up1).isOpaqueCube) return true + if (ctx.blockState(up1).isOpaqueCube) return true val rand = ctx.semiRandomArray(2) modelRenderer.render( diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderNetherrack.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderNetherrack.kt index 8f5500c..db58a73 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderNetherrack.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderNetherrack.kt @@ -8,9 +8,9 @@ import mods.octarinecore.common.Int3 import mods.octarinecore.common.Rotation import mods.octarinecore.random import net.minecraft.client.renderer.BlockRendererDispatcher -import net.minecraft.client.renderer.WorldRenderer +import net.minecraft.client.renderer.VertexBuffer import net.minecraft.init.Blocks -import net.minecraft.util.EnumWorldBlockLayer +import net.minecraft.util.BlockRenderLayer import net.minecraft.util.EnumFacing.* import org.apache.logging.log4j.Level.INFO @@ -36,9 +36,9 @@ class RenderNetherrack : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) ctx.cameraDistance < Config.netherrack.distance } - override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: WorldRenderer, layer: EnumWorldBlockLayer): Boolean { + override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: VertexBuffer, layer: BlockRenderLayer): Boolean { renderWorldBlockBase(ctx, dispatcher, renderer, null) - if (ctx.block(down1).isOpaqueCube) return true + if (ctx.blockState(down1).isOpaqueCube) return true modelRenderer.updateShading(Int3.zero, allFaces) val rand = ctx.semiRandomArray(2) diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderReeds.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderReeds.kt index 933feb8..a2e4be8 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderReeds.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderReeds.kt @@ -10,9 +10,9 @@ import mods.octarinecore.common.Rotation import mods.octarinecore.random import net.minecraft.block.material.Material import net.minecraft.client.renderer.BlockRendererDispatcher -import net.minecraft.client.renderer.WorldRenderer +import net.minecraft.client.renderer.VertexBuffer +import net.minecraft.util.BlockRenderLayer import net.minecraft.util.EnumFacing.UP -import net.minecraft.util.EnumWorldBlockLayer import org.apache.logging.log4j.Level class RenderReeds : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { @@ -44,13 +44,13 @@ class RenderReeds : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { override fun isEligible(ctx: BlockContext) = Config.enabled && Config.reed.enabled && ctx.cameraDistance < Config.reed.distance && - ctx.block(up2).material == Material.air && - ctx.block(up1).material == Material.water && + ctx.blockState(up2).material == Material.air && + ctx.blockState(up1).material == Material.water && Config.blocks.dirt.matchesID(ctx.block) && ctx.biomeId in Config.reed.biomes && noise[ctx.pos] < Config.reed.population - override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: WorldRenderer, layer: EnumWorldBlockLayer): Boolean { + override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: VertexBuffer, layer: BlockRenderLayer): Boolean { renderWorldBlockBase(ctx, dispatcher, renderer, null) modelRenderer.updateShading(Int3.zero, allFaces) diff --git a/src/main/kotlin/mods/betterfoliage/client/render/Utils.kt b/src/main/kotlin/mods/betterfoliage/client/render/Utils.kt index afe3379..2181f2f 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/Utils.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/Utils.kt @@ -9,6 +9,7 @@ import mods.octarinecore.common.Rotation import mods.octarinecore.common.times import net.minecraft.block.Block import net.minecraft.block.material.Material +import net.minecraft.block.state.IBlockState import net.minecraft.util.EnumFacing import net.minecraft.util.EnumFacing.* @@ -23,7 +24,7 @@ val denseLeavesRot = arrayOf(Rotation.identity, Rotation.rot90[EAST.ordinal], Ro val whitewash: RenderVertex.(ShadingContext, Int, Quad, Int, Vertex)->Unit = { ctx, qi, q, vi, v -> setGrey(1.4f) } val greywash: RenderVertex.(ShadingContext, Int, Quad, Int, Vertex)->Unit = { ctx, qi, q, vi, v -> setGrey(1.0f) } -val Block.isSnow: Boolean get() = material.let { it == Material.snow || it == Material.craftedSnow } +val IBlockState.isSnow: Boolean get() = material.let { it == Material.snow || it == Material.craftedSnow } fun Quad.toCross(rotAxis: EnumFacing, trans: (Quad)->Quad) = (0..3).map { rotIdx -> diff --git a/src/main/kotlin/mods/betterfoliage/client/texture/LeafRegistry.kt b/src/main/kotlin/mods/betterfoliage/client/texture/LeafRegistry.kt index 8aa08b9..d3a5763 100644 --- a/src/main/kotlin/mods/betterfoliage/client/texture/LeafRegistry.kt +++ b/src/main/kotlin/mods/betterfoliage/client/texture/LeafRegistry.kt @@ -11,13 +11,10 @@ import mods.octarinecore.common.Int3 import net.minecraft.block.state.IBlockState import net.minecraft.client.renderer.texture.TextureAtlasSprite import net.minecraft.client.renderer.texture.TextureMap -import net.minecraft.util.BlockPos import net.minecraft.util.EnumFacing import net.minecraft.util.ResourceLocation +import net.minecraft.util.math.BlockPos import net.minecraft.world.IBlockAccess -import net.minecraftforge.client.event.TextureStitchEvent -import net.minecraftforge.common.MinecraftForge -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import net.minecraftforge.fml.relauncher.Side import net.minecraftforge.fml.relauncher.SideOnly import org.apache.logging.log4j.Level.INFO diff --git a/src/main/kotlin/mods/betterfoliage/loader/BetterFoliageCore.kt b/src/main/kotlin/mods/betterfoliage/loader/BetterFoliageCore.kt index 615f6ac..21d7778 100644 --- a/src/main/kotlin/mods/betterfoliage/loader/BetterFoliageCore.kt +++ b/src/main/kotlin/mods/betterfoliage/loader/BetterFoliageCore.kt @@ -24,54 +24,54 @@ class BetterFoliageTransformer : Transformer() { } fun setupClient() { - // where: WorldClient.doVoidFogParticles(), right before the end of the loop + // where: WorldClient.showBarrierParticles(), right after invoking Block.randomDisplayTick // what: invoke BF code for every random display tick // why: allows us to catch random display ticks, without touching block code - transformMethod(Refs.doVoidFogParticles) { + transformMethod(Refs.showBarrierParticles) { find(invokeRef(Refs.randomDisplayTick))?.insertAfter { log.info("Applying random display tick call hook") varinsn(ALOAD, 0) - varinsn(ALOAD, 13) - varinsn(ALOAD, 8) + varinsn(ALOAD, 11) + varinsn(ALOAD, 7) invokeStatic(Refs.onRandomDisplayTick) } ?: log.warn("Failed to apply random display tick call hook!") } - // where: Block.getAmbientOcclusionLightValue() + // where: BlockStateContainer$StateImplementation.getAmbientOcclusionLightValue() // what: invoke BF code to overrule AO transparency value // why: allows us to have light behave properly on non-solid log blocks without // messing with isOpaqueBlock(), which could have gameplay effects transformMethod(Refs.getAmbientOcclusionLightValue) { find(FRETURN)?.insertBefore { - log.info("Applying Block.getAmbientOcclusionLightValue() override") + log.info("Applying getAmbientOcclusionLightValue() override") varinsn(ALOAD, 0) invokeStatic(Refs.getAmbientOcclusionLightValueOverride) - } ?: log.warn("Failed to apply Block.getAmbientOcclusionLightValue() override!") + } ?: log.warn("Failed to apply getAmbientOcclusionLightValue() override!") } - // where: Block.getUseNeighborBrightness() + // where: BlockStateContainer$StateImplementation.useNeighborBrightness() // what: invoke BF code to overrule _useNeighborBrightness_ // why: allows us to have light behave properly on non-solid log blocks - transformMethod(Refs.getUseNeighborBrightness) { + transformMethod(Refs.useNeighborBrightness) { find(IRETURN)?.insertBefore { - log.info("Applying Block.getUseNeighborBrightness() override") + log.info("Applying useNeighborBrightness() override") varinsn(ALOAD, 0) - invokeStatic(Refs.getUseNeighborBrightnessOverride) - } ?: log.warn("Failed to apply Block.getUseNeighborBrightness() override!") + invokeStatic(Refs.useNeighborBrightnessOverride) + } ?: log.warn("Failed to apply useNeighborBrightness() override!") } - // where: Block.shouldSideBeRendered() + // where: BlockStateContainer$StateImplementation.doesSideBlockRendering() // what: invoke BF code to overrule condition // why: allows us to make log blocks non-solid without // messing with isOpaqueBlock(), which could have gameplay effects - transformMethod(Refs.shouldSideBeRendered) { + transformMethod(Refs.doesSideBlockRendering) { find(IRETURN)?.insertBefore { - log.info("Applying Block.shouldSideBeRendered() override") + log.info("Applying doesSideBlockRendering() override") varinsn(ALOAD, 1) varinsn(ALOAD, 2) varinsn(ALOAD, 3) invokeStatic(Refs.shouldRenderBlockSideOverride) - } ?: log.warn("Failed to apply Block.shouldSideBeRendered() override!") + } ?: log.warn("Failed to apply doesSideBlockRendering() override!") } // where: ModelLoader.setupModelRegistry(), right before the textures are loaded @@ -82,7 +82,7 @@ class BetterFoliageTransformer : Transformer() { log.info("Applying ModelLoader lifecycle callback") varinsn(ALOAD, 0) invokeStatic(Refs.onAfterLoadModelDefinitions) - } + } ?: log.warn("Failed to apply ModelLoader lifecycle callback!") } // where: RenderChunk.rebuildChunk() diff --git a/src/main/kotlin/mods/betterfoliage/loader/Refs.kt b/src/main/kotlin/mods/betterfoliage/loader/Refs.kt index 5657cca..77a7478 100644 --- a/src/main/kotlin/mods/betterfoliage/loader/Refs.kt +++ b/src/main/kotlin/mods/betterfoliage/loader/Refs.kt @@ -15,50 +15,49 @@ object Refs { val Random = ClassRef("java.util.Random") // Minecraft - val IBlockAccess = ClassRef("net.minecraft.world.IBlockAccess", "adq") - val IBlockState = ClassRef("net.minecraft.block.state.IBlockState", "alz") - val BlockStateBase = ClassRef("net.minecraft.block.state.BlockStateBase", "aly") - val BlockPos = ClassRef("net.minecraft.util.BlockPos", "cj") - val EnumWorldBlockLayer = ClassRef("net.minecraft.util.EnumWorldBlockLayer", "adf") + val IBlockAccess = ClassRef("net.minecraft.world.IBlockAccess", "ahx") + val IBlockState = ClassRef("net.minecraft.block.state.IBlockState", "arc") + val BlockStateBase = ClassRef("net.minecraft.block.state.BlockStateBase", "ara") + val BlockPos = ClassRef("net.minecraft.util.math.BlockPos", "cj") + val MutableBlockPos = ClassRef("net.minecraft.util.math.BlockPos\$MutableBlockPos", "cj\$a") + val BlockRenderLayer = ClassRef("net.minecraft.util.BlockRenderLayer", "ahm") val EnumFacing = ClassRef("net.minecraft.util.EnumFacing", "cq") - val World = ClassRef("net.minecraft.world.World", "adm") - val WorldClient = ClassRef("net.minecraft.client.multiplayer.WorldClient", "bdb") - val doVoidFogParticles = MethodRef(WorldClient, "doVoidFogParticles", "func_73029_E", "b", ClassRef.void, ClassRef.int, ClassRef.int, ClassRef.int) + val World = ClassRef("net.minecraft.world.World", "aht") + val WorldClient = ClassRef("net.minecraft.client.multiplayer.WorldClient", "bku") + val showBarrierParticles = MethodRef(WorldClient, "showBarrierParticles", "func_184153_a", "a", ClassRef.void, ClassRef.int, ClassRef.int, ClassRef.int, ClassRef.int, Random, ClassRef.boolean, MutableBlockPos) - val Block = ClassRef("net.minecraft.block.Block", "afh") - val canRenderInLayer = MethodRef(Block, "canRenderInLayer", ClassRef.boolean, EnumWorldBlockLayer) - val getAmbientOcclusionLightValue = MethodRef(Block, "getAmbientOcclusionLightValue", "func_149685_I", "f", ClassRef.float) - val getUseNeighborBrightness = MethodRef(Block, "getUseNeighborBrightness", "func_149710_n", "q", ClassRef.boolean) - val shouldSideBeRendered = MethodRef(Block, "shouldSideBeRendered", "func_149646_a", "a", ClassRef.boolean, IBlockAccess, BlockPos, EnumFacing) + val Block = ClassRef("net.minecraft.block.Block", "ajt") + val StateImplementation = ClassRef("net.minecraft.block.state.BlockStateContainer\$StateImplementation", "ard\$a") + val canRenderInLayer = MethodRef(Block, "canRenderInLayer", ClassRef.boolean, BlockRenderLayer) + val getAmbientOcclusionLightValue = MethodRef(StateImplementation, "getAmbientOcclusionLightValue", "func_185892_j", "j", ClassRef.float) + val useNeighborBrightness = MethodRef(StateImplementation, "useNeighborBrightness", "func_185916_f", "f", ClassRef.boolean) + val shouldSideBeRendered = MethodRef(StateImplementation, "shouldSideBeRendered", "func_185894_c", "c", ClassRef.boolean, IBlockAccess, BlockPos, EnumFacing) + val doesSideBlockRendering = MethodRef(StateImplementation, "doesSideBlockRendering", ClassRef.boolean, IBlockAccess, BlockPos, EnumFacing) val randomDisplayTick = MethodRef(Block, "randomDisplayTick", "func_180655_c", "c", ClassRef.void, World, BlockPos, IBlockState, Random) - val BlockModelRenderer = ClassRef("net.minecraft.client.renderer.BlockModelRenderer", "bgf") - val AmbientOcclusionFace = ClassRef("net.minecraft.client.renderer.BlockModelRenderer\$AmbientOcclusionFace", "bgf\$b") - val ChunkCompileTaskGenerator = ClassRef("net.minecraft.client.renderer.chunk.ChunkCompileTaskGenerator", "bhn") - val WorldRenderer = ClassRef("net.minecraft.client.renderer.WorldRenderer", "bfd") + val BlockModelRenderer = ClassRef("net.minecraft.client.renderer.BlockModelRenderer", "boe") + val AmbientOcclusionFace = ClassRef("net.minecraft.client.renderer.BlockModelRenderer\$AmbientOcclusionFace", "boe\$b") + val ChunkCompileTaskGenerator = ClassRef("net.minecraft.client.renderer.chunk.ChunkCompileTaskGenerator", "bpz") + val VertexBuffer = ClassRef("net.minecraft.client.renderer.VertexBuffer", "bmz") val AOF_constructor = MethodRef(AmbientOcclusionFace, "", ClassRef.void, BlockModelRenderer) - val RenderChunk = ClassRef("net.minecraft.client.renderer.chunk.RenderChunk", "bht") + val RenderChunk = ClassRef("net.minecraft.client.renderer.chunk.RenderChunk", "bqf") val rebuildChunk = MethodRef(RenderChunk, "rebuildChunk", "func_178581_b", "b", ClassRef.void, ClassRef.float, ClassRef.float, ClassRef.float, ChunkCompileTaskGenerator) - val BlockRendererDispatcher = ClassRef("net.minecraft.client.renderer.BlockRendererDispatcher", "bgd") - val renderBlock = MethodRef(BlockRendererDispatcher, "renderBlock", "func_175018_a", "a", ClassRef.boolean, IBlockState, BlockPos, IBlockAccess, WorldRenderer) + val BlockRendererDispatcher = ClassRef("net.minecraft.client.renderer.BlockRendererDispatcher", "boc") + val renderBlock = MethodRef(BlockRendererDispatcher, "renderBlock", "func_175018_a", "a", ClassRef.boolean, IBlockState, BlockPos, IBlockAccess, VertexBuffer) - // val IMetadataSerializer = ClassRef("net.minecraft.client.resources.data.IMetadataSerializer", "brw") - // val SimpleReloadableResourceManager = ClassRef("net.minecraft.client.resources.SimpleReloadableResourceManager", "brg") - // val metadataSerializer = FieldRef(SimpleReloadableResourceManager, "rmMetadataSerializer", "field_110547_c", "f", IMetadataSerializer) + val TextureAtlasSprite = ClassRef("net.minecraft.client.renderer.texture.TextureAtlasSprite", "bvh") - val TextureAtlasSprite = ClassRef("net.minecraft.client.renderer.texture.TextureAtlasSprite", "bmi") - - val IRegistry = ClassRef("net.minecraft.util.IRegistry", "db") + val IRegistry = ClassRef("net.minecraft.util.registry.IRegistry", "db") val ModelLoader = ClassRef("net.minecraftforge.client.model.ModelLoader") val stateModels = FieldRef(ModelLoader, "stateModels", Map) val setupModelRegistry = MethodRef(ModelLoader, "setupModelRegistry", "func_177570_a", "a", IRegistry) - val IModel = ClassRef("net.minecraftforge.client.model.IModel", "") - val ModelBlock = ClassRef("net.minecraft.client.renderer.block.model.ModelBlock", "bgl") - val ModelResourceLocation = ClassRef("net.minecraft.client.renderer.block.model.ModelResourceLocation", "bov") + val IModel = ClassRef("net.minecraftforge.client.model.IModel") + val ModelBlock = ClassRef("net.minecraft.client.renderer.block.model.ModelBlock", "bok") + val ModelResourceLocation = ClassRef("net.minecraft.client.renderer.block.model.ModelResourceLocation", "bxt") val VanillaModelWrapper = ClassRef("net.minecraftforge.client.model.ModelLoader\$VanillaModelWrapper") val model_VMW = FieldRef(VanillaModelWrapper, "model", ModelBlock) val location_VMW = FieldRef(VanillaModelWrapper, "location", ModelBlock) @@ -69,13 +68,13 @@ object Refs { // Better Foliage val BetterFoliageHooks = ClassRef("mods.betterfoliage.client.Hooks") - val getAmbientOcclusionLightValueOverride = MethodRef(BetterFoliageHooks, "getAmbientOcclusionLightValueOverride", ClassRef.float, ClassRef.float, Block) - val getUseNeighborBrightnessOverride = MethodRef(BetterFoliageHooks, "getUseNeighborBrightnessOverride", ClassRef.boolean, ClassRef.boolean, Block) + val getAmbientOcclusionLightValueOverride = MethodRef(BetterFoliageHooks, "getAmbientOcclusionLightValueOverride", ClassRef.float, ClassRef.float, IBlockState) + val useNeighborBrightnessOverride = MethodRef(BetterFoliageHooks, "getUseNeighborBrightnessOverride", ClassRef.boolean, ClassRef.boolean, IBlockState) val shouldRenderBlockSideOverride = MethodRef(BetterFoliageHooks, "shouldRenderBlockSideOverride", ClassRef.boolean, ClassRef.boolean, IBlockAccess, BlockPos, EnumFacing) val onRandomDisplayTick = MethodRef(BetterFoliageHooks, "onRandomDisplayTick", ClassRef.void, World, IBlockState, BlockPos) val onAfterLoadModelDefinitions = MethodRef(BetterFoliageHooks, "onAfterLoadModelDefinitions", ClassRef.void, ModelLoader) - val renderWorldBlock = MethodRef(BetterFoliageHooks, "renderWorldBlock", ClassRef.boolean, BlockRendererDispatcher, IBlockState, BlockPos, IBlockAccess, WorldRenderer, EnumWorldBlockLayer) - val canRenderBlockInLayer = MethodRef(BetterFoliageHooks, "canRenderBlockInLayer", ClassRef.boolean, Block, EnumWorldBlockLayer) + val renderWorldBlock = MethodRef(BetterFoliageHooks, "renderWorldBlock", ClassRef.boolean, BlockRendererDispatcher, IBlockState, BlockPos, IBlockAccess, VertexBuffer, BlockRenderLayer) + val canRenderBlockInLayer = MethodRef(BetterFoliageHooks, "canRenderBlockInLayer", ClassRef.boolean, Block, BlockRenderLayer) // Optifine val OptifineClassTransformer = ClassRef("optifine.OptiFineClassTransformer") @@ -94,8 +93,8 @@ object Refs { // ShadersMod val SVertexBuilder = ClassRef("shadersmod.client.SVertexBuilder") - val sVertexBuilder = FieldRef(WorldRenderer, "sVertexBuilder", SVertexBuilder) - val pushEntity_state = MethodRef(SVertexBuilder, "pushEntity", ClassRef.void, IBlockState, BlockPos, IBlockAccess, WorldRenderer) + val sVertexBuilder = FieldRef(VertexBuffer, "sVertexBuilder", SVertexBuilder) + val pushEntity_state = MethodRef(SVertexBuilder, "pushEntity", ClassRef.void, IBlockState, BlockPos, IBlockAccess, VertexBuffer) val pushEntity_num = MethodRef(SVertexBuilder, "pushEntity", ClassRef.void, ClassRef.long) val popEntity = MethodRef(SVertexBuilder, "popEntity", ClassRef.void) diff --git a/src/main/kotlin/mods/octarinecore/client/gui/IdListConfigEntry.kt b/src/main/kotlin/mods/octarinecore/client/gui/IdListConfigEntry.kt index 9fe1a86..03bf923 100644 --- a/src/main/kotlin/mods/octarinecore/client/gui/IdListConfigEntry.kt +++ b/src/main/kotlin/mods/octarinecore/client/gui/IdListConfigEntry.kt @@ -2,8 +2,7 @@ package mods.octarinecore.client.gui import net.minecraft.client.gui.GuiScreen import net.minecraft.client.resources.I18n -import net.minecraft.util.EnumChatFormatting.GOLD -import net.minecraft.util.EnumChatFormatting.YELLOW +import net.minecraft.util.text.TextFormatting.* import net.minecraftforge.fml.client.config.* /** diff --git a/src/main/kotlin/mods/octarinecore/client/gui/NonVerboseArrayEntry.kt b/src/main/kotlin/mods/octarinecore/client/gui/NonVerboseArrayEntry.kt index 445bdf3..0b935f2 100644 --- a/src/main/kotlin/mods/octarinecore/client/gui/NonVerboseArrayEntry.kt +++ b/src/main/kotlin/mods/octarinecore/client/gui/NonVerboseArrayEntry.kt @@ -1,7 +1,7 @@ package mods.octarinecore.client.gui import net.minecraft.client.resources.I18n -import net.minecraft.util.EnumChatFormatting.AQUA +import net.minecraft.util.text.TextFormatting.* import net.minecraftforge.fml.client.config.GuiConfig import net.minecraftforge.fml.client.config.GuiConfigEntries import net.minecraftforge.fml.client.config.IConfigElement diff --git a/src/main/kotlin/mods/octarinecore/client/gui/Utils.kt b/src/main/kotlin/mods/octarinecore/client/gui/Utils.kt index e5c4ea5..c823738 100644 --- a/src/main/kotlin/mods/octarinecore/client/gui/Utils.kt +++ b/src/main/kotlin/mods/octarinecore/client/gui/Utils.kt @@ -1,13 +1,13 @@ @file:JvmName("Utils") package mods.octarinecore.client.gui -import net.minecraft.util.EnumChatFormatting +import net.minecraft.util.text.TextFormatting.* fun stripTooltipDefaultText(tooltip: MutableList) { var defaultRows = false val iter = tooltip.iterator() while (iter.hasNext()) { - if (iter.next().startsWith(EnumChatFormatting.AQUA.toString())) defaultRows = true + if (iter.next().startsWith(AQUA.toString())) defaultRows = true if (defaultRows) iter.remove() } } \ No newline at end of file diff --git a/src/main/kotlin/mods/octarinecore/client/render/AbstractBlockRenderingHandler.kt b/src/main/kotlin/mods/octarinecore/client/render/AbstractBlockRenderingHandler.kt index b235964..90d81a2 100644 --- a/src/main/kotlin/mods/octarinecore/client/render/AbstractBlockRenderingHandler.kt +++ b/src/main/kotlin/mods/octarinecore/client/render/AbstractBlockRenderingHandler.kt @@ -11,11 +11,13 @@ import net.minecraft.block.Block import net.minecraft.block.state.IBlockState import net.minecraft.client.Minecraft import net.minecraft.client.renderer.BlockRendererDispatcher -import net.minecraft.client.renderer.WorldRenderer -import net.minecraft.util.BlockPos -import net.minecraft.util.EnumWorldBlockLayer -import net.minecraft.util.MathHelper +import net.minecraft.client.renderer.VertexBuffer +import net.minecraft.client.renderer.color.BlockColors +import net.minecraft.util.BlockRenderLayer +import net.minecraft.util.math.BlockPos +import net.minecraft.util.math.MathHelper import net.minecraft.world.IBlockAccess +import net.minecraft.world.biome.BiomeGenBase /** * [ThreadLocal] instance of [BlockContext] representing the block being rendered. @@ -27,6 +29,8 @@ val blockContext by ThreadLocalDelegate { BlockContext() } */ val modelRenderer by ThreadLocalDelegate { ModelRenderer() } +val blockColors = ThreadLocal() + abstract class AbstractBlockRenderingHandler(modId: String) : ResourceHandler(modId) { val moveToCutout: Boolean get() = true @@ -35,15 +39,15 @@ abstract class AbstractBlockRenderingHandler(modId: String) : ResourceHandler(mo // Custom rendering // ============================ abstract fun isEligible(ctx: BlockContext): Boolean - abstract fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: WorldRenderer, layer: EnumWorldBlockLayer): Boolean + abstract fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: VertexBuffer, layer: BlockRenderLayer): Boolean // ============================ // Vanilla rendering wrapper // ============================ /** - * Render the block in the current [BlockContext], and capture shading and texture data. + * Render the block in the current [BlockContext] */ - fun renderWorldBlockBase(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: WorldRenderer, layer: EnumWorldBlockLayer?): Boolean { + fun renderWorldBlockBase(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: VertexBuffer, layer: BlockRenderLayer?): Boolean { ctx.blockState(Int3.zero).let { if (layer == null || it.block.canRenderInLayer(layer)) return dispatcher.renderBlock(it, ctx.pos, ctx.world, renderer) @@ -68,18 +72,18 @@ class BlockContext() { val block: Block get() = block(Int3.zero) fun block(offset: Int3) = blockState(offset).block fun blockState(offset: Int3) = (pos + offset).let { world!!.getBlockState(it) } - fun blockData(offset: Int3, pass: Int) = (pos + offset).let { pos -> + fun blockData(offset: Int3) = (pos + offset).let { pos -> world!!.getBlockState(pos).let { state -> BlockData( state, - state.block.colorMultiplier(world!!, pos, pass), - state.block.getMixedBrightnessForBlock(world!!, pos) + Minecraft.getMinecraft().blockColors.colorMultiplier(state, world!!, pos, 0), + state.block.getPackedLightmapCoords(state, world!!, pos) ) } } /** Get the biome ID at the block position. */ - val biomeId: Int get() = world!!.getBiomeGenForCoords(pos).biomeID + val biomeId: Int get() = BiomeGenBase.getIdForBiome(world!!.getBiomeGenForCoords(pos)) /** Get the centerpoint of the block being rendered. */ val blockCenter: Double3 get() = Double3(pos.x + 0.5, pos.y + 0.5, pos.z + 0.5) diff --git a/src/main/kotlin/mods/octarinecore/client/render/AbstractEntityFX.kt b/src/main/kotlin/mods/octarinecore/client/render/AbstractEntityFX.kt index a8f0a8f..4cb24a9 100644 --- a/src/main/kotlin/mods/octarinecore/client/render/AbstractEntityFX.kt +++ b/src/main/kotlin/mods/octarinecore/client/render/AbstractEntityFX.kt @@ -4,7 +4,7 @@ import mods.octarinecore.PI2 import mods.octarinecore.common.Double3 import net.minecraft.client.Minecraft import net.minecraft.client.particle.EntityFX -import net.minecraft.client.renderer.WorldRenderer +import net.minecraft.client.renderer.VertexBuffer import net.minecraft.client.renderer.texture.TextureAtlasSprite import net.minecraft.entity.Entity import net.minecraft.world.World @@ -25,14 +25,14 @@ abstract class AbstractEntityFX(world: World, x: Double, y: Double, z: Double) : super.onUpdate() currentPos.setTo(posX, posY, posZ) prevPos.setTo(prevPosX, prevPosY, prevPosZ) - velocity.setTo(motionX, motionY, motionZ) + velocity.setTo(xSpeed, ySpeed, zSpeed) update() posX = currentPos.x; posY = currentPos.y; posZ = currentPos.z; - motionX = velocity.x; motionY = velocity.y; motionZ = velocity.z; + xSpeed = velocity.x; ySpeed = velocity.y; zSpeed = velocity.z; } /** Render the particle. */ - abstract fun render(worldRenderer: WorldRenderer, partialTickTime: Float) + abstract fun render(worldRenderer: VertexBuffer, partialTickTime: Float) /** Update particle on world tick. */ abstract fun update() @@ -43,7 +43,7 @@ abstract class AbstractEntityFX(world: World, x: Double, y: Double, z: Double) : /** Add the particle to the effect renderer if it is valid. */ fun addIfValid() { if (isValid) Minecraft.getMinecraft().effectRenderer.addEffect(this) } - override fun renderParticle(worldRenderer: WorldRenderer, entity: Entity, partialTickTime: Float, rotX: Float, rotZ: Float, rotYZ: Float, rotXY: Float, rotXZ: Float) { + override fun renderParticle(worldRenderer: VertexBuffer, entity: Entity, partialTickTime: Float, rotX: Float, rotZ: Float, rotYZ: Float, rotXY: Float, rotXZ: Float) { billboardRot.first.setTo(rotX + rotXY, rotZ, rotYZ + rotXZ) billboardRot.second.setTo(rotX - rotXY, -rotZ, rotYZ - rotXZ) render(worldRenderer, partialTickTime) @@ -61,13 +61,13 @@ abstract class AbstractEntityFX(world: World, x: Double, y: Double, z: Double) : * @param[isMirrored] mirror particle texture along V-axis * @param[alpha] aplha blending */ - fun renderParticleQuad(worldRenderer: WorldRenderer, + fun renderParticleQuad(worldRenderer: VertexBuffer, partialTickTime: Float, currentPos: Double3 = this.currentPos, prevPos: Double3 = this.prevPos, size: Double = particleScale.toDouble(), rotation: Int = 0, - icon: TextureAtlasSprite = particleIcon, + icon: TextureAtlasSprite = particleTexture, isMirrored: Boolean = false, alpha: Float = this.particleAlpha) { @@ -113,11 +113,6 @@ abstract class AbstractEntityFX(world: World, x: Double, y: Double, z: Double) : .color(particleRed, particleGreen, particleBlue, alpha) .lightmap(brLow, brHigh) .endVertex() - -// worldRenderer.addVertexWithUV(center.x - v1.x, center.y - v1.y, center.z - v1.z, maxU, maxV) -// worldRenderer.addVertexWithUV(center.x - v2.x, center.y - v2.y, center.z - v2.z, maxU, minV) -// worldRenderer.addVertexWithUV(center.x + v1.x, center.y + v1.y, center.z + v1.z, minU, minV) -// worldRenderer.addVertexWithUV(center.x + v2.x, center.y + v2.y, center.z + v2.z, minU, maxV) } override fun getFXLayer() = 1 diff --git a/src/main/kotlin/mods/octarinecore/client/render/ModelRenderer.kt b/src/main/kotlin/mods/octarinecore/client/render/ModelRenderer.kt index ed15625..d99f463 100644 --- a/src/main/kotlin/mods/octarinecore/client/render/ModelRenderer.kt +++ b/src/main/kotlin/mods/octarinecore/client/render/ModelRenderer.kt @@ -2,12 +2,10 @@ package mods.octarinecore.client.render import mods.octarinecore.common.* import net.minecraft.client.Minecraft -import net.minecraft.client.renderer.WorldRenderer +import net.minecraft.client.renderer.VertexBuffer import net.minecraft.client.renderer.texture.TextureAtlasSprite -import net.minecraft.client.renderer.vertex.DefaultVertexFormats import net.minecraft.util.EnumFacing import net.minecraft.util.EnumFacing.* -import java.lang.Math.max class ModelRenderer() : ShadingContext() { @@ -28,7 +26,7 @@ class ModelRenderer() : ShadingContext() { * @param[postProcess] lambda to perform arbitrary modifications on the [RenderVertex] just before it goes to the [Tessellator] */ inline fun render( - worldRenderer: WorldRenderer, + worldRenderer: VertexBuffer, model: Model, rot: Rotation, trans: Double3 = blockContext.blockCenter, @@ -88,7 +86,7 @@ open class ShadingContext { fun aoShading(face: EnumFacing, corner1: EnumFacing, corner2: EnumFacing) = aoFaces[face.rotate(rotation).ordinal][corner1.rotate(rotation), corner2.rotate(rotation)] - fun blockData(offset: Int3) = blockContext.blockData(offset.rotate(rotation), 0) + fun blockData(offset: Int3) = blockContext.blockData(offset.rotate(rotation)) } /** @@ -158,7 +156,7 @@ class RenderVertex() { } -fun WorldRenderer.ensureSpaceForQuads(num: Int) { +fun VertexBuffer.ensureSpaceForQuads(num: Int) { rawIntBuffer.position(bufferSize) growBuffer(num * vertexFormat.nextOffset) } diff --git a/src/main/kotlin/mods/octarinecore/client/render/OffsetBlockAccess.kt b/src/main/kotlin/mods/octarinecore/client/render/OffsetBlockAccess.kt index 7707837..fb2a6c8 100644 --- a/src/main/kotlin/mods/octarinecore/client/render/OffsetBlockAccess.kt +++ b/src/main/kotlin/mods/octarinecore/client/render/OffsetBlockAccess.kt @@ -2,8 +2,8 @@ package mods.octarinecore.client.render import mods.octarinecore.common.Int3 import mods.octarinecore.common.plus -import net.minecraft.util.BlockPos import net.minecraft.util.EnumFacing +import net.minecraft.util.math.BlockPos import net.minecraft.world.IBlockAccess /** diff --git a/src/main/kotlin/mods/octarinecore/client/render/Shading.kt b/src/main/kotlin/mods/octarinecore/client/render/Shading.kt index 7943aa7..daa84c6 100644 --- a/src/main/kotlin/mods/octarinecore/client/render/Shading.kt +++ b/src/main/kotlin/mods/octarinecore/client/render/Shading.kt @@ -1,6 +1,7 @@ package mods.octarinecore.client.render import mods.octarinecore.common.* +import net.minecraft.client.Minecraft import net.minecraft.client.renderer.BlockModelRenderer import net.minecraft.util.EnumFacing import net.minecraft.util.EnumFacing.* @@ -40,7 +41,7 @@ class AoData() { } class AoFaceData(val face: EnumFacing) { - val ao = BlockModelRenderer().AmbientOcclusionFace() + val ao = BlockModelRenderer(Minecraft.getMinecraft().blockColors).AmbientOcclusionFace() val top = faceCorners[face.ordinal].topLeft.first val left = faceCorners[face.ordinal].topLeft.second @@ -63,7 +64,7 @@ class AoFaceData(val face: EnumFacing) { val quadBounds: FloatArray = FloatArray(12) val flags = BitSet(3).apply { set(0) } - ao.updateVertexBrightness(ctx.world, blockState.block, ctx.pos + offset, face, quadBounds, flags) + ao.updateVertexBrightness(ctx.world, blockState, ctx.pos + offset, face, quadBounds, flags) ordered.forEachIndexed { idx, aoData -> aoData.set(ao.vertexBrightness[idx], ao.vertexColorMultiplier[idx] * multiplier) } } diff --git a/src/main/kotlin/mods/octarinecore/client/resource/ModelDataInspector.kt b/src/main/kotlin/mods/octarinecore/client/resource/ModelDataInspector.kt index 70ab715..f59e53b 100644 --- a/src/main/kotlin/mods/octarinecore/client/resource/ModelDataInspector.kt +++ b/src/main/kotlin/mods/octarinecore/client/resource/ModelDataInspector.kt @@ -6,11 +6,11 @@ import mods.octarinecore.stripStart import net.minecraft.block.Block import net.minecraft.block.state.IBlockState import net.minecraft.client.renderer.block.model.ModelBlock +import net.minecraft.client.renderer.block.model.ModelResourceLocation import net.minecraft.client.renderer.block.statemap.DefaultStateMapper import net.minecraft.client.renderer.block.statemap.IStateMapper import net.minecraft.client.renderer.texture.TextureAtlasSprite import net.minecraft.client.renderer.texture.TextureMap -import net.minecraft.client.resources.model.ModelResourceLocation import net.minecraft.util.ResourceLocation import net.minecraftforge.client.event.TextureStitchEvent import net.minecraftforge.client.model.IModel diff --git a/src/main/kotlin/mods/octarinecore/client/resource/ResourceGeneration.kt b/src/main/kotlin/mods/octarinecore/client/resource/ResourceGeneration.kt index dec3aa8..9ea19a9 100644 --- a/src/main/kotlin/mods/octarinecore/client/resource/ResourceGeneration.kt +++ b/src/main/kotlin/mods/octarinecore/client/resource/ResourceGeneration.kt @@ -5,8 +5,8 @@ import net.minecraft.client.resources.IResourcePack import net.minecraft.client.resources.data.IMetadataSection import net.minecraft.client.resources.data.IMetadataSerializer import net.minecraft.client.resources.data.PackMetadataSection -import net.minecraft.util.ChatComponentText import net.minecraft.util.ResourceLocation +import net.minecraft.util.text.TextComponentString import net.minecraftforge.fml.client.FMLClientHandler import java.io.InputStream import java.util.* @@ -28,7 +28,7 @@ class GeneratorPack(val name: String, vararg val generators: GeneratorBase) : IR override fun getPackImage() = null override fun getResourceDomains() = HashSet(generators.map { it.domain }) override fun getPackMetadata(serializer: IMetadataSerializer?, type: String?) = - if (type == "pack") PackMetadataSection(ChatComponentText("Generated resources"), 1) as? T else null + if (type == "pack") PackMetadataSection(TextComponentString("Generated resources"), 1) as? T else null override fun resourceExists(location: ResourceLocation?): Boolean = if (location == null) false diff --git a/src/main/kotlin/mods/octarinecore/client/resource/ResourceHandler.kt b/src/main/kotlin/mods/octarinecore/client/resource/ResourceHandler.kt index ffb5a3d..c3655b9 100644 --- a/src/main/kotlin/mods/octarinecore/client/resource/ResourceHandler.kt +++ b/src/main/kotlin/mods/octarinecore/client/resource/ResourceHandler.kt @@ -5,16 +5,15 @@ import mods.octarinecore.common.Double3 import mods.octarinecore.common.Int3 import net.minecraft.client.renderer.texture.TextureAtlasSprite import net.minecraft.client.renderer.texture.TextureMap -import net.minecraft.util.BlockPos -import net.minecraft.util.MathHelper import net.minecraft.util.ResourceLocation +import net.minecraft.util.math.BlockPos +import net.minecraft.util.math.MathHelper import net.minecraft.world.World import net.minecraft.world.gen.NoiseGeneratorSimplex import net.minecraftforge.client.event.TextureStitchEvent import net.minecraftforge.common.MinecraftForge import net.minecraftforge.event.world.WorldEvent import net.minecraftforge.fml.client.event.ConfigChangedEvent -import net.minecraftforge.fml.common.FMLCommonHandler import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import java.util.* diff --git a/src/main/kotlin/mods/octarinecore/common/Geometry.kt b/src/main/kotlin/mods/octarinecore/common/Geometry.kt index 9afc975..aa8af71 100644 --- a/src/main/kotlin/mods/octarinecore/common/Geometry.kt +++ b/src/main/kotlin/mods/octarinecore/common/Geometry.kt @@ -1,11 +1,12 @@ package mods.octarinecore.common import mods.octarinecore.cross -import net.minecraft.util.BlockPos import net.minecraft.util.EnumFacing import net.minecraft.util.EnumFacing.* import net.minecraft.util.EnumFacing.Axis.* -import net.minecraft.util.EnumFacing.AxisDirection.* +import net.minecraft.util.EnumFacing.AxisDirection.NEGATIVE +import net.minecraft.util.EnumFacing.AxisDirection.POSITIVE +import net.minecraft.util.math.BlockPos // ================================ // Axes and directions diff --git a/src/main/resources/META-INF/BetterFoliage_at.cfg b/src/main/resources/META-INF/BetterFoliage_at.cfg index 270d96f..a4f00d3 100644 --- a/src/main/resources/META-INF/BetterFoliage_at.cfg +++ b/src/main/resources/META-INF/BetterFoliage_at.cfg @@ -2,10 +2,12 @@ public net.minecraft.client.renderer.BlockModelRenderer$AmbientOcclusionFace public net.minecraft.client.renderer.BlockModelRenderer$AmbientOcclusionFace field_178206_b # vertexColorMultiplier public net.minecraft.client.renderer.BlockModelRenderer$AmbientOcclusionFace field_178207_c # vertexBrightness -public net.minecraft.client.resources.model.ModelBakery field_177610_k # blockModelShapes +public net.minecraft.client.renderer.block.model.ModelBakery field_177610_k # blockModelShapes public net.minecraft.client.renderer.block.statemap.BlockStateMapper field_178450_a # blockStateMap -public net.minecraft.client.renderer.WorldRenderer field_178999_b # rawIntBuffer -public net.minecraft.client.renderer.WorldRenderer func_181670_b(I)V # growBuffer -public net.minecraft.client.renderer.WorldRenderer func_181664_j()I # getBufferSize \ No newline at end of file +public net.minecraft.client.renderer.VertexBuffer field_178999_b # rawIntBuffer +public net.minecraft.client.renderer.VertexBuffer func_181670_b(I)V # growBuffer +public net.minecraft.client.renderer.VertexBuffer func_181664_j()I # getBufferSize + +public net.minecraft.client.renderer.BlockModelRenderer field_187499_a # blockColors \ No newline at end of file diff --git a/src/main/resources/assets/betterfoliage/LeavesDefault.cfg b/src/main/resources/assets/betterfoliage/LeavesDefault.cfg index 3dbacee..70d8e10 100644 --- a/src/main/resources/assets/betterfoliage/LeavesDefault.cfg +++ b/src/main/resources/assets/betterfoliage/LeavesDefault.cfg @@ -1,5 +1,5 @@ // Vanilla -net.minecraft.block.BlockLeavesBase +net.minecraft.block.BlockLeaves // Forestry forestry.arboriculture.gadgets.BlockLeaves