Ore To Client Obfuscation
Current Version: 1.9.4.1
Read below instead of just clicking download in the top right and trying to figure it out on your own.
The Bukkit team does not support modified versions of Craftbukkit. Test with OTCO uninstalled before reporting bugs or crashes to the Bukkit team.
Features:
- Rewrites chunk packets sent to the client to hide unexposed ores
Before:
After (Fake Ore):
Edits the whole chunk data packets before they are sent out to clients. It's not run in the main server thread, so as long as your server is not using up all of its cores, it should cause little performance difference. Either all ore blocks and chests that have no adjacent air, water, lava, or glass, or other transparent block block are sent to the client as stone blocks. When a block is removed next to an ore block or chest, a block update is forced on the client, causing the real block to become visible. Or, all stone blocks can be sent out as ore blocks, then updated to show as stone blocks as a player mines.
This should lower the effectiveness of x-rayers somewhat, hiding a majority of any world's ores, and notably buried chests, from them. To do this efficiently, part of the actual server code had to be modified. The download contains both a plugin, and a class file to patch a server jar with. For it to work with other plugins that edit packets using Spout, you must download and use the Spout specific version instead.
Installation
Installation for CraftBukkit:
- Add rawcritics_ore_obfuscation_installer.jar to your server plugins.
- Start server.
- Let patching finish.
- Remove rawcritics_ore_obfuscation_installer.jar from your plugins folder
- Add rawcritics_ore_obfuscation_plugin.jar to your plugins folder
- If patcher could not rename your server jar, rename "rawcbpatchtemp.jar" to what your server jar should be.
- Start server. If the plugin doesn't send any errors, it worked.
You could also manually copy included "net" and "org" folders and all contained files into your server jar using a utility like 7-zip, if you are comfortable with that. You will have to delete BUKKIT.SF and BUKKIT.RSA from the META-INF directory if you do it manually.
Installation for Versions Older Than 1.7 (CraftBukkit Legacy Versions):
- Use any program that can edit the contents of jar files to copy the included Packet51MapChunk.class and ChunkCompressionThread.class over the old ones, the folders "net" and "org" can simply be added to the jar to do this. You can backup server.jar/net/minecraft/server/Packet51MapChunk.class and server.jar/org/bukkit/craftbukkit/ChunkCompressionThread.class first if you feel the need. Common programs that you could do this with include WinRar and 7-zip.
- Add rawcritics_ore_obfuscation_plugin.jar to your plugins directory
- If it doesn't send any errors when you start your server, it worked
Installation for Spout:
- Copy rawcritics_ore_obfuscation_plugin_spout.jar into your plugins folder
- Must be using Spout
- Do not install the class files from any other version, only use the Spout plugin
Configuration
Example oo-engine-mode.txt Configuration File:
#Choose the obfuscation engine you want to run. #1 Hides all ores and chests that don't have a transparent block next to them. #2 Hides all ores regardless of whether they have a transparent block next to them, and hides chests that don't have a transparent block beside them. Ores reappear when dug, or when they are right clicked on. #3 Only checks light levels for ores and hides them if they are in total darkness. Fastest engine mode. #4 (default) Turns all stone AND ores without adjacent transparent blocks into iron ore above height 20, and diamond ore below. Turns chests without adjacent adjacent transparent blocks to stone. #5 Randomly turns stone without adjacent transparent blocks into Ore. Slighly more process intensive then 4. enginemode=4 #List of block ids to count as transparent, seperated by commas. transparentIds=8,9,10,11,20,27,28,37,38,39,40,44,50,53,55,63,64,65,66,67,68,69,71,75,76,77,78,79,85,96,101,102,104,105,106,107,108,109,113,114,115,131,132,139,140,141,142,143,144,145 #The id of the block the majority of your world's ground consists of. Should be 1 for Stone unless you have a custom worldgen. maingroundblock=1 #Radius around removed blocks that block updates are sent for ores. Higher values use more processing power and bandwith but are nicer for players with bad connections. Default 2, recommended no higher then 4. oreupdateradius=2 #When to send player ore updates. 0 (default) is on block break events. 1 is on block damage, which can make latency slightly less noticable, but uses more processing power in the main server thread. oreupdatemode=0 #Checks for exposed ores after explosions if true. If you have a plugin for disabling block damage from creepers, depending on how the plugin is written in might save processing power to disable this. checkexplosions=true #Hides chests in all engine modes by turning chests without adjacent transparent blocks into stone until uncovered. hidechests=true #If true, Ops (players in ops.txt) will not have the obfuscator ran for them. disableforops=false #If true, then seperate configurations for each world will be used. To make a configuration for a specific world, make a copy of this file and rename it YourWorldName.txt (i.e. World1.txt, World1_Nether.txt, etc.) usemultipleworldconfigurations=false
Engine Modes:
The default ore obfuscation engine is recommended, but you can change which one in the config at \plugins\RawcriticsOreObfuscationPlugin\oo-engine-mode.txt
Mode 1 - Hides all ores and chests that don't have an adjacent transparent block.
Mode 2 - Hides all ores regardless of adjacent block until a block by them is removed or they are right clicked, hides chests if they don't have an adjacent transparent block
Mode 3 - Checks light levels of ores, if an ore block has a light level of 0 it is hidden.
Mode 4 - (Default) Sends all stone and ores without an adjacent transparent block as iron ore above height 20, diamond below. This means even with specific filtering of block types, no ore that isn't exposed in caves can be seen at all, and an xrayer can't tell if iron ore or diamond ore exposed in caves is real or not. Only downside is that any players mining with any latency will have to wait to see whether they're mining real ore or just stone.
Mode 5 - Sends stone as a random ore. Slightly more process intensive than 4.
Other Configuration:
Editing transparentIds=8,9,10,11,20,27,28,37,38,39,40,44,50,53,55,63,64,65,66,67,68,69,71,75,76,77,78,79,85,96,101,102,104,105,106,107,108,109,113,114,115,131,132,139,140,141,142,143,144,145 in the same config file allows you to choose which block ids are counted as transparent. Air always is for performance.
maingroundblock=1 is the id of the main block the ground surrounding your ores consists of. In most worlds, this would be stone (1).
The oreupdateradius option sets the radius around removed blocks that block updates are sent for ores. Higher values use more processing power and bandwith but are nicer for players with bad connections. 2 is the default option, recommended to set it no higher than 4.
If checkexplosions is true, exposed ores are checked for after explosions. If you have a plugin for disabling block damage from creepers, depending on how that plugin is written in might save processing power to disable this.
If hidechests is true, chests without any transparent blocks adjacent to them are hidden as stone until a block next to them is removed (or whichever specific logic is performed by an engine for chests is ran). Might disable if Lockette, etc, is already protecting chests.
If disableforops is true, the obfuscater will not be ran on packets sent to those who are in your ops.txt file.
If usemultipleworldconfigurations=true, then seperate configurations for each world will be used. The settings in oo-engine-mode.txt are used as the defaults for a world without a specific configuration. A configuration for a world is specified by a you_world_name.txt file in the same location as oo-enginemode.txt (So a world called world3 would be world3.txt, a world folder named myminecraftworld_nether would be myminecraftworld_nether.txt, and so forth).
World Specific Configuration File
A world specific configuration file (yourworldname.txt) has the following options:
#Choose the obfuscation engine you want to run. #0 Ore Obfuscation is disabled for this world. #1 Hides all ores and chests that don't have a transparent block next to them. #2 Hides all ores regardless of whether they have a transparent block next to them, and hides chests that don't have a transparent block beside them. Ores reappear when dug, or when they are right clicked on. #3 Only checks light levels for ores and hides them if they are in total darkness. Fastest engine mode. #4 (default) Turns all stone AND ores without adjacent transparent blocks into iron ore above height 20, and diamond ore below. Turns chests without adjacent adjacent transparent blocks to stone. #5 Randomly turns stone without adjacent transparent blocks into Ore. Slighly more process intensive then 4. enginemode=4 #The id of the block the majority of your world's ground consists of. Should be 1 for Stone unless you have a custom worldgen. maingroundblock=1 #Checks for exposed ores after explosions if true. If you have a plugin for disabling block damage from creepers, depending on how the plugin is written in might save processing power to disable this. checkexplosions=true #Hides chests in all engine modes by turning chests without adjacent transparent blocks into stone until uncovered hidechests=true
Commands (Useful for Testing)
All these commands are Op only.
/otco - Lists commands
/otco-reload - Reload the configuration file. Keep in mind that you won't see changes until more chunks are sent to your client!
/otco-configs - Lists loaded configuration files and whether they are being used for a world
/otco-toggleopdisable - Toggle the obfuscation being disable for Ops temporarily. You have to edit the configuration to change it permanently.
/otco-resendmychunk - Resends the chunks around where you are standing to your client.
/otco-reloadmychunk - Saves and reloads the chunk you are standing in.
No hurry, 1.9.3.1 is performing very well, In fact the only issue we're having right now is with emerald not being obfuscated.
@spunkiie
Yeah, it's a fine idea to make the list of blocks that are obfuscated configurable. Sorry about the slow response time, I've been real busy this week.
i get this when i start up my sevrer:
[SEVERE] Ore Obfuscation Plugin Cannot Attach To The Engine: 29.08 13:38:49 [Server] INFO RawcriticsOreObfuscationPlugin 1.9.3.2 plugin enabled 29.08 13:38:49 [Server] INFO [RawcriticsOreObfuscationPlugin] Enabling RawcriticsOreObfuscationPlugin v1.9.3.2
@spunkiie
Ixe fica usando esses anti x ray fraquinho
hahahaha! nem i7 aguenta fica levando essa caminhao...
tenta derrubar eles pra ve se atualizam mais rapido... Poderoso Chefão!
1.9.3.2 won't load :(
http://pastie.org/private/adinsk7anwpto8l2z8w1q
EDIT:
I've downgraded to version: 1.9.3.1 and it's working like a charm even on 1.3.2 builds AND it doesn't have any impact on performance. Is it possible to release a updated 1.9.3.1 version only with emerald added? Even better, why not make a configurable list of blocks to obfuscate ? It would be very interesting and will let server owners decide which blocks they want "protected" from xrayers.
@spunkiie
New version up with it added. Also tested with the craftbukkit 1.3.1-R2.0 build.
Please add block: 129 (Emerald Ore) to the obfuscation blocks list.
People are abusing this OTC flaw a lot :\
I am tweaking things, my servers are on 1.3 now and running the latest OTC.
TyrOvC
FYI: I'm not experiencing the performance problems some guys are reporting. OTC is running better than never and NoLagg Examine is showing very low CPU usage.
TBH OTC for 1.3.1 is running faster than previous versions.
How can I add emerald to random block list?
Not sure if I've botched something up here, but when I turn x-ray on, It seems like gold ore, redstone ore, lapis ore are not hidden. I can see redstone and gold ore in most circumstances, though never diamond/emerald.
So, it seems that whenever i have oreobfuscator turned on, my players randomly get client crashes when mining at low depths. Randomly on the block break event it will crash everyone in the area, up to a few hundred blocks away from what ive seen. Would love for this to be fixed so i can use anti-xray on my server, i had to uninstall it due to this horrible horrible glitch. Nobody could even go mining without crashing. :(
Terribly busy this week but I will work on outstanding issues when I get a block of free time.
Great plugin. Thanks.
plugin installed successfully used the rawcritics_ore_obfuscation_installer.jar
please solve my problem
Is this working on 1.3.1 ?
TyrOvC
Please add block: 129 (Emerald Ore) to the obfuscation blocks list.
Ty
@Vitrify
That'd be helpful probably, looking into it.
According to NoLagg Examine,
BlockPhysicsEvent takes forever at 70+ players.
No errors on the console, I can PM you the NoLagg file if you want.
It took 1550ms, with the next highest plugin as Ultrabans with 200ms and NoCheatPlus after that with 100ms.