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.

-
View User Profile
-
Send Message
Posted Mar 9, 2012This works really well for me against xray mods, but my only issue is with texture packs. During my testing when I used a xray texture pack I couldn't see any ores, which is good, I could however, see lava and caves. Is there any way to hide caves from texture packs too? If my wording is confusing I can get some pictures / video to show you what I mean.
-
View User Profile
-
Send Message
Posted Mar 7, 2012I got carried away making some cool improvements! The new map data format is great for speeding up some things. I also made a new engine mode that only checks light levels for ores, that is actually pretty effective considering that it leagues less processor intensive than any of the other modes.
I'm not replacing it as the primary download yet, because even though I ran it through my standard group of tests, there was a lot changed for this update and I might have missed something. Regular Version for Minecraft 1.2 CraftBukkit (1.8.1.1) beta is up for download though!
-
View User Profile
-
Send Message
Posted Mar 7, 2012it will be ready, good things take time xD.
-
View User Profile
-
Send Message
Posted Mar 7, 2012D: feels bad man, no update yet
-
View User Profile
-
Send Message
Posted Mar 7, 2012The guy went sleep and got in coma :P
-
View User Profile
-
Send Message
Posted Mar 6, 2012I can't wait to install this once it's updated!
-
View User Profile
-
Send Message
Posted Mar 5, 2012The server works fine when i start it up but when someone joins this happens...
16:20:32 [INFO] CmanMC [/5.150.63.95:51459] logged in with entity id 295 at ([wo rld] 292.46875, 60.0, 316.5625) 16:20:33 [SEVERE] java.lang.NoSuchMethodError: net.minecraft.server.Packet51MapC hunk.<init>(Lnet/minecraft/server/Chunk;ZI)V 16:20:33 [SEVERE] at net.minecraft.server.EntityPlayer.a(EntityPlayer.java :272) 16:20:33 [SEVERE] at net.minecraft.server.NetServerHandler.a(NetServerHand ler.java:340) 16:20:33 [SEVERE] at net.minecraft.server.Packet10Flying.handle(SourceFile :126) 16:20:33 [SEVERE] at net.minecraft.server.NetworkManager.b(NetworkManager. java:229) 16:20:33 [SEVERE] at net.minecraft.server.NetServerHandler.a(NetServerHand ler.java:112) 16:20:33 [SEVERE] at net.minecraft.server.NetworkListenThread.a(NetworkLis tenThread.java:78) 16:20:33 [SEVERE] at net.minecraft.server.MinecraftServer.w(MinecraftServe r.java:554) 16:20:33 [SEVERE] at net.minecraft.server.MinecraftServer.run(MinecraftSer ver.java:452) 16:20:33 [SEVERE] at net.minecraft.server.ThreadServerApplication.run(Sour ceFile:490) 16:20:33 [SEVERE] Unexpected exception java.lang.NoSuchMethodError: net.minecraft.server.Packet51MapChunk.<init>(Lnet/m inecraft/server/Chunk;ZI)V at net.minecraft.server.EntityPlayer.a(EntityPlayer.java:272) at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:340) at net.minecraft.server.Packet10Flying.handle(SourceFile:126) at net.minecraft.server.NetworkManager.b(NetworkManager.java:229) at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:112) at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:7 8) at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:554) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:452) at net.minecraft.server.ThreadServerApplication.run(SourceFile:490)
Please help me out!
-
View User Profile
-
Send Message
Posted Mar 4, 2012@spunkiie
I need to get some sleep tonight now, but I'm close enough that I can finish both the regular and spout version tomorrow.
-
View User Profile
-
Send Message
Posted Mar 4, 2012@TyrOvC
Is there an ETA for the 1.2 compatible OTC build ?
-
View User Profile
-
Send Message
Posted Mar 4, 2012@domingo15
If you're actually using a version of craftbukkit that's for Minecraft 1.2, then that's your issue. OTCO isn't compatible with 1.2 (but will be soon!).
-
View User Profile
-
Send Message
Posted Mar 4, 2012pic:
Link Removed: http://www.mediafire.com/?55627dm8j2qo44s
-
View User Profile
-
Send Message
Posted Mar 4, 2012http://pastebin.com/mTJMvi8C
help? I put on a xray (random one I found, which skips dirt and lets me see tunnels underground but not ores) but it doesnt seem to change what I see.
-
View User Profile
-
Send Message
Posted Mar 4, 2012I have that error on 1.2.3-R0.1 and OTCO 1.7.3.10. Need update to 1.2 :) Thanks
-
View User Profile
-
Send Message
Posted Mar 4, 2012@TyrOvC
Hey man welcome back,
Which server jar do we actually rename like this "rawcbpatchtemp.jar"?
the "craftbukkit.jar"?
the "craftbukkit.jar.original"? <- this was generated after i used the installer.
or the "rawcritics_ore_obfuscation_plugin.jar"?
EDIT: Using 1.1-R6 (BETA 1.2.3-R0.1) but im really using BETA 1.2.3-R0.1
EDIT: Also, i get this error when a player logs in... "http://pastie.org/3520690"
-
View User Profile
-
Send Message
Posted Mar 2, 2012@juloo65
In your main config file "oo-engine-mode.txt" find usemultipleworldconfigurations=false and change it to usemultipleworldconfigurations=true
Then for each of the worlds you want to deactivate it in, create a "this_world_name.txt" in the same place as "oo-engine-mode.txt", so for example a "worldone_nether.txt" and a "worldone_the_end.txt".
Reload the plugin, and it will fill those files with default configurations. Then in those new config files that you made, change enginemode=4 to enginemode=0 and it will be deactivated for that world.
-
View User Profile
-
Send Message
Posted Mar 2, 2012Good luck TyOvC :)
-
View User Profile
-
Send Message
Posted Mar 1, 2012Working on updates for R5 now.
-
View User Profile
-
Send Message
Posted Mar 1, 2012Great plugin. An R5 update would be great.
-
View User Profile
-
Send Message
Posted Feb 29, 2012Please, update to R5 for spoutplugin and for regular clients! Your plugin is awesome.
-
View User Profile
-
Send Message
Posted Feb 5, 2012How to desactivate OTCO in a world ? I want desactivate OTCO in the_end, nether and creative for process economie