Everything posted by Choonster
-
In game skin changer only works in dev environment
Skins are downloaded and applied to players asynchronously, so you can't immediately replace the player's skin with your custom skin. When an AbstractClientPlayer is instantiated, it calls SkinManager#func_152790_a . This downloads the the name of the player's skin and cape textures from Mojang's session servers and calls SkinManager#func_152789_a for each one. This downloads the texture in a separate thread (if it hasn't already been downloaded) and then calls SkinManager.SkinAvailableCallback#func_152121_a (implemented by AbstractClientPlayer ) on the next tick to store the ResourceLocation of the texture in the appropriate field of AbstractClientPlayer . I'd recommend subscribing to EntityJoinWorldEvent (only on the client side) and checking if the entity is an AbstractClientPlayer . If it is, call SkinManager#func_152790_a with your own implementation of SkinManager.SkinAvailableCallback#func_152121_a that that the Type is Type.SKIN and then sets the player's locationSkin field.
-
[1.8] Model scaling on the ground/in item frames
Wouldn't it make more sense to override Item#hasCustomEntity and Item#createEntity to spawn a custom EntityItem class directly instead of using the event?
-
In game skin changer only works in dev environment
Ah, I gave you the SRG name of 1.8's NetworkPlayerInfo#locationSkin field instead of 1.7.10's AbstractClientPlayer#locationSkin field. The SRG name you want is actually field_110312_d . In future you should include the Minecraft version in the title so people know which version you're working with.
-
In game skin changer only works in dev environment
This is the same error as before: you're only using the deobfucated (MCP) name, not the obfuscated (SRG) name. You need to pass both names to ObfuscationReflectionHelper.getPrivateValue (and other methods in the same class that take a String array/vararg of field names). You can find the SRG name of a method/field in the MCP mapping CSVs, which can be found in your Gradle cache. For recent 1.7.10 versions of Forge, the CSVs are in ~/.gradle/caches/minecraft/net/minecraftforge/forge/<forge_version>/unpacked/conf (replace ~ with %USERPROFILE% on Windows). You can also download the mappings from the MCPBot Website.
-
In game skin changer only works in dev environment
To answer the question in your previous post, only use reflection when you can't use a normal method call/field access. Examples of this include accessing non-public methods/fields or methods/fields with a dynamic name/argument list and instantiating a class that's only known at runtime (i.e. you have a Class object you want to create an instance of).
-
[1.7] adding potion effect to projectile
Potion effects can only be applied to living entities, so you need to check if the entity is an instance of EntityLivingBase , cast it to EntityLivingBase and call EntityLivingBase#addPotionEffect on it.
-
[1.8] Event when item hits a block
Yes, override Block#getSelectedBoundingBox to return an AABB with the BlockPos 's x/y/z as the minimum coordinates and x/y/z + 1.0 as the maximum coordinates (like this).
-
[1.7.10] Custom EntityItem that float on water
Override Item#hasCustomEntity to return true and Item#createEntity to return a new instance of FragEntityItem at the same position as the Entity argument.
-
[1.8] Event when item hits a block
It works for me in the development environment and the deobfuscated client. Are you sure you're actually creating and registering an instance of your Block class? Does it have a bounding box smaller than a full block?
-
[1.8] Multiple Texture Item
Whoops, that is indeed the method's name. I've edited my post.
-
[1.8] Tooltip formatting breaks after the mod has been built
Like diesieben07 said, it will work if you use UTF-8 everywhere. I assumed that your code was already saved as UTF-8, I didn't realise that the section sign is also present in older encodings like Windows-1252. You can see an example of this here (lang file is here). It looks like this in the obfuscated client. Edit: Added missing closing tag
-
[SOLVED] [1.8] Strange AbstractMethodError Crash With Lambda
Thanks diesieben07, that works perfectly. I looked at the bytecode earlier using Bytecode Viewer and noticed the INVOKEDYNAMIC instruction (though I wasn't fully aware of what it did), but it seems that the program doesn't know how to display it properly.
-
[SOLVED] [1.8] Strange AbstractMethodError Crash With Lambda
Lambdas can be used in place of any interface with a single method (like ItemMeshDefinition ), they act like an implementation of the interface with the lambda's body as the method body. This works in the development environment, just not in the obfuscated client.
-
[SOLVED] [1.8] Strange AbstractMethodError Crash With Lambda
Yes, it's just mapping to a constant model location regardless of the ItemStack 's metadata/NBT.
-
Mods comparability issue with server crash on startup
ClientSidedHorsesMod / Better Archery / BetterBowsMod1.6.4.zip is trying to load a client-only class on the server. This is an error with the mod, report it to the author (if they're still maintaining it) and remove it from the server and clients.
-
[1.8] Multiple Texture Item
Implement ItemMeshDefinition (either in an anonymous class or a normal class depending on how complex the model selection logic is) and return the appropriate ModelResourceLocation based on the ItemStack . Register the implementation with ModelLoader.setCustomMeshDefinition in preInit or ItemModelMesher#register in init. You'll also need to call ModelBakery.addVariantName with the names of all possible models so they're loaded by Minecraft (this can be done in preInit or init). Edit: The method is called ModelBakery.addVariantName , not addVariant
-
[SOLVED] [1.8] Strange AbstractMethodError Crash With Lambda
I've run into a strange issue where using a lambda to implement ItemMeshDefinition crashes the game with an AbstractMethodError any time the item is rendered in a GUI. This only happens in the obfuscated client, not in the development environment. I've set up a small test case here. The lambda is used here. To reproduce, simply open the mod's creative tab or spawn in its block. The block will render without issue in the world, but as soon as it's rendered in a GUI or a player's hand the game crashes. You can see the crash report here. Does anyone know why this happens or how to fix it? It seems like it may be some weird interaction between lambdas and the reobfuscation process.
-
[1.8] Tooltip formatting breaks after the mod has been built
You need to make Gradle compile your code as UTF-8 by adding this to build.gradle: tasks.withType(JavaCompile) { options.encoding = 'UTF-8' }
-
[1.8] Event when item hits a block
The method that the OP is using will work if the block has a bounding box smaller than a full block. An offset of 0.01 on each side is enough to allow entities (including items) to collide with the block. Make sure you're actually overriding Block#onEntityCollidedWithBlock(World, BlockPos, IBlockState, Entity) (called when any entity collides with the block) and not Block#onEntityCollidedWithBlock(World, BlockPos, Entity) (called when an entity that returns true from Entity#canTriggerWalking walks on top the block). This basic demonstration spams the log when an item collides with the block.
-
[1.8] Change world weather based on events
Use the setRaining , setRainTime , setThundering and setThunderTime methods of WorldInfo ( World#getWorldInfo will return the World 's WorldInfo instance). This should be done on the server, the clients will be automatically notified of the change.
-
[1.8] Alternative for ISimpleBlockRenderingHandler
Yes that's exactly what I meant. Is this already implemented in Forge? Because it could make things a lot easier if you have many, many state properties. (However, I still prefer code) Yes, it's implemented. You can see the code behind the example in the docs here and the blockstates file and item/block models here. I created a model similar to a BuildCraft pipe using this system here.
-
error when running forge modded server
One of Ars Magica 2's potions is configured with the same ID as RotaryCraft's Freeze potion (ID 35). Edit the potion IDs in the config file of either mod so they don't conflict. If you can get a client running with the same mods (after fixing any potion ID conflicts from Reika's mods), NEI can tell you which potion IDs are being used and which are free: open your inventory, then go to Options -> Tools -> Data Dumps and click "Dump" next to "Potions".
-
In game skin changer only works in dev environment
In the obfuscated (non-development) environment, there's no field called locationSkin ; instead it has the SRG name field_110312_d . FML's ObfuscationReflectionHelper#setPrivateValue allows you to pass both the deobfuscated (MCP) and obfuscated (SRG) names of the field to set the value of. Either use it directly or adapt the logic to your class. Make sure you only reference client-only classes like Minecraft and AbstractClientPlayer from client-side code (i.e. only register your event handler in your client proxy). Edit: The SRG name of AbstractClientPlayer#locationSkin in 1.7.10 is actually field_110312_d . field_178865_e is the SRG name of NetworkPlayerInfo#locationSkin field in 1.8.
-
[1.7.10][Solved] How to conditionally disable player hp regeneration
Looking at the changelog, it was added in 1.7.10-10.13.2.1256 and 1.8-11.14.0.1257.
-
Access Transformer not working
getAccessTransformerClass should return the full name of your class (e.g. com.yourname.yourmod.AccessTransformer ), not just the class name. You should currently be getting an error in the log for your access transformer class. Do you really need everything in Entity to be public?
IPS spam blocked by CleanTalk.