Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Using setBlock with a stair BlockState places its full-block version instead of the stair version.


Recommended Posts

To get the blockstate of the stair, I am just using .get() and then .defaultBlockState()

BlockState blockstate = BlockInit.BLUE_STAIR.get().defaultBlockState();

I did hear about a method that does give you the full-block version of a stair blockstate, but I do not believe I am using that method.

Link to comment
Share on other sites

			if (item.is(ItemInit.BLUE_PAINTBRUSH.get())) {
				p_60506_.swing(p_60507_);
				BlockState blockstate = BlockInit.BLUE_STAIR.get().defaultBlockState();
				PaintStair(p_60503_, p_60504_, p_60505_, blockstate, p_60506_);
			}

heres the PaintStair method I made:
 

	static void PaintStair (BlockState p_60503_, Level p_60504_, BlockPos p_60505_, BlockState blockstate, Player p_60506_) {
		p_60504_.setBlock(p_60505_, blockstate, blockstate.getHarvestLevel()); 
	}

and here is the stair in BlockInit
 

	public static final RegistryObject<wallpaperstairs> BLUE_STAIR = BLOCKS.register("blue_stair", () -> 
	new wallpaperstairs(BlockInit.WALLPAPER_BLOCK.get().defaultBlockState(), Block.Properties.copy(BlockInit.WALLPAPER_BLOCK.get())));

 

Link to comment
Share on other sites

Posted (edited)

i think it might be a problem with how im creating the block
 

	// blue
	public static final RegistryObject<wallpaperstairs> BLUE_STAIR = BLOCKS.register("blue_stair", () -> 
	new wallpaperstairs(BlockInit.WALLPAPER_BLOCK.get().defaultBlockState(), Block.Properties.copy(BlockInit.WALLPAPER_BLOCK.get())));

however when i change the BlockInit.WALLPAPER_BLOCK to WALLPAPER_STAIR (which is a stair block, the one that is supposed to change into the blue stair) it does the same thing
(heres the wallpaper stair)
 

	public static final RegistryObject<wallpaperstairs> WALLPAPER_STAIR = BLOCKS.register("wallpaper_stair", () -> 
	new wallpaperstairs(BlockInit.WALLPAPER_BLOCK.get().defaultBlockState(), Block.Properties.copy(BlockInit.WALLPAPER_BLOCK.get())));

 

Edited by orangejuice21314
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • The issue Updating from 1.16.5 to 1.17.1, a problem with the availability of the Kotlin stdlib at runtime emerged. Up until now, the following build script setup worked without issue (same thing, just different versions specified): Getting the Kotlin Gradle plugin and applying it buildscript { repositories { maven { url = 'https://maven.minecraftforge.net' } mavenCentral() } dependencies { classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // Kotlin version: 1.6.0 } } apply plugin: 'net.minecraftforge.gradle' apply plugin: 'kotlin' // Some other things java.toolchain.languageVersion = JavaLanguageVersion.of(16) // This is new Including the Standard Library as a dependency (actually unnecessary) dependencies { minecraft "net.minecraftforge:forge:1.17.1-37.0.126" // Used to call for a Forge version for 1.16.5 implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" // This being jdk8 is not an issue // JEI would be here too } Packaging the Standard Library into the jar jar { dependsOn(classes) duplicatesStrategy(DuplicatesStrategy.INCLUDE) // Manifest here configurations { kotlinstdlib } dependencies { kotlinstdlib "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" } from { configurations.kotlinstdlib.collect() { it.isDirectory() ? it : zipTree(it) } } } Setting the Kotlin JVM target version to 16 (used to be 1.8) def kotlinCompilerArgs = ["-Xopt-in=kotlin.RequiresOptIn", "-Xjvm-default=all"] compileKotlin { kotlinOptions { jvmTarget = "16" freeCompilerArgs += kotlinCompilerArgs } } compileTestKotlin { kotlinOptions { jvmTarget = "16" freeCompilerArgs += kotlinCompilerArgs } } This still compiles the project correctly, running it however throws the following exception as soon as the mod annotated class gets loaded (when a Logger instance is requested to be more specific, probably does a null check under the hood - because Kotlin): java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics This class is part of the kotlin-stdlib-1.6.0.jar file. (Not kotlin-stdlib-jdk8-1.6.0.jar) It shows up under "External Libraries", but appears to be missing at runtime for the workspace. Running 'build' outputs a jar that gets loaded correctly though, so the problem only appears when running in IDE using 'runClient'. JEI does seem to get loaded though, only the Kotlin Standard Library does not. Versions Gradle - 7.2 ForgeGradle - 5.1.X Java for building: 11 (1.8 when testing on a different computer) Java for compiling and running: 16 Kotlin: 1.6.0 Minecraft: 1.17.1 Forge: 37.0.126 (Currently latest) IDE is IntelliJ What I already tried Using kotlin-stdlib instead of kotlin-stdlib-jdk8 Setting the Java version to 16 for the 1.16.5 version of the project (worked, but not the goal) Using a different PC (different caches, same output) Running the 'clean' task Using 'api, 'compileOnly' and 'runtimeOnly' in the dependencies block instead of 'implementation'. Applying the Kotlin plugin using the plugins block Creating a raw Kotlin project with JVM 16 target (not Forge; worked) Creating a raw Forge mod project using the Forge MDK, adding the Kotlin plugin to it, and converting the ExampleMod class to Kotlin (failed with same output) Removing the implementation line for the Standard Library in both the 1.16.5 version and the 1.17.1 (the 1.17.1 version failed, the 1.16.5 version ran successfully, which means that this line does not have any effect) This abomination compileOnly "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" runtimeOnly fg.deobf("org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version") runtimeOnly fg.deobf("org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version") runtimeOnly fg.deobf("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version") runtimeOnly fg.deobf("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version") Combinations of the things mentioned above. My guess As this problem only appears with a difference in the build script of the mappings and Forge version, the only thing I guess would be left is Forge having an issue itself. I do not know how Forge loads mods and libraries in the development environment, I have checked what System.getenv("CLASSPATH") outputs using a breakpoint, and it returned null. It is remapping and including JEI correctly though, so it confuses me why the Kotlin Standard Library would not be present. This makes me a bit unsure whether it is Forge's fault, but again, the only real change I did for the build script was changing the mappings and Forge version (and adding the Java 16 line, but I have already checked doing that for 1.16.5). It is also not an incompatibility between Java versions because building a mod jar and running Minecraft Forge 1.17.1 with it normally (outside of IDE) works. Are there any workarounds/fixes for this? Of course, any help much appreciated!
    • can you run a 1.16 example mod on that setup? for 1.17 (which you are trying to start), you will need a parallel setup with java 16.
    • As always I'd return to conclude my inquiries, if successful. To solve my issue, I just had to create a custom screen, extend any "furnace" type screen to access the recipe book functions(AbstractFurnaceScreen actually turned out to be quite a hassle, so I moved on using FurnaceScreen). To implement the recipe book button into my "ContainerScreenCampfire", I just mimicked and adjusted the client code found in AbstractFurnaceScreen, and then I had to do the following code, to close the screen, and press the right mouse button to simulate returning to the original campfire screen, instead of the furnace screen: What's left to do is importing all the client particle, and server side burn time logic functions etc., from my original campfire. But this should be pretty straight forward.
    • Look at the stacktrace. Probably because you set its underlying field to null.
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.