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

ChickenBones Multipart - [Highly Advanced]


Busti
 Share

Recommended Posts

ChickenBones Multipart is an API / Library by Chickenbones to create multiple Tileentitys inside a single block, so called Parts.

 

Note:

The mod is released under the name 'Forge' Multipart, however, it is NOT official and has no relation to the official Forge project. As such we will refer to it as CBMP in reference to it's author ChickenBones.

 

It also comes with a submod called 'Forge' Microblock (Again, no relation to Forge itself) which adds some parts to, for instance, cover up pipes. Some spotlights can be found on its official Minecraft Forums Topic. [Click Here]

This post will contain all CBMP related tutorials. If you want to make your own just post it as a reply and I am going to add it.

 

CBMP makes use of a programming language called Scala. Please make sure that you have basic knowledge of Scala since almost all of CBMP's code is written in scala.

On of the best tutorials for Scala is this one:

 


There's also a Java implementation of this tutorial by larsgerrits

https://github.com/Larsg310/FMP-Tutorial


Another great tutorial was made by Whov:

http://whov.altervista.org/forge-modding-tutorials/


 

All Tutorials in chronological order:

 

[spoiler=Installing Scala]

[*]Download and Install the latest Scala binaries from: http://www.scala-lang.org/download/

[*]IntelliJ Idea is the better choice because it suggests scala code.

  • Eclipse: (Please note that the scala plugin is not ready for Eclipse Luna yet)

     

    [*]IntelliJ Idea:

    [*]Go to: File / Settings / Plugins and click 'Install JetBrains Plugin...'

    [spoiler=Image]aUXdO.png

     

    [*]Choose "Scala" from the List and Install the plugin.

    [*]Right-click on your project and choose 'Add FrameWork support' from the context menu.

    [*]Select Scala in the list and correct the path for the scala home to where you installed your scala binaries. For me its C://Program File(x86)

     

     

    [*]You should now be able to use scala code and files.

     

     

     

    [spoiler=Adding CBMP to your enviroment]

    [*]Create a /libs folder in your modding enviroment. (Where the build.gradle file is)

    [*]Download the CBMP dev and src .jar from http://files.minecraftforge.net/ForgeMultipart/ and put them into the /libs folder.

    [*]Download the CodeChickenCore and NEI dev and src .jar form http://chickenbones.net/Pages/links.html and put them into the /libs folder.

    [*]Download the CodeChickenLib dev and src .jar from http://files.minecraftforge.net/CodeChickenLib/ and put them into the /libs folder.

    [*]You might want to copy the CodeChickenCore and NEI dev.jar into /eclipse/mods because they don't seem to be compiled in 1.7.10 (Check this yourself)

    [*]Finally link the dev.jar's as Librarys in your Enviroment and attach the sources. (You can simply Import both the same way in almost all IDE's and they will do the rest.)

    You should now be able to use CBMP and NEI. You can test CBMP by placing two torches in a single block.

     

     

     

    [spoiler=Creating your first part]

    It's finally time: After some installation horror we can begin with our first part. This part is just going to be a hitbox half the size of a block in the middle of it but we will later make a pipe out of this.

    You will also be able to place covers on its sides.

     

    For part registration and functionality you will need 3 Basic classes.

    The PartFactory which handles the registration itself, the PartItem you have in your inventory and the Actual part itself.

    Lets begin with the Part factory:    Right-click on the folder you want to have the class in and choose a new scala class / file (not a java class like you normally do) and call it whatever you want... I called mine PartFactory.

    
    
    package com.example.examplemod

    import codechicken.multipart.MultiPartRegistry
    import codechicken.multipart.MultiPartRegistry.IPartFactory

    //This is the actual registration class
    class PartFactory extends IPartFactory {

    //We call this method from our main mod class.
        def init() {
    //Parts are registered by using String maps. Each individual part / subtileEntity has a string like when you register a block.
            MultiPartRegistry.registerParts(this, Array[string](
                "examplePipe"
            ))
        }

    //This method is overridden from IPartFactory and returns a new Part.class matching the assigned string name.
        override def createPart(name: String, client: Boolean) = name match {
            case "examplePipe" => new ExamplePipe

            case _ => null
        }
    }

    //This is the static object used to call the Reg. class
    object PartRegistry extends PartFactory

     

    Next we want to take a look at the PartItem, which is basically a normal item implementing an Interface which makes it place a part in the world when you right-click with it.

    We, again, create a new scala file and call it Items or PartItems because we can use it later for multiple PartItem classes.

    
    
    package com.example.examplemod

    import codechicken.lib.vec.{Vector3, BlockCoord}
    import codechicken.multipart.{TItemMultiPart, MultiPartRegistry}
    import net.minecraft.entity.player.EntityPlayer
    import net.minecraft.item.{ItemStack, Item}
    import net.minecraft.world.World

    //We can add multiple classes like this one in this scala file.
    class ItemPartExamplePipe extends Item with TItemMultiPart {
        def newPart(item:ItemStack, player:EntityPlayer, world:World, pos:BlockCoord, side:Int, vhit:Vector3) = {
    //We create a new part.class and return it. Any modifications (set NBT data in the part by Item NBT) can be made here.
            val w = MultiPartRegistry.createPart("examplePipe", false).asInstanceOf[ExamplePipe]
            w
        }
    }

    Don't forget to register this item like any other item in your mod class.

     

    Last but not least we want to create the Part itself. It is a bit like the combination of a block and a TileEntity and has all methods for Rendering, Hit- / Boundingboxes, Updates, NBT data and many more.

    
    
    package com.example.examplemod

    import codechicken.lib.raytracer.IndexedCuboid6
    import codechicken.lib.vec.Cuboid6
    import codechicken.multipart.{TMultiPart, TNormalOcclusion}

    import scala.collection.JavaConverters._

    class ExamplePipe extends TMultiPart with TNormalOcclusion {
        //We have to return the pipes register name a last time.
        override def getType = "examplePipe"

        //Here we want to generate whatever boxes the Pipe is going to use later. For now it is only a center box but later we want to add sides for every possible connection.
        def generateBoxes = {
            import com.example.examplemod.PipeBoxes._
            var boxes = Seq(oBounds(0))
            boxes
        }

        //Here we return the collision boxes generated in generateBoxes(). We need to convert it to java because this method expects a java iterable not the scala one.
        def generateCollisionBoxes = {
            import mlb.technica.experience.PipeBoxes._
            var boxes = Seq(oBounds(0))
            boxes
        }

        //This method returns any occlusion boxes for the part to check if another part can be placed in the same space as this one.
        override def getOcclusionBoxes = {
            import mlb.technica.experience.PipeBoxes._
            Seq(oBounds(0)).asJava
        }

        //This method is used to return any sub parts that can be broken or clicked by the player to render their outlines. The connections the pipe makes to its sides are such subparts.
        override def getSubParts = {
            val b = generateBoxes
            var i = Seq[indexedCuboid6]()
            for (c <- b) i :+= new IndexedCuboid6(0, c)
            i.asJava
        }

    }

    //This Object stores all the possible boxes.
    object PipeBoxes {
        var oBounds = {
            val boxes = new Array[Cuboid6](1)
            val w = 2/8D
            boxes(0) = new Cuboid6(0.5-w, 0.5-w, 0.5-w, 0.5+w, 0.5+w, 0.5+w)
            boxes
        }
    }

     

    Finally we want to take a look at our examplemod class where everything should be registered.

    
    
    package com.example.examplemod;

    import net.minecraft.init.Blocks;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.EventHandler;
    import cpw.mods.fml.common.event.FMLInitializationEvent;

    @Mod(modid = ExampleMod.MODID, version = ExampleMod.VERSION)
    public class ExampleMod
    {
        public static final String MODID = "examplemod";
        public static final String VERSION = "1.0";
       
    public static Item item_ExamplePipe;

        @EventHandler
        public void init(FMLInitializationEvent event) {
    item_ExamplePipe = new ItemPartExamplePipe().setUnlocalizedName("ExamplePipe").setCreativeTab(someTab);
            PartRegistry.init();
            GameRegistry.registerItem(item_ExamplePipe, "ExamplePipe", MODID);
        }
    }

     

    You should now have a part that does nothing at all...

    Please make sure that there are not any missing Imports I might have forgotten.

     

     

     

    [spoiler=Using multiple Hit / Bounding-boxes]

    Having multiple Hit and Bounding-boxes is important for anything that goes beyond a simple cube. For our pipe we want to have a single bounding box in the middle of the part and six more for every side connection of the pipe. CBMP gives us the possibility to create each box that a part can have individually. (Bounding, Collision and Occlusion)

     

    The Bounding-boxes, which are called SubParts in CBMP, are used to generate boxes the player can interact with. They are also used to render the parts outline which can also be rendered individually.

     

    The Collision-boxes are used for collision testing with Entity's. It determines where you can stand on the part and where you can walk through.

     

    The Occlusion-boxes are used to test if your part collides with another so nothing else can be placed at the position of your part.

     

    The Hollow Cover is a good example for the use of different boxes since it uses a single Collision and Bounding-box but four occlusion boxes to create the hole in the middle.

     

    You can create multiple boxes by adding this simple code to your TMultiPart: (ExamplePipe)

    
    
    class ExamplePipe extends TMultiPart with TNormalOcclusion {
        //We have to return the pipes register name a last time.
        override def getType = "examplePipe"

        //Here we generate the collision boxes.
        def generateCollisionBoxes = {
            import mlb.technica.experience.PipeBoxes._
            var boxes = Seq(oBounds(6))
            for (s <- 0 until 6) boxes :+= oBounds(s)
            boxes
        }

    //Here we want to return the collision boxes generated in generateCollisionBoxes(). We have to convert it to java since it is expected.
    override def getCollisionBoxes = {
            generateCollisionBoxes.asJava
        }

        //This method returns any occlusion boxes for the part to check if another part can be placed in the same space as this one. We will just return the middle box for now as nothing can connect yet.
    //But we already added the structure for multiple boxes.
        override def getOcclusionBoxes = {
            import mlb.technica.experience.PipeBoxes._
            if (false)
            else Seq(oBounds(6)).asJava
        }

        //This method is used to return any sub parts that can be broken or clicked by the player to render their outlines. The connections the pipe makes to its sides are such subparts.
        override def getSubParts = {
            val b = generateCollisionBoxes
            var i = Seq[indexedCuboid6]()
            for (c <- b) i :+= new IndexedCuboid6(0, c)
            i.asJava
        }

    }

    //This Object stores all the possible boxes.
    object PipeBoxes {
        var oBounds = {
            val boxes = new Array[Cuboid6](7)
            val w = 2/8D
            boxes(6) = new Cuboid6(0.5-w, 0.5-w, 0.5-w, 0.5+w, 0.5+w, 0.5+w)
            for (s <- 0 until 6)
                boxes(s) = new Cuboid6(0.5-w, 0, 0.5-w, 0.5+w, 0.5-w, 0.5+w).apply(Rotation.sideRotations(s).at(Vector3.center))
            boxes
        }
    }

     

    This should provide a simple way to add more boxes to the part, by creating arrays of Cuboids. In the next tutorial we want to make them connect automatically.

     

     

     

     

    [spoiler=Rendering]

    CBMP has two main methods to render the part in the world but the bounding-box renderer can also be overridden.

    The part can be rendered using static and dynamic rendering. The static renderer uses the world renderer and only updates every time something in the world changes while the dynamic renderer updates every frame. It can be used for moving things as it also passes the partialTickTime.

     

    First of all we want to take a look at the static renderer.

    When using the static renderer the Tessellator is already running in quad mode and only draws when the world has rendered.

    It can be accessed by overriding the renderStatic method in the part. We also have to return if vertecies were added to the Tessellator.

    
    
    @SideOnly(Side.CLIENT)
        override def renderStatic(pos: Vector3, pass: Int) = {
    TextureUtils.bindAtlas(0) //First of all we want to bind the Block texture atlas just to be super safe...
    /*
    * All of your rendering code can go here but we have to register and use a texture first...
    */
    }

     

    Now that we have the renderer set up we can't simply bind a texture as it would also apply to every other block rendered by the world renderer. But we can register a texture to the main texture atlas where all the block textures are stored. To do so we can simply use the Item we created for the part.

     

    
    
    class ItemPartExamplePipe extends Item with TItemMultiPart {
    val sprites = new Array[iIcon](1) //For some reason it won't let me use a simple IIcon but we can use this for other parts...

        def newPart(item:ItemStack, player:EntityPlayer, world:World, pos:BlockCoord, side:Int, vhit:Vector3) = {
            val w = MultiPartRegistry.createPart("examplemod_examplepipe", false).asInstanceOf[examplepipe]
            w
        }

        @SideOnly(Side.CLIENT)
        override def registerIcons(reg:IIconRegister) {
            sprites(0) = reg.registerIcon("modid:parts/TextureName") //The texture is stored at assets/modid/textures/blocks/parts
        }

        /**
        * Returns 0 for /terrain.png, 1 for /gui/items.png
    * We use it to make the item not register the texture in the item texture atlas.
        */
        @SideOnly(Side.CLIENT)
        override def getSpriteNumber = 0
    }

     

    Now that we have the texture IIcon we can get the textures UV coordinates from it and use it for the tessellator.

    
    
    uMin = sprites(0).getMinU
    uMax = sprites(0).getMaxU
    vMin = sprites(0).getMinV
    vMax = sprites(0).getMaxV

     

    When we want to use the dynamic renderer we just have to start / draw / stop it. We can use the CCRenderState Library to do so. It also has methods for light adjusting and transparency, which might come in handy when you have light problems.

     

    
    
    override def renderDynamic(pos: Vector3, frame: Float, pass: Int): Unit = {
            TextureUtils.bindAtlas(0)
            CCRenderState.startDrawing()

    // Render stuff

    CCRenderState.draw()
    }

     

    Finally make sure that you only render solid stuff when the pass var is 1 and only render transparent stuff when the pass is 1. Never render stuff at both passes as it would just cause framerate lag. When you don't render something make sure to return false, otherwise the game will crash.

     

     

     

     


     

    More Tutorials will follow weekly...

    I apologize for any English mistakes. Please write a comment about them and any error you get in the code so I can improve the Tutorial.

     

    Overall Credits:

    • Chickenbones: For the great code.
    • MrTJP: For the great example that is ProjectRed.

     

    Any tutorials without credit are by me.

     

    Edited by Lex, CBMP has no realtion to Forge, so make that clean and changed FMP to CBMP.


  • Go to: Help / Install New Software
    [spoiler=Image]aUN8n.png 
  • Type the Update URL for the Scala plugin from http://scala-ide.org/download/current.html into the "Work with" field and click 'Add...'
    [spoiler=Image]aUORc.png 
  • Choose "Scala" as name and click 'OK'
  • Select all components and click 'Next'
    [spoiler=Image]aUOZX.png 
  • Click 'Next' again and accept all Licenses. Last but not least click 'Finish' to Install the plugins.
  • Finally right-click on your project and choose Configure / Add Scala Nature from the context menu.

