/*
* Copyright (C) 2016 eccentric_nz
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package me.eccentric_nz.TARDIS.rooms;
/**
* Lady Calcula was the wife of Colonel Nasgard and the mother of Yarvell and
* Davros, the latter by her lover Councillor Quested. She was a senior figure
* in Kaled politics who lived on Skaro towards the end of the Thousand Year War
* between the Kaleds and the Thals.
*
* @author eccentric_nz
*/
public class TARDISDataRecalculator {
private TARDISDataRecalculator() {
}
/**
* A method to calculate the data bit for a block based on the direction a
* room is facing when grown.
*
* @param id the TypeId of the block we want to re-calculate the data for.
* @param bit the current Data of the block we want to re-calculate the data
* for.
* @return the new Data value based on the direction the room is facing
*/
public static byte calculateData(int id, byte bit) {
byte data;
switch (id) {
// pistons
case 29: // sticky base
case 33: // piston base
case 34: // piston extension
switch (bit) {
case 2:
data = 3;
break;
case 3:
data = 2;
break;
case 4:
data = 5;
break;
case 5:
data = 4;
break;
case 6:
data = 7;
break;
case 7:
data = 6;
break;
case 10:
data = 11;
break;
case 11:
data = 10;
break;
case 12:
data = 13;
break;
case 13:
data = 12;
break;
default:
data = bit;
break;
}
break;
// stairs
case 53:
case 67:
case 108:
case 109:
case 114:
case 128:
case 134:
case 135:
case 136:
case 156:
case -100:
case -120:
case -121:
case -122:
switch (bit) {
case 0:
data = 1;
break;
case 1:
data = 0;
break;
case 2:
data = 3;
break;
case 3:
data = 2;
break;
case 4:
data = 5;
break;
case 5:
data = 4;
break;
case 6:
data = 7;
break;
case 7:
data = 6;
break;
case 8:
data = 9;
break;
case 9:
data = 8;
break;
case 10:
data = 11;
break;
case 11:
data = 10;
break;
case 12:
data = 13;
break;
case 13:
data = 12;
break;
case 14:
data = 15;
break;
default:
data = 14;
break;
}
break;
case 54: // chest
case 61: // furnace
case 65: // ladder
case 68: // wall sign
case 130: // ender chest
case 146: // trapped chest
case -110: // trapped chest
case -126: // ender chest
switch (bit) {
case 2:
data = 3;
break;
case 3:
data = 2;
break;
case 4:
data = 5;
break;
default:
data = 4;
break;
}
break;
// beds
case 26:
// repeaters
case 93:
case 94:
// trapdoor
case 96:
// cocoa
case 127:
// tripwire hooks
case 131:
case -125:
// anvils
case 145:
case -111:
// comparators
case 149:
case 150:
case -106:
case -107:
switch (bit) {
case 0:
data = 2;
break;
case 1:
data = 3;
break;
case 2:
data = 0;
break;
case 3:
data = 1;
break;
case 4:
data = 6;
break;
case 5:
data = 7;
break;
case 6:
data = 4;
break;
case 7:
data = 5;
break;
case 8:
data = 10;
break;
case 9:
data = 11;
break;
case 10:
data = 8;
break;
case 11:
data = 9;
break;
case 12:
data = 14;
break;
case 13:
data = 15;
break;
case 14:
data = 12;
break;
case 15:
data = 13;
break;
default:
data = bit;
break;
}
break;
// levers - only switch wall mounted ones
case 69:
switch (bit) {
case 1:
data = 2;
break;
case 2:
data = 1;
break;
case 3:
data = 4;
break;
case 4:
data = 3;
break;
case 9:
data = 10;
break;
case 10:
data = 9;
break;
case 11:
data = 12;
break;
case 12:
data = 11;
break;
default:
data = bit;
break;
}
break;
// mushroom
case 99:
case 100:
switch (bit) {
case 1:
data = 9;
break;
case 2:
data = 8;
break;
case 3:
data = 7;
break;
case 4:
data = 6;
break;
case 6:
data = 4;
break;
case 7:
data = 3;
break;
case 8:
data = 2;
break;
case 9:
data = 1;
break;
default:
data = bit;
break;
}
break;
// torches
case 50:
case 75:
case 76:
// buttons
case 77:
case 143:
case -113:
switch (bit) {
case 1:
data = 2;
break;
case 2:
data = 1;
break;
case 3:
data = 4;
break;
case 4:
data = 3;
break;
default:
data = bit;
break;
}
break;
case 23: // dispenser
case 158: // dropper
case -98: // dropper
switch (bit) {
case 2:
data = 3;
break;
case 3:
data = 2;
break;
case 4:
data = 5;
break;
case 5:
data = 4;
break;
case 6:
data = 7;
break;
case 7:
data = 6;
break;
case 8:
data = 0;
break;
case 9:
data = 1;
break;
case 10:
data = 3;
break;
case 11:
data = 2;
break;
case 12:
data = 5;
break;
case 13:
data = 4;
break;
default:
data = bit;
break;
}
break;
case 154: // hopper
case -102: // hopper
switch (bit) {
case 2:
data = 3;
break;
case 3:
data = 2;
break;
case 4:
data = 5;
break;
case 5:
data = 4;
break;
case 6:
data = 7;
break;
case 7:
data = 6;
break;
case 8:
data = 9;
break;
case 9:
data = 8;
break;
case 10:
data = 11;
break;
case 11:
data = 10;
break;
case 12:
data = 13;
break;
case 13:
data = 12;
break;
case 14:
data = 15;
break;
case 15:
data = 14;
break;
default:
data = bit;
break;
}
break;
default:
data = bit;
break;
}
return data;
}
}