Advertisement
Guest User

Untitled

a guest
Dec 22nd, 2014
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.08 KB | None | 0 0
  1. package net.minecraft.util;
  2.  
  3. import com.google.common.base.Predicate;
  4. import com.google.common.collect.Iterators;
  5. import com.google.common.collect.Maps;
  6. import java.util.Iterator;
  7. import java.util.Map;
  8. import java.util.Random;
  9. import net.minecraftforge.fml.relauncher.Side;
  10. import net.minecraftforge.fml.relauncher.SideOnly;
  11.  
  12. public enum EnumFacing implements IStringSerializable
  13. {
  14. DOWN(0, 1, -1, "down", EnumFacing.AxisDirection.NEGATIVE, EnumFacing.Axis.Y, new Vec3i(0, -1, 0)),
  15. UP(1, 0, -1, "up", EnumFacing.AxisDirection.POSITIVE, EnumFacing.Axis.Y, new Vec3i(0, 1, 0)),
  16. NORTH(2, 3, 2, "north", EnumFacing.AxisDirection.NEGATIVE, EnumFacing.Axis.Z, new Vec3i(0, 0, -1)),
  17. SOUTH(3, 2, 0, "south", EnumFacing.AxisDirection.POSITIVE, EnumFacing.Axis.Z, new Vec3i(0, 0, 1)),
  18. WEST(4, 5, 1, "west", EnumFacing.AxisDirection.NEGATIVE, EnumFacing.Axis.X, new Vec3i(-1, 0, 0)),
  19. EAST(5, 4, 3, "east", EnumFacing.AxisDirection.POSITIVE, EnumFacing.Axis.X, new Vec3i(1, 0, 0));
  20. private final int index;
  21. private final int opposite;
  22. private final int horizontalIndex;
  23. private final String name;
  24. private final EnumFacing.Axis axis;
  25. private final EnumFacing.AxisDirection axisDirection;
  26. private final Vec3i directionVec;
  27. private static final EnumFacing[] VALUES = new EnumFacing[6];
  28. private static final EnumFacing[] HORIZONTALS = new EnumFacing[4];
  29. private static final Map NAME_LOOKUP = Maps.newHashMap();
  30.  
  31. private static final String __OBFID = "CL_00001201";
  32.  
  33. private EnumFacing(int p_i46016_3_, int p_i46016_4_, int p_i46016_5_, String p_i46016_6_, EnumFacing.AxisDirection p_i46016_7_, EnumFacing.Axis p_i46016_8_, Vec3i p_i46016_9_)
  34. {
  35. this.index = p_i46016_3_;
  36. this.horizontalIndex = p_i46016_5_;
  37. this.opposite = p_i46016_4_;
  38. this.name = p_i46016_6_;
  39. this.axis = p_i46016_8_;
  40. this.axisDirection = p_i46016_7_;
  41. this.directionVec = p_i46016_9_;
  42. }
  43.  
  44. public int getIndex()
  45. {
  46. return this.index;
  47. }
  48.  
  49. public int getHorizontalIndex()
  50. {
  51. return this.horizontalIndex;
  52. }
  53.  
  54. public EnumFacing.AxisDirection getAxisDirection()
  55. {
  56. return this.axisDirection;
  57. }
  58.  
  59. public EnumFacing getOpposite()
  60. {
  61. return getFront(this.opposite);
  62. }
  63.  
  64. @SideOnly(Side.CLIENT)
  65. public EnumFacing rotateAround(EnumFacing.Axis axis)
  66. {
  67. switch (EnumFacing.SwitchPlane.AXIS_LOOKUP[axis.ordinal()])
  68. {
  69. case 1:
  70. if (this != WEST && this != EAST)
  71. {
  72. return this.rotateX();
  73. }
  74.  
  75. return this;
  76. case 2:
  77. if (this != UP && this != DOWN)
  78. {
  79. return this.rotateY();
  80. }
  81.  
  82. return this;
  83. case 3:
  84. if (this != NORTH && this != SOUTH)
  85. {
  86. return this.rotateZ();
  87. }
  88.  
  89. return this;
  90. default:
  91. throw new IllegalStateException("Unable to get CW facing for axis " + axis);
  92. }
  93. }
  94.  
  95. public EnumFacing rotateY()
  96. {
  97. switch (EnumFacing.SwitchPlane.FACING_LOOKUP[this.ordinal()])
  98. {
  99. case 1:
  100. return EAST;
  101. case 2:
  102. return SOUTH;
  103. case 3:
  104. return WEST;
  105. case 4:
  106. return NORTH;
  107. default:
  108. throw new IllegalStateException("Unable to get Y-rotated facing of " + this);
  109. }
  110. }
  111.  
  112. @SideOnly(Side.CLIENT)
  113. private EnumFacing rotateX()
  114. {
  115. switch (EnumFacing.SwitchPlane.FACING_LOOKUP[this.ordinal()])
  116. {
  117. case 1:
  118. return DOWN;
  119. case 2:
  120. case 4:
  121. default:
  122. throw new IllegalStateException("Unable to get X-rotated facing of " + this);
  123. case 3:
  124. return UP;
  125. case 5:
  126. return NORTH;
  127. case 6:
  128. return SOUTH;
  129. }
  130. }
  131.  
  132. @SideOnly(Side.CLIENT)
  133. private EnumFacing rotateZ()
  134. {
  135. switch (EnumFacing.SwitchPlane.FACING_LOOKUP[this.ordinal()])
  136. {
  137. case 2:
  138. return DOWN;
  139. case 3:
  140. default:
  141. throw new IllegalStateException("Unable to get Z-rotated facing of " + this);
  142. case 4:
  143. return UP;
  144. case 5:
  145. return EAST;
  146. case 6:
  147. return WEST;
  148. }
  149. }
  150.  
  151. public EnumFacing rotateYCCW()
  152. {
  153. switch (EnumFacing.SwitchPlane.FACING_LOOKUP[this.ordinal()])
  154. {
  155. case 1:
  156. return WEST;
  157. case 2:
  158. return NORTH;
  159. case 3:
  160. return EAST;
  161. case 4:
  162. return SOUTH;
  163. default:
  164. throw new IllegalStateException("Unable to get CCW facing of " + this);
  165. }
  166. }
  167.  
  168. public int getFrontOffsetX()
  169. {
  170. return this.axis == EnumFacing.Axis.X ? this.axisDirection.getOffset() : 0;
  171. }
  172.  
  173. public int getFrontOffsetY()
  174. {
  175. return this.axis == EnumFacing.Axis.Y ? this.axisDirection.getOffset() : 0;
  176. }
  177.  
  178. public int getFrontOffsetZ()
  179. {
  180. return this.axis == EnumFacing.Axis.Z ? this.axisDirection.getOffset() : 0;
  181. }
  182.  
  183. public String getName2()
  184. {
  185. return this.name;
  186. }
  187.  
  188. public EnumFacing.Axis getAxis()
  189. {
  190. return this.axis;
  191. }
  192.  
  193. @SideOnly(Side.CLIENT)
  194. public static EnumFacing byName(String name)
  195. {
  196. return name == null ? null : (EnumFacing)NAME_LOOKUP.get(name.toLowerCase());
  197. }
  198.  
  199. public static EnumFacing getFront(int index)
  200. {
  201. return VALUES[MathHelper.abs_int(index % VALUES.length)];
  202. }
  203.  
  204. public static EnumFacing getHorizontal(int p_176731_0_)
  205. {
  206. return HORIZONTALS[MathHelper.abs_int(p_176731_0_ % HORIZONTALS.length)];
  207. }
  208.  
  209. public static EnumFacing fromAngle(double angle)
  210. {
  211. return getHorizontal(MathHelper.floor_double(angle / 90.0D + 0.5D) & 3);
  212. }
  213.  
  214. public static EnumFacing random(Random rand)
  215. {
  216. return values()[rand.nextInt(values().length)];
  217. }
  218.  
  219. @SideOnly(Side.CLIENT)
  220. public static EnumFacing func_176737_a(float p_176737_0_, float p_176737_1_, float p_176737_2_)
  221. {
  222. EnumFacing enumfacing = NORTH;
  223. float f3 = Float.MIN_VALUE;
  224. EnumFacing[] aenumfacing = values();
  225. int i = aenumfacing.length;
  226.  
  227. for (int j = 0; j < i; ++j)
  228. {
  229. EnumFacing enumfacing1 = aenumfacing[j];
  230. float f4 = p_176737_0_ * (float)enumfacing1.directionVec.getX() + p_176737_1_ * (float)enumfacing1.directionVec.getY() + p_176737_2_ * (float)enumfacing1.directionVec.getZ();
  231.  
  232. if (f4 > f3)
  233. {
  234. f3 = f4;
  235. enumfacing = enumfacing1;
  236. }
  237. }
  238.  
  239. return enumfacing;
  240. }
  241.  
  242. public String toString()
  243. {
  244. return this.name;
  245. }
  246.  
  247. public String getName()
  248. {
  249. return this.name;
  250. }
  251.  
  252. @SideOnly(Side.CLIENT)
  253. public Vec3i getDirectionVec()
  254. {
  255. return this.directionVec;
  256. }
  257.  
  258. static
  259. {
  260. EnumFacing[] var0 = values();
  261. int var1 = var0.length;
  262.  
  263. for (int var2 = 0; var2 < var1; ++var2)
  264. {
  265. EnumFacing var3 = var0[var2];
  266. VALUES[var3.index] = var3;
  267.  
  268. if (var3.getAxis().isHorizontal())
  269. {
  270. HORIZONTALS[var3.horizontalIndex] = var3;
  271. }
  272.  
  273. NAME_LOOKUP.put(var3.getName2().toLowerCase(), var3);
  274. }
  275. }
  276.  
  277. public static enum Axis implements Predicate, IStringSerializable {
  278. X("x", EnumFacing.Plane.HORIZONTAL),
  279. Y("y", EnumFacing.Plane.VERTICAL),
  280. Z("z", EnumFacing.Plane.HORIZONTAL);
  281. private static final Map NAME_LOOKUP = Maps.newHashMap();
  282. private final String name;
  283. private final EnumFacing.Plane plane;
  284.  
  285. private static final EnumFacing.Axis[] $VALUES = new EnumFacing.Axis[]{X, Y, Z};
  286. private static final String __OBFID = "CL_00002321";
  287.  
  288. private Axis(String name, EnumFacing.Plane plane)
  289. {
  290. this.name = name;
  291. this.plane = plane;
  292. }
  293.  
  294. @SideOnly(Side.CLIENT)
  295. public static EnumFacing.Axis byName(String name)
  296. {
  297. return name == null ? null : (EnumFacing.Axis)NAME_LOOKUP.get(name.toLowerCase());
  298. }
  299.  
  300. public String getName2()
  301. {
  302. return this.name;
  303. }
  304.  
  305. public boolean isVertical()
  306. {
  307. return this.plane == EnumFacing.Plane.VERTICAL;
  308. }
  309.  
  310. public boolean isHorizontal()
  311. {
  312. return this.plane == EnumFacing.Plane.HORIZONTAL;
  313. }
  314.  
  315. public String toString()
  316. {
  317. return this.name;
  318. }
  319.  
  320. public boolean apply(EnumFacing facing)
  321. {
  322. return facing != null && facing.getAxis() == this;
  323. }
  324.  
  325. public EnumFacing.Plane getPlane()
  326. {
  327. return this.plane;
  328. }
  329.  
  330. public String getName()
  331. {
  332. return this.name;
  333. }
  334.  
  335. public boolean apply(Object p_apply_1_)
  336. {
  337. return this.apply((EnumFacing)p_apply_1_);
  338. }
  339.  
  340. static
  341. {
  342. EnumFacing.Axis[] var0 = values();
  343. int var1 = var0.length;
  344.  
  345. for (int var2 = 0; var2 < var1; ++var2)
  346. {
  347. EnumFacing.Axis var3 = var0[var2];
  348. NAME_LOOKUP.put(var3.getName2().toLowerCase(), var3);
  349. }
  350. }
  351. }
  352.  
  353. public static enum AxisDirection {
  354. POSITIVE(1, "Towards positive"),
  355. NEGATIVE(-1, "Towards negative");
  356. private final int offset;
  357. private final String description;
  358.  
  359. private static final EnumFacing.AxisDirection[] $VALUES = new EnumFacing.AxisDirection[]{POSITIVE, NEGATIVE};
  360. private static final String __OBFID = "CL_00002320";
  361.  
  362. private AxisDirection(int offset, String description)
  363. {
  364. this.offset = offset;
  365. this.description = description;
  366. }
  367.  
  368. public int getOffset()
  369. {
  370. return this.offset;
  371. }
  372.  
  373. public String toString()
  374. {
  375. return this.description;
  376. }
  377. }
  378.  
  379. public static enum Plane implements Predicate, Iterable<EnumFacing> { //Forge re-add generic because it just makes life easier.
  380. HORIZONTAL,
  381. VERTICAL;
  382.  
  383. private static final EnumFacing.Plane[] $VALUES = new EnumFacing.Plane[]{HORIZONTAL, VERTICAL};
  384. private static final String __OBFID = "CL_00002319";
  385.  
  386. public EnumFacing[] facings()
  387. {
  388. switch (EnumFacing.SwitchPlane.PLANE_LOOKUP[this.ordinal()])
  389. {
  390. case 1:
  391. return new EnumFacing[] {EnumFacing.NORTH, EnumFacing.EAST, EnumFacing.SOUTH, EnumFacing.WEST};
  392. case 2:
  393. return new EnumFacing[] {EnumFacing.UP, EnumFacing.DOWN};
  394. default:
  395. throw new Error("Someone\'s been tampering with the universe!");
  396. }
  397. }
  398.  
  399. public EnumFacing random(Random rand)
  400. {
  401. EnumFacing[] aenumfacing = this.facings();
  402. return aenumfacing[rand.nextInt(aenumfacing.length)];
  403. }
  404.  
  405. public boolean apply(EnumFacing facing)
  406. {
  407. return facing != null && facing.getAxis().getPlane() == this;
  408. }
  409.  
  410. public Iterator iterator()
  411. {
  412. return Iterators.forArray(this.facings());
  413. }
  414.  
  415. public boolean apply(Object p_apply_1_)
  416. {
  417. return this.apply((EnumFacing)p_apply_1_);
  418. }
  419. }
  420.  
  421. static final class SwitchPlane
  422. {
  423. static final int[] AXIS_LOOKUP;
  424.  
  425. static final int[] FACING_LOOKUP;
  426.  
  427. static final int[] PLANE_LOOKUP = new int[EnumFacing.Plane.values().length];
  428. private static final String __OBFID = "CL_00002322";
  429.  
  430. static
  431. {
  432. try
  433. {
  434. PLANE_LOOKUP[EnumFacing.Plane.HORIZONTAL.ordinal()] = 1;
  435. }
  436. catch (NoSuchFieldError var11)
  437. {
  438. ;
  439. }
  440.  
  441. try
  442. {
  443. PLANE_LOOKUP[EnumFacing.Plane.VERTICAL.ordinal()] = 2;
  444. }
  445. catch (NoSuchFieldError var10)
  446. {
  447. ;
  448. }
  449.  
  450. FACING_LOOKUP = new int[EnumFacing.values().length];
  451.  
  452. try
  453. {
  454. FACING_LOOKUP[EnumFacing.NORTH.ordinal()] = 1;
  455. }
  456. catch (NoSuchFieldError var9)
  457. {
  458. ;
  459. }
  460.  
  461. try
  462. {
  463. FACING_LOOKUP[EnumFacing.EAST.ordinal()] = 2;
  464. }
  465. catch (NoSuchFieldError var8)
  466. {
  467. ;
  468. }
  469.  
  470. try
  471. {
  472. FACING_LOOKUP[EnumFacing.SOUTH.ordinal()] = 3;
  473. }
  474. catch (NoSuchFieldError var7)
  475. {
  476. ;
  477. }
  478.  
  479. try
  480. {
  481. FACING_LOOKUP[EnumFacing.WEST.ordinal()] = 4;
  482. }
  483. catch (NoSuchFieldError var6)
  484. {
  485. ;
  486. }
  487.  
  488. try
  489. {
  490. FACING_LOOKUP[EnumFacing.UP.ordinal()] = 5;
  491. }
  492. catch (NoSuchFieldError var5)
  493. {
  494. ;
  495. }
  496.  
  497. try
  498. {
  499. FACING_LOOKUP[EnumFacing.DOWN.ordinal()] = 6;
  500. }
  501. catch (NoSuchFieldError var4)
  502. {
  503. ;
  504. }
  505.  
  506. AXIS_LOOKUP = new int[EnumFacing.Axis.values().length];
  507.  
  508. try
  509. {
  510. AXIS_LOOKUP[EnumFacing.Axis.X.ordinal()] = 1;
  511. }
  512. catch (NoSuchFieldError var3)
  513. {
  514. ;
  515. }
  516.  
  517. try
  518. {
  519. AXIS_LOOKUP[EnumFacing.Axis.Y.ordinal()] = 2;
  520. }
  521. catch (NoSuchFieldError var2)
  522. {
  523. ;
  524. }
  525.  
  526. try
  527. {
  528. AXIS_LOOKUP[EnumFacing.Axis.Z.ordinal()] = 3;
  529. }
  530. catch (NoSuchFieldError var1)
  531. {
  532. ;
  533. }
  534. }
  535. }
  536. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement