Jump to content

Xan the Dragon

Members
  • Posts

    15
  • Joined

  • Last visited

Everything posted by Xan the Dragon

  1. This is quite a dilemma. To players, "previous version" = decrement the minor version number, but for Mojang not so much anymore. From a feasibility standpoint, I don't think there is any clear cut way to do this. My main idea is "when there is a breaking change from the previous version, push LTS forward". This, naturally, shortens how long any given LTS version lasts - it may not be a bad idea to rebrand "LTS" into something like "Legacy Support" - "Long-Term Support" implies there is a plan to continue its development for a significant amount of time, which will no longer be possible under this specific methodology. Another alternative is community support for developers on the previous minor version, like have an official Forge-backed Legacy Support version i.e. "Minecraft 1.19.3 is out, but we also support 1.19.2 as LTS/LS" and an additional community board "We also recognize developers using 1.18.2, however this is purely community backed. We will not provide direct official version support here". That's what seems sensible enough to me if the "long term" part of LTS is what matters more than just maintaining more than one version.
  2. This thread serves as a means of cross-checking my work more than anything. I want to ensure that I am using the best method possible to achieve my goals, as I am not particularly comfortable with my skills in data replication quite yet. The mod I am making is a sort of "trimmed" version of iChun's Morph mod. This mod simply allows players to alter their displayed model. The desired behavior of my network replication system should meet four goals in total: On the client... Provide a means of requesting a model change from the server. Provide a means of requesting which model a specific player is using from the server. On the server... Provide a means of propagating changes to a player's desired display model to all connected clients, so that the clients may render them appropriately. Provide a means of responding to requests asking for which model a specific player is using. To synchronize this data across the network boundary, I am using the following packet class. My main concern is my choice of tracking players. Is there a system in place that can more easily keep a reference to a player that is common for the client and server alike? This player is not necessarily associated with the packet handler, of course. Additionally, is there a more optimal setup than what I have now? My method right now is to simply use UUIDs to identify players, as should be obvious. Apologies if the pascal case drives anyone mad, I've been doing a lot of C# work and prefer things to be in that style public static class ReplicationPacket { /** The type of event that this is. */ public EventType Type; /** The ID of the player this event pertains to. */ public UUID PlayerID; /** The target entity that the associated player wants to become, should become, or currently is. */ @Nullable public ResourceLocation TargetEntity = null; /** * Represents a type of morph replication packet, which describes the behavior that this packet should have on the associated side. * @author Eti */ public static enum EventType { /** A player has changed their model or joined with a model on.<br/> * Update the client registry to the packet's defined data to determine how to render this player. * Additionally, the player that requested this morph should actually morph at this point.<br/><br/> * TODO: Provide means of client-feedback for slower connections / long processing time on the serverside to prevent people from getting confused at the lack of any immediate changes. * */ UpdatePlayerModel, /** A player wants to change their model, and is asking the server to propagate said change. */ ChangePlayerModel, /** A player is asking the server what someone's model is. */ GetPlayerModel, /** A response to GetPlayerModel. If the target entity is null, the player is using their stock player model. */ IsPlayerModel, } } Thanks for your time.
  3. Alrighty. This makes sense. It's good to see that LTS is in mind, then. It does help to lift some of the weight while still allowing Forge to continue to grow. Thanks.
  4. Hi. I saw the release of the new LTS system and I would like to know if this has any implications for the structure of Forge's API. One of the #1 problems I've had with using Forge over the years -- and a huge incentive to not upgrade -- is that with every couple versions the API seems to become vastly and fundamentally different than the prior. Of course, a lot of this is my fault, given that my version history has been 1.7.10 => 1.8.9 => 1.12.2 => 1.15.2 -- No matter. The big issue I always had was that it felt like I had to re-learn the vast majority of the API every time I wanted to move to a new version, which made the upgrading process of my mods less than ideal. Seeing that the Forge team has put a great deal of effort forth to refactor the whole system, does this mean that Forge's API should be far more consistent between future versions (where possible)? After these version changes over the past several years, I have been debating on designing my own secondary API that my mods are built on top of, so all I need to really do is update how my API interacts with Forge, and then my mod code that uses my API can stay relatively the same. However, given the recent rework of Forge, this step may be obsolete. What are the long term plans for the structure of Forge's API? Will it see less radical changes between minor version updates in Minecraft?
  5. I was able to get it working. Thanks. For those who may be reading this post in the future with the same problem, just to cover this, I added a method that takes in a ModelRegistryEvent as a parameter and used the @SubscribeEvent annotation on this method. The method used the stuff shown in the docs there to register my models.
  6. That's likely the fault. I was not aware that you needed to register models. Can you link me to the documentation that goes over how to do this / show me a simple code example?
  7. There's no errors I saw the log. I would have brought it up if I had seen one. Here it is. 2018-11-11 18:05:47,999 main WARN Disabling terminal, you're running in an unsupported environment. [18:05:48] [main/INFO] [GradleStart]: Extra: [] [18:05:48] [main/INFO] [GradleStart]: Running with arguments: [--userProperties, {}, --assetsDir, C:/Users/subzeroshark/.gradle/caches/minecraft/assets, --assetIndex, 1.12, --accessToken{REDACTED}, --version, 1.12.2, --tweakClass, net.minecraftforge.fml.common.launcher.FMLTweaker, --tweakClass, net.minecraftforge.gradle.tweakers.CoremodTweaker] [18:05:48] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLTweaker [18:05:48] [main/INFO] [LaunchWrapper]: Using primary tweak class name net.minecraftforge.fml.common.launcher.FMLTweaker [18:05:48] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.gradle.tweakers.CoremodTweaker [18:05:48] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLTweaker [18:05:48] [main/INFO] [FML]: Forge Mod Loader version 14.23.4.2705 for Minecraft 1.12.2 loading [18:05:48] [main/INFO] [FML]: Java is Java HotSpot(TM) 64-Bit Server VM, version 1.8.0_181, running on Windows 7:amd64:6.1, installed at F:\Program Files\Java\jre1.8.0_181 [18:05:48] [main/ERROR] [FML]: Apache Maven library folder was not in the format expected. Using default libraries directory. [18:05:48] [main/ERROR] [FML]: Full: F:\Users\subzeroshark\.gradle\caches\modules-2\files-2.1\org.apache.maven\maven-artifact\3.5.3\7dc72b6d6d8a6dced3d294ed54c2cc3515ade9f4\maven-artifact-3.5.3.jar [18:05:48] [main/ERROR] [FML]: Trimmed: f:/users/subzeroshark/.gradle/caches/modules-2/files-2.1/org.apache.maven/maven-artifact/3.5.3/ [18:05:48] [main/INFO] [FML]: Managed to load a deobfuscated Minecraft name- we are in a deobfuscated environment. Skipping runtime deobfuscation [18:05:48] [main/INFO] [FML]: Ignoring missing certificate for coremod FMLCorePlugin (net.minecraftforge.fml.relauncher.FMLCorePlugin), we are in deobf and it's a forge core plugin [18:05:48] [main/INFO] [FML]: Ignoring missing certificate for coremod FMLForgePlugin (net.minecraftforge.classloading.FMLForgePlugin), we are in deobf and it's a forge core plugin [18:05:48] [main/INFO] [FML]: Searching C:\Users\subzeroshark\Desktop\Minecraft Forge\Forge 1.12.2\run\.\mods for mods [18:05:48] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.gradle.tweakers.CoremodTweaker [18:05:48] [main/INFO] [GradleStart]: Injecting location in coremod net.minecraftforge.fml.relauncher.FMLCorePlugin [18:05:48] [main/INFO] [GradleStart]: Injecting location in coremod net.minecraftforge.classloading.FMLForgePlugin [18:05:48] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker [18:05:48] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLDeobfTweaker [18:05:48] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.gradle.tweakers.AccessTransformerTweaker [18:05:48] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker [18:05:48] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker [18:05:48] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [18:05:50] [main/ERROR] [FML]: FML appears to be missing any signature data. This is not a good thing [18:05:50] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [18:05:50] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLDeobfTweaker [18:05:51] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.gradle.tweakers.AccessTransformerTweaker [18:05:51] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.TerminalTweaker [18:05:51] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.TerminalTweaker [18:05:51] [main/INFO] [LaunchWrapper]: Launching wrapped minecraft {net.minecraft.client.main.Main} [18:05:52] [main/INFO] [net.minecraft.client.Minecraft]: Setting user: Player304 [18:05:58] [main/WARN] [net.minecraft.client.settings.GameSettings]: Skipping bad option: lastServer: [18:05:58] [main/INFO] [net.minecraft.client.Minecraft]: LWJGL Version: 2.9.4 [18:05:59] [main/INFO] [FML]: -- System Details -- Details: Minecraft Version: 1.12.2 Operating System: Windows 7 (amd64) version 6.1 Java Version: 1.8.0_181, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 739561240 bytes (705 MB) / 1037959168 bytes (989 MB) up to 1037959168 bytes (989 MB) JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 FML: Loaded coremods (and transformers): GL info: ' Vendor: 'NVIDIA Corporation' Version: '4.6.0 NVIDIA 411.70' Renderer: 'GeForce GTX 950/PCIe/SSE2' [18:05:59] [main/INFO] [FML]: MinecraftForge v14.23.4.2705 Initialized [18:05:59] [main/INFO] [FML]: Starts to replace vanilla recipe ingredients with ore ingredients. [18:05:59] [main/INFO] [FML]: Replaced 1036 ore ingredients [18:05:59] [main/INFO] [FML]: Searching C:\Users\subzeroshark\Desktop\Minecraft Forge\Forge 1.12.2\run\.\mods for mods [18:06:01] [main/INFO] [FML]: Forge Mod Loader has identified 5 mods to load [18:06:01] [Thread-3/INFO] [FML]: Using sync timing. 200 frames of Display.update took 189384251 nanos [18:06:02] [main/INFO] [FML]: Attempting connection with missing mods [minecraft, mcp, FML, forge, xanblocks] at CLIENT [18:06:02] [main/INFO] [FML]: Attempting connection with missing mods [minecraft, mcp, FML, forge, xanblocks] at SERVER [18:06:03] [main/INFO] [net.minecraft.client.resources.SimpleReloadableResourceManager]: Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:Xan's Blocks [18:06:03] [main/INFO] [FML]: Processing ObjectHolder annotations [18:06:03] [main/INFO] [FML]: Found 1168 ObjectHolder annotations [18:06:03] [main/INFO] [FML]: Identifying ItemStackHolder annotations [18:06:03] [main/INFO] [FML]: Found 0 ItemStackHolder annotations [18:06:03] [main/INFO] [FML]: Configured a dormant chunk cache size of 0 [18:06:03] [Forge Version Check/INFO] [forge.VersionCheck]: [forge] Starting version check at http://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json [18:06:03] [main/INFO] [xanblocks]: NOTE: The internal array for blocks/items was null! Calling creation method. [18:06:03] [main/INFO] [FML]: Applying holder lookups [18:06:03] [main/INFO] [FML]: Holder lookups applied [18:06:03] [main/INFO] [FML]: Applying holder lookups [18:06:03] [main/INFO] [FML]: Holder lookups applied [18:06:03] [main/INFO] [FML]: Applying holder lookups [18:06:03] [main/INFO] [FML]: Holder lookups applied [18:06:03] [main/INFO] [FML]: Applying holder lookups [18:06:03] [main/INFO] [FML]: Holder lookups applied [18:06:03] [main/INFO] [FML]: Injecting itemstacks [18:06:03] [main/INFO] [FML]: Itemstack injection complete [18:06:03] [Forge Version Check/INFO] [forge.VersionCheck]: [forge] Found status: OUTDATED Target: 14.23.5.2768 [18:06:06] [Sound Library Loader/INFO] [net.minecraft.client.audio.SoundManager]: Starting up SoundSystem... [18:06:06] [Thread-5/INFO] [net.minecraft.client.audio.SoundManager]: Initializing LWJGL OpenAL [18:06:06] [Thread-5/INFO] [net.minecraft.client.audio.SoundManager]: (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org) [18:06:06] [Thread-5/INFO] [net.minecraft.client.audio.SoundManager]: OpenAL initialized. [18:06:06] [Sound Library Loader/INFO] [net.minecraft.client.audio.SoundManager]: Sound engine started [18:06:10] [main/INFO] [FML]: Max texture size: 16384 [18:06:10] [main/INFO] [net.minecraft.client.renderer.texture.TextureMap]: Created: 512x512 textures-atlas [18:06:12] [main/INFO] [FML]: Applying holder lookups [18:06:12] [main/INFO] [FML]: Holder lookups applied [18:06:12] [main/INFO] [FML]: Injecting itemstacks [18:06:12] [main/INFO] [FML]: Itemstack injection complete [18:06:12] [main/INFO] [FML]: Forge Mod Loader has successfully loaded 5 mods [18:06:12] [main/WARN] [net.minecraft.client.settings.GameSettings]: Skipping bad option: lastServer: [18:06:13] [main/INFO] [com.mojang.text2speech.NarratorWindows]: Narrator library for x64 successfully loaded [18:06:14] [Realms Notification Availability checker #1/INFO] [com.mojang.realmsclient.client.RealmsClient]: Could not authorize you against Realms server: Invalid session id [18:06:26] [Server thread/INFO] [net.minecraft.server.integrated.IntegratedServer]: Starting integrated minecraft server version 1.12.2 [18:06:26] [Server thread/INFO] [net.minecraft.server.integrated.IntegratedServer]: Generating keypair [18:06:26] [Server thread/INFO] [FML]: Injecting existing registry data into this server instance [18:06:26] [Server thread/INFO] [FML]: Applying holder lookups [18:06:26] [Server thread/INFO] [FML]: Holder lookups applied [18:06:27] [Server thread/INFO] [FML]: Loading dimension 0 (Test) (net.minecraft.server.integrated.IntegratedServer@23664111) [18:06:27] [Server thread/INFO] [net.minecraft.advancements.AdvancementList]: Loaded 488 advancements [18:06:27] [Server thread/INFO] [FML]: Loading dimension 1 (Test) (net.minecraft.server.integrated.IntegratedServer@23664111) [18:06:27] [Server thread/INFO] [FML]: Loading dimension -1 (Test) (net.minecraft.server.integrated.IntegratedServer@23664111) [18:06:27] [Server thread/INFO] [net.minecraft.server.MinecraftServer]: Preparing start region for level 0 [18:06:28] [Server thread/INFO] [net.minecraft.server.MinecraftServer]: Preparing spawn area: 25% [18:06:29] [Server thread/INFO] [FML]: Unloading dimension -1 [18:06:29] [Server thread/INFO] [FML]: Unloading dimension 1 [18:06:29] [Server thread/INFO] [net.minecraft.server.integrated.IntegratedServer]: Changing view distance to 12, from 10 [18:06:31] [Netty Local Client IO #0/INFO] [FML]: Server protocol version 2 [18:06:31] [Netty Server IO #1/INFO] [FML]: Client protocol version 2 [18:06:31] [Netty Server IO #1/INFO] [FML]: Client attempting to join with 5 mods : minecraft@1.12.2,FML@8.0.99.99,forge@14.23.4.2705,mcp@9.42,xanblocks@1.0 [18:06:31] [Netty Local Client IO #0/INFO] [FML]: [Netty Local Client IO #0] Client side modded connection established [18:06:31] [Server thread/INFO] [FML]: [Server thread] Server side modded connection established [18:06:31] [Server thread/INFO] [net.minecraft.server.management.PlayerList]: Player304[local:E:003a34c1] logged in with entity id 351 at (-236.9029084561838, 71.0, 289.73684455466076) [18:06:31] [Server thread/INFO] [net.minecraft.server.MinecraftServer]: Player304 joined the game [18:06:32] [Server thread/INFO] [net.minecraft.server.integrated.IntegratedServer]: Saving and pausing game... [18:06:32] [Server thread/INFO] [net.minecraft.server.MinecraftServer]: Saving chunks for level 'Test'/overworld [18:06:32] [pool-2-thread-1/WARN] [com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService]: Couldn't look up profile properties for com.mojang.authlib.GameProfile@412f8573[id=2b98548a-5e09-3029-b082-b4c99d31d926,name=Player304,properties={},legacy=false] com.mojang.authlib.exceptions.AuthenticationException: The client has sent too many requests within a certain amount of time at com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService.makeRequest(YggdrasilAuthenticationService.java:79) ~[YggdrasilAuthenticationService.class:?] at com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService.fillGameProfile(YggdrasilMinecraftSessionService.java:180) [YggdrasilMinecraftSessionService.class:?] at com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService$1.load(YggdrasilMinecraftSessionService.java:60) [YggdrasilMinecraftSessionService$1.class:?] at com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService$1.load(YggdrasilMinecraftSessionService.java:57) [YggdrasilMinecraftSessionService$1.class:?] at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3716) [guava-21.0.jar:?] at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2424) [guava-21.0.jar:?] at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2298) [guava-21.0.jar:?] at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2211) [guava-21.0.jar:?] at com.google.common.cache.LocalCache.get(LocalCache.java:4154) [guava-21.0.jar:?] at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4158) [guava-21.0.jar:?] at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5147) [guava-21.0.jar:?] at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:5153) [guava-21.0.jar:?] at com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService.fillProfileProperties(YggdrasilMinecraftSessionService.java:170) [YggdrasilMinecraftSessionService.class:?] at net.minecraft.client.Minecraft.getProfileProperties(Minecraft.java:3178) [Minecraft.class:?] at net.minecraft.client.resources.SkinManager$3.run(SkinManager.java:138) [SkinManager$3.class:?] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_181] at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_181] at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_181] at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_181] at java.lang.Thread.run(Unknown Source) [?:1.8.0_181] [18:06:32] [Server thread/INFO] [net.minecraft.server.integrated.IntegratedServer]: Saving and pausing game... [18:06:32] [Server thread/INFO] [net.minecraft.server.MinecraftServer]: Saving chunks for level 'Test'/overworld [18:06:36] [Server thread/INFO] [net.minecraft.server.integrated.IntegratedServer]: Saving and pausing game... [18:06:36] [Server thread/INFO] [net.minecraft.server.MinecraftServer]: Saving chunks for level 'Test'/overworld This is from launch all the way to me loading the world.
  8. The issue I'm having is quite simple. I have registered some blocks and they render properly, however the item models + inventory icons are not showing properly. Here is an image of what's happening. The checkerboard block is a dropped item. Here's the respective assets for the "Arcane Stone" block. xanblocks/blockstates/arcanestone.json { "variants": { "normal": { "model": "xanblocks:arcanestone" } } } xanblocks/models/block/arcanestone.json { "parent": "block/cube_all", "textures": { "all": "xanblocks:blocks/arcanestone" } } xanblocks/models/item/arcanestone.json { "parent": "xanblocks:block/arcanestone", "display": { "thirdperson": { "rotation": [ 10, -45, 170 ], "translation": [ 0, 1.5, -2.75 ], "scale": [ 0.375, 0.375, 0.375 ] } } } The java code for this block: //Cut out imports and stuff to save space. public class BlockArcaneStone extends XanBlockSuperclass { public BlockArcaneStone() { super(Material.ROCK); name = "arcanestone"; //Cut out setHardness, setResistance, setSoundType, setLightLevel, setLightOpacity, and setCreativeTab to save space setUnlocalizedName(name); setRegistryName(name); thisItem = new ItemBlock(this).setRegistryName(name); } } XanBlockSuperClass (This was done for ease of registering blocks) //Cut out imports and stuff to save space. public class XanBlockSuperclass extends Block { protected String name = null; protected Item thisItem = null; public XanBlockSuperclass(Material materialIn) { super(materialIn); } public Item getItemForThisBlock() { return thisItem; } } And my registry code. //Cut out imports and stuff to save space. @Mod.EventBusSubscriber public class MainBlockRegistry { public static XanBlockSuperclass[] blocks = null; public static Item[] items = null; public static void createData() { //Create an array storing all of my blocks. blocks = new XanBlockSuperclass[] { new BlockLightCrystal(), new BlockHardLight(), new BlockArcaneStone(), new BlockLightArcaneStone(), new BlockShadowStone(), new BlockLightShadowStone() }; //Iterate through this array to get the respective Item. items = new Item[blocks.length]; for (int idx = 0; idx < items.length; idx++) { XanBlockSuperclass block = blocks[idx]; items[idx] = block.getItemForThisBlock(); } } @SubscribeEvent public static void registerAllBlocks(RegistryEvent.Register<Block> event) { if (blocks == null) { XanBlockMod.logger.info("NOTE: The internal array for blocks/items was null! Calling creation method."); createData(); } event.getRegistry().registerAll(blocks); } @SubscribeEvent public static void registerItemBlocks(RegistryEvent.Register<Item> event) { if (blocks == null) { //Items is guaranteed to be null in the same case. Checking for blocks being null is okay. XanBlockMod.logger.info("NOTE: The internal array for blocks/items was null! Calling creation method."); createData(); } event.getRegistry().registerAll(items); } } I've looked over my code a few times and I'm uncertain as to what I'm missing. Unfortunately my own lack of knowledge for the API is likely where I'm tripping up. Thanks for your time.
  9. Then I assume there's some workflow Forge offers so that we can request event additions? I do understand why making coremods may be "frowned upon" per se, because the reason Forge was created was to prevent the very thing that CoreMods do - Class replacement. I think asking Forge to append event hooks to everything is rather overkill, but I would be willing to come up with a solution, in fact as I was writing this reply I did come up with something. Well, I shouldn't really be as mad as I was. The reason behind preventing coremods is logical and I see good reason for not promoting them. Thanks for the help otherwise, again. Wasn't a huge breakthrough but it was certainly of value.
  10. Edit: I managed to find out why it wasn't working at all on the coremod end of it. I had not known (primarily for lack of any documentation what-so-ever that I could find on the resources offered by Forge) that I had to edit my MANIFEST.MF file to show the code to my CoreMod. I managed to find that information on some obscure post from the Minecraft forums instead of the one place I was expecting to find it: The forge API. If I had to put it simply? I'm furious. I spent quite some magnitude of my own time searching for potential asm mistakes, replication errors, even re-reading the one page on the entire website that says how to set up the parts of your mod. I looked up pages and pages of things on Google to find out if I was doing any asm wrong, maybe to see if other people had my issues. I did all of this only to find out that I had to edit my manifest file, more that my code was absolutely functional. I really don't have much else than that. I've gotten my point across. At least I learned a lot when trying to find the mistake that I thought was in my code. If I had to get back on topic? It's working fine now that I have been able to actually test it. I guess the least I can do is say thanks, because you pointed me to using a bit of a better method for storing player data. Thanks.
  11. Alright, thanks. This will actually make it quite a lot easier to manage, since I don't have to use reflection to get my value anymore. I'll edit this reply when I am able to test that, since I'm away from home right now.
  12. Hey. I'm having a bit of a problem involving field inheritance for EntityPlayer. My mod thread is over in the Mods subforum, and I've had to revoke the download for it for the time being due to an error. My focus is the /eyepos command implemented by my mod. On my serverside I have a packet that gets sent out to the client who ran the command that tells them to update their defaultEyeHeight field. This is my custom field that I implemented via ASM. However, I have found that the code will error when attempting to be indexed on EntityPlayerSP. Naturally, this is the one thing that's absolutely required for it to work. How do I go about ensuring that all of the classes under EntityPlayer inherit the field? I think the most annoying part of this issue is that casting the player to EntityPlayer did not work as needed, as the error still said that it wasn't a valid member of despite the cast. This was also the case if I had my reflection method index the superclass until it hit EntityPlayer to grab the field. I have also attempted to append the field to the EntityPlayerSP class (Rather than just the plain EntityPlayer) via asm but even that fails for some unknown reason. Right now, this is the only issue holding the mod from release. Any ideas?
  13. Yeah. I had written for 1.8.9 because it was originally for a modpack my friends play on. If the obfuscated code inside of EntityPlayer hasn't changed (I can check on MCP pretty quick) then I can actually re-release the same code just with the transformer set to work for the latest version.
  14. Hey all! I'd like to introduce to you my new project: CharacterOverrideUtils. This mod is actually the first formally-released mod I've ever created. All of my previous mods are super simple and add a block or item, just for messing around. Only for personal use, too. This is a bit of a change because it's got a lot more functionality, took a lot more work, and has been released here. Phew. So - What is this? CharacterOverrideUtils is a mod that ties into Noppes's MorePlayerModels mod to append proportional collisions to your player model of choice. Writing this wasn't as easy as I had hoped, but I pushed through it and made sure I did it right. Came out rather well I think. Please note: This mod will not function unless you have MorePlayerModels active. Let me know what you think of it, as well as what you think should be added, changed, or removed. Edit to mock how long it took me: After 10,000 years in development, hopefully it will have been worth the wait. Functionality: Whenever you change a property of your model (scale, for instance) or change the entity you're disguised as, your collision box and other corresponding properties will update to reflect that of the model automatically. If you become something small enough, you can fit in 1x1 spaces! Suffocation mechanics have been reworked. A side effect of Minecraft's default method for detecting suffocation causes it to think the player should suffocate, should they be placed in a 1x1 tunnel. I've reworked this value accordingly. Please message me if you find any areas where it hurts you and shouldn't. Block push mechanics have also been changed. These were the mechanics responsible for pushing you away if sand or gravel fell on you, for instance. They have been removed due to lack of adequate compatibility. Command: /eyepos - This command is used to offset your eye position. This is good for when you have a model that has a scale of 0.5, where the eye is just high enough to clip the ceiling if you jump. /eyepos with no args will print your eye height offset. /eyepos <value> will set the offset /eyepos <value> <player> will set the offset for someone else Game rules: eyeOffsetDistanceLimit - The maximum value (plus or minus) for an acceptable value from /eyepos <value> allowPlayerChangeEyes - Takes in true or false, and if true players can use /eyepos <value>. If false, only ops and the server owner can use the command canOpsIgnoreEyeLimit - Self explanatory. If true, the eye limit will not be applied to ops. A CoreMod written to support multiple versions! Through a value store I have been able to store the obfuscated names for the methods I replace, as well as any opcode changes. Known bugs: Rare inconsistencies with eye height offsets, though I think they've been patched. At times it may give you the wrong value. Just use /eyepos 0 if you really wanna make sure it's right. Mod Jar file: For Minecraft Forge 1.8.9 - Download via Google Drive Media:
  15. Edit (Important): I have managed to get somewhat of a fix to be functional. This fix involves listening for the same render event that MPM listens to in RenderEvent. What I did was set my event's priority to EventPriority.HIGHEST and, upon the event being called, manually set my eyeHeight then cancelled the event. This fix is not entirely satisfactory as it causes jittering in third person, and I would still appreciate some help if possible. Edit 2: I have tinkered around with my fix a bit more, and I have gotten it to work on a level that's satisfactory. It was much similar to above but I just appended some different conditions for when the user is in third person. Hi all. I'm writing a mod that overrides players' collision sizes, allowing them to fit within 1x1 tunnels. I'm using this mod in conjunction with MorePlayerModels so that smaller models have more realistic collision on my server. However, there are some issues that come from MorePlayerModels's override to eyeHeight. The first side effect, and the most impacting, is that my inability to edit the eyeHeight value causes Minecraft's vanilla collision system to think the player is suffocating should they be in a 1x1 tunnel. The collision system that detects suffocation uses eye height for its reference rather than the player's bounding box. The second side effect is that, if the player jumps inside of a 1x1 tunnel, they will clip through the top block very briefly. Is there a field I can remotely change within whatever class is overriding eyeHeight? If not, what's the best way to allow me to customize eyeHeight in my own code without having MPM interfere? Thanks.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.