PM's regarding modding questions should belong in the Modder Support sub-forum and won't be answered.

Link to comment
Share on other sites

There is no need to write your mod or multi-parts in scala.

You can also add CBMP to your project using the gradle.build file to have it automaticlaly download.

you should teach those routes.

I do Forge for free, however the servers to run it arn't free, so anything is appreciated.
Patreon: http://www.patreon.com/lexmanos
Paypal: http://paypal.me/LexManos

BitCoin: 1Q8rWvUNMM2T1ZfDaFeeYQyVXtYoeT6tTn

Link to comment
Share on other sites

In the ExamplePipe class, you extend BasePipe. What class is that? I don't have that in my workspace? If i need to make it, what does it need to have?

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

Link to comment
Share on other sites

Oh sorry I forgot to delete that. It is actually for the piping tutorial and does all the connection work but I didn't got anything to render just yet.

You actually have to extend TMultiPart there.

PM's regarding modding questions should belong in the Modder Support sub-forum and won't be answered.

Link to comment
Share on other sites

  • 3 weeks later...

Glad to see some tutorials in Scala :). I found a bug and some cosmetic blemishes. Highlighted version on gist github - https://gist.github.com/mnn/57cc01980312289f39e9 (it's a working Scala script).

 

import scala.runtime.ScalaRunTime.stringOf
import scala.collection.JavaConverters._

