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.