• Recently Browsing

    No registered users viewing this page.

  • Posts

    • package net.minecraft.block; import java.util.Random; import javax.annotation.Nullable; import net.minecraft.block.material.Material; 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.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.stats.StatList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.IStringSerializable; import net.minecraft.util.NonNullList; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockDoublePlant extends BlockBush implements IGrowable, net.minecraftforge.common.IShearable { public static final PropertyEnum<BlockDoublePlant.EnumPlantType> VARIANT = PropertyEnum.<BlockDoublePlant.EnumPlantType>create("variant", BlockDoublePlant.EnumPlantType.class); public static final PropertyEnum<BlockDoublePlant.EnumBlockHalf> HALF = PropertyEnum.<BlockDoublePlant.EnumBlockHalf>create("half", BlockDoublePlant.EnumBlockHalf.class); public static final PropertyEnum<EnumFacing> FACING = BlockHorizontal.FACING; public BlockDoublePlant() { super(Material.VINE); this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockDoublePlant.EnumPlantType.SUNFLOWER).withProperty(HALF, BlockDoublePlant.EnumBlockHalf.LOWER).withProperty(FACING, EnumFacing.NORTH)); this.setHardness(0.0F); this.setSoundType(SoundType.PLANT); this.setUnlocalizedName("doublePlant"); } public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { return FULL_BLOCK_AABB; } private BlockDoublePlant.EnumPlantType getType(IBlockAccess blockAccess, BlockPos pos, IBlockState state) { if (state.getBlock() == this) { state = state.getActualState(blockAccess, pos); return (BlockDoublePlant.EnumPlantType)state.getValue(VARIANT); } else { return BlockDoublePlant.EnumPlantType.FERN; } } /** * Checks if this block can be placed exactly at the given position. */ public boolean canPlaceBlockAt(World worldIn, BlockPos pos) { return super.canPlaceBlockAt(worldIn, pos) && worldIn.isAirBlock(pos.up()); } /** * Whether this Block can be replaced directly by other blocks (true for e.g. tall grass) */ public boolean isReplaceable(IBlockAccess worldIn, BlockPos pos) { IBlockState iblockstate = worldIn.getBlockState(pos); if (iblockstate.getBlock() != this) { return true; } else { BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = (BlockDoublePlant.EnumPlantType)iblockstate.getActualState(worldIn, pos).getValue(VARIANT); return blockdoubleplant$enumplanttype == BlockDoublePlant.EnumPlantType.FERN || blockdoubleplant$enumplanttype == BlockDoublePlant.EnumPlantType.GRASS; } } protected void checkAndDropBlock(World worldIn, BlockPos pos, IBlockState state) { if (!this.canBlockStay(worldIn, pos, state)) { boolean flag = state.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER; BlockPos blockpos = flag ? pos : pos.up(); BlockPos blockpos1 = flag ? pos.down() : pos; Block block = (Block)(flag ? this : worldIn.getBlockState(blockpos).getBlock()); Block block1 = (Block)(flag ? worldIn.getBlockState(blockpos1).getBlock() : this); if (!flag) this.dropBlockAsItem(worldIn, pos, state, 0); //Forge move above the setting to air. if (block == this) { worldIn.setBlockState(blockpos, Blocks.AIR.getDefaultState(), 2); } if (block1 == this) { worldIn.setBlockState(blockpos1, Blocks.AIR.getDefaultState(), 3); } } } public boolean canBlockStay(World worldIn, BlockPos pos, IBlockState state) { if (state.getBlock() != this) return super.canBlockStay(worldIn, pos, state); //Forge: This function is called during world gen and placement, before this block is set, so if we are not 'here' then assume it's the pre-check. if (state.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER) { return worldIn.getBlockState(pos.down()).getBlock() == this; } else { IBlockState iblockstate = worldIn.getBlockState(pos.up()); return iblockstate.getBlock() == this && super.canBlockStay(worldIn, pos, iblockstate); } } /** * Get the Item that this Block should drop when harvested. */ public Item getItemDropped(IBlockState state, Random rand, int fortune) { if (state.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER) { return Items.AIR; } else { BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = (BlockDoublePlant.EnumPlantType)state.getValue(VARIANT); if (blockdoubleplant$enumplanttype == BlockDoublePlant.EnumPlantType.FERN) { return Items.AIR; } else if (blockdoubleplant$enumplanttype == BlockDoublePlant.EnumPlantType.GRASS) { return rand.nextInt(8) == 0 ? Items.WHEAT_SEEDS : Items.AIR; } else { return super.getItemDropped(state, rand, fortune); } } } /** * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It * returns the metadata of the dropped item based on the old metadata of the block. */ public int damageDropped(IBlockState state) { return state.getValue(HALF) != BlockDoublePlant.EnumBlockHalf.UPPER && state.getValue(VARIANT) != BlockDoublePlant.EnumPlantType.GRASS ? ((BlockDoublePlant.EnumPlantType)state.getValue(VARIANT)).getMeta() : 0; } public void placeAt(World worldIn, BlockPos lowerPos, BlockDoublePlant.EnumPlantType variant, int flags) { worldIn.setBlockState(lowerPos, this.getDefaultState().withProperty(HALF, BlockDoublePlant.EnumBlockHalf.LOWER).withProperty(VARIANT, variant), flags); worldIn.setBlockState(lowerPos.up(), this.getDefaultState().withProperty(HALF, BlockDoublePlant.EnumBlockHalf.UPPER), flags); } /** * Called by ItemBlocks after a block is set in the world, to allow post-place logic */ public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) { worldIn.setBlockState(pos.up(), this.getDefaultState().withProperty(HALF, BlockDoublePlant.EnumBlockHalf.UPPER), 2); } /** * Spawns the block's drops in the world. By the time this is called the Block has possibly been set to air via * Block.removedByPlayer */ public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack stack) { { super.harvestBlock(worldIn, player, pos, state, te, stack); } } /** * Called before the Block is set to air in the world. Called regardless of if the player's tool can actually * collect this block */ public void onBlockHarvested(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player) { if (state.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER) { if (worldIn.getBlockState(pos.down()).getBlock() == this) { if (player.capabilities.isCreativeMode) { worldIn.setBlockToAir(pos.down()); } else { IBlockState iblockstate = worldIn.getBlockState(pos.down()); BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = (BlockDoublePlant.EnumPlantType)iblockstate.getValue(VARIANT); if (blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.FERN && blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.GRASS) { worldIn.destroyBlock(pos.down(), true); } else if (worldIn.isRemote) { worldIn.setBlockToAir(pos.down()); } else if (!player.getHeldItemMainhand().isEmpty() && player.getHeldItemMainhand().getItem() == Items.SHEARS) { this.onHarvest(worldIn, pos, iblockstate, player); worldIn.setBlockToAir(pos.down()); } else { worldIn.destroyBlock(pos.down(), true); } } } } else if (worldIn.getBlockState(pos.up()).getBlock() == this) { worldIn.setBlockState(pos.up(), Blocks.AIR.getDefaultState(), 2); } super.onBlockHarvested(worldIn, pos, state, player); } private boolean onHarvest(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player) { BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = (BlockDoublePlant.EnumPlantType)state.getValue(VARIANT); if (blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.FERN && blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.GRASS) { return false; } else { player.addStat(StatList.getBlockStats(this)); return true; } } /** * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) */ public void getSubBlocks(CreativeTabs itemIn, NonNullList<ItemStack> items) { for (BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype : BlockDoublePlant.EnumPlantType.values()) { items.add(new ItemStack(this, 1, blockdoubleplant$enumplanttype.getMeta())); } } public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) { return new ItemStack(this, 1, this.getType(worldIn, pos, state).getMeta()); } /** * Whether this IGrowable can grow */ public boolean canGrow(World worldIn, BlockPos pos, IBlockState state, boolean isClient) { BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = this.getType(worldIn, pos, state); return blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.GRASS && blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.FERN; } public boolean canUseBonemeal(World worldIn, Random rand, BlockPos pos, IBlockState state) { return true; } public void grow(World worldIn, Random rand, BlockPos pos, IBlockState state) { spawnAsEntity(worldIn, pos, new ItemStack(this, 1, this.getType(worldIn, pos, state).getMeta())); } /** * Convert the given metadata into a BlockState for this Block */ public IBlockState getStateFromMeta(int meta) { return (meta & 8) > 0 ? this.getDefaultState().withProperty(HALF, BlockDoublePlant.EnumBlockHalf.UPPER) : this.getDefaultState().withProperty(HALF, BlockDoublePlant.EnumBlockHalf.LOWER).withProperty(VARIANT, BlockDoublePlant.EnumPlantType.byMetadata(meta & 7)); } /** * Get the actual Block state of this Block at the given position. This applies properties not visible in the * metadata, such as fence connections. */ public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) { if (state.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER) { IBlockState iblockstate = worldIn.getBlockState(pos.down()); if (iblockstate.getBlock() == this) { state = state.withProperty(VARIANT, iblockstate.getValue(VARIANT)); } } return state; } /** * Convert the BlockState into the correct metadata value */ public int getMetaFromState(IBlockState state) { return state.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER ? 8 | ((EnumFacing)state.getValue(FACING)).getHorizontalIndex() : ((BlockDoublePlant.EnumPlantType)state.getValue(VARIANT)).getMeta(); } protected BlockStateContainer createBlockState() { return new BlockStateContainer(this, new IProperty[] {HALF, VARIANT, FACING}); } /** * Get the OffsetType for this Block. Determines if the model is rendered slightly offset. */ public Block.EnumOffsetType getOffsetType() { return Block.EnumOffsetType.XZ; } @Override public boolean isShearable(ItemStack item, IBlockAccess world, BlockPos pos) { IBlockState state = world.getBlockState(pos); EnumPlantType type = (EnumPlantType)state.getValue(VARIANT); return state.getValue(HALF) == EnumBlockHalf.LOWER && (type == EnumPlantType.FERN || type == EnumPlantType.GRASS); } @Override public java.util.List<ItemStack> onSheared(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) { java.util.List<ItemStack> ret = new java.util.ArrayList<ItemStack>(); EnumPlantType type = (EnumPlantType)world.getBlockState(pos).getValue(VARIANT); if (type == EnumPlantType.FERN) ret.add(new ItemStack(Blocks.TALLGRASS, 2, BlockTallGrass.EnumType.FERN.getMeta())); if (type == EnumPlantType.GRASS) ret.add(new ItemStack(Blocks.TALLGRASS, 2, BlockTallGrass.EnumType.GRASS.getMeta())); return ret; } public static enum EnumBlockHalf implements IStringSerializable { UPPER, LOWER; public String toString() { return this.getName(); } public String getName() { return this == UPPER ? "upper" : "lower"; } } public static enum EnumPlantType implements IStringSerializable { SUNFLOWER(0, "sunflower"), SYRINGA(1, "syringa"), GRASS(2, "double_grass", "grass"), FERN(3, "double_fern", "fern"), ROSE(4, "double_rose", "rose"), PAEONIA(5, "paeonia"); private static final BlockDoublePlant.EnumPlantType[] META_LOOKUP = new BlockDoublePlant.EnumPlantType[values().length]; private final int meta; private final String name; private final String unlocalizedName; private EnumPlantType(int meta, String name) { this(meta, name, name); } private EnumPlantType(int meta, String name, String unlocalizedName) { this.meta = meta; this.name = name; this.unlocalizedName = unlocalizedName; } public int getMeta() { return this.meta; } public String toString() { return this.name; } public static BlockDoublePlant.EnumPlantType byMetadata(int meta) { if (meta < 0 || meta >= META_LOOKUP.length) { meta = 0; } return META_LOOKUP[meta]; } public String getName() { return this.name; } public String getUnlocalizedName() { return this.unlocalizedName; } static { for (BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype : values()) { META_LOOKUP[blockdoubleplant$enumplanttype.getMeta()] = blockdoubleplant$enumplanttype; } } } } Well, I can only find this.
    • You appear to be using a 1.14 version of Neat on 1.15.2, try removing it
    • Well... significant progress. I think the moral of the story here is that one should not try and do a Blender custom model unless they actually put the texture in first, and then align it using the steps I had in my previous post so that its correctly laid out. Seems the UV orientation is contained in the OBJ data. Unfortunately OBJ syntax feels more like machine code rather than meant-for-a-human-to-write-manually, so I couldn't begin to guess at the differences. It also appears, as can be seen in my screenshot below, that stairs are literally upside-down blocks, which is why the texture is likewise also upside-down, hence the lines in the oak planks texture not lining up. So it appears I'll need an additional model just for that variant, since the model determines the UV orientation, and that determines the orientation of the textures.   And my MTL file, fyi, is still just this simple, so it could point at any existing texture. I wanted to make sure I did it this way so that texture packs that replace vanilla textures would automatically apply here as well. # Blender MTL File: 'fortyfive.blend' # Material Count: 1 newmtl fortyfive map_Kd minecraft:block/oak_planks   Unfortunately unless I can figure out how to assign the actual texture image file to the model dynamically in the Java code, I think I'm going to abort much more work on this mod attempt. I wanted to introduce diagonal blocks of all applicable material types (stone, quartz, etc) but I haven't found any examples where this has been done. The model would stay the same, but the image used for the texture would be changed. I'm not excited about making several hundred JSON -> OBJ -> MTL file sets just to accomplish that. Seems like there should be a simpler way of using the same JSON -> OBJ file chain and assigning the MTL within Java instead of a static file.    
    • Ugh. Don't remind me. I've spent the better part of that six months not doing anything because of a hard dependency that I'm both unwilling to abandon and unable to get updated. Worldgen is complicated.
    • The game crashes when a new world generation reaches 100%.     ---- Minecraft Crash Report ---- // I bet Cylons wouldn't have this problem. Time: 3/28/20 10:55 PM Description: Unexpected error java.lang.NoClassDefFoundError: net/minecraft/client/renderer/culling/Frustum     at vazkii.neat.HealthBarRenderer.onRenderWorldLast(HealthBarRenderer.java:52) ~[?:1.5-19] {re:classloading}     at net.minecraftforge.eventbus.ASMEventHandler_591_HealthBarRenderer_onRenderWorldLast_RenderWorldLastEvent.invoke(.dynamic) ~[?:?] {}     at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:80) ~[eventbus-2.0.0-milestone.1-service.jar:?] {}     at net.minecraftforge.eventbus.EventBus.post(EventBus.java:258) ~[eventbus-2.0.0-milestone.1-service.jar:?] {}     at net.minecraftforge.client.ForgeHooksClient.dispatchRenderLast(ForgeHooksClient.java:184) ~[?:?] {re:classloading}     at net.minecraft.client.renderer.GameRenderer.func_228378_a_(GameRenderer.java:602) ~[?:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at net.minecraft.client.renderer.GameRenderer.func_195458_a(GameRenderer.java:422) ~[?:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.func_195542_b(Minecraft.java:925) [?:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:554) [?:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at net.minecraft.client.main.Main.main(SourceFile:204) [?:?] {re:classloading}     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_51] {}     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_51] {}     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_51] {}     at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_51] {}     at net.minecraftforge.fml.loading.FMLClientLaunchProvider.lambda$launchService$0(FMLClientLaunchProvider.java:56) [forge-1.15.2-31.1.30.jar:31.1] {}     at net.minecraftforge.fml.loading.FMLClientLaunchProvider$$Lambda$412/826245889.call(Unknown Source) [forge-1.15.2-31.1.30.jar:31.1] {}     at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:37) [modlauncher-5.0.0-milestone.4.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) [modlauncher-5.0.0-milestone.4.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:72) [modlauncher-5.0.0-milestone.4.jar:?] {}     at cpw.mods.modlauncher.Launcher.run(Launcher.java:81) [modlauncher-5.0.0-milestone.4.jar:?] {}     at cpw.mods.modlauncher.Launcher.main(Launcher.java:65) [modlauncher-5.0.0-milestone.4.jar:?] {} Caused by: java.lang.ClassNotFoundException: net.minecraft.client.renderer.culling.Frustum     at java.lang.ClassLoader.findClass(ClassLoader.java:530) ~[?:1.8.0_51] {}     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_51] {}     at cpw.mods.modlauncher.TransformingClassLoader.loadClass(TransformingClassLoader.java:101) ~[modlauncher-5.0.0-milestone.4.jar:?] {}     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_51] {}     ... 21 more A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Render thread Stacktrace:     at vazkii.neat.HealthBarRenderer.onRenderWorldLast(HealthBarRenderer.java:52)     at net.minecraftforge.eventbus.ASMEventHandler_591_HealthBarRenderer_onRenderWorldLast_RenderWorldLastEvent.invoke(.dynamic)     at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:80)     at net.minecraftforge.eventbus.EventBus.post(EventBus.java:258)     at net.minecraftforge.client.ForgeHooksClient.dispatchRenderLast(ForgeHooksClient.java:184)     at net.minecraft.client.renderer.GameRenderer.func_228378_a_(GameRenderer.java:602) -- Affected level -- Details:     All players: 1 total; [ClientPlayerEntity['LordMeowth'/261, l='MpServer', x=-181.50, y=71.00, z=182.50]]     Chunk stats: Client Chunk Cache: 625, 400     Level dimension: DimensionType{minecraft:overworld}     Level name: MpServer     Level seed: -8669464551057230345     Level generator: ID 07 - biomesoplenty, ver 0. Features enabled: false     Level generator options: {}     Level spawn location: World: (-176,69,192), Chunk: (at 0,4,0 in -11,12; contains blocks -176,0,192 to -161,255,207), Region: (-1,0; contains chunks -32,0 to -1,31, blocks -512,0,0 to -1,255,511)     Level time: 43 game time, 43 day time     Known server brands:      Level was modded: false     Level storage version: 0x00000 - Unknown?     Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false)     Level game mode: Game mode: survival (ID 0). Hardcore: false. Cheats: false     Server brand: forge     Server type: Integrated singleplayer server Stacktrace:     at net.minecraft.client.world.ClientWorld.func_72914_a(ClientWorld.java:442)     at net.minecraft.client.Minecraft.func_71396_d(Minecraft.java:1764)     at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:573)     at net.minecraft.client.main.Main.main(SourceFile:204)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     at java.lang.reflect.Method.invoke(Method.java:497)     at net.minecraftforge.fml.loading.FMLClientLaunchProvider.lambda$launchService$0(FMLClientLaunchProvider.java:56)     at net.minecraftforge.fml.loading.FMLClientLaunchProvider$$Lambda$412/826245889.call(Unknown Source)     at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:37)     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54)     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:72)     at cpw.mods.modlauncher.Launcher.run(Launcher.java:81)     at cpw.mods.modlauncher.Launcher.main(Launcher.java:65) -- System Details -- Details:     Minecraft Version: 1.15.2     Minecraft Version ID: 1.15.2     Operating System: Windows 10 (amd64) version 10.0     Java Version: 1.8.0_51, Oracle Corporation     Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation     Memory: 2619564616 bytes (2498 MB) / 5227151360 bytes (4985 MB) up to 10422845440 bytes (9940 MB)     CPUs: 16     JVM Flags: 5 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xss1M -Xmx11181m -Xms256m -XX:PermSize=256m     ModLauncher: 5.0.0-milestone.4+67+b1a340b     ModLauncher launch target: fmlclient     ModLauncher naming: srg     ModLauncher services:          /eventbus-2.0.0-milestone.1-service.jar eventbus PLUGINSERVICE          /forge-1.15.2-31.1.30.jar object_holder_definalize PLUGINSERVICE          /forge-1.15.2-31.1.30.jar runtime_enum_extender PLUGINSERVICE          /accesstransformers-2.0.4-shadowed.jar accesstransformer PLUGINSERVICE          /forge-1.15.2-31.1.30.jar capability_inject_definalize PLUGINSERVICE          /forge-1.15.2-31.1.30.jar runtimedistcleaner PLUGINSERVICE          /forge-1.15.2-31.1.30.jar fml TRANSFORMATIONSERVICE      FML: 31.1     Forge: net.minecraftforge:31.1.30     FML Language Providers:          javafml@31.1         minecraft@1     Mod List:          QuarkOddities-1.15.2.jar Quark Oddities {quarkoddities@1.15.2 DONE}         TrashSlot_1.15.2-11.0.0.jar TrashSlot {trashslot@11.0.0 DONE}         torchslabmod-1.15.1_v1.5.jar Torch Slab Mod {torchslabmod@1.5.0 DONE}         NetherPortalFix_1.15.2-6.0.0.jar NetherPortalFix {netherportalfix@6.0.0 DONE}         item-filters-2.2.0.14.jar Item Filters {itemfilters@2.2.0.14 DONE}         jei-1.15.2-6.0.0.2.jar Just Enough Items {jei@6.0.0.2 DONE}         JustEnoughCalculation-1.15.2-3.6.1.jar Just Enough Calculation {jecalculation@3.6.1 DONE}         DoggyTalents-1.15.2-1.15.2.3.jar Doggy Talents {doggytalents@1.15.2.3 DONE}         caelus-FORGE-1.15.2-2.0-beta1.jar Caelus API {caelus@FORGE-1.15.2-2.0-beta1 DONE}         colytra-FORGE-1.15.2-3.0.jar Colytra {colytra@FORGE-1.15.2-3.0 DONE}         Neat 1.5-19.jar Neat {neat@1.5-19 DONE}         Waystones_1.15.2-6.0.1.jar Waystones {waystones@6.0.1 DONE}         ForgeEndertech-1.15.2-6.0.1.0-build.0011.jar Forge Endertech {forgeendertech@6.0.1.0 DONE}         AdFinders-1.15.2-4.0.2.0-build.0012.jar Advanced Finders {adfinders@4.0.2.0 DONE}         Clumps-5.0.2.jar Clumps {clumps@5.0.2 DONE}         JRFTL [1.15.2]-1.1.jar JRFTL {jrftl@1.1 DONE}         journeymap-1.15.2-5.7.0beta1.jar Journeymap {journeymap@1.15.2-5.7.0beta1 DONE}         CookingForBlockheads_1.15.2-8.0.1.jar Cooking for Blockheads {cookingforblockheads@8.0.1 DONE}         Placebo-1.15.2-3.0.2.jar Placebo {placebo@3.0.2 DONE}         comforts-FORGE-1.15.2-2.0.jar Comforts {comforts@FORGE-1.15.2-2.0 DONE}         NaturesCompass-1.15.2-1.8.5.jar Nature's Compass {naturescompass@1.15.2-1.8.5 DONE}         good-nights-sleep-1.15.2-1.0.3.jar Good Night's Sleep {goodnightsleep@1.0.3 DONE}         SimpleStorageNetwork-1.15.2-0.3.1.jar Simple Storage Network {storagenetwork@1.15.2-0.3.1 DONE}         SereneSeasons-1.15.2-3.0.0.68-universal.jar Serene Seasons {sereneseasons@1.15.2-3.0.0.68 DONE}         NomadicTents-1.15.2-11.0.0-beta.jar Nomadic Tents {nomadictents@11.0.0-beta DONE}         WitherSkeletonTweaks-1.15.1-4.0.0.jar Wither Skeleton Tweaks {wstweaks@4.0.0 DONE}         FarmingForBlockheads_1.15.2-6.1.0.jar Farming for Blockheads {farmingforblockheads@6.1.0 DONE}         Bookshelf-1.15.2-5.3.9.jar Bookshelf {bookshelf@5.3.9 DONE}         u_team_core-1.15.2-2.11.0.156.jar U Team Core {uteamcore@2.11.0.156 DONE}         mcjtylib-1.15-4.0.3-alpha.jar McJtyLib {mcjtylib@1.15-4.0.3-alpha DONE}         rftoolsbase-1.15-1.0.1-alpha.jar RFToolsBase {rftoolsbase@1.15-1.0.1-alpha DONE}         xnet-1.15-2.0.2-alpha.jar XNet {xnet@1.15-2.0.2-alpha DONE}         DarkUtilities-1.15.2-3.0.2.jar Dark Utilities {darkutils@3.0.2 DONE}         Waddles-1.15.2-0.8.5.jar Waddles {waddles@1.15.2-0.8.5 DONE}         Morpheus-1.15.2-4.2.50.jar Morpheus {morpheus@version DONE}         Hwyla-forge-1.10.8-B72_1.15.2.jar Waila {waila@version DONE}         speedyhoppers-1.15.2-2.jar Speedy Hoppers {speedyhoppers@1.15.2-2 DONE}         CraftTweaker-1.15.2-6.0.0.9.jar CraftTweaker {crafttweaker@6.0.0.9 DONE}         rftoolspower-1.15-2.0.1-alpha.jar RFToolsPower {rftoolspower@1.15-2.0.1-alpha DONE}         BetterThanMending-1.4.0.jar BetterThanMending {betterthanmending@1.4.0 DONE}         forge-1.15.2-31.1.30-universal.jar Forge {forge@31.1.30 DONE}         ironchest-1.15.2-10.0.3.jar Iron Chests {ironchest@1.15.2-10.0.1 DONE}         CraftingTweaks_1.15.1-11.0.0.jar Crafting Tweaks {craftingtweaks@11.0.0 DONE}         forge-1.15.2-31.1.30-client.jar Minecraft {minecraft@1.15.2 DONE}         mcw-bridges-1.0.4fix-mc1.15.2.jar Macaw's Bridges {mcwbridges@1.0.4 DONE}         industrial-foregoing-1.15.2-2.2.2-28d4a81.jar Industrial Foregoing {industrialforegoing@2.2.2 DONE}         useful_backpacks-1.15.2-1.9.4.63.jar Useful Backpacks {usefulbackpacks@1.9.4.63 DONE}         EnchantmentDescriptions-1.15.2-2.0.5.jar EnchantmentDescriptions {enchdesc@2.0.5 DONE}         titanium-1.15.2-2.3.7.jar Titanium {titanium@2.3.7 DONE}         useful_railroads-1.15.2-1.3.2.21.jar Useful Railroads {usefulrailroads@1.3.2.21 DONE}         BiomesOPlenty-1.15.2-10.0.0.345-universal.jar Biomes O' Plenty {biomesoplenty@1.15.2-10.0.0.342 DONE}         valkyrielib-1.15.2-3.0.2.1.jar ValkyrieLib {valkyrielib@1.15.2-3.0.2.1 DONE}         enviromats-1.15.2-2.0.2.1.jar Environmental Materials {enviromats@1.15.2-2.0.2.1 DONE}         AdLods-1.15.2-3.0.1.0-build.0008.jar Large Ore Deposits {adlods@3.0.1.0 DONE}         Ding-1.15.2-1.1.0.jar Ding {ding@1.1.0 DONE}         astikorcarts-1.0.2-1.15.2.jar AstikorCarts {astikorcarts@1.0.2 DONE}         paintings-1.15.2-7.0.0.0.jar Paintings ++ {paintings@1.14.4-6.0.1.5 DONE}         carrotslib-mc1.15.2-2.5b1.jar Carrots Lib {carrots@2.5.0b1 DONE}         vanillafoodpantry-mc1.15.2-5.5b1.jar Vanilla Food Pantry {vanillafoodpantry@5.5.0b1 DONE}         gravestone-1.17.3.jar Gravestone Mod {gravestone@1.17.3 DONE}         FastWorkbench-1.15.1-3.0.0.jar FastWorkbench {fastbench@3.0.0 DONE}         AutoRegLib-1.5-40.jar AutoRegLib {autoreglib@1.5-40 DONE}         Quark-r2.1-224.jar Quark {quark@r2.1-224 DONE}         StorageDrawers-1.15.2-7.0.2.jar Storage Drawers {storagedrawers@1.15.2-7.0.1 DONE}         OreExcavation-1.7.151.jar Ore Excavation {oreexcavation@NONE DONE}         elevatorid-1.15.2-1.7.0.jar Elevator Mod {elevatorid@1.15.2-1.7.0 DONE}         structurize-0.10.282-RELEASE.jar Structurize {structurize@0.10.282-RELEASE DONE}         minecolonies-0.10.771-RELEASE-universal.jar Minecolonies {minecolonies@0.10.771-RELEASE DONE}         FastFurnace-1.15.1-3.0.0.jar FastFurnace {fastfurnace@3.0.0 DONE}         furniture-7.0.0-pre16-1.15.1.jar MrCrayfish's Furniture Mod {cfm@7.0.0-pre16 DONE}         AppleSkin-mc1.15.2-forge-1.0.13.jar AppleSkin {appleskin@1.0.13 DONE}         engineersdecor-1.15.2-1.0.20-b2.jar Engineer's Decor {engineersdecor@1.0.20-b2 DONE}         RefinedRelocation_1.15.2-7.0.1.jar Refined Relocation {refinedrelocation@7.0.1 DONE}         Aquaculture-1.15.2-2.0.13.jar Aquaculture 2 {aquaculture@1.15.2-2.0.13 DONE}         tramplestopper-1.15.2-2.0.0.1-universal.jar Trample Stopper {tramplestopper@1.15.2-2.0.0.1-universal DONE}         XL-Food-Mod-1.15.2-2.2.2.jar XL Food Mod {xlfoodmod@2.2.2 DONE}         FastLeafDecay-v20.jar FastLeafDecay {fastleafdecay@v20 DONE}         SoundFilters-0.13_for_1.15.2.jar Sound Filters {soundfilters@0.13_for_1.15.2 DONE}         xptome-1.15.1-v1.1.4.jar XP Tome {xpbook@v1.1.4 DONE}         BetterAdvancements-1.15.2-0.1.0.96.jar Better Advancements {betteradvancements@0.1.0.96 DONE}     Launched Version: forge-31.1.30     Backend library: LWJGL version 3.2.2 build 10     Backend API: GeForce RTX 2080/PCIe/SSE2 GL version 4.6.0 NVIDIA 442.59, NVIDIA Corporation     GL Caps: Using framebuffer using OpenGL 3.0     Using VBOs: Yes     Is Modded: Definitely; Client brand changed to 'forge'     Type: Client (map_client.txt)     Resource Packs: vanilla, mod_resources, file/1.15.2-r1.zip     Current Language: English (US)     CPU: 16x Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz
  • Topics

  • Who's Online (See full list)