// stuff for verifying results, skip to case defs (comment -- 1 --)
def doVerify[A](name: String, origRes: A, myRes: A) {
  val equals = origRes match {
    case a: Array[_] => a.sameElements(myRes.asInstanceOf[Array[_]])
    case _ => origRes.equals(myRes)
  }
  if (equals) println(s"Case '$name' fine: ${stringOf(myRes)}")
  else println(s"Case '$name' wrong:\n${stringOf(origRes)}\nvs.\n${stringOf(myRes)}")
}

def verify[A, R](name: String, orig: (A) => R, mine: (A) => R, testVal: A) {
  doVerify(name, orig(testVal), mine(testVal))
}

def verify[R](name: String, orig: () => R, mine: () => R) {
  doVerify(name, orig(), mine())
}

// -- 1 --
def case1orig(oBounds: Seq[int]) = {
  var boxes = Seq(oBounds(6))
  for (s <- 0 until 6) boxes :+= oBounds(s)
  boxes
}

def case1mine(oBounds: Seq[int]) = oBounds.last +: oBounds.init

verify("1", case1orig, case1mine, 0 to 6)
// -------

// -- 2 --
def case2orig() = {
  val w = "someExpression"
  w
}

def case2mine() = "someExpression"

verify("2", case2orig, case2mine)

// same with returning in generateBoxes, generateCollisionBoxes 
// -------

// -- 3 --
// Does getOcclusionBoxes even compile? There is no return value in "if" branch.
/*
    override def getOcclusionBoxes = {
        import mlb.technica.experience.PipeBoxes._
        if (true)
        else Seq(oBounds(6)).asJava
    }
*/

// Possibly what you meant:
def case3orig(oBounds: Seq[int]) = {
  if (true) Seq().asJava
  else Seq(oBounds(6)).asJava
}

def case3mine(oBounds: Seq[int]) = Seq().asJava

verify("3", case3orig, case3mine, 0 to 6)
// -------

// -- 4 --
// Some implementation of used classes in snippet
class Cuboid6(var a: Double, var b: Double, var c: Double, var d: Double, var e: Double, var f: Double) {
  def apply(r: Rotation): Cuboid6 = {
    a -= r.x
    b -= r.y
    c -= r.z
    d -= 7 * r.x
    e -= 9 * r.y
    f -= 13 * r.x
    this
  }

  override def equals(that: Any) =
    that match {
      case t: Cuboid6 => t.a == a && t.b == b && t.c == c && t.d == d && t.e == e && t.f == f
      case _ => false
    }

  override def toString() = s"Cuboid6($a, $b, $c, $d, $e, $f)"
}

class Rotation(val x: Double, val y: Double, val z: Double) {
  def at(v: Vector3): Rotation = new Rotation(x + v.x, y + 2 * v.y, z + 3 * v.z)
}

object Rotation {
  val sideRotations = (0 to 6).map(v => new Rotation(1.0 / (v + .1), 5.0 / (v + 2), 5 * (v - 3)))
}

class Vector3(val x: Double, val y: Double, val z: Double)

object Vector3 {
  lazy val center = new Vector3(11, 23, 27)
}

// PipeBoxes.oBounds
def case4orig() = {
  val boxes = new Array[Cuboid6](7)
  val w = 2 / 8D
  boxes(6) = new Cuboid6(0.5 - w, 0.5 - w, 0.5 - w, 0.5 + w, 0.5 + w, 0.5 + w)
  for (s <- 0 until 6)
    boxes(s) = new Cuboid6(0.5 - w, 0, 0.5 - w, 0.5 + w, 0.5 - w, 0.5 + w).apply(Rotation.sideRotations(s).at(Vector3.center))
  boxes
}

def case4mine() = {
  val w = 2 / 8D
  val (m, p) = (.5 - w, .5 + w)
  ((for (s <- 0 until 6) yield new Cuboid6(m, 0, m, p, m, p).apply(Rotation.sideRotations(s).at(Vector3.center)))
    :+ new Cuboid6(m, m, m, p, p, p)).toArray
}

verify("4", case4orig, case4mine)

mnn.getNativeLang() != English

If I helped you please click on the "thank you" button.

Link to comment
Share on other sites

OOps...

It was supposed to be an "if (false)" statement as we want to only return the middle box there because we still want to be able to place covers on the sides. If we were to return all of the boxes there we wouldn't be able to place those, they would fail the occlusion test.

We use the statement later to test for those boxes one at a time and test if a cover is placed or not. The result is then used to update the possible connections of the pipe.

I still need some time for the next tutorial since my code is still pretty messy and needs a lot of cleanup.

PM's regarding modding questions should belong in the Modder Support sub-forum and won't be answered.

Link to comment
Share on other sites

  • 3 weeks later...

I want to make a power cable with status, so when you right-click with a certain item it will show those stats.

So, is it like binding the part with the block? I'm trying to make something like the AE-2 cables (bounding boxes and parts). How did he do it? Because I can't see a way to make and binding a TileEntity for a part. Or can I do the tileEntity stuff in the part itself?

Link to comment
Share on other sites

I want to make a power cable with status, so when you right-click with a certain item it will show those stats.

So, is it like binding the part with the block? I'm trying to make something like the AE-2 cables (bounding boxes and parts). How did he do it? Because I can't see a way to make and binding a TileEntity for a part. Or can I do the tileEntity stuff in the part itself?

