-
Notifications
You must be signed in to change notification settings - Fork 5
/
minecraftUtils.js
117 lines (107 loc) · 3.79 KB
/
minecraftUtils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// Minecraft Utilities By Mp0wers
// License: MIT
// Version: 1.1
//
// Special thanks to developers of LiquidBounce and WurstClient.
var globalScope = this;
var KeyBinding = Java.type("net.minecraft.client.settings.KeyBinding");
var EnumFacing = Java.type("net.minecraft.util.EnumFacing");
var Vec3 = Java.type("net.minecraft.util.Vec3");
var minecraftUtils = (function() {
var keyBindHooks = {};
var hookKeyBind = function(keyBindIn, hookNameString) {
var keyCode;
if (!(keyBindIn instanceof KeyBinding) || typeof hookNameString != "string") {
return false;
};
if (!globalScope.hasOwnProperty(hookNameString) || !(globalScope[hookNameString] instanceof KeyBinding)) {
globalScope[hookNameString] = new KeyBinding("key.hook_" + hookNameString, 0, "key.categories.misc");
};
if (keyBindHooks.hasOwnProperty(hookNameString)) {
unhookKeyBind(hookNameString);
};
var hooksArr = Object.keys(keyBindHooks);
for (var i = 0; i < hooksArr.length; i++) {
if (keyBindHooks[hooksArr[i]][0] == keyBindIn) {
unhookKeyBind(hooksArr[i]);
break;
};
};
keyCode = keyBindIn.getKeyCode();
if (keyCode == 0) {
keyCode = keyBindIn.getKeyCodeDefault();
};
keyBindIn.setKeyCode(0);
globalScope[hookNameString].setKeyCode(keyCode);
keyBindHooks[hookNameString] = [keyBindIn, keyCode];
KeyBinding.resetKeyBindingArrayAndHash();
return true;
};
var unhookKeyBind = function(hookNameString) {
var keyCode;
if (typeof hookNameString != "string" || !keyBindHooks.hasOwnProperty(hookNameString)) {
return false;
};
keyCode = keyBindHooks[hookNameString][1];
if (globalScope.hasOwnProperty(hookNameString) && globalScope[hookNameString] instanceof KeyBinding) {
globalScope[hookNameString].setKeyCode(0);
};
keyBindHooks[hookNameString][0].setKeyCode(keyCode);
delete keyBindHooks[hookNameString];
KeyBinding.resetKeyBindingArrayAndHash();
return true;
};
var unhookAllKeyBinds = function() {
var hooksArr = Object.keys(keyBindHooks);
for (var i = 0; i < hooksArr.length; i++) {
unhookKeyBind(hooksArr[i]);
};
return true;
};
return {
hookKeyBind: hookKeyBind,
unhookKeyBind: unhookKeyBind,
unhookAllKeyBinds: unhookAllKeyBinds
};
})();
// Start of Minecraft Utilities API
function hookKeyBind(keyBindIn, hookNameString) {
return minecraftUtils.hookKeyBind(keyBindIn, hookNameString);
};
function unhookKeyBind(hookNameString) {
return minecraftUtils.unhookKeyBind(hookNameString);
};
function unhookAllKeyBinds() {
return minecraftUtils.unhookAllKeyBinds();
};
function getCenterOfBlockSide(blockPosIn, sideIn) {
var posVec = new Vec3(blockPosIn).addVector(0.5, 0.5, 0.5);
var dirVec = new Vec3(sideIn.getDirectionVec());
var resultVec = posVec.addVector(dirVec.xCoord * 0.5, dirVec.yCoord * 0.5, dirVec.zCoord * 0.5);
return resultVec;
};
function isBlockInReach(entityIn, blockPosIn) {
var reachDistance = mc.playerController.getBlockReachDistance() + 0.25;
var eyesPos = entityIn.getPositionEyes(1.0);
var closestSide = getClosestBlockSide(eyesPos, blockPosIn);
var closestSideCenter = getCenterOfBlockSide(blockPosIn, closestSide);
if (eyesPos.distanceTo(closestSideCenter) <= reachDistance) {
return true;
};
return false;
};
function getClosestBlockSide(vectorIn, blockPosIn) {
var blockSide, blockSideCenter, distanceToBlockSide, closestSide;
var lowestDistance = null;
var i;
for (i in EnumFacing.values()) {
blockSide = EnumFacing.values()[i];
blockSideCenter = getCenterOfBlockSide(blockPosIn, blockSide);
distanceToBlockSide = vectorIn.distanceTo(blockSideCenter);
if (lowestDistance == null || distanceToBlockSide < lowestDistance) {
lowestDistance = distanceToBlockSide;
closestSide = blockSide;
};
};
return closestSide;
};