Good work on this mod! That blacksmith-double-slab thing has been bothering me for a while now...
Thanks for supplying the source btw. I've been having trouble figuring out how to make core mods for 1.7.x, so your source really helped me learn how!
I'm glad you like it! Though my organization might not be the best
Progress update -
Twiddling around with the reappearing tools bug.
It seems to only affect unbreaking enchanted tools (and laggy servers, but the mod can't and won't magically fix lag, at least not without major changes to client<->server communications, which is beyond the vision and scope of this bugfixmod)
It is a result of the client and server computing the Unbreaking chance separately, kinda like this:
Client: "Hey we broke a block with 0 durability pick, calculated that Unbreaking won't save the tool, remove it from the client player's inventory and show the broken tool animation."
Server: "Hey he broke a block with 0 durability pick, calculated that Unbreaking will save the tool, keep it at durability 0"
So the next time the user clicks on the client with that hotbar hand, or tries to move something into that slot, the server resyncs the inventory and the pick shows up. This can happen many times before the server finally decides to break the tool.
The fix is simple, only damage tools on the server side. Unfortunately, this has the side effect of breaking the broken tool animation (heh, ironic).
I'll try to find a way to preserve it. Otherwise, I'll add the fix, just disabled by default.
As of the 1.7.6 prerelease the bug that ArrowFix accounts for has been fixed by Mojang (wow, they fixed something for once!)
When Forge updates to 1.7.6 ArrowFix will be permanently disabled (I'll keep the code in for open source's sake).
Suggestion: Fixing the xp orb desync between the server/client. I'm guessing all that needs to be done is disable xp orb calculation on the client?
The client is what makes it animate smoothly though. If we disable it completely you would literally see the orb jumping block by block towards you (because that's how often it syncs with the server, ~1 sec)
The client does its own thing with entities. The server only sends packets to the client to 1) Spawn/kill entities, 2) Resync entities, 3) Teleport entities 4) Change metadata
So in the time between the sync points the orb probably traces a slightly (sometimes completely) different path on the server than on the client. Potentially we could have the server send the exact velocity of the orbs as they're spawned to further increase consistency (not sure exactly what it sends and what it doesn't, but we could probably send more)
Clientside fix for disappearing and reappearing Unbreaking tools (MC-1040), disabled by default due to aesthetic glitches, but functionality is completely working
Clientside fix for hearts not flashing white the damage taken (MC-2930), enabled by default.
Thank you for making this, I miss alot of these things....
MOJANG FIX YOUR JUNK
Haha I'm glad you enjoy it!
Made it mainly because some of the glitches (especially XPFix's bug, ArrowFix's bug before Mojang patched it in 1.7.6, and ChatOpacity) drove me almost literally mad from ocd-annoyance
What's irritating is some of these bugs, like XPFix's, have been in the game for almost 4 major versions now and no one's bothered to insert three lines to fix it (most of these bugfixes are one- to three-line additions or removals to the base code, just have to do more elaborate magic to use it with Forge)
This seems good, but you said this will exit once serverjoining. but what about the chatopacityfix and the hearthflashfix? these seem to be only clientside, am i wrong?
This seems good, but you said this will exit once serverjoining. but what about the chatopacityfix and the hearthflashfix? these seem to be only clientside, am i wrong?
As in the patcher for those fixes will be triggered, but since the server jar doesn't even have the classes they need to change they don't find anything and thus have no effect
If only the client has the mod installed connecting to another server then only the clientside fixes will work. Updated the OP to clarify this
Damn nice fixes some of these bugged me to no end.
There's one that annoys me massively but I'm not sure it's fixable; in 1.7.2 they introduced a bug with the render distance
I've made some screens that showcase the issue:
Both are made in the same position using the same settings at a view distance of 16. I know this bug is fixed in 1.7.4 but since the modding community is stuck waiting on 1.7.2 I'm having no option but to otherwise wait for the mods to move on to 1.8.
at this point I'd pay to get a temporary fix in 1.7.2 though I'm not sure this is possible, it's just so frustrating knowing there's a fix out there, yet unable to acquire it.
anyway disregard my wishful thinking I'd say you've already done a nice job cleaning out a few eye-sores.
Render distance fix was because the client never properly sent the server the amount of chunks it wanted to load. Fixing this would probably take more effort than the reward would be worth - cpw said that there's already a Forge 1.7.9 in existence so I'd rather just wait for the new Forge
New release: 0.4.5
Added fix for items bouncing around on stairs
Added fix for items bouncing around on locked hoppers, DISABLED by default. When the hopper is unlocked, the item on it will not be sucked back in...may break contraptions.
These two fixes only need to be serverside for real benefit, but if the client doesn't have it while the server does it'll seem really glitchy because it's still bouncing clientside.
Did NOT add a fix for items bouncing around inside cauldrons...using the fix for the other two broke the cauldron rendering and digging hitbox.
Bump for version 1.0.0
- Moved to separate site (see OP), I'll continue posting changelogs here if I feel like it
- Changed to iChun-like versioning system
- Added ArrowDingTweak (disabled by default tweak to play the "ding" sound effect for hostile mobs when hit by an arrow in addition to the vanilla behavior (only other players))
Bump to 2.1.2-
Updated to 1.7.10
ToolDesyncFix actually works
Chickens are also lured by nether wart; they are now lured by all items they can breed with.
Got this running on a dedicated server with version 2.5.0 - looks like an accidental client-side-only reference.
Edit: Removing BugfixMod didn't help, so I guess it only showed up in the stacktrace because it's an ASM transformer. Sorry about that.
[17:50:03] [Server thread/ERROR]: Encountered an unexpected exception
java.lang.NoClassDefFoundError: net/minecraft/client/resources/IResourceManagerReloadListener
at java.lang.Class.forName0(Native Method) ~[?:1.8.0_31]
at java.lang.Class.forName(Class.java:344) ~[?:1.8.0_31]
at cpw.mods.fml.common.FMLModContainer.constructMod(FMLModContainer.java:420) ~[FMLModContainer.class:?]
at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source) ~[?:?]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_31]
at java.lang.reflect.Method.invoke(Method.java:483) ~[?:1.8.0_31]
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) ~[minecraft_server.1.7.10.jar:?]
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) ~[minecraft_server.1.7.10.jar:?]
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) ~[minecraft_server.1.7.10.jar:?]
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) ~[minecraft_server.1.7.10.jar:?]
at com.google.common.eventbus.EventBus.post(EventBus.java:275) ~[minecraft_server.1.7.10.jar:?]
at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:208) ~[LoadController.class:?]
at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:187) ~[LoadController.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_31]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_31]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_31]
at java.lang.reflect.Method.invoke(Method.java:483) ~[?:1.8.0_31]
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) ~[minecraft_server.1.7.10.jar:?]
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) ~[minecraft_server.1.7.10.jar:?]
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) ~[minecraft_server.1.7.10.jar:?]
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) ~[minecraft_server.1.7.10.jar:?]
at com.google.common.eventbus.EventBus.post(EventBus.java:275) ~[minecraft_server.1.7.10.jar:?]
at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:118) ~[LoadController.class:?]
at cpw.mods.fml.common.Loader.loadMods(Loader.java:492) ~[Loader.class:?]
at cpw.mods.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:87) ~[FMLServerHandler.class:?]
at cpw.mods.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:314) ~[FMLCommonHandler.class:?]
at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:117) ~[lt.class:?]
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:387) [MinecraftServer.class:?]
at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:685) [li.class:?]
Caused by: java.lang.ClassNotFoundException: net.minecraft.client.resources.IResourceManagerReloadListener
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191) ~[launchwrapper-1.11.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_31]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_31]
... 29 more
Caused by: java.lang.NullPointerException
at org.objectweb.asm.ClassReader.<init>(Unknown Source) ~[asm-all-5.0.3.jar:5.0.3]
at williewillus.BugfixMod.patchers.AbstractPatcher.patch(AbstractPatcher.java:32) ~[AbstractPatcher.class:?]
at williewillus.BugfixMod.BugfixModClassTransformer.transform(BugfixModClassTransformer.java:90) ~[BugfixModClassTransformer.class:?]
at net.minecraft.launchwrapper.LaunchClassLoader.runTransformers(LaunchClassLoader.java:279) ~[launchwrapper-1.11.jar:?]
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:176) ~[launchwrapper-1.11.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_31]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_31]
... 29 more
http://williewillus.....com/bugfixmod/
At a glance for those too lazy to click:
2.5.0-
BoatDesyncFix - Thanks to jonathan2520 on Mojira!!!
I'm glad you like it! Though my organization might not be the best
Twiddling around with the reappearing tools bug.
It seems to only affect unbreaking enchanted tools (and laggy servers, but the mod can't and won't magically fix lag, at least not without major changes to client<->server communications, which is beyond the vision and scope of this bugfixmod)
It is a result of the client and server computing the Unbreaking chance separately, kinda like this:
Client: "Hey we broke a block with 0 durability pick, calculated that Unbreaking won't save the tool, remove it from the client player's inventory and show the broken tool animation."
Server: "Hey he broke a block with 0 durability pick, calculated that Unbreaking will save the tool, keep it at durability 0"
So the next time the user clicks on the client with that hotbar hand, or tries to move something into that slot, the server resyncs the inventory and the pick shows up. This can happen many times before the server finally decides to break the tool.
The fix is simple, only damage tools on the server side. Unfortunately, this has the side effect of breaking the broken tool animation (heh, ironic).
I'll try to find a way to preserve it. Otherwise, I'll add the fix, just disabled by default.
When Forge updates to 1.7.6 ArrowFix will be permanently disabled (I'll keep the code in for open source's sake).
The client is what makes it animate smoothly though. If we disable it completely you would literally see the orb jumping block by block towards you (because that's how often it syncs with the server, ~1 sec)
The client does its own thing with entities. The server only sends packets to the client to 1) Spawn/kill entities, 2) Resync entities, 3) Teleport entities 4) Change metadata
So in the time between the sync points the orb probably traces a slightly (sometimes completely) different path on the server than on the client. Potentially we could have the server send the exact velocity of the orbs as they're spawned to further increase consistency (not sure exactly what it sends and what it doesn't, but we could probably send more)
Check here!: http://minecraft.curseforge.com/mc-mods/79384-littlefix
Clientside fix for disappearing and reappearing Unbreaking tools (MC-1040), disabled by default due to aesthetic glitches, but functionality is completely working
Clientside fix for hearts not flashing white the damage taken (MC-2930), enabled by default.
Huge refactor, making it easy to add future fixes. Stay tuned for more!
MOJANG FIX YOUR JUNK
Haha I'm glad you enjoy it!
Made it mainly because some of the glitches (especially XPFix's bug, ArrowFix's bug before Mojang patched it in 1.7.6, and ChatOpacity) drove me almost literally mad from ocd-annoyance
What's irritating is some of these bugs, like XPFix's, have been in the game for almost 4 major versions now and no one's bothered to insert three lines to fix it (most of these bugfixes are one- to three-line additions or removals to the base code, just have to do more elaborate magic to use it with Forge)
I concur, FIX YOUR CLIENT MOJANG.
As in the patcher for those fixes will be triggered, but since the server jar doesn't even have the classes they need to change they don't find anything and thus have no effect
If only the client has the mod installed connecting to another server then only the clientside fixes will work. Updated the OP to clarify this
Render distance fix was because the client never properly sent the server the amount of chunks it wanted to load. Fixing this would probably take more effort than the reward would be worth - cpw said that there's already a Forge 1.7.9 in existence so I'd rather just wait for the new Forge
Yeah cpw was discussing the update to 1.7.10 on twitter so I know that active development is occurring.
Added fix for items bouncing around on stairs
Added fix for items bouncing around on locked hoppers, DISABLED by default. When the hopper is unlocked, the item on it will not be sucked back in...may break contraptions.
These two fixes only need to be serverside for real benefit, but if the client doesn't have it while the server does it'll seem really glitchy because it's still bouncing clientside.
Did NOT add a fix for items bouncing around inside cauldrons...using the fix for the other two broke the cauldron rendering and digging hitbox.
- Moved to separate site (see OP), I'll continue posting changelogs here if I feel like it
- Changed to iChun-like versioning system
- Added ArrowDingTweak (disabled by default tweak to play the "ding" sound effect for hostile mobs when hit by an arrow in addition to the vanilla behavior (only other players))
Updated to 1.7.10
ToolDesyncFix actually works
Chickens are also lured by nether wart; they are now lured by all items they can breed with.
Add heartblinkfix - fix for hearts not blinking when regenerating in 1.7.x
Add BoatDesyncFix
BOATS WORK AGAIN
Now to prevent them from breaking when a lilypad breathes on it...
Edit: Removing BugfixMod didn't help, so I guess it only showed up in the stacktrace because it's an ASM transformer. Sorry about that.
java.lang.NoClassDefFoundError: net/minecraft/client/resources/IResourceManagerReloadListener
at java.lang.Class.forName0(Native Method) ~[?:1.8.0_31]
at java.lang.Class.forName(Class.java:344) ~[?:1.8.0_31]
at cpw.mods.fml.common.FMLModContainer.constructMod(FMLModContainer.java:420) ~[FMLModContainer.class:?]
at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source) ~[?:?]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_31]
at java.lang.reflect.Method.invoke(Method.java:483) ~[?:1.8.0_31]
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) ~[minecraft_server.1.7.10.jar:?]
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) ~[minecraft_server.1.7.10.jar:?]
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) ~[minecraft_server.1.7.10.jar:?]
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) ~[minecraft_server.1.7.10.jar:?]
at com.google.common.eventbus.EventBus.post(EventBus.java:275) ~[minecraft_server.1.7.10.jar:?]
at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:208) ~[LoadController.class:?]
at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:187) ~[LoadController.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_31]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_31]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_31]
at java.lang.reflect.Method.invoke(Method.java:483) ~[?:1.8.0_31]
at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) ~[minecraft_server.1.7.10.jar:?]
at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) ~[minecraft_server.1.7.10.jar:?]
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) ~[minecraft_server.1.7.10.jar:?]
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) ~[minecraft_server.1.7.10.jar:?]
at com.google.common.eventbus.EventBus.post(EventBus.java:275) ~[minecraft_server.1.7.10.jar:?]
at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:118) ~[LoadController.class:?]
at cpw.mods.fml.common.Loader.loadMods(Loader.java:492) ~[Loader.class:?]
at cpw.mods.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:87) ~[FMLServerHandler.class:?]
at cpw.mods.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:314) ~[FMLCommonHandler.class:?]
at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:117) ~[lt.class:?]
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:387) [MinecraftServer.class:?]
at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:685) [li.class:?]
Caused by: java.lang.ClassNotFoundException: net.minecraft.client.resources.IResourceManagerReloadListener
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191) ~[launchwrapper-1.11.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_31]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_31]
... 29 more
Caused by: java.lang.NullPointerException
at org.objectweb.asm.ClassReader.<init>(Unknown Source) ~[asm-all-5.0.3.jar:5.0.3]
at williewillus.BugfixMod.patchers.AbstractPatcher.patch(AbstractPatcher.java:32) ~[AbstractPatcher.class:?]
at williewillus.BugfixMod.BugfixModClassTransformer.transform(BugfixModClassTransformer.java:90) ~[BugfixModClassTransformer.class:?]
at net.minecraft.launchwrapper.LaunchClassLoader.runTransformers(LaunchClassLoader.java:279) ~[launchwrapper-1.11.jar:?]
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:176) ~[launchwrapper-1.11.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_31]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_31]
... 29 more