You need to do all the TileEntity stuff in the part itself, as you cannot bind a TileEntity to a TMultiPart

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

Link to comment
Share on other sites

A part is a bit like a mixture of the Part and the Block. It has all the interaction methods a block has. For instance onActivated() or onNeighbourChange().

You can use those to do stuff. Since parts already are TileEntitys (they are just specially coded ones) you can also interact with them. Have a look at the souces and look for the methods you could override.

PM's regarding modding questions should belong in the Modder Support sub-forum and won't be answered.

Link to comment
Share on other sites

  • 4 months later...

Yes I will.

I know that I saied to do it at the end of 2014 but I am currently in my last year of school and it takes about 90% of my free time.

Sorry -.-

No its fine. I completely understand. I am patiently waiting!wink.gif

I'm back from being gone for... I think its been about a year. I'm pretty sure nobody remembers me, but hello anybody who does!

Link to comment
Share on other sites

  • 3 months later...

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

    • It's originally Arabic but I changed it to English   [29Nov2021 13:35:13.629] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher running: args [--username, Alsefri1423, --version, 1.17.1-forge-37.0.126, --gameDir, C:\Users\Gaming\AppData\Roaming\.minecraft, --assetsDir, C:\Users\Gaming\AppData\Roaming\.minecraft\assets, --assetIndex, 1.17, --uuid, a889dee5cd184fe7b91ede11d2acd85f, --accessToken, ????????, --userType, msa, --versionType, release, --launchTarget, forgeclient, --fml.forgeVersion, 37.0.126, --fml.mcVersion, 1.17.1, --fml.forgeGroup, net.minecraftforge, --fml.mcpVersion, 20210706.113038] [29Nov2021 13:35:13.633] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher 9.0.7+91+master.8569cdf starting: java version 16.0.1 by Microsoft [29Nov2021 13:35:13.652] [main/DEBUG] [cpw.mods.modlauncher.LaunchServiceHandler/MODLAUNCHER]: Found launch services [fmlclientdev,forgeclient,minecraft,fmlserveruserdev,fmlclient,fmldatauserdev,forgeserverdev,forgeserveruserdev,forgeclientdev,forgeclientuserdev,forgeserver,forgedatadev,fmlserver,fmlclientuserdev,fmlserverdev,forgedatauserdev,testharness] [29Nov2021 13:35:13.666] [main/DEBUG] [cpw.mods.modlauncher.NameMappingServiceHandler/MODLAUNCHER]: Found naming services : [srgtomcp] [29Nov2021 13:35:13.677] [main/DEBUG] [cpw.mods.modlauncher.LaunchPluginHandler/MODLAUNCHER]: Found launch plugins: [mixin,eventbus,object_holder_definalize,runtime_enum_extender,capability_token_subclass,capability_inject_definalize,accesstransformer,runtimedistcleaner] [29Nov2021 13:35:13.687] [main/DEBUG] [cpw.mods.modlauncher.TransformationServicesHandler/MODLAUNCHER]: Discovering transformation services [29Nov2021 13:35:13.692] [main/DEBUG] [cpw.mods.modlauncher.TransformationServicesHandler/MODLAUNCHER]: Found additional transformation services from discovery services: java.util.stream.ReferencePipeline$3@7e3f95fe [29Nov2021 13:35:13.701] [main/DEBUG] [cpw.mods.modlauncher.TransformationServicesHandler/MODLAUNCHER]: Found transformer services : [mixin,fml] [29Nov2021 13:35:13.701] [main/DEBUG] [cpw.mods.modlauncher.TransformationServicesHandler/MODLAUNCHER]: Transformation services loading [29Nov2021 13:35:13.702] [main/DEBUG] [cpw.mods.modlauncher.TransformationServiceDecorator/MODLAUNCHER]: Loading service mixin [29Nov2021 13:35:13.702] [main/DEBUG] [cpw.mods.modlauncher.TransformationServiceDecorator/MODLAUNCHER]: Loaded service mixin [29Nov2021 13:35:13.702] [main/DEBUG] [cpw.mods.modlauncher.TransformationServiceDecorator/MODLAUNCHER]: Loading service fml [29Nov2021 13:35:13.704] [main/DEBUG] [net.minecraftforge.fml.loading.LauncherVersion/CORE]: Found FMLLauncher version 1.0 [29Nov2021 13:35:13.704] [main/DEBUG] [net.minecraftforge.fml.loading.FMLLoader/CORE]: FML 1.0 loading [29Nov2021 13:35:13.704] [main/DEBUG] [net.minecraftforge.fml.loading.FMLLoader/CORE]: FML found ModLauncher version : 9.0.7+91+master.8569cdf [29Nov2021 13:35:13.705] [main/DEBUG] [net.minecraftforge.fml.loading.FMLLoader/CORE]: FML found AccessTransformer version : 8.0.4+66+master.c09db6d7 [29Nov2021 13:35:13.705] [main/DEBUG] [net.minecraftforge.fml.loading.FMLLoader/CORE]: FML found EventBus version : 5.0.3+70+master.d7d405b [29Nov2021 13:35:13.705] [main/DEBUG] [net.minecraftforge.fml.loading.FMLLoader/CORE]: Found Runtime Dist Cleaner [29Nov2021 13:35:13.707] [main/DEBUG] [net.minecraftforge.fml.loading.FMLLoader/CORE]: FML found CoreMod version : 5.0.1+15+master.dc5a2922 [29Nov2021 13:35:13.708] [main/DEBUG] [net.minecraftforge.fml.loading.FMLLoader/CORE]: Found ForgeSPI package implementation version 4.0.10+24+master.876d7985 [29Nov2021 13:35:13.708] [main/DEBUG] [net.minecraftforge.fml.loading.FMLLoader/CORE]: Found ForgeSPI package specification 4 [29Nov2021 13:35:13.709] [main/DEBUG] [cpw.mods.modlauncher.TransformationServiceDecorator/MODLAUNCHER]: Loaded service fml [29Nov2021 13:35:13.710] [main/DEBUG] [cpw.mods.modlauncher.TransformationServicesHandler/MODLAUNCHER]: Configuring option handling for services [29Nov2021 13:35:13.716] [main/DEBUG] [cpw.mods.modlauncher.TransformationServicesHandler/MODLAUNCHER]: Transformation services initializing [29Nov2021 13:35:13.717] [main/DEBUG] [cpw.mods.modlauncher.TransformationServiceDecorator/MODLAUNCHER]: Initializing transformation service mixin [29Nov2021 13:35:13.730] [main/DEBUG] [mixin/]: MixinService [ModLauncher] was successfully booted in cpw.mods.cl.ModuleClassLoader@13e39c73 [29Nov2021 13:35:13.746] [main/INFO] [mixin/]: SpongePowered MIXIN Subsystem Version=0.8.4 Source=union:/C:/Users/Gaming/AppData/Roaming/.minecraft/libraries/org/spongepowered/mixin/0.8.4/mixin-0.8.4.jar%2318! Service=ModLauncher Env=CLIENT [29Nov2021 13:35:13.749] [main/DEBUG] [mixin/]: Initialising Mixin Platform Manager [29Nov2021 13:35:13.750] [main/DEBUG] [mixin/]: Adding mixin platform agents for container ModLauncher Root Container(ModLauncher:4f56a0a2) [29Nov2021 13:35:13.751] [main/DEBUG] [mixin/]: Instancing new MixinPlatformAgentMinecraftForge for ModLauncher Root Container(ModLauncher:4f56a0a2) [29Nov2021 13:35:13.752] [main/DEBUG] [mixin/]: MixinPlatformAgentMinecraftForge rejected container ModLauncher Root Container(ModLauncher:4f56a0a2) [29Nov2021 13:35:13.753] [main/DEBUG] [mixin/]: Instancing new MixinPlatformAgentDefault for ModLauncher Root Container(ModLauncher:4f56a0a2) [29Nov2021 13:35:13.754] [main/DEBUG] [mixin/]: MixinPlatformAgentDefault accepted container ModLauncher Root Container(ModLauncher:4f56a0a2) [29Nov2021 13:35:13.756] [main/DEBUG] [cpw.mods.modlauncher.TransformationServiceDecorator/MODLAUNCHER]: Initialized transformation service mixin [29Nov2021 13:35:13.756] [main/DEBUG] [cpw.mods.modlauncher.TransformationServiceDecorator/MODLAUNCHER]: Initializing transformation service fml [29Nov2021 13:35:13.757] [main/DEBUG] [net.minecraftforge.fml.loading.FMLServiceProvider/CORE]: Setting up basic FML game directories [29Nov2021 13:35:13.758] [main/DEBUG] [net.minecraftforge.fml.loading.FileUtils/CORE]: Found existing GAMEDIR directory : C:\Users\Gaming\AppData\Roaming\.minecraft [29Nov2021 13:35:13.759] [main/DEBUG] [net.minecraftforge.fml.loading.FMLPaths/CORE]: Path GAMEDIR is C:\Users\Gaming\AppData\Roaming\.minecraft [29Nov2021 13:35:13.760] [main/DEBUG] [net.minecraftforge.fml.loading.FileUtils/CORE]: Found existing MODSDIR directory : C:\Users\Gaming\AppData\Roaming\.minecraft\mods [29Nov2021 13:35:13.760] [main/DEBUG] [net.minecraftforge.fml.loading.FMLPaths/CORE]: Path MODSDIR is C:\Users\Gaming\AppData\Roaming\.minecraft\mods [29Nov2021 13:35:13.760] [main/DEBUG] [net.minecraftforge.fml.loading.FileUtils/CORE]: Found existing CONFIGDIR directory : C:\Users\Gaming\AppData\Roaming\.minecraft\config [29Nov2021 13:35:13.761] [main/DEBUG] [net.minecraftforge.fml.loading.FMLPaths/CORE]: Path CONFIGDIR is C:\Users\Gaming\AppData\Roaming\.minecraft\config [29Nov2021 13:35:13.761] [main/DEBUG] [net.minecraftforge.fml.loading.FMLPaths/CORE]: Path FMLCONFIG is C:\Users\Gaming\AppData\Roaming\.minecraft\config\fml.toml [29Nov2021 13:35:13.761] [main/DEBUG] [net.minecraftforge.fml.loading.FMLServiceProvider/CORE]: Loading configuration [29Nov2021 13:35:13.803] [main/DEBUG] [net.minecraftforge.fml.loading.FileUtils/CORE]: Found existing default config directory directory : C:\Users\Gaming\AppData\Roaming\.minecraft\defaultconfigs [29Nov2021 13:35:13.803] [main/DEBUG] [net.minecraftforge.fml.loading.FMLServiceProvider/CORE]: Preparing ModFile [29Nov2021 13:35:13.807] [main/DEBUG] [net.minecraftforge.fml.loading.FMLServiceProvider/CORE]: Preparing launch handler [29Nov2021 13:35:13.807] [main/DEBUG] [net.minecraftforge.fml.loading.FMLLoader/CORE]: Using forgeclient as launch service [29Nov2021 13:35:13.825] [main/DEBUG] [net.minecraftforge.fml.loading.FMLLoader/CORE]: Received command line version data  : VersionInfo[forgeVersion=37.0.126, mcVersion=1.17.1, mcpVersion=20210706.113038, forgeGroup=net.minecraftforge] [29Nov2021 13:35:13.827] [main/DEBUG] [cpw.mods.modlauncher.TransformationServiceDecorator/MODLAUNCHER]: Initialized transformation service fml [29Nov2021 13:35:13.827] [main/DEBUG] [cpw.mods.modlauncher.NameMappingServiceHandler/MODLAUNCHER]: Current naming domain is 'srg' [29Nov2021 13:35:13.828] [main/DEBUG] [cpw.mods.modlauncher.NameMappingServiceHandler/MODLAUNCHER]: Identified name mapping providers {} [29Nov2021 13:35:13.828] [main/DEBUG] [cpw.mods.modlauncher.TransformationServicesHandler/MODLAUNCHER]: Transformation services begin scanning [29Nov2021 13:35:13.829] [main/DEBUG] [cpw.mods.modlauncher.TransformationServiceDecorator/MODLAUNCHER]: Beginning scan trigger - transformation service mixin [29Nov2021 13:35:13.829] [main/DEBUG] [cpw.mods.modlauncher.TransformationServiceDecorator/MODLAUNCHER]: End scan trigger - transformation service mixin [29Nov2021 13:35:13.829] [main/DEBUG] [cpw.mods.modlauncher.TransformationServiceDecorator/MODLAUNCHER]: Beginning scan trigger - transformation service fml [29Nov2021 13:35:13.829] [main/DEBUG] [net.minecraftforge.fml.loading.FMLServiceProvider/CORE]: Initiating mod scan [29Nov2021 13:35:13.839] [main/DEBUG] [net.minecraftforge.fml.loading.moddiscovery.ModListHandler/CORE]: Found mod coordinates from lists: [] [29Nov2021 13:35:13.840] [main/DEBUG] [net.minecraftforge.fml.loading.moddiscovery.ModDiscoverer/CORE]: Found Mod Locators : (mods folder:null),(maven libs:null),(exploded directory:null),(minecraft:null),(userdev classpath:null) [29Nov2021 13:35:14.152] [main/DEBUG] [net.minecraftforge.fml.loading.moddiscovery.ModFileInfo/LOADING]: Found valid mod file client-1.17.1-20210706.113038-srg.jar with {minecraft} mods - versions {1.17.1} [29Nov2021 13:35:14.154] [main/DEBUG] [net.minecraftforge.fml.loading.moddiscovery.ModFile/LOADING]: Loading mod file C:\Users\Gaming\AppData\Roaming\.minecraft\libraries\net\minecraft\client\1.17.1-20210706.113038\client-1.17.1-20210706.113038-srg.jar with languages [LanguageSpec[languageName=minecraft, acceptedVersions=1]] [29Nov2021 13:35:14.155] [main/DEBUG] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Considering mod file candidate C:\Users\Gaming\AppData\Roaming\.minecraft\libraries\net\minecraftforge\forge\1.17.1-37.0.126\forge-1.17.1-37.0.126-universal.jar [29Nov2021 13:35:14.159] [main/DEBUG] [net.minecraftforge.fml.loading.moddiscovery.ModFileInfo/LOADING]: Found valid mod file forge-1.17.1-37.0.126-universal.jar with {forge} mods - versions {37.0.126} [29Nov2021 13:35:14.159] [main/DEBUG] [net.minecraftforge.fml.loading.moddiscovery.ModFile/LOADING]: Loading mod file C:\Users\Gaming\AppData\Roaming\.minecraft\libraries\net\minecraftforge\forge\1.17.1-37.0.126\forge-1.17.1-37.0.126-universal.jar with languages [LanguageSpec[languageName=javafml, acceptedVersions=[24,]]] [29Nov2021 13:35:14.184] [main/DEBUG] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Found coremod field_to_method with Javascript path coremods/field_to_method.js [29Nov2021 13:35:14.184] [main/DEBUG] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Found coremod field_to_instanceof with Javascript path coremods/field_to_instanceof.js [29Nov2021 13:35:14.184] [main/DEBUG] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Found coremod add_bouncer_method with Javascript path coremods/add_bouncer_method.js [29Nov2021 13:35:14.185] [main/DEBUG] [net.minecraftforge.fml.loading.moddiscovery.ModFile/LOADING]: Found coremod coremods/field_to_method.js [29Nov2021 13:35:14.185] [main/DEBUG] [net.minecraftforge.fml.loading.moddiscovery.ModFile/LOADING]: Found coremod coremods/field_to_instanceof.js [29Nov2021 13:35:14.185] [main/DEBUG] [net.minecraftforge.fml.loading.moddiscovery.ModFile/LOADING]: Found coremod coremods/add_bouncer_method.js [29Nov2021 13:35:14.186] [main/DEBUG] [cpw.mods.modlauncher.TransformationServiceDecorator/MODLAUNCHER]: End scan trigger - transformation service fml [29Nov2021 13:35:14.329] [main/DEBUG] [net.minecraftforge.fml.loading.LanguageLoadingProvider/CORE]: Found 2 language providers [29Nov2021 13:35:14.330] [main/DEBUG] [net.minecraftforge.fml.loading.LanguageLoadingProvider/CORE]: Found language provider minecraft, version 1.0 [29Nov2021 13:35:14.331] [main/DEBUG] [net.minecraftforge.fml.loading.LanguageLoadingProvider/CORE]: Found language provider javafml, version 37 [29Nov2021 13:35:14.337] [main/DEBUG] [net.minecraftforge.fml.loading.ModSorter/LOADING]: Found 0 mod requirements (0 mandatory, 0 optional) [29Nov2021 13:35:14.337] [main/DEBUG] [net.minecraftforge.fml.loading.ModSorter/LOADING]: Found 0 mod requirements missing (0 mandatory, 0 optional) [29Nov2021 13:35:14.702] [main/DEBUG] [cpw.mods.modlauncher.TransformationServicesHandler/MODLAUNCHER]: Transformation services loading transformers [29Nov2021 13:35:14.703] [main/DEBUG] [cpw.mods.modlauncher.TransformationServiceDecorator/MODLAUNCHER]: Initializing transformers for transformation service mixin [29Nov2021 13:35:14.703] [main/DEBUG] [cpw.mods.modlauncher.TransformationServiceDecorator/MODLAUNCHER]: Initialized transformers for transformation service mixin [29Nov2021 13:35:14.703] [main/DEBUG] [cpw.mods.modlauncher.TransformationServiceDecorator/MODLAUNCHER]: Initializing transformers for transformation service fml [29Nov2021 13:35:14.703] [main/DEBUG] [net.minecraftforge.fml.loading.FMLServiceProvider/CORE]: Loading coremod transformers [29Nov2021 13:35:14.704] [main/DEBUG] [net.minecraftforge.coremod.CoreModEngine/COREMOD]: Loading CoreMod from coremods/field_to_method.js [29Nov2021 13:35:14.895] [main/DEBUG] [net.minecraftforge.coremod.CoreModEngine/COREMOD]: CoreMod loaded successfully [29Nov2021 13:35:14.895] [main/DEBUG] [net.minecraftforge.coremod.CoreModEngine/COREMOD]: Loading CoreMod from coremods/field_to_instanceof.js [29Nov2021 13:35:14.972] [main/DEBUG] [net.minecraftforge.coremod.CoreModEngine/COREMOD]: CoreMod loaded successfully [29Nov2021 13:35:14.972] [main/DEBUG] [net.minecraftforge.coremod.CoreModEngine/COREMOD]: Loading CoreMod from coremods/add_bouncer_method.js [29Nov2021 13:35:15.001] [main/DEBUG] [net.minecraftforge.coremod.CoreModEngine/COREMOD]: CoreMod loaded successfully [29Nov2021 13:35:15.008] [main/DEBUG] [cpw.mods.modlauncher.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@3cd9aa64 to Target : CLASS {Lnet/minecraft/world/effect/MobEffectInstance;} {} {V} [29Nov2021 13:35:15.009] [main/DEBUG] [cpw.mods.modlauncher.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@36480b2d to Target : CLASS {Lnet/minecraft/world/item/BucketItem;} {} {V} [29Nov2021 13:35:15.009] [main/DEBUG] [cpw.mods.modlauncher.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@27d33393 to Target : CLASS {Lnet/minecraft/world/level/block/StairBlock;} {} {V} [29Nov2021 13:35:15.009] [main/DEBUG] [cpw.mods.modlauncher.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@1f6917fb to Target : CLASS {Lnet/minecraft/world/level/block/FlowerPotBlock;} {} {V} [29Nov2021 13:35:15.010] [main/DEBUG] [cpw.mods.modlauncher.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@41eb94bc to Target : CLASS {Lnet/minecraft/world/item/ItemStack;} {} {V} [29Nov2021 13:35:15.010] [main/DEBUG] [cpw.mods.modlauncher.TransformStore/MODLAUNCHER]: Adding transformer net.minecraftforge.coremod.transformer.CoreModClassTransformer@378cfecf to Target : CLASS {Lnet/minecraft/network/play/client/CClientSettingsPacket;} {} {V} [29Nov2021 13:35:15.010] [main/DEBUG] [cpw.mods.modlauncher.TransformationServiceDecorator/MODLAUNCHER]: Initialized transformers for transformation service fml [29Nov2021 13:35:15.293] [main/DEBUG] [mixin/]: Processing prepare() for PlatformAgent[MixinPlatformAgentDefault:ModLauncher Root Container(ModLauncher:4f56a0a2)] [29Nov2021 13:35:15.293] [main/DEBUG] [mixin/]: Processing launch tasks for PlatformAgent[MixinPlatformAgentDefault:ModLauncher Root Container(ModLauncher:4f56a0a2)] [29Nov2021 13:35:15.294] [main/DEBUG] [mixin/]: Adding mixin platform agents for container SecureJarResource(minecraft) [29Nov2021 13:35:15.294] [main/DEBUG] [mixin/]: Instancing new MixinPlatformAgentMinecraftForge for SecureJarResource(minecraft) [29Nov2021 13:35:15.294] [main/DEBUG] [mixin/]: MixinPlatformAgentMinecraftForge rejected container SecureJarResource(minecraft) [29Nov2021 13:35:15.294] [main/DEBUG] [mixin/]: Instancing new MixinPlatformAgentDefault for SecureJarResource(minecraft) [29Nov2021 13:35:15.294] [main/DEBUG] [mixin/]: MixinPlatformAgentDefault accepted container SecureJarResource(minecraft) [29Nov2021 13:35:15.294] [main/DEBUG] [mixin/]: Processing prepare() for PlatformAgent[MixinPlatformAgentDefault:SecureJarResource(minecraft)] [29Nov2021 13:35:15.294] [main/DEBUG] [mixin/]: Adding mixin platform agents for container SecureJarResource(forge) [29Nov2021 13:35:15.295] [main/DEBUG] [mixin/]: Instancing new MixinPlatformAgentMinecraftForge for SecureJarResource(forge) [29Nov2021 13:35:15.295] [main/DEBUG] [mixin/]: MixinPlatformAgentMinecraftForge rejected container SecureJarResource(forge) [29Nov2021 13:35:15.295] [main/DEBUG] [mixin/]: Instancing new MixinPlatformAgentDefault for SecureJarResource(forge) [29Nov2021 13:35:15.295] [main/DEBUG] [mixin/]: MixinPlatformAgentDefault accepted container SecureJarResource(forge) [29Nov2021 13:35:15.295] [main/DEBUG] [mixin/]: Processing prepare() for PlatformAgent[MixinPlatformAgentDefault:SecureJarResource(forge)] [29Nov2021 13:35:15.295] [main/DEBUG] [mixin/]: inject() running with 3 agents [29Nov2021 13:35:15.295] [main/DEBUG] [mixin/]: Processing inject() for PlatformAgent[MixinPlatformAgentDefault:ModLauncher Root Container(ModLauncher:4f56a0a2)] [29Nov2021 13:35:15.296] [main/DEBUG] [mixin/]: Processing inject() for PlatformAgent[MixinPlatformAgentDefault:SecureJarResource(minecraft)] [29Nov2021 13:35:15.296] [main/DEBUG] [mixin/]: Processing inject() for PlatformAgent[MixinPlatformAgentDefault:SecureJarResource(forge)] [29Nov2021 13:35:15.296] [main/INFO] [cpw.mods.modlauncher.LaunchServiceHandler/MODLAUNCHER]: Launching target 'forgeclient' with arguments [--version, 1.17.1-forge-37.0.126, --gameDir, C:\Users\Gaming\AppData\Roaming\.minecraft, --assetsDir, C:\Users\Gaming\AppData\Roaming\.minecraft\assets, --uuid, a889dee5cd184fe7b91ede11d2acd85f, --username, Alsefri1423, --assetIndex, 1.17, --accessToken, ????????, --userType, msa, --versionType, release] [29Nov2021 13:35:15.426] [main/DEBUG] [mixin/]: Error cleaning class output directory: .mixin.out [29Nov2021 13:35:15.430] [main/DEBUG] [mixin/]: Preparing mixins for MixinEnvironment[DEFAULT] [29Nov2021 13:35:16.468] [pool-3-thread-1/DEBUG] [net.minecraftforge.coremod.transformer.CoreModBaseTransformer/COREMOD]: Transforming net/minecraft/world/level/block/StairBlock [29Nov2021 13:35:16.553] [pool-3-thread-1/DEBUG] [net.minecraftforge.coremod.transformer.CoreModBaseTransformer/COREMOD]: Transforming net/minecraft/world/level/block/FlowerPotBlock [29Nov2021 13:35:17.364] [pool-3-thread-1/DEBUG] [net.minecraftforge.coremod.transformer.CoreModBaseTransformer/COREMOD]: Transforming net/minecraft/world/item/ItemStack [29Nov2021 13:35:20.139] [pool-3-thread-1/DEBUG] [net.minecraftforge.coremod.transformer.CoreModBaseTransformer/COREMOD]: Transforming net/minecraft/world/item/BucketItem [29Nov2021 13:35:20.261] [pool-3-thread-1/DEBUG] [net.minecraftforge.coremod.transformer.CoreModBaseTransformer/COREMOD]: Transforming net/minecraft/world/effect/MobEffectInstance [29Nov2021 13:35:21.370] [Render thread/INFO] [com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService/]: Environment: authHost='https://authserver.mojang.com', accountsHost='https://api.mojang.com', sessionHost='https://sessionserver.mojang.com', servicesHost='https://api.minecraftservices.com', name='PROD' [29Nov2021 13:35:23.946] [Render thread/DEBUG] [net.minecraftforge.fml.ModWorkManager/LOADING]: Using 4 threads for parallel mod-loading [29Nov2021 13:35:23.954] [Render thread/DEBUG] [net.minecraftforge.fml.javafmlmod.FMLJavaModLanguageProvider/LOADING]: Loading FMLModContainer from classloader cpw.mods.modlauncher.TransformingClassLoader@1e253c9d - got cpw.mods.cl.ModuleClassLoader@607b2792 [29Nov2021 13:35:23.954] [Render thread/DEBUG] [net.minecraftforge.fml.javafmlmod.FMLModContainer/LOADING]: Creating FMLModContainer instance for net.minecraftforge.common.ForgeMod [29Nov2021 13:35:24.366] [modloading-worker-2/DEBUG] [net.minecraftforge.fml.config.ConfigTracker/CONFIG]: Config file forge-client.toml for forge tracking [29Nov2021 13:35:24.366] [modloading-worker-2/DEBUG] [net.minecraftforge.fml.config.ConfigTracker/CONFIG]: Config file forge-server.toml for forge tracking [29Nov2021 13:35:24.366] [modloading-worker-2/DEBUG] [net.minecraftforge.fml.config.ConfigTracker/CONFIG]: Config file forge-common.toml for forge tracking [29Nov2021 13:35:24.413] [modloading-worker-2/DEBUG] [net.minecraftforge.fml.javafmlmod.AutomaticEventSubscriber/LOADING]: Attempting to inject @EventBusSubscriber classes into the eventbus for forge [29Nov2021 13:35:24.415] [modloading-worker-2/DEBUG] [net.minecraftforge.fml.javafmlmod.AutomaticEventSubscriber/LOADING]: Auto-subscribing net.minecraftforge.common.ForgeSpawnEggItem$CommonHandler to MOD [29Nov2021 13:35:24.417] [modloading-worker-2/DEBUG] [net.minecraftforge.fml.javafmlmod.AutomaticEventSubscriber/LOADING]: Auto-subscribing net.minecraftforge.common.ForgeSpawnEggItem$ColorRegisterHandler to MOD [29Nov2021 13:35:24.421] [modloading-worker-2/DEBUG] [net.minecraftforge.fml.javafmlmod.AutomaticEventSubscriber/LOADING]: Auto-subscribing net.minecraftforge.client.model.ModelDataManager to FORGE [29Nov2021 13:35:24.422] [modloading-worker-2/DEBUG] [net.minecraftforge.fml.javafmlmod.AutomaticEventSubscriber/LOADING]: Auto-subscribing net.minecraftforge.client.ForgeHooksClient$ClientEvents to MOD [29Nov2021 13:35:26.011] [Render thread/INFO] [com.mojang.text2speech.NarratorWindows/]: Narrator library for x64 successfully loaded [29Nov2021 13:35:26.417] [modloading-worker-2/DEBUG] [net.minecraftforge.fml.config.ConfigTracker/CONFIG]: Loading configs type CLIENT [29Nov2021 13:35:26.418] [modloading-worker-2/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Built TOML config for C:\Users\Gaming\AppData\Roaming\.minecraft\config\forge-client.toml [29Nov2021 13:35:26.419] [modloading-worker-2/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Loaded TOML config file C:\Users\Gaming\AppData\Roaming\.minecraft\config\forge-client.toml [29Nov2021 13:35:26.442] [modloading-worker-2/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Watching TOML config file C:\Users\Gaming\AppData\Roaming\.minecraft\config\forge-client.toml for changes [29Nov2021 13:35:26.447] [modloading-worker-2/DEBUG] [net.minecraftforge.fml.config.ConfigTracker/CONFIG]: Loading configs type COMMON [29Nov2021 13:35:26.447] [modloading-worker-2/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Built TOML config for C:\Users\Gaming\AppData\Roaming\.minecraft\config\forge-common.toml [29Nov2021 13:35:26.448] [modloading-worker-2/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Loaded TOML config file C:\Users\Gaming\AppData\Roaming\.minecraft\config\forge-common.toml [29Nov2021 13:35:26.448] [modloading-worker-2/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Watching TOML config file C:\Users\Gaming\AppData\Roaming\.minecraft\config\forge-common.toml for changes [29Nov2021 13:35:26.669] [Forge Version Check/INFO] [net.minecraftforge.fml.VersionChecker/]: [forge] Starting version check at https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json [29Nov2021 13:35:38.816] [Forge Version Check/DEBUG] [net.minecraftforge.fml.VersionChecker/]: [forge] Received version check data: {   "homepage": "https://files.minecraftforge.net/net/minecraftforge/forge/",   "promos": {     "1.1-latest": "1.3.4.29",     "1.2.3-latest": "1.4.1.64",     "1.2.4-latest": "2.0.0.68",     "1.2.5-latest": "3.4.9.171",     "1.3.2-latest": "4.3.5.318",     "1.4.0-latest": "5.0.0.326",     "1.4.1-latest": "6.0.0.329",     "1.4.2-latest": "6.0.1.355",     "1.4.3-latest": "6.2.1.358",     "1.4.4-latest": "6.3.0.378",     "1.4.5-latest": "6.4.2.448",     "1.4.6-latest": "6.5.0.489",     "1.4.7-latest": "6.6.2.534",     "1.5-latest": "7.7.0.598",     "1.5.1-latest": "7.7.2.682",     "1.5.2-latest": "7.8.1.738",     "1.5.2-recommended": "7.8.1.738",     "1.6.1-latest": "8.9.0.775",     "1.6.2-latest": "9.10.1.871",     "1.6.2-recommended": "9.10.1.871",     "1.6.3-latest": "9.11.0.878",     "1.6.4-latest": "9.11.1.1345",     "1.6.4-recommended": "9.11.1.1345",     "1.7.2-latest": "10.12.2.1161",     "1.7.2-recommended": "10.12.2.1161",     "1.7.10_pre4-latest": "10.12.2.1149",     "1.7.10-latest": "10.13.4.1614",     "1.7.10-recommended": "10.13.4.1614",     "1.8-latest": "11.14.4.1577",     "1.8-recommended": "11.14.4.1563",     "1.8.8-latest": "11.15.0.1655",     "1.8.9-latest": "11.15.1.2318",     "1.8.9-recommended": "11.15.1.2318",     "1.9-latest": "12.16.1.1938",     "1.9-recommended": "12.16.1.1887",     "1.9.4-latest": "12.17.0.2317",     "1.9.4-recommended": "12.17.0.2317",     "1.10-latest": "12.18.0.2000",     "1.10.2-latest": "12.18.3.2511",     "1.10.2-recommended": "12.18.3.2511",     "1.11-latest": "13.19.1.2199",     "1.11-recommended": "13.19.1.2189",     "1.11.2-latest": "13.20.1.2588",     "1.11.2-recommended": "13.20.1.2588",     "1.12-latest": "14.21.1.2443",     "1.12-recommended": "14.21.1.2387",     "1.12.1-latest": "14.22.1.2485",     "1.12.1-recommended": "14.22.1.2478",     "1.12.2-latest": "14.23.5.2855",     "1.12.2-recommended": "14.23.5.2855",     "1.13.2-latest": "25.0.219",     "1.14.2-latest": "26.0.63",     "1.14.3-latest": "27.0.60",     "1.14.4-latest": "28.2.23",     "1.14.4-recommended": "28.2.0",     "1.15-latest": "29.0.4",     "1.15.1-latest": "30.0.51",     "1.15.2-latest": "31.2.55",     "1.15.2-recommended": "31.2.0",     "1.16.1-latest": "32.0.108",     "1.16.2-latest": "33.0.61",     "1.16.3-latest": "34.1.42",     "1.16.3-recommended": "34.1.0",     "1.16.4-latest": "35.1.37",     "1.16.4-recommended": "35.1.4",     "1.16.5-latest": "36.2.19",     "1.16.5-recommended": "36.2.0",     "1.17.1-latest": "37.0.126"   } } [29Nov2021 13:35:38.817] [Forge Version Check/INFO] [net.minecraftforge.fml.VersionChecker/]: [forge] Found status: BETA Current: 37.0.126 Target: 37.0.126 [29Nov2021 13:36:00.780] [Render thread/INFO] [com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService/]: Environment: authHost='https://authserver.mojang.com', accountsHost='https://api.mojang.com', sessionHost='https://sessionserver.mojang.com', servicesHost='https://api.minecraftservices.com', name='PROD' [29Nov2021 13:36:00.918] [Server thread/DEBUG] [net.minecraftforge.fml.loading.FileUtils/CORE]: Found existing serverconfig directory : C:\Users\Gaming\AppData\Roaming\.minecraft\saves\New World\serverconfig [29Nov2021 13:36:00.919] [Server thread/DEBUG] [net.minecraftforge.fml.config.ConfigTracker/CONFIG]: Loading configs type SERVER [29Nov2021 13:36:00.919] [Server thread/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Built TOML config for C:\Users\Gaming\AppData\Roaming\.minecraft\saves\New World\serverconfig\forge-server.toml [29Nov2021 13:36:00.936] [Server thread/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Loaded TOML config file C:\Users\Gaming\AppData\Roaming\.minecraft\saves\New World\serverconfig\forge-server.toml [29Nov2021 13:36:00.940] [Server thread/DEBUG] [net.minecraftforge.fml.config.ConfigFileTypeHandler/CONFIG]: Watching TOML config file C:\Users\Gaming\AppData\Roaming\.minecraft\saves\New World\serverconfig\forge-server.toml for changes [29Nov2021 13:36:14.844] [Server thread/DEBUG] [net.minecraftforge.fml.loading.FileUtils/CORE]: Found existing serverconfig directory : C:\Users\Gaming\AppData\Roaming\.minecraft\saves\New World\serverconfig [29Nov2021 13:36:14.844] [Server thread/DEBUG] [net.minecraftforge.fml.config.ConfigTracker/CONFIG]: Unloading configs type SERVER       (this log from a note named debug)  
    • I am analyzing falling blocks, but that will take some time to do. If anyone could provide any input, I would appreciate it.
    • Better yet, how do I animate them from the server? I know there is some kind of interpolation. How do I use it to animate the blocks in as few packets as possible?
    • you can look at this, copy the logic and do the same for the AmethystGeode
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

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